Github messages for voidlinux
 help / color / mirror / Atom feed
* [PR PATCH] Llvm14
@ 2022-05-02 20:43 prez
  2022-05-02 23:21 ` [PR PATCH] [Updated] Llvm14 prez
                   ` (69 more replies)
  0 siblings, 70 replies; 71+ messages in thread
From: prez @ 2022-05-02 20:43 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 662 bytes --]

There is a new pull request by prez against master on the void-packages repository

https://github.com/prez/void-packages llvm
https://github.com/void-linux/void-packages/pull/36962

Llvm14
Supersedes https://github.com/void-linux/void-packages/pull/36229, https://github.com/void-linux/void-packages/pull/34800 - thank you @motorto and @DBLouis.

Updated patches, ping @q66 .

@ifreund todo: zig. Since it depends on `lld-devel`, I guess we need to split out `lld12`? Would appreciate your help with this, I don't want to wait for the next zig version.

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/36962.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-llvm-36962.patch --]
[-- Type: text/x-diff, Size: 516548 bytes --]

From ec2fd44373ac613abdf290572d116bf50a0093de Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:15:06 +0200
Subject: [PATCH 01/25] New package: llvm14-14.0.3

---
 common/shlibs                                 |  16 +-
 srcpkgs/clang                                 |   2 +-
 srcpkgs/clang-analyzer                        |   2 +-
 srcpkgs/clang-tools-extra                     |   2 +-
 srcpkgs/libclang                              |   2 +-
 srcpkgs/libclang-cpp                          |   2 +-
 srcpkgs/libcxx                                |   2 +-
 srcpkgs/libcxx-devel                          |   2 +-
 srcpkgs/libcxxabi                             |   2 +-
 srcpkgs/libcxxabi-devel                       |   2 +-
 srcpkgs/libllvm14                             |   1 +
 srcpkgs/libomp                                |   2 +-
 srcpkgs/libomp-devel                          |   2 +-
 srcpkgs/lld                                   |   2 +-
 srcpkgs/lld-devel                             |   2 +-
 srcpkgs/lldb                                  |   2 +-
 srcpkgs/llvm-libunwind                        |   2 +-
 srcpkgs/llvm-libunwind-devel                  |   2 +-
 .../patches/clang-002-add-musl-triples.patch  | 110 +++++
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 +
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ++
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 ++
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 +++
 srcpkgs/llvm14/patches/libcxx-musl.patch      |  26 ++
 srcpkgs/llvm14/patches/libcxx-ppc.patch       |  22 +
 .../llvm14/patches/libcxx-ssp-nonshared.patch |  11 +
 srcpkgs/llvm14/patches/libcxxabi-dl.patch     |  25 ++
 srcpkgs/llvm14/patches/lldb-musl.patch        |  31 ++
 srcpkgs/llvm14/patches/llvm-001-musl.patch    |  57 +++
 .../patches/llvm-002-musl-ppc64-elfv2.patch   |  30 ++
 .../patches/llvm-003-ppc-secureplt.patch      |  11 +
 .../patches/llvm-004-override-opt.patch       |  18 +
 .../llvm14/patches/llvm-005-ppc-bigpic.patch  |  36 ++
 .../patches/llvm-006-aarch64-mf_exec.patch    |  25 ++
 srcpkgs/llvm14/template                       | 424 ++++++++++++++++++
 srcpkgs/llvm14/update                         |   3 +
 36 files changed, 1017 insertions(+), 19 deletions(-)
 create mode 120000 srcpkgs/libllvm14
 create mode 100644 srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
 create mode 100644 srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
 create mode 100644 srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
 create mode 100644 srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-ppc.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxxabi-dl.patch
 create mode 100644 srcpkgs/llvm14/patches/lldb-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-001-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-004-override-opt.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
 create mode 100644 srcpkgs/llvm14/template
 create mode 100644 srcpkgs/llvm14/update

diff --git a/common/shlibs b/common/shlibs
index 4114151662fb..81acc39defb4 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -975,11 +975,12 @@ libuchardet.so.0 uchardet-0.0.6_1
 libgtksourceviewmm-3.0.so.0 gtksourceviewmm-3.2.0_1
 libyajl.so.2 yajl-2.0.1_1
 libconfuse.so.2 confuse-3.2.1_1
-liblldb.so.12 lldb-12.0.0_1
-libclang.so.12 libclang-12.0.0_1
-libclang-cpp.so.12 libclang-cpp-12.0.0_1
+liblldb.so.14 lldb-14.0.3_1
+libclang.so.14 libclang-14.0.3_1
+libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
+libLLVM-14.so libllvm14-14.0.3_1
 libisofs.so.6 libisofs-0.6.24_1
 libmpack.so.0 libmpack-1.0.5_1
 libGeoIP.so.1 libgeoip-1.4.8_1
@@ -4152,3 +4153,12 @@ librz_bin.so.0.3.4 rizin-0.3.4_1
 libaravis-0.8.so.0 libaravis-0.8.21_1
 libLimeSuite.so.20.10-1 LimeSuite-20.10.0_1
 libnvme.so.1 libnvme-1.0_1
+libomp.so libomp-14.0.3_1
+libomptarget.rtl.amdgpu.so libomp-14.0.3_1
+libomptarget.rtl.cuda.so libomp-14.0.3_1
+libomptarget.rtl.x86_64.so libomp-14.0.3_1
+libarcher.so libomp-14.0.3_1
+libomptarget.so libomp-14.0.3_1
+liblldbIntelFeatures.so.14 lldb-14.0.3_1
+libLTO.so.14 llvm14-14.0.3_1
+libRemarks.so.14 llvm14-14.0.3_1
diff --git a/srcpkgs/clang b/srcpkgs/clang
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang
+++ b/srcpkgs/clang
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/clang-analyzer b/srcpkgs/clang-analyzer
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang-analyzer
+++ b/srcpkgs/clang-analyzer
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/clang-tools-extra b/srcpkgs/clang-tools-extra
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang-tools-extra
+++ b/srcpkgs/clang-tools-extra
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libclang b/srcpkgs/libclang
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libclang
+++ b/srcpkgs/libclang
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libclang-cpp b/srcpkgs/libclang-cpp
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libclang-cpp
+++ b/srcpkgs/libclang-cpp
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxx b/srcpkgs/libcxx
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxx
+++ b/srcpkgs/libcxx
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxx-devel b/srcpkgs/libcxx-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxx-devel
+++ b/srcpkgs/libcxx-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxxabi b/srcpkgs/libcxxabi
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxxabi
+++ b/srcpkgs/libcxxabi
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxxabi-devel b/srcpkgs/libcxxabi-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxxabi-devel
+++ b/srcpkgs/libcxxabi-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libllvm14 b/srcpkgs/libllvm14
new file mode 120000
index 000000000000..1d42ed7632a6
--- /dev/null
+++ b/srcpkgs/libllvm14
@@ -0,0 +1 @@
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libomp b/srcpkgs/libomp
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libomp
+++ b/srcpkgs/libomp
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libomp-devel b/srcpkgs/libomp-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libomp-devel
+++ b/srcpkgs/libomp-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lld b/srcpkgs/lld
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lld
+++ b/srcpkgs/lld
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lld-devel b/srcpkgs/lld-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lld-devel
+++ b/srcpkgs/lld-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lldb b/srcpkgs/lldb
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lldb
+++ b/srcpkgs/lldb
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm-libunwind b/srcpkgs/llvm-libunwind
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/llvm-libunwind
+++ b/srcpkgs/llvm-libunwind
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm-libunwind-devel b/srcpkgs/llvm-libunwind-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/llvm-libunwind-devel
+++ b/srcpkgs/llvm-libunwind-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
new file mode 100644
index 000000000000..7b640e102bed
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
@@ -0,0 +1,110 @@
+--- a/clang/lib/Driver/ToolChains/Gnu.cpp
++++ b/clang/lib/Driver/ToolChains/Gnu.cpp
+@@ -2083,7 +2083,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
+                                              "armv7hl-redhat-linux-gnueabi",
+                                              "armv6hl-suse-linux-gnueabi",
+-                                             "armv7hl-suse-linux-gnueabi"};
++                                             "armv7hl-suse-linux-gnueabi",
++                                             "armv7l-linux-gnueabihf"};
+   static const char *const ARMebLibDirs[] = {"/lib"};
+   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi"};
+   static const char *const ARMebHFTriples[] = {
+@@ -2151,8 +2152,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
+   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
+   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
+-                                             "powerpcle-unknown-linux-gnu",
+-                                             "powerpcle-linux-musl"};
++                                             "powerpcle-unknown-linux-gnu"};
+
+   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
+   static const char *const PPC64Triples[] = {
+@@ -2231,6 +2231,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+     return;
+   }
+
++  if (TargetTriple.isMusl()) {
++    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
++    static const char *const ARMHFMuslTriples[] = {
++        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
++    };
++    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
++    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
++    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
++    static const char *const MIPSMuslTriples[] = {
++        "mips-linux-musl", "mipsel-linux-musl",
++        "mipsel-linux-muslhf", "mips-linux-muslhf"
++    };
++    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
++    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
++    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
++    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
++
++    switch (TargetTriple.getArch()) {
++    case llvm::Triple::aarch64:
++      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      break;
++    case llvm::Triple::arm:
++      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
++      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
++        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
++      } else {
++        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
++      }
++      break;
++    case llvm::Triple::x86_64:
++      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      break;
++    case llvm::Triple::x86:
++      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      break;
++    case llvm::Triple::mips:
++      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
++      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
++      break;
++    case llvm::Triple::ppc:
++      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      break;
++    case llvm::Triple::ppcle:
++      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      break;
++    case llvm::Triple::ppc64:
++      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      break;
++    case llvm::Triple::ppc64le:
++      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      break;
++    default:
++      break;
++    }
++    TripleAliases.push_back(TargetTriple.str());
++    if (TargetTriple.str() != BiarchTriple.str())
++      BiarchTripleAliases.push_back(BiarchTriple.str());
++    return;
++  }
++
+   // Android targets should not use GNU/Linux tools or libraries.
+   if (TargetTriple.isAndroid()) {
+     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
new file mode 100644
index 000000000000..47128af79b7f
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
@@ -0,0 +1,13 @@
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -490,10 +490,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+     Loader = "ld.so.1";
+     break;
+   case llvm::Triple::ppc64:
+-    LibDir = "lib64";
+-    Loader =
+-        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
+-    break;
+   case llvm::Triple::ppc64le:
+     LibDir = "lib64";
+     Loader =
diff --git a/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
new file mode 100644
index 000000000000..21fc8003c5f1
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
@@ -0,0 +1,48 @@
+--- a/clang/lib/Basic/Targets/PPC.h
++++ b/clang/lib/Basic/Targets/PPC.h
+@@ -415,11 +415,10 @@ public:
+       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
+     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
+       DataLayout = "e-m:e-i64:64-n32:64";
+-      ABI = "elfv2";
+     } else {
+       DataLayout = "E-m:e-i64:64-n32:64";
+-      ABI = "elfv1";
+     }
++    ABI = "elfv2";
+ 
+     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
+       LongDoubleWidth = LongDoubleAlign = 64;
+--- a/clang/lib/CodeGen/TargetInfo.cpp
++++ b/clang/lib/CodeGen/TargetInfo.cpp
+@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
+       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
+ 
+     if (Triple.isOSBinFormatELF()) {
+-      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
+-      if (getTarget().getABI() == "elfv2")
+-        Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      if (getTarget().getABI() == "elfv1")
++        Kind = PPC64_SVR4_ABIInfo::ELFv1;
+       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
+ 
+       return SetCGInfo(
+--- a/clang/lib/Driver/ToolChains/Clang.cpp
++++ b/clang/lib/Driver/ToolChains/Clang.cpp
+@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
+   const llvm::Triple &T = getToolChain().getTriple();
+   if (T.isOSBinFormatELF()) {
+     switch (getToolChain().getArch()) {
+-    case llvm::Triple::ppc64: {
+-      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
+-          T.isOSOpenBSD() || T.isMusl())
+-        ABIName = "elfv2";
+-      else
+-        ABIName = "elfv1";
+-      break;
+-    }
++    case llvm::Triple::ppc64:
+     case llvm::Triple::ppc64le:
+       ABIName = "elfv2";
+       break;
diff --git a/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch b/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
new file mode 100644
index 000000000000..4135bfd4486a
--- /dev/null
+++ b/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
@@ -0,0 +1,35 @@
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
+@@ -74,6 +74,10 @@
+ #include <sys/utsname.h>
+ #endif
+
++#if SANITIZER_LINUX && defined(__powerpc__)
++#include <asm/ptrace.h>
++#endif
++
+ #if SANITIZER_LINUX && !SANITIZER_ANDROID
+ #include <sys/personality.h>
+ #endif
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
+@@ -92,7 +92,7 @@
+ # include <utime.h>
+ # include <sys/ptrace.h>
+ #    if defined(__mips64) || defined(__aarch64__) || defined(__arm__) || \
+-        defined(__hexagon__) || SANITIZER_RISCV64
++        defined(__hexagon__) || defined(__powerpc__) || SANITIZER_RISCV64
+ #      include <asm/ptrace.h>
+ #      ifdef __arm__
+ typedef struct user_fpregs elf_fpregset_t;
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
+@@ -31,7 +31,7 @@
+ #include <sys/types.h> // for pid_t
+ #include <sys/uio.h> // for iovec
+ #include <elf.h> // for NT_PRSTATUS
+-#if (defined(__aarch64__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
++#if (defined(__aarch64__) || defined(__powerpc__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
+ // GLIBC 2.20+ sys/user does not include asm/ptrace.h
+ # include <asm/ptrace.h>
+ #endif
diff --git a/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch b/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
new file mode 100644
index 000000000000..d0b61c80c897
--- /dev/null
+++ b/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
@@ -0,0 +1,62 @@
+--- a/compiler-rt/lib/xray/xray_powerpc64.inc
++++ b/compiler-rt/lib/xray/xray_powerpc64.inc
+@@ -12,7 +12,13 @@
+ 
+ #include <cstdint>
+ #include <mutex>
++#ifdef __GLIBC__
+ #include <sys/platform/ppc.h>
++#else
++#include <cctype>
++#include <cstring>
++#include <cstdlib>
++#endif
+ 
+ #include "xray_defs.h"
+ 
+@@ -20,13 +26,45 @@ namespace __xray {
+ 
+ ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
+   CPU = 0;
++#ifdef __GLIBC__
+   return __ppc_get_timebase();
++#else
++  return __builtin_ppc_get_timebase();
++#endif
+ }
+ 
+ inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
+   static std::mutex M;
+   std::lock_guard<std::mutex> Guard(M);
++#ifdef __GLIBC__
+   return __ppc_get_timebase_freq();
++#else
++  /* FIXME: a less dirty implementation? */
++  static uint64_t base;
++  if (!base) {
++    FILE *f = fopen("/proc/cpuinfo", "rb");
++    if (f) {
++      ssize_t nr;
++      /* virtually always big enough to hold the line */
++      char buf[512];
++      while (fgets(buf, sizeof(buf), f)) {
++        char *ret = strstr(buf, "timebase");
++        if (!ret) {
++          continue;
++        }
++        ret += sizeof("timebase") - 1;
++        ret = strchr(ret, ':');
++        if (!ret) {
++          continue;
++        }
++        base = strtoul(ret + 1, nullptr, 10);
++        break;
++      }
++      fclose(f);
++    }
++  }
++  return base;
++#endif
+ }
+ 
+ inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
diff --git a/srcpkgs/llvm14/patches/libcxx-musl.patch b/srcpkgs/llvm14/patches/libcxx-musl.patch
new file mode 100644
index 000000000000..bbd31ffc2cb1
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-musl.patch
@@ -0,0 +1,26 @@
+--- a/libcxx/include/locale
++++ b/libcxx/include/locale
+@@ -742,7 +742,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
+         typename remove_reference<decltype(errno)>::type __save_errno = errno;
+         errno = 0;
+         char *__p2;
++#if defined(__linux__) && !defined(__GLIBC__)
++        long long __ll = strtoll(__a, &__p2, __base);
++#else
+         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
++#endif
+         typename remove_reference<decltype(errno)>::type __current_errno = errno;
+         if (__current_errno == 0)
+             errno = __save_errno;
+@@ -782,7 +786,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
+         typename remove_reference<decltype(errno)>::type __save_errno = errno;
+         errno = 0;
+         char *__p2;
++#if defined(__linux__) && !defined(__GLIBC__)
++        unsigned long long __ll = strtoull(__a, &__p2, __base);
++#else
+         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
++#endif
+         typename remove_reference<decltype(errno)>::type __current_errno = errno;
+         if (__current_errno == 0)
+             errno = __save_errno;
diff --git a/srcpkgs/llvm14/patches/libcxx-ppc.patch b/srcpkgs/llvm14/patches/libcxx-ppc.patch
new file mode 100644
index 000000000000..7a92f8004e1c
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-ppc.patch
@@ -0,0 +1,22 @@
+This ensures `is_iec559` is defined correctly under all long double ABIs,
+including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__`
+is not defined on gcc.
+
+--- a/libcxx/include/limits
++++ b/libcxx/include/limits
+@@ -426,8 +426,14 @@ protected:
+     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
+     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
+ 
+-#if (defined(__ppc__) || defined(__ppc64__))
++#if defined(__powerpc__) || defined(__powerpc64__)
++#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__)
++    /* IEEE 754 quadruple or double precision */
++    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
++#else
++    /* 128-bit IBM double-double */
+     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
++#endif
+ #else
+     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
+ #endif
diff --git a/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch b/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
new file mode 100644
index 000000000000..70292beb2fcd
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
@@ -0,0 +1,11 @@
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -769,6 +769,8 @@ function(cxx_link_system_libraries target)
+     target_link_libraries(${target} PRIVATE atomic)
+   endif()
+ 
++#ssp  target_link_libraries(${target} PRIVATE ssp_nonshared)
++
+   if (MINGW)
+     target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
+   endif()
diff --git a/srcpkgs/llvm14/patches/libcxxabi-dl.patch b/srcpkgs/llvm14/patches/libcxxabi-dl.patch
new file mode 100644
index 000000000000..3a15f9db8c98
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxxabi-dl.patch
@@ -0,0 +1,25 @@
+Also link to -ldl to prevent undefined references.
+
+--- a/libcxxabi/src/CMakeLists.txt
++++ b/libcxxabi/src/CMakeLists.txt
+@@ -73,6 +73,7 @@
+   endif()
+ 
+   add_library_flags_if(LIBCXXABI_HAS_C_LIB c)
++  add_library_flags_if(LIBCXXABI_HAS_C_LIB dl)
+ endif()
+ 
+ if (LIBCXXABI_USE_LLVM_UNWINDER)
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -745,6 +745,10 @@
+     target_link_libraries(${target} PRIVATE m)
+   endif()
+ 
++  if (LIBCXX_HAS_C_LIB)
++    target_link_libraries(${target} PRIVATE dl)
++  endif()
++
+   if (LIBCXX_HAS_RT_LIB)
+     target_link_libraries(${target} PRIVATE rt)
+   endif()
diff --git a/srcpkgs/llvm14/patches/lldb-musl.patch b/srcpkgs/llvm14/patches/lldb-musl.patch
new file mode 100644
index 000000000000..601c0d138523
--- /dev/null
+++ b/srcpkgs/llvm14/patches/lldb-musl.patch
@@ -0,0 +1,31 @@
+--- a/lldb/source/Plugins/Process/Linux/Procfs.h
++++ b/lldb/source/Plugins/Process/Linux/Procfs.h
+@@ -10,21 +10,12 @@
+ // sys/procfs.h on Android/Linux for all supported architectures.
+ 
+ #include <sys/ptrace.h>
++#include <asm/ptrace.h>
+ 
+-#ifdef __ANDROID__
+-#if defined(__arm64__) || defined(__aarch64__)
+-typedef unsigned long elf_greg_t;
+-typedef elf_greg_t
+-    elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
+-typedef struct user_fpsimd_state elf_fpregset_t;
+-#ifndef NT_FPREGSET
+-#define NT_FPREGSET NT_PRFPREG
+-#endif // NT_FPREGSET
+-#elif defined(__mips__)
+-#ifndef NT_FPREGSET
+-#define NT_FPREGSET NT_PRFPREG
+-#endif // NT_FPREGSET
+-#endif
+-#else // __ANDROID__
++#if !defined(__GLIBC__) && defined(__powerpc__)
++#define pt_regs musl_pt_regs
++#include <sys/procfs.h>
++#undef pt_regs
++#else
+ #include <sys/procfs.h>
+-#endif // __ANDROID__
++#endif
diff --git a/srcpkgs/llvm14/patches/llvm-001-musl.patch b/srcpkgs/llvm14/patches/llvm-001-musl.patch
new file mode 100644
index 000000000000..f2a3f8d62813
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-001-musl.patch
@@ -0,0 +1,57 @@
+From faca3fbd15d0c3108493c3c54cd93138e049ac43 Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe@gmail.com>
+Date: Tue, 8 Sep 2015 22:03:02 +0200
+Subject: [PATCH 3/3] musl
+
+---
+ include/llvm/Analysis/TargetLibraryInfo.h | 9 +++++++++
+ lib/Support/DynamicLibrary.cpp            | 2 +-
+ lib/Support/Unix/Signals.inc              | 6 +++---
+ utils/unittest/googletest/src/gtest.cc    | 1 +
+ 5 files changed, 17 insertions(+), 6 deletions(-)
+
+diff --git a/include/llvm/Analysis/TargetLibraryInfo.h b/include/llvm/Analysis/TargetLibraryInfo.h
+index 34a8a1e3..1214ece5 100644
+--- a/llvm/include/llvm/Analysis/TargetLibraryInfo.h
++++ b/llvm/include/llvm/Analysis/TargetLibraryInfo.h
+@@ -18,6 +18,15 @@
+ #include "llvm/IR/PassManager.h"
+ #include "llvm/Pass.h"
+ 
++#undef fopen64
++#undef fseeko64
++#undef fstat64
++#undef fstatvfs64
++#undef ftello64
++#undef lstat64
++#undef stat64
++#undef tmpfile64
++
+ namespace llvm {
+ template <typename T> class ArrayRef;
+ class Triple;
+diff --git a/lib/Support/Unix/DynamicLibrary.inc b/lib/Support/Unix/DynamicLibrary.inc
+index a2a37996..2f86c470 100644
+--- a/llvm/lib/Support/Unix/DynamicLibrary.inc
++++ b/llvm/lib/Support/Unix/DynamicLibrary.inc
+@@ -102,7 +102,7 @@ static void *DoSearch(const char* SymbolName) {
+ 
+ // This macro returns the address of a well-known, explicit symbol
+ #define EXPLICIT_SYMBOL(SYM) \
+-   if (!strcmp(SymbolName, #SYM)) return &SYM
++   if (!strcmp(SymbolName, #SYM)) return (void *)&SYM
+ 
+ // Under glibc we have a weird situation. The stderr/out/in symbols are both
+ // macros and global variables because of standards requirements. So, we
+diff --git a/utils/unittest/googletest/src/gtest.cc b/utils/unittest/googletest/src/gtest.cc
+index d882ab2e..f1fb12d0 100644
+--- a/llvm/utils/unittest/googletest/src/gtest.cc
++++ b/llvm/utils/unittest/googletest/src/gtest.cc
+@@ -128,6 +128,7 @@
+ 
+ #if GTEST_CAN_STREAM_RESULTS_
+ # include <arpa/inet.h>  // NOLINT
++# include <sys/socket.h>  // NOLINT
+ # include <netdb.h>  // NOLINT
+ # include <sys/socket.h>  // NOLINT
+ # include <sys/types.h>  // NOLINT
diff --git a/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch b/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
new file mode 100644
index 000000000000..0071d964bd37
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
@@ -0,0 +1,30 @@
+This patches LLVM to use ELFv2 on ppc64 unconditionally unless overridden. We
+need this because unlike most distros we use ELFv2 for both glibc and musl
+on big endian ppc64.
+
+diff --git a/lib/Target/PowerPC/PPCTargetMachine.cpp b/lib/Target/PowerPC/PPCTargetMachine.cpp
+index 0634833e..b7cbc2e7 100644
+--- a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
++++ b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
+@@ -222,9 +222,8 @@ static PPCTargetMachine::PPCABI computeTargetABI(const Triple &TT,
+ 
+   switch (TT.getArch()) {
+   case Triple::ppc64le:
+-    return PPCTargetMachine::PPC_ABI_ELFv2;
+   case Triple::ppc64:
+-    return PPCTargetMachine::PPC_ABI_ELFv1;
++    return PPCTargetMachine::PPC_ABI_ELFv2;
+   default:
+     return PPCTargetMachine::PPC_ABI_UNKNOWN;
+   }
+diff --git a/test/CodeGen/PowerPC/ppc64-elf-abi.ll b/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+index 8b1cf6b5..296a2afa 100644
+--- a/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
++++ b/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+@@ -1,4 +1,5 @@
+-; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv1
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-musl < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv1 < %s | FileCheck %s -check-prefix=CHECK-ELFv1
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv2 < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
diff --git a/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch b/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
new file mode 100644
index 000000000000..b5d15974375d
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
@@ -0,0 +1,11 @@
+--- a/llvm/lib/Target/PowerPC/PPCSubtarget.cpp
++++ b/llvm/lib/Target/PowerPC/PPCSubtarget.cpp
+@@ -165,7 +165,7 @@ void PPCSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) {
+ 
+   if ((TargetTriple.isOSFreeBSD() && TargetTriple.getOSMajorVersion() >= 13) ||
+       TargetTriple.isOSNetBSD() || TargetTriple.isOSOpenBSD() ||
+-      TargetTriple.isMusl())
++      isTargetLinux())
+     SecurePlt = true;
+ 
+   if (HasSPE && IsPPC64)
diff --git a/srcpkgs/llvm14/patches/llvm-004-override-opt.patch b/srcpkgs/llvm14/patches/llvm-004-override-opt.patch
new file mode 100644
index 000000000000..51d0e4b31b32
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-004-override-opt.patch
@@ -0,0 +1,18 @@
+This allows us to override the optimization level as not all platforms can
+deal with -O3.
+
+--- a/llvm/CMakeLists.txt
++++ b/llvm/CMakeLists.txt
+@@ -918,6 +918,12 @@ if( MINGW AND NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" )
+   llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "-O2")
+ endif()
+ 
++set(VOID_CXX_OPT_FLAGS "" CACHE STRING "Optimization level to use")
++
++if (NOT VOID_CXX_OPT_FLAGS STREQUAL "")
++    llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "${VOID_CXX_OPT_FLAGS}")
++endif()
++
+ # Put this before tblgen. Else we have a circular dependence.
+ add_subdirectory(lib/Demangle)
+ add_subdirectory(lib/Support)
diff --git a/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch b/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
new file mode 100644
index 000000000000..d332687b9d92
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
@@ -0,0 +1,36 @@
+From f3dbdd49c06bfafc1d6138094cf42889c14d38b6 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Sun, 3 Nov 2019 10:57:27 -0600
+Subject: [PATCH] [LLVM][PowerPC] Assume BigPIC if no PIC level is specified
+
+---
+ llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp  | 2 +-
+ llvm/lib/Target/PowerPC/PPCMCInstLower.cpp | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/Target/PowerPC/PPCAsmPrinter.cpp b/lib/Target/PowerPC/PPCAsmPrinter.cpp
+index cce21f32..87ca5f9b 100644
+--- a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
++++ b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
+@@ -520,7 +520,7 @@ void PPCAsmPrinter::EmitTlsCall(const MachineInstr *MI,
+ 
+   // Add 32768 offset to the symbol so we follow up the latest GOT/PLT ABI.
+   if (Kind == MCSymbolRefExpr::VK_PLT && Subtarget->isSecurePlt() &&
+-      M->getPICLevel() == PICLevel::BigPIC)
++      M->getPICLevel() != PICLevel::SmallPIC)
+     TlsRef = MCBinaryExpr::createAdd(
+         TlsRef, MCConstantExpr::create(32768, OutContext), OutContext);
+   const MachineOperand &MO = MI->getOperand(2);
+diff --git a/lib/Target/PowerPC/PPCMCInstLower.cpp b/lib/Target/PowerPC/PPCMCInstLower.cpp
+index 5cc180d7..a5b02565 100644
+--- a/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
++++ b/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
+@@ -117,7 +117,7 @@ static MCOperand GetSymbolRef(const MachineOperand &MO, const MCSymbol *Symbol,
+   const MCExpr *Expr = MCSymbolRefExpr::create(Symbol, RefKind, Ctx);
+   // If -msecure-plt -fPIC, add 32768 to symbol.
+   if (Subtarget->isSecurePlt() && TM.isPositionIndependent() &&
+-      M->getPICLevel() == PICLevel::BigPIC &&
++      M->getPICLevel() != PICLevel::SmallPIC &&
+       MO.getTargetFlags() == PPCII::MO_PLT)
+     Expr =
+         MCBinaryExpr::createAdd(Expr, MCConstantExpr::create(32768, Ctx), Ctx);
diff --git a/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch b/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
new file mode 100644
index 000000000000..a00abd216665
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
@@ -0,0 +1,25 @@
+Fix failures in AllocationTests/MappedMemoryTest.* on aarch64:
+
+    Failing Tests (8):
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.AllocAndRelease/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.DuplicateNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.EnabledWrite/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.MultipleAllocAndRelease/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.SuccessiveNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.UnalignedNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.ZeroNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.ZeroSizeNear/3
+
+Upstream-Issue: https://bugs.llvm.org/show_bug.cgi?id=14278#c10
+
+--- a/llvm/lib/Support/Unix/Memory.inc
++++ b/llvm/lib/Support/Unix/Memory.inc
+@@ -58,7 +58,7 @@ static int getPosixProtectionFlags(unsigned Flags) {
+     return PROT_READ | PROT_WRITE | PROT_EXEC;
+   case llvm::sys::Memory::MF_EXEC:
+ #if (defined(__FreeBSD__) || defined(__POWERPC__) || defined (__ppc__) || \
+-     defined(_POWER) || defined(_ARCH_PPC))
++     defined(_POWER) || defined(_ARCH_PPC) || (defined(__linux__) && defined(__aarch64__)))
+     // On PowerPC, having an executable page that has no read permission
+     // can have unintended consequences.  The function InvalidateInstruction-
+     // Cache uses instructions dcbf and icbi, both of which are treated by
diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
new file mode 100644
index 000000000000..3e7e6ab2c00b
--- /dev/null
+++ b/srcpkgs/llvm14/template
@@ -0,0 +1,424 @@
+# Template file for 'llvm14'
+pkgname=llvm14
+version=14.0.3
+revision=1
+wrksrc="llvm-project-${version}.src"
+build_wrksrc=llvm
+build_style=cmake
+configure_args="
+ -DCMAKE_BUILD_TYPE=Release -Wno-dev
+ -DENABLE_LINKER_BUILD_ID=YES
+ -DLLDB_USE_SYSTEM_SIX=YES
+ -DLIBCXX_CXX_ABI=libcxxabi
+ -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
+ -DLIBCXXABI_USE_LLVM_UNWINDER=YES
+ -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
+ -DLIBOMP_ENABLE_SHARED=YES
+ -DLIBOMP_INSTALL_ALIASES=NO
+ -DLLVM_INCLUDE_DOCS=YES
+ -DLLVM_BUILD_DOCS=YES
+ -DLLVM_ENABLE_SPHINX=YES
+ -DSPHINX_WARNINGS_AS_ERRORS=NO
+ -DLLVM_INSTALL_UTILS=YES
+ -DLLVM_BUILD_LLVM_DYLIB=YES
+ -DLLVM_LINK_LLVM_DYLIB=YES
+ -DLLVM_ENABLE_RTTI=YES
+ -DLLVM_ENABLE_FFI=YES
+ -DLLVM_BINUTILS_INCDIR=/usr/include"
+hostmakedepends="perl python3 zlib-devel libffi-devel swig python3-Sphinx
+ python3-recommonmark python3-sphinx-automodapi"
+makedepends="python3-devel zlib-devel elfutils-devel libffi-devel libedit-devel
+ libxml2-devel binutils-devel libatomic-devel"
+depends="libllvm14>=${version}_${revision}"
+short_desc="Low Level Virtual Machine"
+maintainer="q66 <daniel@octaforge.org>"
+license="Apache-2.0"
+homepage="https://www.llvm.org"
+distfiles="https://github.com/llvm/llvm-project/releases/download/llvmorg-${version}/llvm-project-${version}.src.tar.xz"
+checksum=44d3e7a784d5cf805e72853bb03f218bd1058d448c03ca883dabbebc99204e0c
+lib32disabled=yes
+python_version=3
+
+if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+	configure_args+=" -DLIBCXX_HAS_MUSL_LIBC=YES"
+	makedepends+=" libexecinfo-devel"
+	depends+=" libexecinfo-devel"
+fi
+
+# "operand out of range" assembler failures
+case "$XBPS_TARGET_MACHINE" in
+	ppc64*) ;;
+	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
+esac
+
+_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
+
+_lldb_enable=yes
+_libomp_enable=no
+
+case "$XBPS_TARGET_MACHINE" in
+	ppc64le*) ;;
+	ppc*|i686*) _lldb_enable=no ;;
+esac
+
+case "$XBPS_TARGET_MACHINE" in
+	x86_64*|aarch64*|ppc64*) _libomp_enable=yes;;
+esac
+
+subpackages="clang-tools-extra"
+
+# must go before clang
+if [ "$_libomp_enable" = "yes" ]; then
+	_enabled_projects+=";openmp"
+	subpackages+=" libomp libomp-devel"
+	# because of cmake nonsense referencing libomptarget.so.*
+	depends+=" libomp>=${version}_${revision}"
+fi
+
+subpackages+=" clang clang-analyzer libclang libclang-cpp
+ llvm-libunwind llvm-libunwind-devel libcxx libcxx-devel
+ libcxxabi libcxxabi-devel libllvm14"
+
+if [ "$_lldb_enable" = "yes" ]; then
+	# XXX fails to cross compile due to python
+	_enabled_projects+=";lldb"
+	subpackages+=" lldb lldb-devel"
+fi
+
+subpackages+=" lld lld-devel"
+
+configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+
+post_patch() {
+	if [ "$_lldb_enable" = "yes" ]; then
+		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+			vsed -i 's|__ptrace_request|int|g' \
+				${wrksrc}/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
+		fi
+		# disable docs for lldb as they fail to generate
+		vsed -i '/add_subdirectory(docs)/d' \
+			${wrksrc}/lldb/CMakeLists.txt
+	fi
+
+	# update config.guess for better platform detection
+	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
+		${wrksrc}/llvm/cmake
+
+	# fix linker failures on some archs
+	vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
+		${wrksrc}/libcxxabi/cmake/config-ix.cmake
+	vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
+		${wrksrc}/libcxxabi/cmake/config-ix.cmake
+
+	# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*) ;;
+		ppc*-musl|i686-musl|mips*-musl)
+			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
+				${wrksrc}/libunwind/src/CMakeLists.txt
+			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
+				${wrksrc}/libcxxabi/src/CMakeLists.txt
+			vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
+			;;
+	esac
+
+	case "$XBPS_TARGET_MACHINE" in
+		x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
+			vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
+				${wrksrc}/compiler-rt/CMakeLists.txt
+			;;
+		arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
+			vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
+				${wrksrc}/compiler-rt/cmake/config-ix.cmake
+			;;
+	esac
+}
+
+pre_configure() {
+	local triplet
+
+	# Vastly reduce size of debugging symbols:
+	CFLAGS=${CFLAGS/ -g/ -g1}
+	CXXFLAGS=${CXXFLAGS/ -g/ -g1}
+
+	# since gcc9, the build likes to blow up for ppc32 apparently because
+	# of clang being too large for a 24-bit relative call to the PLT, so
+	# optimize for size instead
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*) ;;
+		mips*-musl|ppc*) configure_args+=" -DVOID_CXX_OPT_FLAGS=-Os" ;;
+	esac
+
+	if [ "$CROSS_BUILD" ]; then
+		msg_normal "Building host tblgen\n"
+		mkdir -p build/HOST
+		cd build/HOST
+		CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
+			CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
+			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
+			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
+		make ${makejobs} -C utils/TableGen
+		make ${makejobs} -C tools/clang/utils/TableGen
+		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
+		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
+		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
+		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
+		cd ../..
+	fi
+
+	case "$XBPS_TARGET_MACHINE" in
+		i686*) _arch="X86";;
+		x86_64*) _arch="X86";;
+		armv5*) _arch="Armv5te";;
+		armv6*) _arch="Armv6";;
+		armv7*) _arch="Armv7";;
+		aarch64*) _arch="AArch64";;
+		mips*) _arch="Mips";;
+		ppc*) _arch="PowerPC";;
+		riscv64*) _arch="RISCV64";;
+	esac
+
+	triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
+
+	configure_args+=" -DLLVM_TARGET_ARCH=${_arch}"
+	configure_args+=" -DLLVM_HOST_TRIPLE=${triplet}"
+	configure_args+=" -DLLVM_DEFAULT_TARGET_TRIPLE=${triplet}"
+}
+
+do_install() {
+	cd build
+	cmake -DCMAKE_INSTALL_PREFIX=${DESTDIR}/usr -P cmake_install.cmake
+
+	# Required for multilib.
+	if [ "$XBPS_TARGET_MACHINE" = "x86_64" ]; then
+		for _header in llvm-config; do
+			mv ${DESTDIR}/usr/include/llvm/Config/${_header}{,-64}.h
+			vinstall ${FILESDIR}/llvm-Config-${_header}.h 644 \
+				usr/include/llvm/Config ${_header}.h
+		done
+	fi
+
+	# Remove llvm-config-host in cross builds.
+	if [ "$CROSS_BUILD" ]; then
+		rm -f ${DESTDIR}/usr/bin/llvm-config-host
+	fi
+
+	# Install libcxxabi headers
+	vinstall ${wrksrc}/libcxxabi/include/__cxxabi_config.h 644 usr/include
+	vinstall ${wrksrc}/libcxxabi/include/cxxabi.h 644 usr/include
+
+	# Install libunwind headers
+	vinstall ${wrksrc}/libunwind/include/__libunwind_config.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/libunwind.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/unwind.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/mach-o/compact_unwind_encoding.h \
+		644 usr/include/mach-o
+}
+
+clang-analyzer_package() {
+	pycompile_dirs="usr/share/scan-view"
+	depends="clang-${version}_${revision} python3 perl"
+	short_desc+=" - A source code analysis framework"
+	homepage="https://clang-analyzer.llvm.org/"
+	pkg_install() {
+		vmove usr/share/man/man1/scan-build.1
+		vmove "/usr/bin/scan-*"
+		vmove "/usr/share/scan-*"
+		vmove "/usr/libexec/*analyzer"
+	}
+}
+
+clang-tools-extra_package() {
+	lib32disabled=yes
+	depends="clang-${version}_${revision} python3"
+	short_desc+=" - Extra Clang tools"
+	homepage="https://clang.llvm.org/extra/"
+	pkg_install() {
+		vmove usr/include/clang-tidy
+		vmove usr/bin/clang-apply-replacements
+		vmove usr/bin/clang-query
+		vmove usr/bin/clang-rename
+		vmove usr/bin/clang-tidy
+		vmove usr/bin/diagtool
+		vmove usr/bin/find-all-symbols
+		vmove usr/bin/hmaptool
+		vmove usr/bin/modularize
+		vmove usr/bin/pp-trace
+		vmove usr/bin/sancov
+		vmove "usr/lib/libclangApplyReplacements*"
+		vmove "usr/lib/libclangQuery*"
+		vmove "usr/lib/libclangTidy*"
+		vmove "usr/share/clang/*tidy*"
+		vmove usr/share/doc/clang-tools
+		vmove usr/share/man/man1/extraclangtools.1
+		vmove usr/share/man/man1/diagtool.1
+	}
+}
+
+clang_package() {
+	lib32disabled=yes
+	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
+	 libclang-${version}_${revision}"
+	short_desc+=" - C language family frontend"
+	homepage="https://clang.llvm.org/"
+	pkg_install() {
+		vmove usr/include/clang
+		vmove usr/include/clang-c
+		vmove "usr/bin/*clang*"
+		vmove usr/bin/c-index-test
+		vmove usr/lib/clang
+		vmove usr/lib/cmake/clang
+		vmove "usr/lib/libclang*.a"
+		vmove "usr/lib/libclang*.so"
+		vmove usr/share/clang
+		vmove usr/share/doc/clang
+		vmove usr/share/man/man1/clang.1
+	}
+}
+
+libclang_package() {
+	short_desc+=" - C frontend runtime library"
+	pkg_install() {
+		vmove "usr/lib/libclang.so.*"
+	}
+}
+
+libclang-cpp_package() {
+	short_desc+=" - C frontend runtime library (C++ interface)"
+	pkg_install() {
+		vmove "usr/lib/libclang-cpp.so.*"
+	}
+}
+
+lld_package() {
+	lib32disabled=yes
+	short_desc+=" - linker"
+	homepage="https://lld.llvm.org"
+	pkg_install() {
+		vmove usr/bin/lld*
+		vmove usr/bin/wasm-ld
+		vmove usr/bin/ld.lld*
+		vmove usr/bin/ld64.lld*
+		vmove usr/share/doc/lld
+	}
+}
+
+lld-devel_package() {
+	lib32disabled=yes
+	short_desc+=" - linker - development files"
+	homepage="https://lld.llvm.org"
+	depends="lld>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include/lld
+		vmove usr/lib/cmake/lld
+		vmove "usr/lib/liblld*a"
+	}
+}
+
+lldb_package() {
+	lib32disabled=yes
+	depends+=" python3-six"
+	short_desc+=" - LLDB debugger"
+	homepage="https://lldb.llvm.org/"
+	pkg_install() {
+		vmove usr/bin/*lldb*
+		vmove usr/lib/liblldb*so.*
+		vmove /usr/lib/python*
+	}
+}
+
+lldb-devel_package() {
+	lib32disabled=yes
+	depends="lldb>=${version}_${revision}"
+	short_desc+=" - LLDB debugger - development files"
+	pkg_install() {
+		vmove usr/include/lldb
+		vmove "usr/lib/liblldb*.so"
+	}
+}
+
+llvm-libunwind_package() {
+	short_desc+=" - libunwind"
+	pkg_install() {
+		vmove "usr/lib/libunwind.so.*"
+	}
+}
+
+llvm-libunwind-devel_package() {
+	short_desc+=" - libunwind - development files"
+	depends="llvm-libunwind>=${version}_${revision}"
+	conflicts="libunwind-devel>=0"
+	pkg_install() {
+		vmove usr/lib/libunwind.so
+		vmove usr/lib/libunwind.a
+		vmove "usr/include/*unwind*"
+		vmove usr/include/mach-o
+		vmove usr/share/doc/libunwind
+	}
+}
+
+libcxxabi_package() {
+	short_desc+=" - low level support for libc++"
+	pkg_install() {
+		vmove "usr/lib/libc++abi.so.*"
+	}
+}
+
+libcxxabi-devel_package() {
+	short_desc+=" - low level support for libc++ - development files"
+	depends="libcxxabi>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/lib/libc++abi.so
+		vmove usr/lib/libc++abi.a
+		vmove "usr/include/*cxxabi*"
+	}
+}
+
+libcxx_package() {
+	short_desc+=" - C++ standard library"
+	pkg_install() {
+		vmove "usr/lib/libc++.so.*"
+	}
+}
+
+libcxx-devel_package() {
+	short_desc+=" - C++ standard library - development files"
+	depends="libcxx>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/lib/libc++.so
+		vmove usr/lib/libc++.a
+		vmove usr/lib/libc++experimental.a
+		vmove usr/include/c++
+		vmove usr/share/doc/libcxx
+	}
+}
+
+libomp_package() {
+	short_desc+=" - Clang OpenMP support library"
+	pkg_install() {
+		vmove usr/lib/libomp.so
+		vmove "usr/lib/libomptarget.rtl.*.so"
+		vmove usr/lib/libarcher.so
+		vmove "usr/lib/libomp*.so.*"
+	}
+}
+
+libomp-devel_package() {
+	short_desc+=" - Clang OpenMP support library - development files"
+	depends="libomp>=${version}_${revision}"
+	pkg_install() {
+		vmove "usr/lib/libomp*.so"
+		vmove "usr/lib/libarcher*"
+		vmove "usr/include/omp*.h"
+		vmove "usr/lib/clang/${version}/include/omp*.h"
+		vmove usr/share/man/man1/llvmopenmp.1
+		vmove usr/share/doc/openmp
+	}
+}
+
+libllvm14_package() {
+	short_desc+=" - runtime library"
+	pkg_install() {
+		vmove "usr/lib/libLLVM-*.so*"
+	}
+}
diff --git a/srcpkgs/llvm14/update b/srcpkgs/llvm14/update
new file mode 100644
index 000000000000..e95cf26b3586
--- /dev/null
+++ b/srcpkgs/llvm14/update
@@ -0,0 +1,3 @@
+site="https://github.com/llvm/llvm-project/releases"
+pattern="llvmorg-\K(\d+.){2}\d+(-rc\d+)?"
+ignore="*-rc*"

From 3a7245c791279f95fa6fea968eecc8f5f7d7d135 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:16:07 +0200
Subject: [PATCH 02/25] llvm: update to 14.0.3.

---
 srcpkgs/llvm/template | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/llvm/template b/srcpkgs/llvm/template
index a92db6f94f9f..d226c61c734e 100644
--- a/srcpkgs/llvm/template
+++ b/srcpkgs/llvm/template
@@ -1,10 +1,10 @@
 # Template file for 'llvm'
 pkgname=llvm
-version=12.0.0
+version=14.0.3
 revision=1
 build_style=meta
-depends="llvm12"
-replaces="llvm11>=0 llvm10>=0 llvm9>=0 llvm8>=0 llvm7>=0 llvm6.0>=0 llvm3.9>=0"
+depends="llvm14"
+replaces="llvm13>=0 llvm12>=0 llvm11>=0 llvm10>=0 llvm9>=0 llvm8>=0 llvm7>=0 llvm6.0>=0 llvm3.9>=0"
 short_desc="LLVM meta package"
 maintainer="Enno Boland <gottox@voidlinux.org>"
 license="Public Domain"

From f5ea041e89e99615d020048178758853592a82bd Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:36:32 +0200
Subject: [PATCH 03/25] llvm12: drop non-llvm components

---
 ...clang-001-fix-unwind-chain-inclusion.patch |  44 ---
 .../patches/clang-002-add-musl-triples.patch  | 110 -------
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 -
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ---
 .../compiler-rt-aarch64-ucontext.patch        |  11 -
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 --
 .../llvm12/patches/compiler-rt-size_t.patch   |  10 -
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 ----
 srcpkgs/llvm12/patches/libcxx-musl.patch      |  26 --
 srcpkgs/llvm12/patches/libcxx-ppc.patch       |  22 --
 .../llvm12/patches/libcxx-ssp-nonshared.patch |  11 -
 srcpkgs/llvm12/patches/libcxxabi-dl.patch     |  25 --
 srcpkgs/llvm12/patches/libunwind-ppc32.patch  |  63 ----
 srcpkgs/llvm12/patches/lldb-musl.patch        |  31 --
 .../llvm12/patches/ppc32-compiler-rt.patch    |  21 --
 srcpkgs/llvm12/template                       | 301 +-----------------
 16 files changed, 1 insertion(+), 832 deletions(-)
 delete mode 100644 srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-size_t.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-ppc.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxxabi-dl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libunwind-ppc32.patch
 delete mode 100644 srcpkgs/llvm12/patches/lldb-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/ppc32-compiler-rt.patch

diff --git a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
deleted file mode 100644
index e4eaa7783e7a..000000000000
--- a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 352974169f0d2b5da3d5321f588f5e3b5941330e Mon Sep 17 00:00:00 2001
-From: Andrea Brancaleoni <miwaxe@gmail.com>
-Date: Tue, 8 Sep 2015 22:14:57 +0200
-Subject: [PATCH 2/7] fix unwind chain inclusion
-
----
- lib/Headers/unwind.h | 9 +++++----
- 1 file changed, 5 insertions(+), 4 deletions(-)
-
-diff --git a/lib/Headers/unwind.h b/lib/Headers/unwind.h
-index 303d792..44e10cc 100644
---- a/clang/lib/Headers/unwind.h
-+++ b/clang/lib/Headers/unwind.h
-@@ -9,9 +9,6 @@
- 
- /* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/
- 
--#ifndef __CLANG_UNWIND_H
--#define __CLANG_UNWIND_H
--
- #if defined(__APPLE__) && __has_include_next(<unwind.h>)
- /* Darwin (from 11.x on) provide an unwind.h. If that's available,
-  * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE,
-@@ -39,6 +36,9 @@
- # endif
- #else
- 
-+#ifndef __CLANG_UNWIND_H
-+#define __CLANG_UNWIND_H
-+
- #include <stdint.h>
- 
- #ifdef __cplusplus
-@@ -322,6 +322,7 @@ _Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *);
- }
- #endif
- 
-+#endif /* __CLANG_UNWIND_H */
-+
- #endif
- 
--#endif /* __CLANG_UNWIND_H */
--- 
-2.5.1
diff --git a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
deleted file mode 100644
index 25688d40dbc2..000000000000
--- a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
+++ /dev/null
@@ -1,110 +0,0 @@
---- a/clang/lib/Driver/ToolChains/Gnu.cpp
-+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
-@@ -2086,7 +2086,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
-                                              "armv7hl-redhat-linux-gnueabi",
-                                              "armv6hl-suse-linux-gnueabi",
--                                             "armv7hl-suse-linux-gnueabi"};
-+                                             "armv7hl-suse-linux-gnueabi",
-+                                             "armv7l-linux-gnueabihf"};
-   static const char *const ARMebLibDirs[] = {"/lib"};
-   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
-                                              "armeb-linux-androideabi"};
-@@ -2153,8 +2154,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
-   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
-   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
--                                             "powerpcle-unknown-linux-gnu",
--                                             "powerpcle-linux-musl"};
-+                                             "powerpcle-unknown-linux-gnu"};
- 
-   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
-   static const char *const PPC64Triples[] = {
-@@ -2235,6 +2235,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-     return;
-   }
- 
-+  if (TargetTriple.isMusl()) {
-+    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
-+    static const char *const ARMHFMuslTriples[] = {
-+        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
-+    };
-+    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
-+    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
-+    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
-+    static const char *const MIPSMuslTriples[] = {
-+        "mips-linux-musl", "mipsel-linux-musl",
-+        "mipsel-linux-muslhf", "mips-linux-muslhf"
-+    };
-+    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
-+    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
-+    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
-+    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
-+
-+    switch (TargetTriple.getArch()) {
-+    case llvm::Triple::aarch64:
-+      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
-+      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
-+      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
-+      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
-+      break;
-+    case llvm::Triple::arm:
-+      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
-+      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
-+        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
-+      } else {
-+        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
-+      }
-+      break;
-+    case llvm::Triple::x86_64:
-+      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-+      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
-+      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-+      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
-+      break;
-+    case llvm::Triple::x86:
-+      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-+      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
-+      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-+      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
-+      break;
-+    case llvm::Triple::mips:
-+      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
-+      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
-+      break;
-+    case llvm::Triple::ppc:
-+      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
-+      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
-+      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
-+      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
-+      break;
-+    case llvm::Triple::ppcle:
-+      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
-+      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
-+      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
-+      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
-+      break;
-+    case llvm::Triple::ppc64:
-+      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
-+      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
-+      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
-+      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
-+      break;
-+    case llvm::Triple::ppc64le:
-+      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
-+      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
-+      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
-+      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
-+      break;
-+    default:
-+      break;
-+    }
-+    TripleAliases.push_back(TargetTriple.str());
-+    if (TargetTriple.str() != BiarchTriple.str())
-+      BiarchTripleAliases.push_back(BiarchTriple.str());
-+    return;
-+  }
-+
-   // Android targets should not use GNU/Linux tools or libraries.
-   if (TargetTriple.isAndroid()) {
-     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
deleted file mode 100644
index 4ad6412d1e6c..000000000000
--- a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/clang/lib/Driver/ToolChains/Linux.cpp
-+++ b/clang/lib/Driver/ToolChains/Linux.cpp
-@@ -504,10 +504,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
-     Loader = "ld.so.1";
-     break;
-   case llvm::Triple::ppc64:
--    LibDir = "lib64";
--    Loader =
--        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
--    break;
-   case llvm::Triple::ppc64le:
-     LibDir = "lib64";
-     Loader =
diff --git a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
deleted file mode 100644
index 21fc8003c5f1..000000000000
--- a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
+++ /dev/null
@@ -1,48 +0,0 @@
---- a/clang/lib/Basic/Targets/PPC.h
-+++ b/clang/lib/Basic/Targets/PPC.h
-@@ -415,11 +415,10 @@ public:
-       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
-     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
-       DataLayout = "e-m:e-i64:64-n32:64";
--      ABI = "elfv2";
-     } else {
-       DataLayout = "E-m:e-i64:64-n32:64";
--      ABI = "elfv1";
-     }
-+    ABI = "elfv2";
- 
-     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
-       LongDoubleWidth = LongDoubleAlign = 64;
---- a/clang/lib/CodeGen/TargetInfo.cpp
-+++ b/clang/lib/CodeGen/TargetInfo.cpp
-@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
-       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
- 
-     if (Triple.isOSBinFormatELF()) {
--      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
--      if (getTarget().getABI() == "elfv2")
--        Kind = PPC64_SVR4_ABIInfo::ELFv2;
-+      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
-+      if (getTarget().getABI() == "elfv1")
-+        Kind = PPC64_SVR4_ABIInfo::ELFv1;
-       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
- 
-       return SetCGInfo(
---- a/clang/lib/Driver/ToolChains/Clang.cpp
-+++ b/clang/lib/Driver/ToolChains/Clang.cpp
-@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
-   const llvm::Triple &T = getToolChain().getTriple();
-   if (T.isOSBinFormatELF()) {
-     switch (getToolChain().getArch()) {
--    case llvm::Triple::ppc64: {
--      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
--          T.isOSOpenBSD() || T.isMusl())
--        ABIName = "elfv2";
--      else
--        ABIName = "elfv1";
--      break;
--    }
-+    case llvm::Triple::ppc64:
-     case llvm::Triple::ppc64le:
-       ABIName = "elfv2";
-       break;
diff --git a/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch b/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
deleted file mode 100644
index 893c059d7b8d..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp.orig
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-@@ -1799,7 +1799,7 @@
- 
- static bool Aarch64GetESR(ucontext_t *ucontext, u64 *esr) {
-   static const u32 kEsrMagic = 0x45535201;
--  u8 *aux = ucontext->uc_mcontext.__reserved;
-+  u8 *aux = reinterpret_cast<u8 *>(ucontext->uc_mcontext.__reserved);
-   while (true) {
-     _aarch64_ctx *ctx = (_aarch64_ctx *)aux;
-     if (ctx->size == 0) break;
diff --git a/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch b/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
deleted file mode 100644
index 35f16d24f340..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
+++ /dev/null
@@ -1,35 +0,0 @@
---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-@@ -74,6 +74,10 @@
- #include <sys/utsname.h>
- #endif
- 
-+#if SANITIZER_LINUX && defined(__powerpc__)
-+#include <asm/ptrace.h>
-+#endif
-+
- #if SANITIZER_LINUX && !SANITIZER_ANDROID
- #include <sys/personality.h>
- #endif
---- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
-@@ -92,7 +92,7 @@
- # include <utime.h>
- # include <sys/ptrace.h>
- #if defined(__mips64) || defined(__aarch64__) || defined(__arm__) || \
--    SANITIZER_RISCV64
-+    defined(__powerpc__) || SANITIZER_RISCV64
- #  include <asm/ptrace.h>
- #  ifdef __arm__
- typedef struct user_fpregs elf_fpregset_t;
---- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
-@@ -31,7 +31,7 @@
- #include <sys/types.h> // for pid_t
- #include <sys/uio.h> // for iovec
- #include <elf.h> // for NT_PRSTATUS
--#if (defined(__aarch64__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
-+#if (defined(__aarch64__) || defined(__powerpc__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
- // GLIBC 2.20+ sys/user does not include asm/ptrace.h
- # include <asm/ptrace.h>
- #endif
diff --git a/srcpkgs/llvm12/patches/compiler-rt-size_t.patch b/srcpkgs/llvm12/patches/compiler-rt-size_t.patch
deleted file mode 100644
index 2c63063a5e9e..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-size_t.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/compiler-rt/lib/fuzzer/FuzzerInterceptors.cpp.orig
-+++ b/compiler-rt/lib/fuzzer/FuzzerInterceptors.cpp
-@@ -25,6 +25,7 @@
-   }
- 
- #include <cassert>
-+#include <cstddef>
- #include <cstdint>
- #include <dlfcn.h> // for dlsym()
- 
diff --git a/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch b/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
deleted file mode 100644
index d0b61c80c897..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
+++ /dev/null
@@ -1,62 +0,0 @@
---- a/compiler-rt/lib/xray/xray_powerpc64.inc
-+++ b/compiler-rt/lib/xray/xray_powerpc64.inc
-@@ -12,7 +12,13 @@
- 
- #include <cstdint>
- #include <mutex>
-+#ifdef __GLIBC__
- #include <sys/platform/ppc.h>
-+#else
-+#include <cctype>
-+#include <cstring>
-+#include <cstdlib>
-+#endif
- 
- #include "xray_defs.h"
- 
-@@ -20,13 +26,45 @@ namespace __xray {
- 
- ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
-   CPU = 0;
-+#ifdef __GLIBC__
-   return __ppc_get_timebase();
-+#else
-+  return __builtin_ppc_get_timebase();
-+#endif
- }
- 
- inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
-   static std::mutex M;
-   std::lock_guard<std::mutex> Guard(M);
-+#ifdef __GLIBC__
-   return __ppc_get_timebase_freq();
-+#else
-+  /* FIXME: a less dirty implementation? */
-+  static uint64_t base;
-+  if (!base) {
-+    FILE *f = fopen("/proc/cpuinfo", "rb");
-+    if (f) {
-+      ssize_t nr;
-+      /* virtually always big enough to hold the line */
-+      char buf[512];
-+      while (fgets(buf, sizeof(buf), f)) {
-+        char *ret = strstr(buf, "timebase");
-+        if (!ret) {
-+          continue;
-+        }
-+        ret += sizeof("timebase") - 1;
-+        ret = strchr(ret, ':');
-+        if (!ret) {
-+          continue;
-+        }
-+        base = strtoul(ret + 1, nullptr, 10);
-+        break;
-+      }
-+      fclose(f);
-+    }
-+  }
-+  return base;
-+#endif
- }
- 
- inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
diff --git a/srcpkgs/llvm12/patches/libcxx-musl.patch b/srcpkgs/llvm12/patches/libcxx-musl.patch
deleted file mode 100644
index bbd31ffc2cb1..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-musl.patch
+++ /dev/null
@@ -1,26 +0,0 @@
---- a/libcxx/include/locale
-+++ b/libcxx/include/locale
-@@ -742,7 +742,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
-         typename remove_reference<decltype(errno)>::type __save_errno = errno;
-         errno = 0;
-         char *__p2;
-+#if defined(__linux__) && !defined(__GLIBC__)
-+        long long __ll = strtoll(__a, &__p2, __base);
-+#else
-         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
-+#endif
-         typename remove_reference<decltype(errno)>::type __current_errno = errno;
-         if (__current_errno == 0)
-             errno = __save_errno;
-@@ -782,7 +786,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
-         typename remove_reference<decltype(errno)>::type __save_errno = errno;
-         errno = 0;
-         char *__p2;
-+#if defined(__linux__) && !defined(__GLIBC__)
-+        unsigned long long __ll = strtoull(__a, &__p2, __base);
-+#else
-         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
-+#endif
-         typename remove_reference<decltype(errno)>::type __current_errno = errno;
-         if (__current_errno == 0)
-             errno = __save_errno;
diff --git a/srcpkgs/llvm12/patches/libcxx-ppc.patch b/srcpkgs/llvm12/patches/libcxx-ppc.patch
deleted file mode 100644
index 7a92f8004e1c..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-ppc.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-This ensures `is_iec559` is defined correctly under all long double ABIs,
-including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__`
-is not defined on gcc.
-
---- a/libcxx/include/limits
-+++ b/libcxx/include/limits
-@@ -426,8 +426,14 @@ protected:
-     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
-     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
- 
--#if (defined(__ppc__) || defined(__ppc64__))
-+#if defined(__powerpc__) || defined(__powerpc64__)
-+#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__)
-+    /* IEEE 754 quadruple or double precision */
-+    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
-+#else
-+    /* 128-bit IBM double-double */
-     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
-+#endif
- #else
-     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
- #endif
diff --git a/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch b/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
deleted file mode 100644
index 70292beb2fcd..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/libcxx/CMakeLists.txt
-+++ b/libcxx/CMakeLists.txt
-@@ -769,6 +769,8 @@ function(cxx_link_system_libraries target)
-     target_link_libraries(${target} PRIVATE atomic)
-   endif()
- 
-+#ssp  target_link_libraries(${target} PRIVATE ssp_nonshared)
-+
-   if (MINGW)
-     target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
-   endif()
diff --git a/srcpkgs/llvm12/patches/libcxxabi-dl.patch b/srcpkgs/llvm12/patches/libcxxabi-dl.patch
deleted file mode 100644
index 3a15f9db8c98..000000000000
--- a/srcpkgs/llvm12/patches/libcxxabi-dl.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-Also link to -ldl to prevent undefined references.
-
---- a/libcxxabi/src/CMakeLists.txt
-+++ b/libcxxabi/src/CMakeLists.txt
-@@ -73,6 +73,7 @@
-   endif()
- 
-   add_library_flags_if(LIBCXXABI_HAS_C_LIB c)
-+  add_library_flags_if(LIBCXXABI_HAS_C_LIB dl)
- endif()
- 
- if (LIBCXXABI_USE_LLVM_UNWINDER)
---- a/libcxx/CMakeLists.txt
-+++ b/libcxx/CMakeLists.txt
-@@ -745,6 +745,10 @@
-     target_link_libraries(${target} PRIVATE m)
-   endif()
- 
-+  if (LIBCXX_HAS_C_LIB)
-+    target_link_libraries(${target} PRIVATE dl)
-+  endif()
-+
-   if (LIBCXX_HAS_RT_LIB)
-     target_link_libraries(${target} PRIVATE rt)
-   endif()
diff --git a/srcpkgs/llvm12/patches/libunwind-ppc32.patch b/srcpkgs/llvm12/patches/libunwind-ppc32.patch
deleted file mode 100644
index 74aa7576ecf9..000000000000
--- a/srcpkgs/llvm12/patches/libunwind-ppc32.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-This fixes build at least with gcc9 which does not define `__ppc__`.
-
---- a/libunwind/include/__libunwind_config.h
-+++ b/libunwind/include/__libunwind_config.h
-@@ -49,7 +49,7 @@
- #  define _LIBUNWIND_CONTEXT_SIZE 167
- #  define _LIBUNWIND_CURSOR_SIZE 179
- #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64
--# elif defined(__ppc__)
-+# elif defined(__powerpc__)
- #  define _LIBUNWIND_TARGET_PPC 1
- #  define _LIBUNWIND_CONTEXT_SIZE 117
- #  define _LIBUNWIND_CURSOR_SIZE 124
---- a/libunwind/src/UnwindRegistersRestore.S
-+++ b/libunwind/src/UnwindRegistersRestore.S
-@@ -392,7 +392,7 @@ Lnovec:
-   PPC64_LR(3)
-   bctr
- 
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- 
- DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind13Registers_ppc6jumptoEv)
- //
---- a/libunwind/src/UnwindRegistersSave.S
-+++ b/libunwind/src/UnwindRegistersSave.S
-@@ -554,7 +554,7 @@ DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext)
-   blr
- 
- 
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- 
- //
- // extern int unw_getcontext(unw_context_t* thread_state)
---- a/libunwind/src/config.h
-+++ b/libunwind/src/config.h
-@@ -95,12 +95,12 @@
- #define _LIBUNWIND_BUILD_SJLJ_APIS
- #endif
- 
--#if defined(__i386__) || defined(__x86_64__) || defined(__ppc__) || defined(__ppc64__) || defined(__powerpc64__)
-+#if defined(__i386__) || defined(__x86_64__) || defined(__powerpc__) || defined(__powerpc64__)
- #define _LIBUNWIND_SUPPORT_FRAME_APIS
- #endif
- 
- #if defined(__i386__) || defined(__x86_64__) ||                                \
--    defined(__ppc__) || defined(__ppc64__) || defined(__powerpc64__) ||        \
-+    defined(__powerpc__) || defined(__powerpc64__) ||                          \
-     (!defined(__APPLE__) && defined(__arm__)) ||                               \
-     (defined(__arm64__) || defined(__aarch64__)) ||                            \
-     defined(__mips__)
---- a/libunwind/src/libunwind.cpp
-+++ b/libunwind/src/libunwind.cpp
-@@ -42,7 +42,7 @@ _LIBUNWIND_HIDDEN int __unw_init_local(unw_cursor_t *cursor,
- # define REGISTER_KIND Registers_x86_64
- #elif defined(__powerpc64__)
- # define REGISTER_KIND Registers_ppc64
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- # define REGISTER_KIND Registers_ppc
- #elif defined(__aarch64__)
- # define REGISTER_KIND Registers_arm64
diff --git a/srcpkgs/llvm12/patches/lldb-musl.patch b/srcpkgs/llvm12/patches/lldb-musl.patch
deleted file mode 100644
index 601c0d138523..000000000000
--- a/srcpkgs/llvm12/patches/lldb-musl.patch
+++ /dev/null
@@ -1,31 +0,0 @@
---- a/lldb/source/Plugins/Process/Linux/Procfs.h
-+++ b/lldb/source/Plugins/Process/Linux/Procfs.h
-@@ -10,21 +10,12 @@
- // sys/procfs.h on Android/Linux for all supported architectures.
- 
- #include <sys/ptrace.h>
-+#include <asm/ptrace.h>
- 
--#ifdef __ANDROID__
--#if defined(__arm64__) || defined(__aarch64__)
--typedef unsigned long elf_greg_t;
--typedef elf_greg_t
--    elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
--typedef struct user_fpsimd_state elf_fpregset_t;
--#ifndef NT_FPREGSET
--#define NT_FPREGSET NT_PRFPREG
--#endif // NT_FPREGSET
--#elif defined(__mips__)
--#ifndef NT_FPREGSET
--#define NT_FPREGSET NT_PRFPREG
--#endif // NT_FPREGSET
--#endif
--#else // __ANDROID__
-+#if !defined(__GLIBC__) && defined(__powerpc__)
-+#define pt_regs musl_pt_regs
-+#include <sys/procfs.h>
-+#undef pt_regs
-+#else
- #include <sys/procfs.h>
--#endif // __ANDROID__
-+#endif
diff --git a/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch b/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch
deleted file mode 100644
index 8e0a9a779d1b..000000000000
--- a/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-commit ba4ede595ff9599232f5dd2b4384c243137b53fc
-Author: Daniel Kolesa <daniel@octaforge.org>
-Date:   Tue Jun 22 23:40:54 2021 +0200
-
-    enable compiler-rt support for ppc32
-
-diff --git a/compiler-rt/cmake/base-config-ix.cmake b/compiler-rt/cmake/base-config-ix.cmake
-index 1edab43..5c0c8a2 100644
---- a/compiler-rt/cmake/base-config-ix.cmake
-+++ b/compiler-rt/cmake/base-config-ix.cmake
-@@ -182,9 +182,7 @@ macro(test_targets)
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc64le")
-       test_target_arch(powerpc64le "" "-m64")
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc")
--      if(CMAKE_SYSTEM_NAME MATCHES "AIX")
--        test_target_arch(powerpc "" "-m32")
--      endif()
-+      test_target_arch(powerpc "" "-m32")
-       test_target_arch(powerpc64 "" "-m64")
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "s390x")
-       test_target_arch(s390x "" "")
diff --git a/srcpkgs/llvm12/template b/srcpkgs/llvm12/template
index 7ce18028e4a3..7b361bbbf5bc 100644
--- a/srcpkgs/llvm12/template
+++ b/srcpkgs/llvm12/template
@@ -1,25 +1,17 @@
 # Template file for 'llvm12'
 pkgname=llvm12
 version=12.0.1
-revision=2
+revision=3
 wrksrc="llvm-project-${version}.src"
 build_wrksrc=llvm
 build_style=cmake
 configure_args="
  -DCMAKE_BUILD_TYPE=Release -Wno-dev
  -DENABLE_LINKER_BUILD_ID=YES
- -DLLDB_USE_SYSTEM_SIX=YES
- -DLIBCXX_CXX_ABI=libcxxabi
- -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
- -DLIBCXXABI_USE_LLVM_UNWINDER=YES
- -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
- -DLIBOMP_ENABLE_SHARED=YES
- -DLIBOMP_INSTALL_ALIASES=NO
  -DLLVM_INCLUDE_DOCS=YES
  -DLLVM_BUILD_DOCS=YES
  -DLLVM_ENABLE_SPHINX=YES
  -DSPHINX_WARNINGS_AS_ERRORS=NO
- -DLLVM_INSTALL_UTILS=YES
  -DLLVM_BUILD_LLVM_DYLIB=YES
  -DLLVM_LINK_LLVM_DYLIB=YES
  -DLLVM_ENABLE_RTTI=YES
@@ -51,87 +43,10 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
-_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
-
-_lldb_enable=yes
-_libomp_enable=no
-
-case "$XBPS_TARGET_MACHINE" in
-	ppc64le*) ;;
-	ppc*|i686*) _lldb_enable=no ;;
-esac
-
-case "$XBPS_TARGET_MACHINE" in
-	x86_64*|aarch64*|ppc64*) _libomp_enable=yes;;
-esac
-
-subpackages="clang-tools-extra"
-
-# must go before clang
-if [ "$_libomp_enable" = "yes" ]; then
-	_enabled_projects+=";openmp"
-	subpackages+=" libomp libomp-devel"
-	# because of cmake nonsense referencing libomptarget.so.*
-	depends+=" libomp>=${version}_${revision}"
-fi
-
-subpackages+=" clang clang-analyzer libclang libclang-cpp
- llvm-libunwind llvm-libunwind-devel libcxx libcxx-devel
- libcxxabi libcxxabi-devel libllvm12"
-
-if [ "$_lldb_enable" = "yes" ]; then
-	# XXX fails to cross compile due to python
-	_enabled_projects+=";lldb"
-	subpackages+=" lldb lldb-devel"
-fi
-
-subpackages+=" lld lld-devel"
-
-configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
-
 post_patch() {
-	if [ "$_lldb_enable" = "yes" ]; then
-		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
-			vsed -i 's|__ptrace_request|int|g' \
-				${wrksrc}/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
-		fi
-		# disable docs for lldb as they fail to generate
-		vsed -i '/add_subdirectory(docs)/d' \
-			${wrksrc}/lldb/CMakeLists.txt
-	fi
-
 	# update config.guess for better platform detection
 	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
 		${wrksrc}/llvm/cmake
-
-	# fix linker failures on some archs
-	vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
-		${wrksrc}/libcxxabi/cmake/config-ix.cmake
-	vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
-		${wrksrc}/libcxxabi/cmake/config-ix.cmake
-
-	# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
-	case "$XBPS_TARGET_MACHINE" in
-		ppc64*) ;;
-		ppc*-musl|i686-musl|mips*-musl)
-			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
-				${wrksrc}/libunwind/src/CMakeLists.txt
-			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
-				${wrksrc}/libcxxabi/src/CMakeLists.txt
-			vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
-			;;
-	esac
-
-	case "$XBPS_TARGET_MACHINE" in
-		x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
-			vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
-				${wrksrc}/compiler-rt/CMakeLists.txt
-			;;
-		arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
-			vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
-				${wrksrc}/compiler-rt/cmake/config-ix.cmake
-			;;
-	esac
 }
 
 pre_configure() {
@@ -158,10 +73,8 @@ pre_configure() {
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
 			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
 		make ${makejobs} -C utils/TableGen
-		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
 		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
-		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
 		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
 		cd ../..
 	fi
@@ -202,218 +115,6 @@ do_install() {
 	if [ "$CROSS_BUILD" ]; then
 		rm -f ${DESTDIR}/usr/bin/llvm-config-host
 	fi
-
-	# Install libcxxabi headers
-	vinstall ${wrksrc}/libcxxabi/include/__cxxabi_config.h 644 usr/include
-	vinstall ${wrksrc}/libcxxabi/include/cxxabi.h 644 usr/include
-
-	# Install libunwind headers
-	vinstall ${wrksrc}/libunwind/include/__libunwind_config.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/libunwind.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/unwind.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/mach-o/compact_unwind_encoding.h \
-		644 usr/include/mach-o
-}
-
-clang-analyzer_package() {
-	pycompile_dirs="usr/share/scan-view"
-	depends="clang-${version}_${revision} python3 perl"
-	short_desc+=" - A source code analysis framework"
-	homepage="https://clang-analyzer.llvm.org/"
-	pkg_install() {
-		vmove usr/share/man/man1/scan-build.1
-		vmove "/usr/bin/scan-*"
-		vmove "/usr/share/scan-*"
-		vmove "/usr/libexec/*analyzer"
-	}
-}
-
-clang-tools-extra_package() {
-	lib32disabled=yes
-	depends="clang-${version}_${revision} python3"
-	short_desc+=" - Extra Clang tools"
-	homepage="https://clang.llvm.org/extra/"
-	pkg_install() {
-		vmove usr/include/clang-tidy
-		vmove usr/bin/clang-apply-replacements
-		vmove usr/bin/clang-query
-		vmove usr/bin/clang-rename
-		vmove usr/bin/clang-tidy
-		vmove usr/bin/diagtool
-		vmove usr/bin/find-all-symbols
-		vmove usr/bin/hmaptool
-		vmove usr/bin/modularize
-		vmove usr/bin/pp-trace
-		vmove usr/bin/sancov
-		vmove "usr/lib/libclangApplyReplacements*"
-		vmove "usr/lib/libclangQuery*"
-		vmove "usr/lib/libclangTidy*"
-		vmove "usr/share/clang/*tidy*"
-		vmove usr/share/doc/clang-tools
-		vmove usr/share/man/man1/extraclangtools.1
-		vmove usr/share/man/man1/diagtool.1
-	}
-}
-
-clang_package() {
-	lib32disabled=yes
-	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
-	 libclang-${version}_${revision}"
-	short_desc+=" - C language family frontend"
-	homepage="https://clang.llvm.org/"
-	pkg_install() {
-		vmove usr/include/clang
-		vmove usr/include/clang-c
-		vmove "usr/bin/*clang*"
-		vmove usr/bin/c-index-test
-		vmove usr/lib/clang
-		vmove usr/lib/cmake/clang
-		vmove "usr/lib/libclang*.a"
-		vmove "usr/lib/libclang*.so"
-		vmove usr/share/clang
-		vmove usr/share/doc/clang
-		vmove usr/share/man/man1/clang.1
-	}
-}
-
-libclang_package() {
-	short_desc+=" - C frontend runtime library"
-	pkg_install() {
-		vmove "usr/lib/libclang.so.*"
-	}
-}
-
-libclang-cpp_package() {
-	short_desc+=" - C frontend runtime library (C++ interface)"
-	pkg_install() {
-		vmove "usr/lib/libclang-cpp.so.*"
-	}
-}
-
-lld_package() {
-	lib32disabled=yes
-	short_desc+=" - linker"
-	homepage="https://lld.llvm.org"
-	pkg_install() {
-		vmove usr/bin/lld*
-		vmove usr/bin/wasm-ld
-		vmove usr/bin/ld.lld*
-		vmove usr/bin/ld64.lld*
-		vmove usr/share/doc/lld
-	}
-}
-
-lld-devel_package() {
-	lib32disabled=yes
-	short_desc+=" - linker - development files"
-	homepage="https://lld.llvm.org"
-	depends="lld>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/include/lld
-		vmove usr/lib/cmake/lld
-		vmove "usr/lib/liblld*a"
-	}
-}
-
-lldb_package() {
-	lib32disabled=yes
-	depends+=" python3-six"
-	short_desc+=" - LLDB debugger"
-	homepage="https://lldb.llvm.org/"
-	pkg_install() {
-		vmove usr/bin/*lldb*
-		vmove usr/lib/liblldb*so.*
-		vmove /usr/lib/python*
-	}
-}
-
-lldb-devel_package() {
-	lib32disabled=yes
-	depends="lldb>=${version}_${revision}"
-	short_desc+=" - LLDB debugger - development files"
-	pkg_install() {
-		vmove usr/include/lldb
-		vmove "usr/lib/liblldb*.so"
-	}
-}
-
-llvm-libunwind_package() {
-	short_desc+=" - libunwind"
-	pkg_install() {
-		vmove "usr/lib/libunwind.so.*"
-	}
-}
-
-llvm-libunwind-devel_package() {
-	short_desc+=" - libunwind - development files"
-	depends="llvm-libunwind>=${version}_${revision}"
-	conflicts="libunwind-devel>=0"
-	pkg_install() {
-		vmove usr/lib/libunwind.so
-		vmove usr/lib/libunwind.a
-		vmove "usr/include/*unwind*"
-		vmove usr/include/mach-o
-		vmove usr/share/doc/libunwind
-	}
-}
-
-libcxxabi_package() {
-	short_desc+=" - low level support for libc++"
-	pkg_install() {
-		vmove "usr/lib/libc++abi.so.*"
-	}
-}
-
-libcxxabi-devel_package() {
-	short_desc+=" - low level support for libc++ - development files"
-	depends="libcxxabi>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/lib/libc++abi.so
-		vmove usr/lib/libc++abi.a
-		vmove "usr/include/*cxxabi*"
-	}
-}
-
-libcxx_package() {
-	short_desc+=" - C++ standard library"
-	pkg_install() {
-		vmove "usr/lib/libc++.so.*"
-	}
-}
-
-libcxx-devel_package() {
-	short_desc+=" - C++ standard library - development files"
-	depends="libcxx>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/lib/libc++.so
-		vmove usr/lib/libc++.a
-		vmove usr/lib/libc++experimental.a
-		vmove usr/include/c++
-		vmove usr/share/doc/libcxx
-	}
-}
-
-libomp_package() {
-	short_desc+=" - Clang OpenMP support library"
-	pkg_install() {
-		vmove usr/lib/libomp.so
-		vmove "usr/lib/libomptarget.rtl.*.so"
-		vmove usr/lib/libarcher.so
-		vmove "usr/lib/libomp*.so.*"
-	}
-}
-
-libomp-devel_package() {
-	short_desc+=" - Clang OpenMP support library - development files"
-	depends="libomp>=${version}_${revision}"
-	pkg_install() {
-		vmove "usr/lib/libomp*.so"
-		vmove "usr/lib/libarcher*"
-		vmove "usr/include/omp*.h"
-		vmove "usr/lib/clang/${version}/include/omp*.h"
-		vmove usr/share/man/man1/llvmopenmp.1
-		vmove usr/share/doc/openmp
-	}
 }
 
 libllvm12_package() {

From 7c9022bb1271fa68b24f4608f2665acac4618adb Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 04/25] chromium: update for llvm14

---
 srcpkgs/chromium/template | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/srcpkgs/chromium/template b/srcpkgs/chromium/template
index 0dce8772fdb8..8b604a349229 100644
--- a/srcpkgs/chromium/template
+++ b/srcpkgs/chromium/template
@@ -2,7 +2,7 @@
 pkgname=chromium
 # See https://chromiumdash.appspot.com/releases?platform=Linux for the latest version
 version=101.0.4951.41
-revision=1
+revision=2
 archs="i686* x86_64* aarch64* armv7l* ppc64le*"
 short_desc="Google's attempt at creating a safer, faster, and more stable browser"
 maintainer="Duncaen <duncaen@voidlinux.org>"
@@ -20,7 +20,7 @@ desc_option_debug="Build with debug symbols"
 desc_option_js_optimize="Optimize the JS used for Chromium's UI"
 desc_option_pipewire="Enable support for screen sharing for WebRTC via PipeWire"
 
-hostmakedepends="$(vopt_if clang "clang lld llvm12") python python3 pkgconf perl gperf bison ninja nodejs hwids
+hostmakedepends="$(vopt_if clang "clang lld llvm14") python python3 pkgconf perl gperf bison ninja nodejs hwids
  libatomic-devel libevent-devel libglib-devel $(vopt_if js_optimize openjdk) wayland-devel libepoxy-devel"
 makedepends="libpng-devel gtk+-devel gtk+3-devel nss-devel pciutils-devel
  libXi-devel libgcrypt-devel libgnome-keyring-devel cups-devel elfutils-devel
@@ -266,12 +266,6 @@ do_configure() {
 		'disable_fieldtrial_testing_config=true'
 
 		'is_official_build=true'
-
-		# segfaults with llvm-12.0.1
-		'is_cfi=false'
-		'use_thin_lto=false'
-		'use_cfi_icall=false'
-		'chrome_pgo_phase=0'
 	)
 
 	if [ "$CROSS_BUILD" ]; then

From 1b7a3aaf8207ce5711b414557f56a43e7b572acf Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 05/25] ghdl: update for llvm14

---
 srcpkgs/ghdl/patches/{llvm12.patch => llvm.patch} | 2 ++
 srcpkgs/ghdl/template                             | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)
 rename srcpkgs/ghdl/patches/{llvm12.patch => llvm.patch} (82%)

diff --git a/srcpkgs/ghdl/patches/llvm12.patch b/srcpkgs/ghdl/patches/llvm.patch
similarity index 82%
rename from srcpkgs/ghdl/patches/llvm12.patch
rename to srcpkgs/ghdl/patches/llvm.patch
index 8d2f76bfda06..9201816ae053 100644
--- a/srcpkgs/ghdl/patches/llvm12.patch
+++ b/srcpkgs/ghdl/patches/llvm.patch
@@ -7,6 +7,8 @@ index c1c1a6d..dad7c38 100755
         check_version 10.0 $llvm_version ||
         check_version 11.0 $llvm_version ||
 +       check_version 12.0 $llvm_version ||
++       check_version 13.0 $llvm_version ||
++       check_version 14.0 $llvm_version ||
         false; then
      echo "Debugging is enabled with llvm $llvm_version"
    else
diff --git a/srcpkgs/ghdl/template b/srcpkgs/ghdl/template
index e756d8c3cd87..9ca1169b22bd 100644
--- a/srcpkgs/ghdl/template
+++ b/srcpkgs/ghdl/template
@@ -7,7 +7,7 @@
 pkgname=ghdl
 reverts="20181129_1"
 version=1.0.0
-revision=1
+revision=2
 build_style=configure
 configure_args="--prefix=/usr --srcdir=.. --incdir=lib/ghdl/include"
 makedepends="zlib-devel"

From 48dfac4f244a5e54acc74115e28bb204c857e0ef Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 06/25] qt5: rebuild for llvm14

---
 srcpkgs/qt5/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index ee788fad2019..25f15583a42d 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -3,7 +3,7 @@ pkgname=qt5
 version=5.15.3+20220222
 # commit fcca82ca40a5d8a02a4ddd90846d070f2c58cfad
 # base repo: https://invent.kde.org/qt/qt/qt5
-revision=3
+revision=4
 build_style=meta
 hostmakedepends="cmake clang flex perl glib-devel pkg-config
  python re2c ruby which"

From 53294cbe5b85fbb9fdfda2fe2e713376744eb13a Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 07/25] tilix: rebuild for llvm14

---
 srcpkgs/tilix/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/tilix/template b/srcpkgs/tilix/template
index d8f014bc78c5..ac1bf7dd3bdd 100644
--- a/srcpkgs/tilix/template
+++ b/srcpkgs/tilix/template
@@ -1,7 +1,7 @@
 # Template file for 'tilix'
 pkgname=tilix
 version=1.9.4
-revision=3
+revision=4
 build_style=meson
 configure_args="-Db_lto=false"
 hostmakedepends="automake gettext-devel gdk-pixbuf glib-devel ldc po4a pkg-config

From eba71ea7547082828850474586266c9e2f6523cd Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 08/25] shiboken2: rebuild for llvm14

---
 srcpkgs/shiboken2/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/shiboken2/template b/srcpkgs/shiboken2/template
index b56613229c13..ab9d2c4cb8f9 100644
--- a/srcpkgs/shiboken2/template
+++ b/srcpkgs/shiboken2/template
@@ -1,7 +1,7 @@
 # Template file for 'shiboken2'
 pkgname=shiboken2
 version=5.15.2
-revision=4
+revision=5
 _pkgname="pyside-setup-opensource-src-${version}"
 wrksrc="${_pkgname/%5.14.2.1/5.14.2}"
 build_wrksrc="sources/shiboken2"

From 01f31250553d7e635d0f7228fd177a6e7aea0dbf Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 09/25] gnome-builder: rebuild for llvm14

---
 srcpkgs/gnome-builder/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/gnome-builder/template b/srcpkgs/gnome-builder/template
index 93559b21774f..5a5a51893ae8 100644
--- a/srcpkgs/gnome-builder/template
+++ b/srcpkgs/gnome-builder/template
@@ -1,7 +1,7 @@
 # Template file for 'gnome-builder'
 pkgname=gnome-builder
 version=41.3
-revision=1
+revision=2
 build_style=meson
 build_helper=qemu
 configure_args="-Dhelp=true -Dnetwork_tests=false"

From 56344602f96339444bfa7d8b6e9669036bf6ff22 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 10/25] bcc: rebuild for llvm14

---
 srcpkgs/bcc/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/bcc/template b/srcpkgs/bcc/template
index 54509b63d5a7..2cfa0a2977d0 100644
--- a/srcpkgs/bcc/template
+++ b/srcpkgs/bcc/template
@@ -1,7 +1,7 @@
 # Template file for 'bcc'
 pkgname=bcc
 version=0.24.0
-revision=1
+revision=2
 wrksrc="bcc"
 build_style=cmake
 configure_args="-DREVISION=${version} -DENABLE_LLVM_SHARED=1"

From 0f97631f352be89708a51b386d4c8ad81d0e86dd Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 11/25] mesa: rebuild for llvm14

---
 srcpkgs/mesa/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/mesa/template b/srcpkgs/mesa/template
index c90500de7416..8f08262fb135 100644
--- a/srcpkgs/mesa/template
+++ b/srcpkgs/mesa/template
@@ -1,7 +1,7 @@
 # Template file for 'mesa'
 pkgname=mesa
 version=21.3.7
-revision=1
+revision=2
 build_style=meson
 configure_args="-Dglvnd=true -Dshared-glapi=enabled -Dgbm=enabled -Degl=enabled
  -Dosmesa=true -Dgles1=enabled -Dgles2=enabled -Dglx=dri -Ddri3=enabled

From 7447ccbe3db14ae2be3619035ecb18ffe354e836 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 12/25] juCi++: rebuild for llvm14

---
 srcpkgs/juCi++/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/juCi++/template b/srcpkgs/juCi++/template
index 1a7604b44a00..5103324dec20 100644
--- a/srcpkgs/juCi++/template
+++ b/srcpkgs/juCi++/template
@@ -1,7 +1,7 @@
 # Template file for 'juCi++'
 pkgname=juCi++
 version=1.6.2
-revision=2
+revision=3
 _libclangmm_commit="b342f4dd6de4fe509a692a4b4fcfc7e24aae9590"
 _tiny_commit="c9c8bf810ddad8cd17882b9a9ee628a690e779f5"
 wrksrc="jucipp-v${version}"

From 9592b01322c02830a70c25e68cdb3882e43e9cb3 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 13/25] kdevelop: rebuild for llvm14

---
 srcpkgs/kdevelop/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/kdevelop/template b/srcpkgs/kdevelop/template
index 010185849d80..abf08c313071 100644
--- a/srcpkgs/kdevelop/template
+++ b/srcpkgs/kdevelop/template
@@ -1,7 +1,7 @@
 # Template file for 'kdevelop'
 pkgname=kdevelop
 version=21.12.3
-revision=1
+revision=2
 build_style=cmake
 configure_args="-DBUILD_TESTING=OFF"
 hostmakedepends="extra-cmake-modules qt5-qmake qt5-host-tools qt5-tools

From c369bc0a551cae932ad9090fc636f1cb947c4d90 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 14/25] codelite: rebuild for llvm14

---
 srcpkgs/codelite/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/codelite/template b/srcpkgs/codelite/template
index 3a993a2c0cfb..24e2c879dd45 100644
--- a/srcpkgs/codelite/template
+++ b/srcpkgs/codelite/template
@@ -1,7 +1,7 @@
 # Template file for 'codelite'
 pkgname=codelite
 version=15.0.6
-revision=1
+revision=2
 build_style=cmake
 build_helper=cmake-wxWidgets-gtk3
 configure_args="-DWITH_PCH=0 -DWITH_WX_CONFIG=wx-config-gtk3

From 1e3ec21e3e57bf89d1ce90ca7ee92653e6a6eb81 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 15/25] ccls: rebuild for llvm14

---
 srcpkgs/ccls/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/ccls/template b/srcpkgs/ccls/template
index fbb7c6847bc1..40aba3b55bfe 100644
--- a/srcpkgs/ccls/template
+++ b/srcpkgs/ccls/template
@@ -1,7 +1,7 @@
 # Template file for 'ccls'
 pkgname=ccls
 version=0.20210330
-revision=2
+revision=3
 build_style=cmake
 hostmakedepends="clang-tools-extra"
 makedepends="llvm ncurses-devel rapidjson zlib-devel clang-tools-extra"

From 75e8f23c0ff608d82c08e42d961fec261dd434e9 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 16/25] clazy: rebuild for llvm14

---
 srcpkgs/clazy/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/clazy/template b/srcpkgs/clazy/template
index 11f3bab55aef..f81de08ab836 100644
--- a/srcpkgs/clazy/template
+++ b/srcpkgs/clazy/template
@@ -1,7 +1,7 @@
 # Template file for 'clazy'
 pkgname=clazy
 version=1.11
-revision=1
+revision=2
 build_style=cmake
 build_helper=qemu
 hostmakedepends="llvm"

From 3199aae70c0b5099058505a55993295e6609d3fb Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 17/25] bpftrace: rebuild for llvm14

---
 srcpkgs/bpftrace/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/bpftrace/template b/srcpkgs/bpftrace/template
index 28ab3c626399..eb2480d2230e 100644
--- a/srcpkgs/bpftrace/template
+++ b/srcpkgs/bpftrace/template
@@ -1,7 +1,7 @@
 # Template file for 'bpftrace'
 pkgname=bpftrace
 version=0.14.1
-revision=1
+revision=2
 archs="x86_64* aarch64* ppc64*"
 build_style=cmake
 configure_args="-DBUILD_TESTING=OFF"  # needs root to run

From d7132dcc43dab1b4bc22231387e5ae6dfe95d8db Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 18/25] rtags: rebuild for llvm14

---
 srcpkgs/rtags/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/rtags/template b/srcpkgs/rtags/template
index b496a1b0e721..9b161e690d76 100644
--- a/srcpkgs/rtags/template
+++ b/srcpkgs/rtags/template
@@ -1,7 +1,7 @@
 # Template file for 'rtags'
 pkgname=rtags
 version=2.38
-revision=5
+revision=6
 build_style=cmake
 # Don't run tests in do_install, please.
 configure_args="-DSKIP_CTEST=TRUE"

From 04a9e53d7a15745352b24063ad69293436478912 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:07:19 +0200
Subject: [PATCH 19/25] beignet: remove package

---
 srcpkgs/beignet/patches/cl_uint.patch         |  22 -
 ...419a0008e38ef2d9d255d9e9c74e9fba084b.patch | 134 ---
 srcpkgs/beignet/patches/llvm06.patch          |  33 -
 srcpkgs/beignet/patches/llvm08.patch          |  56 --
 srcpkgs/beignet/patches/llvm09.patch          | 111 ---
 srcpkgs/beignet/patches/llvm10.patch          | 347 -------
 srcpkgs/beignet/patches/llvm11.patch          | 937 ------------------
 srcpkgs/beignet/patches/llvm12.patch          | 115 ---
 srcpkgs/beignet/patches/musl.patch            |  11 -
 srcpkgs/beignet/template                      |  22 -
 srcpkgs/beignet/update                        |   1 -
 srcpkgs/removed-packages/template             |   3 +-
 12 files changed, 2 insertions(+), 1790 deletions(-)
 delete mode 100644 srcpkgs/beignet/patches/cl_uint.patch
 delete mode 100644 srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm06.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm08.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm09.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm10.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm11.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm12.patch
 delete mode 100644 srcpkgs/beignet/patches/musl.patch
 delete mode 100644 srcpkgs/beignet/template
 delete mode 100644 srcpkgs/beignet/update

diff --git a/srcpkgs/beignet/patches/cl_uint.patch b/srcpkgs/beignet/patches/cl_uint.patch
deleted file mode 100644
index 86ba00f04e95..000000000000
--- a/srcpkgs/beignet/patches/cl_uint.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/src/cl_api_kernel.c	2017-09-22 10:05:22.000000000 +0200
-+++ b/src/cl_api_kernel.c	2020-03-24 18:27:40.186485887 +0100
-@@ -151,7 +151,7 @@
-         fixed_local_sz[0] = 16;
-         fixed_local_sz[1] = 1;
-       } else {
--        uint j, maxDimSize = 64 /* from 64? */, maxGroupSize = 256; //MAX_WORK_GROUP_SIZE may too large
-+        cl_uint j, maxDimSize = 64 /* from 64? */, maxGroupSize = 256; //MAX_WORK_GROUP_SIZE may too large
-         size_t realGroupSize = 1;
-         for (i = 0; i < work_dim; i++) {
-           for (j = maxDimSize; j > 1; j--) {
---- a/src/cl_enqueue.c	2017-09-22 10:05:22.000000000 +0200
-+++ b/src/cl_enqueue.c	2020-03-24 18:30:12.031479833 +0100
-@@ -494,7 +494,7 @@
- cl_int cl_enqueue_svm_free(enqueue_data *data, cl_int status) {
-   int i;
-   void **pointers = data->pointers;
--  uint num_svm_ptrs = data->size;
-+  cl_uint num_svm_ptrs = data->size;
-   cl_int err = CL_SUCCESS;
- 
-   if (status != CL_COMPLETE)
diff --git a/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch b/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
deleted file mode 100644
index 8de9e6e2f093..000000000000
--- a/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
+++ /dev/null
@@ -1,134 +0,0 @@
-From e1b2419a0008e38ef2d9d255d9e9c74e9fba084b Mon Sep 17 00:00:00 2001
-From: "Rebecca N. Palmer" <rebecca_palmer@zoho.com>
-Date: Sat, 21 Jul 2018 20:05:54 +0100
-Subject: Add preliminary LLVM 7 support
-
-This is preliminary because LLVM 7 has not been released yet:
-it was tested with the snapshot from Debian experimental (svn336894).
-
-1.Change linking order, as clangCodeGen now links to clangFrontend
-2.Pass references not pointers to WriteBitcodeToFile and CloneModule
-3.Add the headers that LoopSimplifyID, LCSSAID and
-some create*Pass have moved to
-4.Define our DEBUG whether or not we just undefined LLVM's
-(theirs is now LLVM_DEBUG, but we never actually use it)
-
-Signed-off-by: Rebecca N. Palmer <rebecca_palmer@zoho.com>
-Reviewed-by: Yang Rong <rong.r.yang@intel.com>
----
- CMake/FindLLVM.cmake                     | 2 +-
- backend/src/backend/gen_program.cpp      | 8 ++++++++
- backend/src/backend/program.cpp          | 4 ++++
- backend/src/llvm/ExpandLargeIntegers.cpp | 2 +-
- backend/src/llvm/llvm_bitcode_link.cpp   | 4 ++++
- backend/src/llvm/llvm_includes.hpp       | 4 ++++
- 6 files changed, 22 insertions(+), 2 deletions(-)
-
-diff --git a/CMake/FindLLVM.cmake b/CMake/FindLLVM.cmake
-index 5457f24..f882589 100644
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -113,10 +113,10 @@ macro(add_one_lib name)
- endmacro()
- 
- #Assume clang lib path same as llvm lib path
-+add_one_lib("clangCodeGen")
- add_one_lib("clangFrontend")
- add_one_lib("clangSerialization")
- add_one_lib("clangDriver")
--add_one_lib("clangCodeGen")
- add_one_lib("clangSema")
- add_one_lib("clangStaticAnalyzerFrontend")
- add_one_lib("clangStaticAnalyzerCheckers")
-diff --git a/backend/src/backend/gen_program.cpp b/backend/src/backend/gen_program.cpp
-index 274c99c..4159234 100644
---- a/backend/src/backend/gen_program.cpp
-+++ b/backend/src/backend/gen_program.cpp
-@@ -454,7 +454,11 @@ namespace gbe {
- #ifdef GBE_COMPILER_AVAILABLE
-       std::string str;
-       llvm::raw_string_ostream OS(str);
-+#if LLVM_VERSION_MAJOR >= 7
-+      llvm::WriteBitcodeToFile(*((llvm::Module*)prog->module), OS);
-+#else
-       llvm::WriteBitcodeToFile((llvm::Module*)prog->module, OS);
-+#endif
-       std::string& bin_str = OS.str();
-       int llsz = bin_str.size();
-       *binary = (char *)malloc(sizeof(char) * (llsz+1) );
-@@ -545,7 +549,11 @@ namespace gbe {
-                                     &modRef);
-         src = llvm::unwrap(modRef);
-       }
-+#if LLVM_VERSION_MAJOR >= 7
-+      llvm::Module* clone = llvm::CloneModule(*src).release();
-+#else
-       llvm::Module* clone = llvm::CloneModule(src).release();
-+#endif
-       if (LLVMLinkModules2(wrap(dst), wrap(clone))) {
- #elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-       if (LLVMLinkModules(wrap(dst), wrap(src), LLVMLinkerPreserveSource_Removed, &errMsg)) {
-diff --git a/backend/src/backend/program.cpp b/backend/src/backend/program.cpp
-index c37c595..b36f7b4 100644
---- a/backend/src/backend/program.cpp
-+++ b/backend/src/backend/program.cpp
-@@ -794,7 +794,11 @@ namespace gbe {
-       llvm::raw_fd_ostream ostream (dumpSPIRBinaryName.c_str(),
-                                     err, llvm::sys::fs::F_None);
-       if (!err)
-+#if LLVM_VERSION_MAJOR<7
-         llvm::WriteBitcodeToFile(*out_module, ostream);
-+#else
-+        llvm::WriteBitcodeToFile(**out_module, ostream);
-+#endif
-     }
- #endif
-     return true;
-diff --git a/backend/src/llvm/ExpandLargeIntegers.cpp b/backend/src/llvm/ExpandLargeIntegers.cpp
-index 8515dc1..4aec44e 100644
---- a/backend/src/llvm/ExpandLargeIntegers.cpp
-+++ b/backend/src/llvm/ExpandLargeIntegers.cpp
-@@ -99,8 +99,8 @@ using namespace llvm;
- 
- #ifdef DEBUG
-   #undef DEBUG
--  #define DEBUG(...)
- #endif
-+#define DEBUG(...)
- // Break instructions up into no larger than 64-bit chunks.
- static const unsigned kChunkBits = 64;
- static const unsigned kChunkBytes = kChunkBits / CHAR_BIT;
-diff --git a/backend/src/llvm/llvm_bitcode_link.cpp b/backend/src/llvm/llvm_bitcode_link.cpp
-index ef56e4c..4c3e20e 100644
---- a/backend/src/llvm/llvm_bitcode_link.cpp
-+++ b/backend/src/llvm/llvm_bitcode_link.cpp
-@@ -340,7 +340,11 @@ namespace gbe
-     /* We use beignet's bitcode as dst because it will have a lot of
-        lazy functions which will not be loaded. */
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 39
-+#if LLVM_VERSION_MAJOR >= 7
-+    llvm::Module * linked_module = llvm::CloneModule(*(llvm::Module*)mod).release();
-+#else
-     llvm::Module * linked_module = llvm::CloneModule((llvm::Module*)mod).release();
-+#endif
-     if(LLVMLinkModules2(wrap(clonedLib), wrap(linked_module))) {
- #else
-     char* errorMsg;
-diff --git a/backend/src/llvm/llvm_includes.hpp b/backend/src/llvm/llvm_includes.hpp
-index 184553a..ffccf02 100644
---- a/backend/src/llvm/llvm_includes.hpp
-+++ b/backend/src/llvm/llvm_includes.hpp
-@@ -89,6 +89,10 @@
- #include "llvm/CodeGen/IntrinsicLowering.h"
- 
- #include "llvm/Transforms/Scalar.h"
-+#if LLVM_VERSION_MAJOR >= 7
-+#include "llvm/Transforms/Utils.h"
-+#include "llvm/Transforms/InstCombine/InstCombine.h"
-+#endif
- #include "llvm/MC/MCAsmInfo.h"
- #include "llvm/MC/MCContext.h"
- #include "llvm/MC/MCInstrInfo.h"
--- 
-cgit v1.1
-
diff --git a/srcpkgs/beignet/patches/llvm06.patch b/srcpkgs/beignet/patches/llvm06.patch
deleted file mode 100644
index 3389e66c82df..000000000000
--- a/srcpkgs/beignet/patches/llvm06.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-Source: Arch Linux
-Upstream: unknown
-Reason: fixes llvm6 compilation
-
---- a/backend/src/llvm/llvm_to_gen.cpp	2017-10-24 09:04:48.000000000 +0300
-+++ b/backend/src/llvm/llvm_to_gen.cpp	2018-03-16 16:08:54.669963824 +0200
-@@ -322,7 +322,11 @@ namespace gbe
-     DataLayout DL(&mod);
-     
-     gbeDiagnosticContext dc;
-+#if LLVM_VERSION_MAJOR >= 6
-+    mod.getContext().setDiagnosticHandlerCallBack(&gbeDiagnosticHandler,&dc);
-+#else
-     mod.getContext().setDiagnosticHandler(&gbeDiagnosticHandler,&dc);
-+#endif
- 
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-     mod.setDataLayout(DL);
---- a/backend/src/llvm/llvm_unroll.cpp	2017-10-24 09:04:48.000000000 +0300
-+++ b/backend/src/llvm/llvm_unroll.cpp	2018-03-16 16:09:47.736403557 +0200
-@@ -205,7 +205,9 @@ namespace gbe {
-           if (parentTripCount != 0 && currTripCount * parentTripCount > 32) {
-             //Don't change the unrollID if doesn't force unroll.
-             //setUnrollID(parentL, false);
--#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-+#if LLVM_VERSION_MAJOR >= 6
-+            loopInfo.erase(parentL);
-+#elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-             loopInfo.markAsRemoved(parentL);
- #else
-             LPM.deleteLoopFromQueue(parentL);
-Only in Beignet-1.3.2-Source: build
-
diff --git a/srcpkgs/beignet/patches/llvm08.patch b/srcpkgs/beignet/patches/llvm08.patch
deleted file mode 100644
index a0c5e7a7c4f7..000000000000
--- a/srcpkgs/beignet/patches/llvm08.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 75c152599a7c1739e6dadcdb9b377acf7e44d9cf Mon Sep 17 00:00:00 2001
-From: Jan Beich <jbeich@FreeBSD.org>
-Date: Wed, 30 Jan 2019 12:42:34 +0000
-Subject: [PATCH] lang/beignet: unbreak with llvm80
-
-Regressed by https://github.com/llvm/llvm-project/commit/721d95713a9e
-
-unable to load /usr/local/lib/beignet//libgbeinterp.so which is part of the driver, please check!
-ld-elf.so.1: /usr/local/lib/beignet//libgbeinterp.so: Undefined symbol "_ZN4llvm24DisableABIBreakingChecksE"
-
-Regressed by https://github.com/llvm/llvm-project/commit/4a2d58e16acc
-
-backend/src/llvm/llvm_gen_backend.cpp:3076:5: error:
-      unknown type name 'TerminatorInst'
-    TerminatorInst *term = bb->getTerminator();
-    ^
-backend/src/llvm/llvm_gen_backend.cpp:3083:5: error:
-      unknown type name 'TerminatorInst'
-    TerminatorInst *term = bb->getTerminator();
-    ^
-
---- a/backend/src/CMakeLists.txt	2017-09-22 08:05:22 UTC
-+++ b/backend/src/CMakeLists.txt
-@@ -168,6 +168,7 @@ add_dependencies(gbe beignet_bitcode)
- endif (NOT (USE_STANDALONE_GBE_COMPILER STREQUAL "true"))
- 
- add_library(gbeinterp SHARED gbe_bin_interpreter.cpp)
-+target_link_libraries(gbeinterp ${LLVM_MODULE_LIBS})
- 
- if (LLVM_VERSION_NODOT VERSION_EQUAL 34)
-   find_library(TERMINFO NAMES tinfo ncurses)
---- a/backend/src/llvm/llvm_gen_backend.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -3073,14 +3073,22 @@ namespace gbe
- 
- 
-   static unsigned getChildNo(BasicBlock *bb) {
-+#if LLVM_VERSION_MAJOR < 8
-     TerminatorInst *term = bb->getTerminator();
-+#else
-+    Instruction *term = bb->getTerminator();
-+#endif
-     return term->getNumSuccessors();
-   }
- 
-   // return NULL if index out-range of children number
-   static BasicBlock *getChildPossible(BasicBlock *bb, unsigned index) {
- 
-+#if LLVM_VERSION_MAJOR < 8
-     TerminatorInst *term = bb->getTerminator();
-+#else
-+    Instruction *term = bb->getTerminator();
-+#endif
-     unsigned childNo = term->getNumSuccessors();
-     BasicBlock *child = NULL;
-     if(index < childNo) {
diff --git a/srcpkgs/beignet/patches/llvm09.patch b/srcpkgs/beignet/patches/llvm09.patch
deleted file mode 100644
index acaeceabb6dd..000000000000
--- a/srcpkgs/beignet/patches/llvm09.patch
+++ /dev/null
@@ -1,111 +0,0 @@
-Source: FreeBSD + q66
-
-Mostly FreeBSD other than FindLLVM.cmake changes.
-Linking against clang-cpp does not work for us.
-
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -140,6 +140,7 @@ add_one_lib("clangStaticAnalyzerCore")
- add_one_lib("clangAnalysis")
- add_one_lib("clangEdit")
- add_one_lib("clangAST")
-+add_one_lib("clangASTMatchers")
- add_one_lib("clangParse")
- add_one_lib("clangSema")
- add_one_lib("clangLex")
---- a/backend/src/llvm/llvm_intrinsic_lowering.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_intrinsic_lowering.cpp
-@@ -77,7 +77,11 @@ namespace gbe {
-         std::vector<Type *> ParamTys;
-         for (Value** I = ArgBegin; I != ArgEnd; ++I)
-           ParamTys.push_back((*I)->getType());
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+        FunctionCallee FCache = M->getOrInsertFunction(NewFn,
-+#else
-         Constant* FCache = M->getOrInsertFunction(NewFn,
-+#endif
-                                         FunctionType::get(RetTy, ParamTys, false));
- 
-         IRBuilder<> Builder(CI->getParent(), BasicBlock::iterator(CI));
---- a/backend/src/llvm/llvm_sampler_fix.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp
-@@ -82,7 +82,11 @@ namespace gbe {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-           Module *M = I->getParent()->getParent()->getParent();
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+          FunctionCallee samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#endif
- #else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType(), nullptr);
- #endif
-@@ -124,7 +128,11 @@ namespace gbe {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-           Module *M = I->getParent()->getParent()->getParent();
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+          FunctionCallee samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#endif
- #else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType(), nullptr);
- #endif
---- a/backend/src/llvm/llvm_profiling.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_profiling.cpp
-@@ -163,10 +163,18 @@ namespace gbe
-       // __gen_ocl_store_timestamp(int nth, int type);
-       Value *Args[2] = {ConstantInt::get(intTy, pointNum++), ConstantInt::get(intTy, profilingType)};
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+      builder->CreateCall(module->getOrInsertFunction(
-+#else
-       builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-+#endif
-               "__gen_ocl_calc_timestamp", Type::getVoidTy(module->getContext()),
-               IntegerType::getInt32Ty(module->getContext()),
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+              IntegerType::getInt32Ty(module->getContext())),
-+#else
-               IntegerType::getInt32Ty(module->getContext()))),
-+#endif
-               ArrayRef<Value*>(Args));
- #else
-       builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-@@ -185,10 +193,18 @@ namespace gbe
-     Value *Args2[2] = {profilingBuf, ConstantInt::get(intTy, profilingType)};
- 
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+    builder->CreateCall(module->getOrInsertFunction(
-+#else
-     builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-+#endif
-             "__gen_ocl_store_profiling", Type::getVoidTy(module->getContext()),
-             ptrTy,
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+            IntegerType::getInt32Ty(module->getContext())),
-+#else
-             IntegerType::getInt32Ty(module->getContext()))),
-+#endif
-             ArrayRef<Value*>(Args2));
- #else
-     builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
---- a/backend/src/llvm/llvm_device_enqueue.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_device_enqueue.cpp
-@@ -398,8 +398,13 @@ namespace gbe {
-               std::vector<Type *> ParamTys;
-               for (Value** iter = args.begin(); iter != args.end(); ++iter)
-                 ParamTys.push_back((*iter)->getType());
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+              CallInst* newCI = builder.CreateCall(mod->getOrInsertFunction(
-+                              "__gen_enqueue_kernel_slm", FunctionType::get(intTy, ParamTys, false)), args);
-+#else
-               CallInst* newCI = builder.CreateCall(cast<llvm::Function>(mod->getOrInsertFunction(
-                               "__gen_enqueue_kernel_slm", FunctionType::get(intTy, ParamTys, false))), args);
-+#endif
-               CI->replaceAllUsesWith(newCI);
-               deadInsnSet.insert(CI);
-             }
diff --git a/srcpkgs/beignet/patches/llvm10.patch b/srcpkgs/beignet/patches/llvm10.patch
deleted file mode 100644
index 8aafe48a240d..000000000000
--- a/srcpkgs/beignet/patches/llvm10.patch
+++ /dev/null
@@ -1,347 +0,0 @@
-diff --git CMake/FindLLVM.cmake CMake/FindLLVM.cmake
-index 0a59e47..6e90923 100644
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -104,28 +104,16 @@ string(REGEX REPLACE " *\n" "" LLVM_SYSTEM_LIBS ${LLVM_SYSTEM_LIBS_ORIG})
- endif (LLVM_SYSTEM_LIBS_ORIG)
- endif (LLVM_VERSION_NODOT VERSION_GREATER 34)
- 
-+#something harmless because whitespace at start is an error
-+set(CLANG_LIBRARIES "-ldl")
- macro(add_one_lib name)
-   FIND_LIBRARY(CLANG_LIB
-     NAMES ${name}
-     PATHS ${LLVM_LIBRARY_DIR} NO_DEFAULT_PATH)
--  set(CLANG_LIBRARIES ${CLANG_LIBRARIES} ${CLANG_LIB})
-+  set(CLANG_LIBRARIES "${CLANG_LIBRARIES} ${CLANG_LIB}")
-+  message(STATUS "clanglibs name ${name} this ${CLANG_LIB} all ${CLANG_LIBRARIES} ")
- 	unset(CLANG_LIB CACHE)
- endmacro()
- 
- #Assume clang lib path same as llvm lib path
--add_one_lib("clangCodeGen")
--add_one_lib("clangFrontend")
--add_one_lib("clangSerialization")
--add_one_lib("clangDriver")
--add_one_lib("clangSema")
--add_one_lib("clangStaticAnalyzerFrontend")
--add_one_lib("clangStaticAnalyzerCheckers")
--add_one_lib("clangStaticAnalyzerCore")
--add_one_lib("clangAnalysis")
--add_one_lib("clangEdit")
--add_one_lib("clangAST")
--add_one_lib("clangASTMatchers")
--add_one_lib("clangParse")
--add_one_lib("clangSema")
--add_one_lib("clangLex")
--add_one_lib("clangBasic")
-+add_one_lib("clang-cpp")
-diff --git CMakeLists.txt CMakeLists.txt
-index c11acbb..08f427d 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -79,7 +79,7 @@ elseif (COMPILER STREQUAL "CLANG")
- elseif (COMPILER STREQUAL "ICC")
-   set (CMAKE_C_CXX_FLAGS "${CMAKE_C_CXX_FLAGS}  -wd2928 -Wall -fPIC -fstrict-aliasing -fp-model fast -msse4.1 -Wl,-E")
- endif ()
--set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
-+set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof")
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
- set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
- set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
-diff --git backend/src/backend/program.cpp backend/src/backend/program.cpp
-index b36f7b4..e666031 100644
---- a/backend/src/backend/program.cpp
-+++ b/backend/src/backend/program.cpp
-@@ -694,9 +694,9 @@ namespace gbe {
- #endif
-                 );
- 
-+    llvm::cl::ResetAllOptionOccurrences();
-     clang::CompilerInvocation::CreateFromArgs(*CI,
--                                              &args[0],
--                                              &args[0] + args.size(),
-+                                              clang::ArrayRef<const char*>(args),
-                                               Diags);
-     // Create the compiler instance
-     clang::CompilerInstance Clang;
-@@ -1242,8 +1242,7 @@ EXTEND_QUOTE:
-       // Create the compiler invocation
-       std::unique_ptr<clang::CompilerInvocation> CI(new clang::CompilerInvocation);
-       return clang::CompilerInvocation::CreateFromArgs(*CI,
--                                                       &args[0],
--                                                       &args[0] + args.size(),
-+                                                       clang::ArrayRef<const char*>(args),
-                                                        Diags);
-     }
- #endif
-diff --git backend/src/llvm/llvm_gen_backend.cpp backend/src/llvm/llvm_gen_backend.cpp
-index c6fc30d..82441d8 100644
---- a/backend/src/llvm/llvm_gen_backend.cpp
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -575,10 +575,12 @@ namespace gbe
-         has_errors(false),
-         legacyMode(true)
-     {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-       initializeLoopInfoWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeLoopInfoPass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-       pass = PASS_EMIT_REGISTERS;
-     }
-diff --git backend/src/llvm/llvm_gen_backend.hpp backend/src/llvm/llvm_gen_backend.hpp
-index b4715b1..8e74f7a 100644
---- a/backend/src/llvm/llvm_gen_backend.hpp
-+++ b/backend/src/llvm/llvm_gen_backend.hpp
-@@ -130,10 +130,10 @@ namespace gbe
-   llvm::FunctionPass *createGenPass(ir::Unit &unit);
- 
-   /*! Remove the GEP instructions */
--  llvm::BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit);
-+  llvm::FunctionPass *createRemoveGEPPass(const ir::Unit &unit);
- 
-   /*! Merge load/store if possible */
--  llvm::BasicBlockPass *createLoadStoreOptimizationPass();
-+  llvm::FunctionPass *createLoadStoreOptimizationPass();
- 
-   /*! Scalarize all vector op instructions */
-   llvm::FunctionPass* createScalarizePass();
-@@ -141,7 +141,7 @@ namespace gbe
-   llvm::ModulePass* createBarrierNodupPass(bool);
- 
-   /*! Convert the Intrinsic call to gen function */
--  llvm::BasicBlockPass *createIntrinsicLoweringPass();
-+  llvm::FunctionPass *createIntrinsicLoweringPass();
- 
-   /*! Passer the printf function call. */
-   llvm::FunctionPass* createPrintfParserPass(ir::Unit &unit);
-diff --git backend/src/llvm/llvm_intrinsic_lowering.cpp backend/src/llvm/llvm_intrinsic_lowering.cpp
-index 94f0ce6..b5539e9 100644
---- a/backend/src/llvm/llvm_intrinsic_lowering.cpp
-+++ b/backend/src/llvm/llvm_intrinsic_lowering.cpp
-@@ -29,12 +29,12 @@
- using namespace llvm;
- 
- namespace gbe {
--    class InstrinsicLowering : public BasicBlockPass
-+    class InstrinsicLowering : public FunctionPass
-     {
-     public:
-       static char ID;
-       InstrinsicLowering() :
--        BasicBlockPass(ID) {}
-+        FunctionPass(ID) {}
- 
-       void getAnalysisUsage(AnalysisUsage &AU) const {
- 
-@@ -93,9 +93,9 @@ namespace gbe {
-         CI->eraseFromParent();
-         return NewCI;
-       }
--      virtual bool runOnBasicBlock(BasicBlock &BB)
-+      virtual bool runOnFunction(Function &F)
-       {
--        bool changedBlock = false;
-+        for (BasicBlock &BB : F) {
-         Module *M = BB.getParent()->getParent();
- 
-         DataLayout TD(M);
-@@ -159,13 +159,14 @@ namespace gbe {
-             }
-           }
-         }
--        return changedBlock;
-+        }
-+        return true;
-       }
-     };
- 
-     char InstrinsicLowering::ID = 0;
- 
--    BasicBlockPass *createIntrinsicLoweringPass() {
-+    FunctionPass *createIntrinsicLoweringPass() {
-       return new InstrinsicLowering();
-     }
- } // end namespace
-diff --git backend/src/llvm/llvm_loadstore_optimization.cpp backend/src/llvm/llvm_loadstore_optimization.cpp
-index 5aa38be..e314302 100644
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
-@@ -26,13 +26,13 @@
- 
- using namespace llvm;
- namespace gbe {
--  class GenLoadStoreOptimization : public BasicBlockPass {
-+  class GenLoadStoreOptimization : public FunctionPass {
- 
-   public:
-     static char ID;
-     ScalarEvolution *SE;
-     const DataLayout *TD;
--    GenLoadStoreOptimization() : BasicBlockPass(ID) {}
-+    GenLoadStoreOptimization() : FunctionPass(ID) {}
- 
-     void getAnalysisUsage(AnalysisUsage &AU) const {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-@@ -45,7 +45,9 @@ namespace gbe {
-       AU.setPreservesCFG();
-     }
- 
--    virtual bool runOnBasicBlock(BasicBlock &BB) {
-+    virtual bool runOnFunction(Function &F) {
-+        bool changedAnyBlock = false;
-+        for (BasicBlock &BB : F) {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-       SE = &getAnalysis<ScalarEvolutionWrapperPass>().getSE();
- #else
-@@ -59,7 +61,9 @@ namespace gbe {
-       #else
-         TD = getAnalysisIfAvailable<DataLayout>();
-       #endif
--      return optimizeLoadStore(BB);
-+           changedAnyBlock = optimizeLoadStore(BB) | changedAnyBlock;
-+        }
-+        return changedAnyBlock;
-     }
-     Type    *getValueType(Value *insn);
-     Value   *getPointerOperand(Value *I);
-@@ -148,7 +152,7 @@ namespace gbe {
-       values.push_back(merged[i]);
-     }
-     LoadInst *ld = cast<LoadInst>(merged[0]);
--    unsigned align = ld->getAlignment();
-+    MaybeAlign align = ld->getAlign();
-     unsigned addrSpace = ld->getPointerAddressSpace();
-     // insert before first load
-     Builder.SetInsertPoint(ld);
-@@ -231,7 +235,7 @@ namespace gbe {
- 
-     unsigned addrSpace = st->getPointerAddressSpace();
- 
--    unsigned align = st->getAlignment();
-+    MaybeAlign align = st->getAlign();
-     // insert before the last store
-     Builder.SetInsertPoint(merged[size-1]);
- 
-@@ -325,7 +329,7 @@ namespace gbe {
-     return changed;
-   }
- 
--  BasicBlockPass *createLoadStoreOptimizationPass() {
-+  FunctionPass *createLoadStoreOptimizationPass() {
-     return new GenLoadStoreOptimization();
-   }
- };
-diff --git backend/src/llvm/llvm_passes.cpp backend/src/llvm/llvm_passes.cpp
-index 10752a3..b8f2282 100644
---- a/backend/src/llvm/llvm_passes.cpp
-+++ b/backend/src/llvm/llvm_passes.cpp
-@@ -37,7 +37,7 @@
- #include "sys/map.hpp"
- 
- using namespace llvm;
--
-+template class cfg::Update<BasicBlock *>;
- namespace gbe
- {
-   bool isKernelFunction(const llvm::Function &F) {
-@@ -219,13 +219,13 @@ namespace gbe
-     return offset;
-   }
- 
--  class GenRemoveGEPPasss : public BasicBlockPass
-+  class GenRemoveGEPPasss : public FunctionPass
-   {
- 
-    public:
-     static char ID;
-     GenRemoveGEPPasss(const ir::Unit &unit) :
--      BasicBlockPass(ID),
-+      FunctionPass(ID),
-       unit(unit) {}
-     const ir::Unit &unit;
-     void getAnalysisUsage(AnalysisUsage &AU) const {
-@@ -242,16 +242,18 @@ namespace gbe
- 
-     bool simplifyGEPInstructions(GetElementPtrInst* GEPInst);
- 
--    virtual bool runOnBasicBlock(BasicBlock &BB)
-+    virtual bool runOnFunction(Function &F)
-     {
--      bool changedBlock = false;
-+      bool changedAnyBlock = false;
-+        for (BasicBlock &BB : F) {
-       iplist<Instruction>::iterator I = BB.getInstList().begin();
-       for (auto nextI = I, E = --BB.getInstList().end(); I != E; I = nextI) {
-         iplist<Instruction>::iterator I = nextI++;
-         if(GetElementPtrInst* gep = dyn_cast<GetElementPtrInst>(&*I))
--          changedBlock = (simplifyGEPInstructions(gep) || changedBlock);
-+          changedAnyBlock = (simplifyGEPInstructions(gep) | changedAnyBlock);
-       }
--      return changedBlock;
-+        }
-+      return changedAnyBlock;
-     }
-   };
- 
-@@ -367,7 +369,7 @@ namespace gbe
-     return true;
-   }
- 
--  BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit) {
-+  FunctionPass *createRemoveGEPPass(const ir::Unit &unit) {
-     return new GenRemoveGEPPasss(unit);
-   }
- } /* namespace gbe */
-diff --git backend/src/llvm/llvm_sampler_fix.cpp backend/src/llvm/llvm_sampler_fix.cpp
-index 2a097c8..863be6d 100644
---- a/backend/src/llvm/llvm_sampler_fix.cpp
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp
-@@ -33,10 +33,12 @@ namespace gbe {
-   class SamplerFix : public FunctionPass {
-   public:
-     SamplerFix() : FunctionPass(ID) {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
-       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-     }
- 
-diff --git backend/src/llvm/llvm_scalarize.cpp backend/src/llvm/llvm_scalarize.cpp
-index e9a2a66..e9d2ee4 100644
---- a/backend/src/llvm/llvm_scalarize.cpp
-+++ b/backend/src/llvm/llvm_scalarize.cpp
-@@ -96,10 +96,12 @@ namespace gbe {
- 
-     Scalarize() : FunctionPass(ID)
-     {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
-       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-     }
- 
-diff --git utests/CMakeLists.txt utests/CMakeLists.txt
-index 300d87a..64179c7 100644
---- a/utests/CMakeLists.txt
-+++ b/utests/CMakeLists.txt
-@@ -26,8 +26,8 @@ if (NOT NOT_BUILD_STAND_ALONE_UTEST)
-   # Threads
-   Find_Package(Threads)
- 
--  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
--  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
-+  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof -ffloat-store -fno-strict-aliasing")
-+  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS} -ffloat-store -fno-strict-aliasing") #compiler_{degrees,radians,function_argument2} use equality comparison of floats, compiler_long_bitcast uses aliasing
-   set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
-   set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
-   set (CMAKE_CXX_FLAGS_MINSIZEREL     "-Os -DNDEBUG -DGBE_DEBUG=0")
diff --git a/srcpkgs/beignet/patches/llvm11.patch b/srcpkgs/beignet/patches/llvm11.patch
deleted file mode 100644
index 2c3a4278943c..000000000000
--- a/srcpkgs/beignet/patches/llvm11.patch
+++ /dev/null
@@ -1,937 +0,0 @@
-Source: Snektron
-
-There were a few changes required for LLVM 11:
-* llvm::StringRef requires .str(), implicit conversion was removed
-* llvm::CallSite was removed, but the required methods are available on llvm::CallInst
-* VectorTyID was split into FixedVectorTyID and ScalableVectorTyID, FixedVectorTyID was used
-* CallInst::getCalledValue() was renamed to CallInst::getCalledOperand()
-* Implicit conversion from MaybeAlign to Align was removed, so MaybeAlign::valueOrOne was used instead.
-
---- a/backend/src/llvm/StripAttributes.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/StripAttributes.cpp	2020-11-09 19:04:19.641897141 +0100
-@@ -107,9 +107,8 @@
-        BB != E; ++BB) {
-     for (BasicBlock::iterator Inst = BB->begin(), E = BB->end();
-          Inst != E; ++Inst) {
--      CallSite Call(&*Inst);
--      if (Call)
--        Call.setCallingConv(CallingConv::C);
-+      if (CallInst* callInst = dyn_cast<CallInst>(&*Inst))
-+        callInst->setCallingConv(CallingConv::C);
-     }
-   }
-
---- a/backend/src/llvm/llvm_bitcode_link.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_bitcode_link.cpp	2020-11-09 17:04:09.633753428 +0100
-@@ -98,7 +98,7 @@
-         if (callFunc && callFunc->getIntrinsicID() != 0)
-           continue;
-
--        std::string fnName = call->getCalledValue()->stripPointerCasts()->getName();
-+        std::string fnName = call->getCalledOperand()->stripPointerCasts()->getName().str();
-
-         if (!MFS.insert(fnName).second) {
-           continue;
---- a/backend/src/llvm/llvm_device_enqueue.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_device_enqueue.cpp	2020-11-09 19:01:49.201915008 +0100
-@@ -45,7 +45,7 @@
-       return NULL;
-
-     /* This is a fake, to check the function bitcast is for block or not */
--    std::string fnName = Fn->getName();
-+    std::string fnName = Fn->getName().str();
-     if(fnName.find("_invoke") == std::string::npos)
-       return NULL;
-
-@@ -119,18 +119,18 @@
-       ParamTys.push_back(ty);
-     }
-     FunctionType* NewFT = FunctionType::get(Fn->getReturnType(), ParamTys, false);
--    Function* NewFn = Function::Create(NewFT, Function::ExternalLinkage, Fn->getName());
-+    Function* NewFn = Function::Create(NewFT, Function::ExternalLinkage, Fn->getName().str());
-     SmallVector<ReturnInst*, 8> Returns;
-
-     Function::arg_iterator NewFnArgIt = NewFn->arg_begin();
-     for (Function::arg_iterator I = Fn->arg_begin(), E = Fn->arg_end(); I != E; ++I) {
--      std::string ArgName = I->getName();
-+      std::string ArgName = I->getName().str();
-       NewFnArgIt->setName(ArgName);
-       VMap[&*I] = &(*NewFnArgIt++);
-     }
-     CloneFunctionInto(NewFn, Fn, VMap, /*ModuleLevelChanges=*/true, Returns);
-
--    Fn->setName("__d" + Fn->getName());
-+    Fn->setName("__d" + Fn->getName().str());
-     mod->getFunctionList().push_back(NewFn);
-     //mod->getOrInsertFunction(NewFn->getName(), NewFn->getFunctionType(),
-     //                         NewFn->getAttributes());
-@@ -147,7 +147,7 @@
-       argTypeNames.push_back(llvm::MDString::get(Context, "char*"));
-       argBaseTypeNames.push_back(llvm::MDString::get(Context, "char*"));
-       argTypeQuals.push_back(llvm::MDString::get(Context, ""));
--      argNames.push_back(llvm::MDString::get(Context, I->getName()));
-+      argNames.push_back(llvm::MDString::get(Context, I->getName().str()));
-     }
-
-     //If run to here, llvm version always > 3.9, add the version check just for build.
-@@ -198,7 +198,7 @@
-            * invoke pointer to store the index in the unit's block functions index.*/
-           Function *Fn = dyn_cast<Function>(bt->getOperand(0));
-
--          std::string fnName = Fn->getName();
-+          std::string fnName = Fn->getName().str();
-           int index = -1;
-           for(size_t i=0; i<unit.blockFuncs.size(); i++) {
-             if(unit.blockFuncs[i] == fnName) {
-@@ -241,7 +241,7 @@
-             //unnamed call function, parse the use to find the define of called function
-             SmallVector<Value*, 16> args(CI->op_begin(), CI->op_end()-1);
-
--            Value *v = CI->getCalledValue();
-+            Value *v = CI->getCalledOperand();
-             BitCastInst* bt = dyn_cast<BitCastInst>(v);
-             if(bt == NULL)
-               continue;
-@@ -316,7 +316,7 @@
-                   ConstantExpr *expr = dyn_cast<ConstantExpr>(c->getOperand(3));
-                   BitCastInst *bt = dyn_cast<BitCastInst>(expr->getAsInstruction());
-                   Function* f = dyn_cast<Function>(bt->getOperand(0));
--                  blocks[v] = f->getName();
-+                  blocks[v] = f->getName().str();
-                 }
-               }
-
-@@ -332,7 +332,7 @@
-           } else {
-             //handle enqueue_kernel function call
-             Function *fn = CI->getCalledFunction();
--            if (fn->getName().find("enqueue_kernel") == std::string::npos)
-+            if (fn->getName().str().find("enqueue_kernel") == std::string::npos)
-               continue;
-
-             //block parameter's index, 3 or 6
-@@ -361,7 +361,7 @@
-                   ConstantExpr *expr = dyn_cast<ConstantExpr>(c->getOperand(3));
-                   BitCastInst *bt = dyn_cast<BitCastInst>(expr->getAsInstruction());
-                   Function* f = dyn_cast<Function>(bt->getOperand(0));
--                  blocks[v] = f->getName();
-+                  blocks[v] = f->getName().str();
-                 }
-               }
-             } else if(isa<AllocaInst>(block)) {
---- a/backend/src/llvm/llvm_gen_backend.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_gen_backend.cpp	2020-11-09 18:33:50.919114327 +0100
-@@ -376,7 +376,7 @@
-           GBE_ASSERT(index == 0);
-           return this->_newScalar(value, key, type, index, uniform);
-           break;
--        case Type::VectorTyID:
-+        case Type::FixedVectorTyID:
-         {
-           auto vectorType = cast<VectorType>(type);
-           auto elementType = vectorType->getElementType();
-@@ -743,20 +743,20 @@
- #undef DECL_VISIT_FN
-
-     // Emit rounding instructions from gen native function
--    void emitRoundingCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode);
-+    void emitRoundingCallInst(CallInst &I, ir::Opcode opcode);
-     // Emit unary instructions from gen native function
--    void emitUnaryCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode, ir::Type = ir::TYPE_FLOAT);
-+    void emitUnaryCallInst(CallInst &I, ir::Opcode opcode, ir::Type = ir::TYPE_FLOAT);
-     // Emit unary instructions from gen native function
--    void emitAtomicInst(CallInst &I, CallSite &CS, ir::AtomicOps opcode);
-+    void emitAtomicInst(CallInst &I, ir::AtomicOps opcode);
-     // Emit workgroup instructions
--    void emitWorkGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode);
-+    void emitWorkGroupInst(CallInst &I, ir::WorkGroupOps opcode);
-     // Emit subgroup instructions
--    void emitSubGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode);
-+    void emitSubGroupInst(CallInst &I, ir::WorkGroupOps opcode);
-     // Emit subgroup instructions
--    void emitBlockReadWriteMemInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
--    void emitBlockReadWriteImageInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-+    void emitBlockReadWriteMemInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-+    void emitBlockReadWriteImageInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-
--    uint8_t appendSampler(CallSite::arg_iterator AI);
-+    uint8_t appendSampler(User::op_iterator AI);
-     uint8_t getImageID(CallInst &I);
-
-     // These instructions are not supported at all
-@@ -1320,13 +1320,13 @@
- #endif
-
-       if(typeNameNode) {
--        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
-+        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-       }
-       if(typeBaseNameNode) {
--        llvmInfo.typeBaseName= (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString();
-+        llvmInfo.typeBaseName= (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString().str();
-       }
--      llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
--      llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString();
-+      llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-+      llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString().str();
-       bool isImage = llvmInfo.isImageType();
-       bool isPipe = llvmInfo.isPipeType();
-       if (I->getType()->isPointerTy() || isImage || isPipe) {
-@@ -1531,7 +1531,7 @@
-             EltTy = getEltType(EltTy, TypeIndex);
-         }
-
--        ir::Constant cc = unit.getConstantSet().getConstant(pointer->getName());
-+        ir::Constant cc = unit.getConstantSet().getConstant(pointer->getName().str());
-         unsigned int defOffset = cc.getOffset();
-         relocs.push_back(ir::RelocEntry(offset, defOffset + constantOffset));
-
-@@ -1546,7 +1546,7 @@
-       return;
-     }
-     if (isa<GlobalVariable>(c)) {
--      ir::Constant cc = unit.getConstantSet().getConstant(c->getName());
-+      ir::Constant cc = unit.getConstantSet().getConstant(c->getName().str());
-       unsigned int defOffset = cc.getOffset();
-
-       relocs.push_back(ir::RelocEntry(offset, defOffset));
-@@ -1609,7 +1609,7 @@
-           }
-           break;
-         }
--      case Type::TypeID::VectorTyID:
-+      case Type::TypeID::FixedVectorTyID:
-         {
-           const ConstantDataSequential *cds = dyn_cast<ConstantDataSequential>(c);
-           const VectorType *vecTy = cast<VectorType>(type);
-@@ -1936,7 +1936,7 @@
-       case Type::PointerTyID:
-         regTranslator.newScalar(value, key, 0, uniform);
-         break;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         auto vectorType = cast<VectorType>(type);
-         const uint32_t elemNum = vectorType->getNumElements();
-@@ -2395,7 +2395,7 @@
- #endif
-         }
-         if(typeNameNode) {
--          llvmInfo.typeName = (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
-+          llvmInfo.typeName = (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-           //LLVM 3.9 image's type name include access qual, don't match OpenCL spec, erase them.
-           std::vector<std::string> filters = {"__read_only ", "__write_only "};
-           for (uint32_t i = 0; i < filters.size(); i++) {
-@@ -2406,16 +2406,16 @@
-           }
-         }
-         if(typeBaseNameNode){
--          llvmInfo.typeBaseName = (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString();
-+          llvmInfo.typeBaseName = (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString().str();
-         }
-         if(accessQualNode) {
--          llvmInfo.accessQual = (cast<MDString>(accessQualNode->getOperand(opID)))->getString();
-+          llvmInfo.accessQual = (cast<MDString>(accessQualNode->getOperand(opID)))->getString().str();
-         }
-         if(typeQualNode) {
--          llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString();
-+          llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString().str();
-         }
-         if(argNameNode){
--          llvmInfo.argName = (cast<MDString>(argNameNode->getOperand(opID)))->getString();
-+          llvmInfo.argName = (cast<MDString>(argNameNode->getOperand(opID)))->getString().str();
-         }
-
-         // function arguments are uniform values.
-@@ -3010,7 +3010,7 @@
-         } else {
-           this->newRegister(const_cast<GlobalVariable*>(&v));
-           ir::Register reg = regTranslator.getScalar(const_cast<GlobalVariable*>(&v), 0);
--          ir::Constant &con = unit.getConstantSet().getConstant(v.getName());
-+          ir::Constant &con = unit.getConstantSet().getConstant(v.getName().str());
-           if (!legacyMode) {
-             ir::Register regload = ctx.reg(getFamily(getType(ctx, v.getType())));
-             ctx.LOADI(getType(ctx, v.getType()), regload, ctx.newIntegerImmediate(con.getOffset(), getType(ctx, v.getType())));
-@@ -3212,7 +3212,7 @@
-         GBE_ASSERTM(false, "Unsupported calling convention");
-     }
-
--    ctx.startFunction(F.getName());
-+    ctx.startFunction(F.getName().str());
-
-     ir::Function &fn = ctx.getFunction();
-     this->regTranslator.clear();
-@@ -3810,9 +3810,9 @@
-
-   void GenWriter::regAllocateCallInst(CallInst &I) {
-     Value *dst = &I;
--    Value *Callee = I.getCalledValue();
-+    Value *Callee = I.getCalledOperand();
-     GBE_ASSERT(ctx.getFunction().getProfile() == ir::PROFILE_OCL);
--    GBE_ASSERT(isa<InlineAsm>(I.getCalledValue()) == false);
-+    GBE_ASSERT(isa<InlineAsm>(I.getCalledOperand()) == false);
-     if(I.getNumArgOperands()) GBE_ASSERT(I.hasStructRetAttr() == false);
-
-     // We only support a small number of intrinsics right now
-@@ -3870,7 +3870,7 @@
-       }
-     }
-     // Get the name of the called function and handle it
--    const std::string fnName = Callee->stripPointerCasts()->getName();
-+    const std::string fnName = Callee->stripPointerCasts()->getName().str();
-     auto genIntrinsicID = intrinsicMap.find(fnName);
-     switch (genIntrinsicID) {
-       case GEN_OCL_GET_GROUP_ID0:
-@@ -4166,7 +4166,7 @@
-     };
-   }
-
--  void GenWriter::emitRoundingCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode) {
-+  void GenWriter::emitRoundingCallInst(CallInst &I, ir::Opcode opcode) {
-     if (I.getType()->isHalfTy()) {
-       const ir::Register src = this->getRegister(I.getOperand(0));
-       const ir::Register srcFloat = ctx.reg(ir::FAMILY_DWORD);
-@@ -4177,14 +4177,14 @@
-       ctx.F32TO16(ir::TYPE_U16, ir::TYPE_FLOAT, dst, dstFloat);
-     } else {
-       GBE_ASSERT(I.getType()->isFloatTy());
--      this->emitUnaryCallInst(I,CS,opcode);
-+      this->emitUnaryCallInst(I,opcode);
-     }
-   }
-
--  void GenWriter::emitUnaryCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
-+  void GenWriter::emitUnaryCallInst(CallInst &I, ir::Opcode opcode, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--    CallSite::arg_iterator AE = CS.arg_end();
-+    User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-     GBE_ASSERT(AI != AE);
-     const ir::Register src = this->getRegister(*AI);
-@@ -4293,9 +4293,9 @@
-     this->emitAtomicInstHelper(opcode, type, dst, llvmPtr, payloadTuple);
-   }
-
--  void GenWriter::emitAtomicInst(CallInst &I, CallSite &CS, ir::AtomicOps opcode) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitAtomicInst(CallInst &I, ir::AtomicOps opcode) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-     Value *llvmPtr = *AI;
-     ir::AddressSpace addrSpace = addressSpaceLLVMToGen(llvmPtr->getType()->getPointerAddressSpace());
-@@ -4348,7 +4348,7 @@
-     }
-   }
-
--  void GenWriter::emitWorkGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode) {
-+  void GenWriter::emitWorkGroupInst(CallInst &I, ir::WorkGroupOps opcode) {
-     ir::Function &f = ctx.getFunction();
-
-     if (f.getwgBroadcastSLM() < 0 && opcode == ir::WORKGROUP_OP_BROADCAST) {
-@@ -4378,8 +4378,8 @@
-       GBE_ASSERT(f.gettidMapSLM() >= 0);
-     }
-
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     if (opcode == ir::WORKGROUP_OP_ALL || opcode == ir::WORKGROUP_OP_ANY) {
-@@ -4391,14 +4391,14 @@
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], 3);
-       ctx.WORKGROUP(opcode, (uint32_t)f.gettidMapSLM(), getRegister(&I), srcTuple, 3, ir::TYPE_S32);
-     } else if (opcode == ir::WORKGROUP_OP_BROADCAST) {
--      int argNum = CS.arg_size();
-+      int argNum = I.arg_size();
-       std::vector<ir::Register> src(argNum);
-       for (int i = 0; i < argNum; i++) {
-         src[i] = this->getRegister(*(AI++));
-       }
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], argNum);
-       ctx.WORKGROUP(ir::WORKGROUP_OP_BROADCAST, (uint32_t)f.getwgBroadcastSLM(), getRegister(&I), srcTuple, argNum,
--          getType(ctx, (*CS.arg_begin())->getType()));
-+          getType(ctx, (*I.arg_begin())->getType()));
-     } else {
-       ConstantInt *sign = dyn_cast<ConstantInt>(AI);
-       GBE_ASSERT(sign);
-@@ -4423,9 +4423,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitSubGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitSubGroupInst(CallInst &I, ir::WorkGroupOps opcode) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     if (opcode == ir::WORKGROUP_OP_ALL || opcode == ir::WORKGROUP_OP_ANY) {
-@@ -4435,7 +4435,7 @@
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], 1);
-       ctx.SUBGROUP(opcode, getRegister(&I), srcTuple, 1, ir::TYPE_S32);
-     } else if (opcode == ir::WORKGROUP_OP_BROADCAST) {
--      int argNum = CS.arg_size();
-+      int argNum = I.arg_size();
-       GBE_ASSERT(argNum == 2);
-       std::vector<ir::Register> src(argNum);
-       for (int i = 0; i < argNum; i++) {
-@@ -4443,7 +4443,7 @@
-       }
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], argNum);
-       ctx.SUBGROUP(ir::WORKGROUP_OP_BROADCAST, getRegister(&I), srcTuple, argNum,
--          getType(ctx, (*CS.arg_begin())->getType()));
-+          getType(ctx, (*I.arg_begin())->getType()));
-     } else {
-       ConstantInt *sign = dyn_cast<ConstantInt>(AI);
-       GBE_ASSERT(sign);
-@@ -4466,9 +4466,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitBlockReadWriteMemInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitBlockReadWriteMemInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     Value *llvmPtr = *(AI++);
-@@ -4522,9 +4522,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitBlockReadWriteImageInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitBlockReadWriteImageInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     const uint8_t imageID = getImageID(I);
-@@ -4557,7 +4557,7 @@
-
-   /* append a new sampler. should be called before any reference to
-    * a sampler_t value. */
--  uint8_t GenWriter::appendSampler(CallSite::arg_iterator AI) {
-+  uint8_t GenWriter::appendSampler(User::op_iterator AI) {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-     CallInst *TC = dyn_cast<CallInst>(*AI);
-     Constant *CPV = TC ? dyn_cast<Constant>(TC->getOperand(0)) : NULL;
-@@ -4595,10 +4595,9 @@
-         const ir::Function &fn = ctx.getFunction();
-
-         // Get the function arguments
--        CallSite CS(&I);
--        CallSite::arg_iterator AI = CS.arg_begin();
-+        User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--        CallSite::arg_iterator AE = CS.arg_end();
-+        User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-         switch (F->getIntrinsicID()) {
-           case Intrinsic::stacksave:
-@@ -4764,17 +4763,17 @@
-             ctx.MAD(srcType, dst, src0, src1, src2);
-           }
-           break;
--          case Intrinsic::sqrt: this->emitUnaryCallInst(I,CS,ir::OP_SQR); break;
--          case Intrinsic::ceil: this->emitRoundingCallInst(I,CS,ir::OP_RNDU); break;
--          case Intrinsic::trunc: this->emitRoundingCallInst(I,CS,ir::OP_RNDZ); break;
--          case Intrinsic::rint: this->emitRoundingCallInst(I,CS,ir::OP_RNDE); break;
--          case Intrinsic::floor: this->emitRoundingCallInst(I,CS,ir::OP_RNDD); break;
--          case Intrinsic::sin: this->emitUnaryCallInst(I,CS,ir::OP_SIN); break;
--          case Intrinsic::cos: this->emitUnaryCallInst(I,CS,ir::OP_COS); break;
--          case Intrinsic::log2: this->emitUnaryCallInst(I,CS,ir::OP_LOG); break;
--          case Intrinsic::exp2: this->emitUnaryCallInst(I,CS,ir::OP_EXP); break;
-+          case Intrinsic::sqrt: this->emitUnaryCallInst(I,ir::OP_SQR); break;
-+          case Intrinsic::ceil: this->emitRoundingCallInst(I,ir::OP_RNDU); break;
-+          case Intrinsic::trunc: this->emitRoundingCallInst(I,ir::OP_RNDZ); break;
-+          case Intrinsic::rint: this->emitRoundingCallInst(I,ir::OP_RNDE); break;
-+          case Intrinsic::floor: this->emitRoundingCallInst(I,ir::OP_RNDD); break;
-+          case Intrinsic::sin: this->emitUnaryCallInst(I,ir::OP_SIN); break;
-+          case Intrinsic::cos: this->emitUnaryCallInst(I,ir::OP_COS); break;
-+          case Intrinsic::log2: this->emitUnaryCallInst(I,ir::OP_LOG); break;
-+          case Intrinsic::exp2: this->emitUnaryCallInst(I,ir::OP_EXP); break;
-           case Intrinsic::bswap:
--            this->emitUnaryCallInst(I,CS,ir::OP_BSWAP, getUnsignedType(ctx, I.getType())); break;
-+            this->emitUnaryCallInst(I,ir::OP_BSWAP, getUnsignedType(ctx, I.getType())); break;
-           case Intrinsic::pow:
-           {
-             const ir::Register src0 = this->getRegister(*AI); ++AI;
-@@ -4794,21 +4793,20 @@
-         }
-       } else {
-         // Get the name of the called function and handle it
--        Value *Callee = I.getCalledValue();
--        const std::string fnName = Callee->stripPointerCasts()->getName();
-+        Value *Callee = I.getCalledOperand();
-+        const std::string fnName = Callee->stripPointerCasts()->getName().str();
-         auto genIntrinsicID = intrinsicMap.find(fnName);
-
-         // Get the function arguments
--        CallSite CS(&I);
--        CallSite::arg_iterator AI = CS.arg_begin();
-+        User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--        CallSite::arg_iterator AE = CS.arg_end();
-+        User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-
-         switch (genIntrinsicID) {
--          case GEN_OCL_FBH: this->emitUnaryCallInst(I,CS,ir::OP_FBH, ir::TYPE_U32); break;
--          case GEN_OCL_FBL: this->emitUnaryCallInst(I,CS,ir::OP_FBL, ir::TYPE_U32); break;
--          case GEN_OCL_CBIT: this->emitUnaryCallInst(I,CS,ir::OP_CBIT, getUnsignedType(ctx, (*AI)->getType())); break;
-+          case GEN_OCL_FBH: this->emitUnaryCallInst(I,ir::OP_FBH, ir::TYPE_U32); break;
-+          case GEN_OCL_FBL: this->emitUnaryCallInst(I,ir::OP_FBL, ir::TYPE_U32); break;
-+          case GEN_OCL_CBIT: this->emitUnaryCallInst(I,ir::OP_CBIT, getUnsignedType(ctx, (*AI)->getType())); break;
-           case GEN_OCL_ABS:
-           {
-             const ir::Register src = this->getRegister(*AI);
-@@ -4915,8 +4913,8 @@
-             ctx.REGION(dst, src, x.getIntegerValue());
-             break;
-           }
--          case GEN_OCL_RSQ: this->emitUnaryCallInst(I,CS,ir::OP_RSQ); break;
--          case GEN_OCL_RCP: this->emitUnaryCallInst(I,CS,ir::OP_RCP); break;
-+          case GEN_OCL_RSQ: this->emitUnaryCallInst(I,ir::OP_RSQ); break;
-+          case GEN_OCL_RCP: this->emitUnaryCallInst(I,ir::OP_RCP); break;
-           case GEN_OCL_FORCE_SIMD8: ctx.setSimdWidth(8); break;
-           case GEN_OCL_FORCE_SIMD16: ctx.setSimdWidth(16); break;
-           case GEN_OCL_LBARRIER: ctx.SYNC(ir::syncLocalBarrier); break;
-@@ -4947,31 +4945,31 @@
-             break;
-           }
-           case GEN_OCL_ATOMIC_ADD0:
--          case GEN_OCL_ATOMIC_ADD1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_ADD); break;
-+          case GEN_OCL_ATOMIC_ADD1: this->emitAtomicInst(I,ir::ATOMIC_OP_ADD); break;
-           case GEN_OCL_ATOMIC_SUB0:
--          case GEN_OCL_ATOMIC_SUB1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_SUB); break;
-+          case GEN_OCL_ATOMIC_SUB1: this->emitAtomicInst(I,ir::ATOMIC_OP_SUB); break;
-           case GEN_OCL_ATOMIC_AND0:
--          case GEN_OCL_ATOMIC_AND1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_AND); break;
-+          case GEN_OCL_ATOMIC_AND1: this->emitAtomicInst(I,ir::ATOMIC_OP_AND); break;
-           case GEN_OCL_ATOMIC_OR0:
--          case GEN_OCL_ATOMIC_OR1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_OR); break;
-+          case GEN_OCL_ATOMIC_OR1: this->emitAtomicInst(I,ir::ATOMIC_OP_OR); break;
-           case GEN_OCL_ATOMIC_XOR0:
--          case GEN_OCL_ATOMIC_XOR1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_XOR); break;
-+          case GEN_OCL_ATOMIC_XOR1: this->emitAtomicInst(I,ir::ATOMIC_OP_XOR); break;
-           case GEN_OCL_ATOMIC_XCHG0:
--          case GEN_OCL_ATOMIC_XCHG1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_XCHG); break;
-+          case GEN_OCL_ATOMIC_XCHG1: this->emitAtomicInst(I,ir::ATOMIC_OP_XCHG); break;
-           case GEN_OCL_ATOMIC_INC0:
--          case GEN_OCL_ATOMIC_INC1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_INC); break;
-+          case GEN_OCL_ATOMIC_INC1: this->emitAtomicInst(I,ir::ATOMIC_OP_INC); break;
-           case GEN_OCL_ATOMIC_DEC0:
--          case GEN_OCL_ATOMIC_DEC1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_DEC); break;
-+          case GEN_OCL_ATOMIC_DEC1: this->emitAtomicInst(I,ir::ATOMIC_OP_DEC); break;
-           case GEN_OCL_ATOMIC_UMIN0:
--          case GEN_OCL_ATOMIC_UMIN1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_UMIN); break;
-+          case GEN_OCL_ATOMIC_UMIN1: this->emitAtomicInst(I,ir::ATOMIC_OP_UMIN); break;
-           case GEN_OCL_ATOMIC_UMAX0:
--          case GEN_OCL_ATOMIC_UMAX1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_UMAX); break;
-+          case GEN_OCL_ATOMIC_UMAX1: this->emitAtomicInst(I,ir::ATOMIC_OP_UMAX); break;
-           case GEN_OCL_ATOMIC_IMIN0:
--          case GEN_OCL_ATOMIC_IMIN1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_IMIN); break;
-+          case GEN_OCL_ATOMIC_IMIN1: this->emitAtomicInst(I,ir::ATOMIC_OP_IMIN); break;
-           case GEN_OCL_ATOMIC_IMAX0:
--          case GEN_OCL_ATOMIC_IMAX1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_IMAX); break;
-+          case GEN_OCL_ATOMIC_IMAX1: this->emitAtomicInst(I,ir::ATOMIC_OP_IMAX); break;
-           case GEN_OCL_ATOMIC_CMPXCHG0:
--          case GEN_OCL_ATOMIC_CMPXCHG1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_CMPXCHG); break;
-+          case GEN_OCL_ATOMIC_CMPXCHG1: this->emitAtomicInst(I,ir::ATOMIC_OP_CMPXCHG); break;
-           case GEN_OCL_GET_IMAGE_WIDTH:
-           case GEN_OCL_GET_IMAGE_HEIGHT:
-           case GEN_OCL_GET_IMAGE_DEPTH:
-@@ -5429,48 +5427,48 @@
-             ctx.WAIT();
-             break;
-           }
--          case GEN_OCL_WORK_GROUP_ALL: this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_ALL); break;
--          case GEN_OCL_WORK_GROUP_ANY: this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_ANY); break;
-+          case GEN_OCL_WORK_GROUP_ALL: this->emitWorkGroupInst(I, ir::WORKGROUP_OP_ALL); break;
-+          case GEN_OCL_WORK_GROUP_ANY: this->emitWorkGroupInst(I, ir::WORKGROUP_OP_ANY); break;
-           case GEN_OCL_WORK_GROUP_BROADCAST:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_BROADCAST); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_BROADCAST); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_ADD); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_MAX); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_MIN); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-           case GEN_OCL_SUB_GROUP_BROADCAST:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_BROADCAST); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_BROADCAST); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_ADD); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_MAX); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_MIN); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-           case GEN_OCL_LRP:
-           {
-             const ir::Register dst  = this->getRegister(&I);
-@@ -5484,69 +5482,69 @@
-             break;
-           }
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, false, 1); break;
-+            this->emitBlockReadWriteMemInst(I, false, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, false, 2); break;
-+            this->emitBlockReadWriteMemInst(I, false, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, false, 4); break;
-+            this->emitBlockReadWriteMemInst(I, false, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, false, 8); break;
-+            this->emitBlockReadWriteMemInst(I, false, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, true, 1); break;
-+            this->emitBlockReadWriteMemInst(I, true, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, true, 2); break;
-+            this->emitBlockReadWriteMemInst(I, true, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, true, 4); break;
-+            this->emitBlockReadWriteMemInst(I, true, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, true, 8); break;
-+            this->emitBlockReadWriteMemInst(I, true, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, false, 1); break;
-+            this->emitBlockReadWriteImageInst(I, false, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, false, 2); break;
-+            this->emitBlockReadWriteImageInst(I, false, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, false, 4); break;
-+            this->emitBlockReadWriteImageInst(I, false, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, false, 8); break;
-+            this->emitBlockReadWriteImageInst(I, false, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, true, 1); break;
-+            this->emitBlockReadWriteImageInst(I, true, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, true, 2); break;
-+            this->emitBlockReadWriteImageInst(I, true, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, true, 4); break;
-+            this->emitBlockReadWriteImageInst(I, true, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, true, 8); break;
-+            this->emitBlockReadWriteImageInst(I, true, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, false, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, false, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, false, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, false, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, true, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, true, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, true, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, true, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, false, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, false, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, false, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, false, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, true, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, true, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, true, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, true, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 8, ir::TYPE_U16); break;
-           case GEN_OCL_GET_PIPE:
-           case GEN_OCL_MAKE_RID:
-           case GEN_OCL_GET_RID:
---- a/backend/src/llvm/llvm_includes.hpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_includes.hpp	2020-11-09 19:00:09.955926795 +0100
-@@ -103,7 +103,6 @@
-
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
- #include "llvm/IR/Mangler.h"
--#include "llvm/IR/CallSite.h"
- #include "llvm/IR/CFG.h"
- #include "llvm/IR/InstVisitor.h"
- #include "llvm/IR/IRPrintingPasses.h"
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-11-09 19:10:37.141852308 +0100
-@@ -160,7 +160,7 @@
-     Value *vecPtr = Builder.CreateBitCast(ld->getPointerOperand(),
-                                         PointerType::get(vecTy, addrSpace));
-     LoadInst *vecValue = Builder.CreateLoad(vecPtr);
--    vecValue->setAlignment(align);
-+    vecValue->setAlignment(align.valueOrOne());
-
-     for (unsigned i = 0; i < size; ++i) {
-       Value *S = Builder.CreateExtractElement(vecValue, Builder.getInt32(i));
-@@ -251,7 +251,7 @@
-       return;
-     Value *newPtr = Builder.CreateBitCast(stPointer, PointerType::get(vecTy, addrSpace));
-     StoreInst *newST = Builder.CreateStore(parent, newPtr);
--    newST->setAlignment(align);
-+    newST->setAlignment(align.valueOrOne());
-   }
-
-   // Find the safe iterator we can point to. If reorder happens, we need to
---- a/backend/src/llvm/llvm_passes.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_passes.cpp	2020-11-09 18:48:55.997006837 +0100
-@@ -95,7 +95,7 @@
-   {
-     switch (Ty->getTypeID()) {
-       case Type::VoidTyID: NOT_SUPPORTED;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         const VectorType* VecTy = cast<VectorType>(Ty);
-         uint32_t elemNum = VecTy->getNumElements();
-@@ -138,7 +138,7 @@
-       case Type::HalfTyID:    return 16;
-       case Type::FloatTyID:   return 32;
-       case Type::DoubleTyID:  return 64;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         const VectorType* VecTy = cast<VectorType>(Ty);
-         uint32_t numElem = VecTy->getNumElements();
-@@ -184,10 +184,12 @@
-     Type *elementType = NULL;
-     if (PointerType* ptrType = dyn_cast<PointerType>(eltTy))
-       elementType = ptrType->getElementType();
--    else if(SequentialType * seqType = dyn_cast<SequentialType>(eltTy))
--      elementType = seqType->getElementType();
--    else if(CompositeType * compTy= dyn_cast<CompositeType>(eltTy))
--      elementType = compTy->getTypeAtIndex(index);
-+    else if (ArrayType * arrType = dyn_cast<ArrayType>(eltTy))
-+      elementType = arrType->getElementType();
-+    else if(VectorType * vecType = dyn_cast<VectorType>(eltTy))
-+      elementType = vecType->getElementType();
-+    else if(StructType * structType = dyn_cast<StructType>(eltTy))
-+      elementType = structType->getTypeAtIndex(index);
-     GBE_ASSERT(elementType);
-     return elementType;
-   }
---- a/backend/src/llvm/llvm_printf_parser.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_printf_parser.cpp	2020-11-09 18:57:52.618943105 +0100
-@@ -323,8 +323,7 @@
-
-   bool PrintfParser::parseOnePrintfInstruction(CallInst * call)
-   {
--    CallSite CS(call);
--    CallSite::arg_iterator CI_FMT = CS.arg_begin();
-+    User::op_iterator CI_FMT = call->arg_begin();
-     int param_num = 0;
-
-     llvm::Constant* arg0 = dyn_cast<llvm::ConstantExpr>(*CI_FMT);
-@@ -341,7 +340,7 @@
-       return false;
-     }
-
--    std::string fmt = fmt_arg->getAsCString();
-+    std::string fmt = fmt_arg->getAsCString().str();
-     if (fmt.size() == 0)
-       return false;
-
-@@ -437,8 +436,8 @@
-         if ( callFunc->getIntrinsicID() != 0)
-           continue;
-
--        Value *Callee = call->getCalledValue();
--        const std::string fnName = Callee->getName();
-+        Value *Callee = call->getCalledOperand();
-+        const std::string fnName = Callee->getName().str();
-
-         if (fnName != "__gen_ocl_printf_stub" && fnName != "__gen_ocl_puts_stub")
-           continue;
-@@ -582,7 +581,7 @@
-             if (!fmt_arg || !fmt_arg->isCString()) {
-               return false;
-             }
--            slot.state.str = fmt_arg->getAsCString();
-+            slot.state.str = fmt_arg->getAsCString().str();
-             return true;
-           }
-           case PRINTF_CONVERSION_P: {
-@@ -595,10 +594,10 @@
-
-         break;
-
--      case Type::VectorTyID: {
--        Type* vect_type = arg->getType();
--        Type* elt_type = vect_type->getVectorElementType();
--        int vec_num = vect_type->getVectorNumElements();
-+      case Type::FixedVectorTyID: {
-+        VectorType* vect_type = dyn_cast<VectorType>(arg->getType());
-+        Type* elt_type = vect_type->getElementType();
-+        int vec_num = vect_type->getNumElements();
-         bool sign = false;
-
-         if (vec_num != slot.state.vector_n) {
---- a/backend/src/llvm/llvm_profiling.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_profiling.cpp	2020-11-09 18:59:50.120929150 +0100
-@@ -35,7 +35,6 @@
- #include "llvm/IR/IRBuilder.h"
-
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
--#include "llvm/IR/CallSite.h"
- #include "llvm/IR/CFG.h"
- #else
- #include "llvm/Support/CallSite.h"
---- a/backend/src/llvm/llvm_sampler_fix.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp	2020-11-09 17:01:09.407774832 +0100
-@@ -45,8 +45,8 @@
-     bool visitCallInst(CallInst *I) {
-       if(!I)
-         return false;
--      Value *Callee = I->getCalledValue();
--      const std::string fnName = Callee->getName();
-+      Value *Callee = I->getCalledOperand();
-+      const std::string fnName = Callee->getName().str();
-       bool changed = false;
-       Type *boolTy = IntegerType::get(I->getContext(), 1);
-       Type *i32Ty = IntegerType::get(I->getContext(), 32);
-@@ -59,7 +59,7 @@
-         Value *needFixVal;
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-         CallInst *init = dyn_cast<CallInst>(I->getOperand(0));
--        if (init && init->getCalledValue()->getName().compare("__translate_sampler_initializer"))
-+        if (init && init->getCalledOperand()->getName().compare("__translate_sampler_initializer"))
-         {
-           const ConstantInt *ci = dyn_cast<ConstantInt>(init->getOperand(0));
-           uint32_t samplerInt = ci->getZExtValue();
-@@ -113,7 +113,7 @@
-         Value *needFixVal;
-  #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-         CallInst *init = dyn_cast<CallInst>(I->getOperand(0));
--        if (init && init->getCalledValue()->getName().compare("__translate_sampler_initializer"))
-+        if (init && init->getCalledOperand()->getName().compare("__translate_sampler_initializer"))
-         {
-           const ConstantInt *ci = dyn_cast<ConstantInt>(init->getOperand(0));
-           uint32_t samplerInt = ci->getZExtValue();
---- a/backend/src/llvm/llvm_scalarize.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_scalarize.cpp	2020-11-09 18:51:16.888990104 +0100
-@@ -178,7 +178,7 @@
-       if(!type)
-         return type;
-       switch(type->getTypeID()) {
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       case Type::ArrayTyID:
-         return GetBasicType(type->getContainedType(0));
-       default:
-@@ -188,7 +188,7 @@
-     }
-
-     int GetComponentCount(const Type* type)  {
--      if (type && type->getTypeID() == Type::VectorTyID)
-+      if (type && type->getTypeID() == Type::FixedVectorTyID)
-         return llvm::dyn_cast<VectorType>(type)->getNumElements();
-       else
-         return 1;
-@@ -652,13 +652,12 @@
-           break;
-         }
-       } else {
--        Value *Callee = call->getCalledValue();
--        const std::string fnName = Callee->getName();
-+        Value *Callee = call->getCalledOperand();
-+        const std::string fnName = Callee->getName().str();
-         auto genIntrinsicID = intrinsicMap.find(fnName);
-
-         // Get the function arguments
--        CallSite CS(call);
--        CallSite::arg_iterator CI = CS.arg_begin() + 1;
-+        User::op_iterator CI = call->arg_begin() + 1;
-
-         switch (genIntrinsicID) {
-           case GEN_OCL_NOT_FOUND:
-@@ -729,7 +728,7 @@
-             extractFromVector(call);
-             break;
-           case GEN_OCL_PRINTF:
--            for (; CI != CS.arg_end(); ++CI)
-+            for (; CI != call->arg_end(); ++CI)
-               if ((*CI)->getType()->isVectorTy())
-                 *CI = InsertToVector(call, *CI);
-             break;
diff --git a/srcpkgs/beignet/patches/llvm12.patch b/srcpkgs/beignet/patches/llvm12.patch
deleted file mode 100644
index 6f8ab005c148..000000000000
--- a/srcpkgs/beignet/patches/llvm12.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-diff --git backend/src/llvm/ExpandLargeIntegers.cpp backend/src/llvm/ExpandLargeIntegers.cpp
-index 8515dc13..27080380 100644
---- a/backend/src/llvm/ExpandLargeIntegers.cpp
-+++ b/backend/src/llvm/ExpandLargeIntegers.cpp
-@@ -328,7 +328,7 @@ static Value *buildVectorOrScalar(ConversionState &State, IRBuilder<> &IRB, Smal
-     // splited, that's why these temporary values should be erased.
-     bool KeepInsert = isLegalBitSize(ElemTy->getPrimitiveSizeInBits() * ElemNo);
-     for (unsigned i = 0; i < ElemNo; ++i) {
--      Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo));
-+      Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo, false));
-       Value *idx = ConstantInt::get(IntTy, i);
-       vec = IRB.CreateInsertElement(tmp, Elements[i], idx);
-       if (!KeepInsert && !isa<Constant>(vec)) {
-@@ -373,7 +373,7 @@ static void unifyElementType(IRBuilder<> &IRB, SmallVector<Value *, 16> &Src, Sm
-       assert((Size % MinWidth) == 0);
- 
-       if (Size > MinWidth) {
--        VectorType *VecTy = VectorType::get(ElemTy, Size/MinWidth);
-+        VectorType *VecTy = VectorType::get(ElemTy, Size/MinWidth, false);
-         Value *Casted = IRB.CreateBitCast(Src[i], VecTy);
-         for (unsigned j = 0; j < Size/MinWidth; j++)
-           Dst.push_back(IRB.CreateExtractElement(Casted, ConstantInt::get(IntTy, j)));
-@@ -462,7 +462,7 @@ static void convertInstruction(Instruction *Inst, ConversionState &State,
-       unsigned ElemNo = Unified.size();
-       Type *ElemTy = Unified[0]->getType();
-       for (unsigned i = 0; i < ElemNo; ++i) {
--        Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo));
-+        Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo, false));
-         Value *idx = ConstantInt::get(IntTy, i);
-         vec = IRB.CreateInsertElement(tmp, Unified[i], idx);
-       }
-diff --git backend/src/llvm/llvm_gen_backend.cpp backend/src/llvm/llvm_gen_backend.cpp
-index c93d89cc..64d5b0e5 100644
---- a/backend/src/llvm/llvm_gen_backend.cpp
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -304,7 +304,7 @@ namespace gbe
-       TYPESIZEVEC(long,8)
-       TYPESIZEVEC(unsigned long,8)
-       else{
--        StructType *StrTy = M->getTypeByName("struct."+name);
-+        StructType *StrTy = StructType::getTypeByName(M->getContext(), "struct."+name);
-         if(StrTy)
-           return getTypeByteSize(unit,StrTy);
-       }
-diff --git backend/src/llvm/llvm_loadstore_optimization.cpp backend/src/llvm/llvm_loadstore_optimization.cpp
-index 5aa38bef..6b5c1bad 100644
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
-@@ -152,7 +152,7 @@ namespace gbe {
-     unsigned addrSpace = ld->getPointerAddressSpace();
-     // insert before first load
-     Builder.SetInsertPoint(ld);
--    VectorType *vecTy = VectorType::get(ld->getType(), size);
-+    VectorType *vecTy = VectorType::get(ld->getType(), size, false);
-     Value *vecPtr = Builder.CreateBitCast(ld->getPointerOperand(),
-                                         PointerType::get(vecTy, addrSpace));
-     LoadInst *vecValue = Builder.CreateLoad(vecPtr);
-@@ -236,7 +236,7 @@ namespace gbe {
-     Builder.SetInsertPoint(merged[size-1]);
- 
-     Type *dataTy = st->getValueOperand()->getType();
--    VectorType *vecTy = VectorType::get(dataTy, size);
-+    VectorType *vecTy = VectorType::get(dataTy, size, false);
-     Value * parent = UndefValue::get(vecTy);
-     for(unsigned i = 0; i < size; i++) {
-       parent = Builder.CreateInsertElement(parent, values[i], ConstantInt::get(IntegerType::get(st->getContext(), 32), i));
-diff --git backend/src/llvm/llvm_printf_parser.cpp backend/src/llvm/llvm_printf_parser.cpp
-index 6bb7c52a..af459cd2 100644
---- a/backend/src/llvm/llvm_printf_parser.cpp
-+++ b/backend/src/llvm/llvm_printf_parser.cpp
-@@ -630,7 +630,7 @@ error:
-             if (elt_type != elt_dst_type) {
-               Value *II = NULL;
-               for (int i = 0; i < vec_num; i++) {
--                Value *vec = II ? II : UndefValue::get(VectorType::get(elt_dst_type, vec_num));
-+                Value *vec = II ? II : UndefValue::get(VectorType::get(elt_dst_type, vec_num, false));
-                 Value *cv = ConstantInt::get(Type::getInt32Ty(elt_type->getContext()), i);
-                 Value *org = builder->CreateExtractElement(arg, cv);
-                 Value *cvt = builder->CreateIntCast(org, elt_dst_type, sign);
-@@ -658,7 +658,7 @@ error:
-             if (elt_type->getTypeID() != Type::FloatTyID) {
-               Value *II = NULL;
-               for (int i = 0; i < vec_num; i++) {
--                Value *vec = II ? II : UndefValue::get(VectorType::get(Type::getFloatTy(elt_type->getContext()), vec_num));
-+                Value *vec = II ? II : UndefValue::get(VectorType::get(Type::getFloatTy(elt_type->getContext()), vec_num, false));
-                 Value *cv = ConstantInt::get(Type::getInt32Ty(elt_type->getContext()), i);
-                 Value *org = builder->CreateExtractElement(arg, cv);
-                 Value* cvt  = builder->CreateFPCast(org, Type::getFloatTy(module->getContext()));
-diff --git backend/src/llvm/llvm_to_gen.cpp backend/src/llvm/llvm_to_gen.cpp
-index 7f7deffe..9e8ccc67 100644
---- a/backend/src/llvm/llvm_to_gen.cpp
-+++ b/backend/src/llvm/llvm_to_gen.cpp
-@@ -358,7 +358,7 @@ namespace gbe
-     passes.add(createScalarReplAggregatesPass(64, true, -1, -1, 64));
- #endif
-     passes.add(createLoadStoreOptimizationPass());
--    passes.add(createConstantPropagationPass());
-+    //passes.add(createConstantPropagationPass());
-     passes.add(createPromoteMemoryToRegisterPass());
-     if(optLevel > 0)
-       passes.add(createGVNPass());                 // Remove redundancies
-@@ -367,11 +367,11 @@ namespace gbe
-     passes.add(createScalarizePass());             // Expand all vector ops
-     passes.add(createExpandLargeIntegersPass());   // legalize large integer operation
-     passes.add(createInstructionCombiningPass());  // legalize will generate some silly instructions
--    passes.add(createConstantPropagationPass());   // propagate constant after scalarize/legalize
-+    //passes.add(createConstantPropagationPass());   // propagate constant after scalarize/legalize
-     passes.add(createExpandConstantExprPass());    // constant prop may generate ConstantExpr
-     passes.add(createPromoteIntegersPass());       // align integer size to power of two
-     passes.add(createRemoveGEPPass(unit));         // Constant prop may generate gep
--    passes.add(createDeadInstEliminationPass());   // Remove simplified instructions
-+    //passes.add(createDeadInstEliminationPass());   // Remove simplified instructions
-     passes.add(createCFGSimplificationPass());     // Merge & remove BBs
-     passes.add(createLowerSwitchPass());           // simplify cfg will generate switch-case instruction
-     if (profiling) {
diff --git a/srcpkgs/beignet/patches/musl.patch b/srcpkgs/beignet/patches/musl.patch
deleted file mode 100644
index cefafbb65588..000000000000
--- a/srcpkgs/beignet/patches/musl.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/backend/src/backend/gen/gen_mesa_disasm.c
-+++ b/backend/src/backend/gen/gen_mesa_disasm.c
-@@ -1137,7 +1137,7 @@ static uint32_t __conv_half_to_float(uint16_t h)
-       // Adjust mantissa so it's normalized (and keep
-       // track of exponent adjustment)
-       int e = -1;
--      uint m = i.mantissa;
-+      unsigned int m = i.mantissa;
-       do {
-         e++;
-         m <<= 1;
diff --git a/srcpkgs/beignet/template b/srcpkgs/beignet/template
deleted file mode 100644
index dce6bbb7ae24..000000000000
--- a/srcpkgs/beignet/template
+++ /dev/null
@@ -1,22 +0,0 @@
-# Template file for 'beignet'
-pkgname=beignet
-version=1.3.2
-revision=10
-archs="i686* x86_64*"
-wrksrc="Beignet-${version}-Source"
-build_style=cmake
-hostmakedepends="clang llvm pkg-config"
-makedepends="MesaLib-devel libedit-devel libffi-devel ocl-icd-devel zlib-devel
- libXfixes-devel"
-depends="ocl-icd"
-short_desc="Beignet GPGPU System for Intel GPUs"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://www.freedesktop.org/wiki/Software/Beignet/"
-distfiles="https://01.org/sites/default/files/${pkgname}-${version}-source.tar.gz"
-checksum=c555edba149de23243965a703f39f79fa06f15bcff5a3762b5544b0925010b43
-
-post_install() {
-	# remove CL headers, we do use opencl-headers instead.
-	rm -r ${DESTDIR}/usr/include
-}
diff --git a/srcpkgs/beignet/update b/srcpkgs/beignet/update
deleted file mode 100644
index ca41e0afe60c..000000000000
--- a/srcpkgs/beignet/update
+++ /dev/null
@@ -1 +0,0 @@
-site="https://01.org/beignet/downloads"
diff --git a/srcpkgs/removed-packages/template b/srcpkgs/removed-packages/template
index 0923c53cfc05..d59bd20f820c 100644
--- a/srcpkgs/removed-packages/template
+++ b/srcpkgs/removed-packages/template
@@ -1,7 +1,7 @@
 # Template file for 'removed-packages'
 pkgname=removed-packages
 version=0.1
-revision=69
+revision=70
 build_style=meta
 short_desc="Uninstalls packages removed from repository"
 maintainer="Piotr Wójcik <chocimier@tlen.pl>"
@@ -25,6 +25,7 @@ replaces="
  atom<=1.44.0_1
  avogadro-devel<=1.2.0_8
  avogadro<=1.2.0_8
+ beignet<=1.3.2_10
  bokken<=1.8_3
  bomi<=0.9.11_17
  burp-client<=1.4.40_13

From 6964de5f67df9529467c8254ff1b592236d79fa1 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 20/25] ldc: rebuild for llvm14

---
 srcpkgs/ldc/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/ldc/template b/srcpkgs/ldc/template
index a27280dde3b8..e21bc6555e38 100644
--- a/srcpkgs/ldc/template
+++ b/srcpkgs/ldc/template
@@ -1,7 +1,7 @@
 # Template file for 'ldc'
 pkgname=ldc
 version=1.28.0
-revision=1
+revision=2
 wrksrc="ldc-${version}-src"
 build_style=cmake
 configure_args="

From 1c4e16241bbb666e1973a387e1daa62d582c09a3 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 22:31:25 +0200
Subject: [PATCH 21/25] ldc: update to 1.29.0.

---
 srcpkgs/ldc/template | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/srcpkgs/ldc/template b/srcpkgs/ldc/template
index e21bc6555e38..1d72a8805eb6 100644
--- a/srcpkgs/ldc/template
+++ b/srcpkgs/ldc/template
@@ -1,7 +1,7 @@
 # Template file for 'ldc'
 pkgname=ldc
-version=1.28.0
-revision=2
+version=1.29.0
+revision=1
 wrksrc="ldc-${version}-src"
 build_style=cmake
 configure_args="
@@ -11,7 +11,7 @@ configure_args="
  -DBASH_COMPLETION_COMPLETIONSDIR=/usr/share/bash-completion
  -DC_SYSTEM_LIBS='unwind;m;pthread;rt;dl'"
 conf_files="/etc/ldc2.conf"
-hostmakedepends="dmd llvm12 perl pkg-config"
+hostmakedepends="dmd llvm14 perl pkg-config"
 makedepends="libcurl-devel libffi-devel ncurses-devel zlib-devel
  llvm-libunwind-devel"
 depends="ldc-runtime llvm-libunwind-devel"
@@ -22,7 +22,7 @@ license="BSD-3-Clause, BSL-1.0"
 homepage="https://wiki.dlang.org/LDC"
 changelog="https://raw.githubusercontent.com/ldc-developers/ldc/master/CHANGELOG.md"
 distfiles="https://github.com/ldc-developers/ldc/releases/download/v${version}/ldc-${version}-src.tar.gz"
-checksum=17fee8bb535bcb8cda0a45947526555c46c045f302a7349cc8711b254e54cf09
+checksum=d0c066eb965467625d9c5e75c00c583451b9ffa363601f9e37275ca8a8aea140
 nopie=yes
 nocross="dmd compilation fails on cross"
 # tests timeout on musl; also require unpackaged python3-lit

From 45dcdc644cd4034cc2d2622da6af034f05d1eee2 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 22/25] include-what-you-use: update to 0.18.

---
 srcpkgs/include-what-you-use/template | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/include-what-you-use/template b/srcpkgs/include-what-you-use/template
index b13bb7ee56af..297669f60459 100644
--- a/srcpkgs/include-what-you-use/template
+++ b/srcpkgs/include-what-you-use/template
@@ -1,6 +1,6 @@
 # Template file for 'include-what-you-use'
 pkgname=include-what-you-use
-version=0.16
+version=0.18
 revision=1
 wrksrc="${pkgname}"
 build_style=cmake
@@ -12,7 +12,7 @@ maintainer="Leah Neukirchen <leah@vuxu.org>"
 license="NCSA"
 homepage="https://include-what-you-use.org/"
 distfiles="https://include-what-you-use.org/downloads/${pkgname}-${version}.src.tar.gz"
-checksum=8d6fc9b255343bc1e5ec459e39512df1d51c60e03562985e0076036119ff5a1c
+checksum=9102fc8419294757df86a89ce6ec305f8d90a818d1f2598a139d15eb1894b8f3
 python_version=3
 
 post_install() {

From 9db6784f5563490918c7b823d5db7322edb346f8 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:18:24 +0200
Subject: [PATCH 23/25] SPIRV-LLVM-Translator: update to 14.0.0.

---
 common/shlibs                          |  1 +
 srcpkgs/SPIRV-LLVM-Translator/template | 11 ++++++-----
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/common/shlibs b/common/shlibs
index 81acc39defb4..f13c3de2ab6b 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -981,6 +981,7 @@ libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
 libLLVM-14.so libllvm14-14.0.3_1
+libLLVMSPIRVLib.so.14 SPIRV-LLVM-Translator-14.0.0_1
 libisofs.so.6 libisofs-0.6.24_1
 libmpack.so.0 libmpack-1.0.5_1
 libGeoIP.so.1 libgeoip-1.4.8_1
diff --git a/srcpkgs/SPIRV-LLVM-Translator/template b/srcpkgs/SPIRV-LLVM-Translator/template
index 2504cabed367..2277d062d992 100644
--- a/srcpkgs/SPIRV-LLVM-Translator/template
+++ b/srcpkgs/SPIRV-LLVM-Translator/template
@@ -1,19 +1,20 @@
 # Template file for 'SPIRV-LLVM-Translator'
 pkgname=SPIRV-LLVM-Translator
-version=12.0.0
+version=14.0.0
 revision=1
 build_style=cmake
 make_build_args="llvm-spirv"
-configure_args="-Wno-dev -DLLVM_LINK_LLVM_DYLIB=ON -DCMAKE_SKIP_RPATH=ON
- -DLLVM_SPIRV_INCLUDE_TESTS=OFF -DBUILD_SHARED_LIBS=ON"
+configure_args="-DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release
+ -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_SKIP_RPATH=ON -DLLVM_INCLUDE_TESTS=OFF
+ -DLLVM_LINK_LLVM_DYLIB=ON -DLLVM_EXTERNAL_LIT=/usr/bin/lit -Wno-dev -DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=/usr/include/spirv/ "
 hostmakedepends="clang clang-tools-extra llvm"
-makedepends="llvm"
+makedepends="llvm SPIRV-Headers"
 short_desc="API and commands for processing SPIR-V modules"
 maintainer="Orphaned <orphan@voidlinux.org>"
 license="NCSA"
 homepage="https://github.com/KhronosGroup/SPIRV-LLVM-Translator"
 distfiles="https://github.com/KhronosGroup/${pkgname}/archive/refs/tags/v${version}.tar.gz"
-checksum=6e4fad04203f25fcde4c308c53e9f59bd05a390978992db3212d4b63aff62108
+checksum=1afc52bb4e39aeb9b5b69324a201c81bd986364f347b559995eff6fd6f013318
 make_check=no
 
 post_install() {

From d965e669c62c68add34496b8a7746e31d22c447a Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:17:29 +0200
Subject: [PATCH 24/25] SPIRV-Headers: update to 1.3.211.0.

---
 srcpkgs/SPIRV-Headers/template | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/SPIRV-Headers/template b/srcpkgs/SPIRV-Headers/template
index 5dcf457c04c7..ce8288174e48 100644
--- a/srcpkgs/SPIRV-Headers/template
+++ b/srcpkgs/SPIRV-Headers/template
@@ -1,11 +1,13 @@
 # Template file for 'SPIRV-Headers'
 pkgname=SPIRV-Headers
-version=1.5.4.raytracing.fixed
+version=1.3.211.0
 revision=1
+reverts="1.5.4.raytracing.fixed"
+wrksrc=${pkgname}-sdk-${version}
 build_style=cmake
 short_desc="Machine-readable files for the SPIR-V Registry"
 maintainer="Orphaned <orphan@voidlinux.org>"
 license="GPL-3.0-or-later"
 homepage="https://github.com/KhronosGroup/SPIRV-Headers"
-distfiles="https://github.com/KhronosGroup/SPIRV-Headers/archive/${version}.tar.gz"
-checksum=df2ad2520be4d95a479fa248921065885bbf435a658349a7fc164ad7b26b68c6
+distfiles="https://github.com/KhronosGroup/SPIRV-Headers/archive/sdk-${version}.tar.gz"
+checksum=30a78e61bd812c75e09fdc7a319af206b1044536326bc3e85fea818376a12568

From 6d98f9900b9a093d1187933679682f65a0258d69 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:35:43 +0200
Subject: [PATCH 25/25] ispc: update to 1.17.0.

---
 .../ispc/patches/cmake-build-type-none.patch  |   18 -
 srcpkgs/ispc/patches/llvm12-001.patch         |   57 -
 srcpkgs/ispc/patches/llvm12-002.patch         |  923 --------
 srcpkgs/ispc/patches/llvm12-003.patch         | 1504 ------------
 srcpkgs/ispc/patches/llvm12-004.patch         |   34 -
 srcpkgs/ispc/patches/llvm12-005.patch         |  372 ---
 srcpkgs/ispc/patches/llvm12-006.patch         |  126 -
 srcpkgs/ispc/patches/llvm12-007.patch         |  160 --
 srcpkgs/ispc/patches/llvm12-008.patch         |  149 --
 srcpkgs/ispc/patches/llvm12-009.patch         | 2109 -----------------
 srcpkgs/ispc/template                         |    6 +-
 11 files changed, 3 insertions(+), 5455 deletions(-)
 delete mode 100644 srcpkgs/ispc/patches/cmake-build-type-none.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-001.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-002.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-003.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-004.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-005.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-006.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-007.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-008.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-009.patch

diff --git a/srcpkgs/ispc/patches/cmake-build-type-none.patch b/srcpkgs/ispc/patches/cmake-build-type-none.patch
deleted file mode 100644
index 411e353c7314..000000000000
--- a/srcpkgs/ispc/patches/cmake-build-type-none.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Index: ispc-1.15.0/CMakeLists.txt
-===================================================================
---- ispc-1.15.0.orig/CMakeLists.txt
-+++ ispc-1.15.0/CMakeLists.txt
-@@ -157,13 +157,6 @@ set(OUTPUT_RELEASE Release/bin)
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin )
- 
- if(CMAKE_BUILD_TYPE)
--    # Validate build type
--    set(CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo")
--
--    string(FIND "${CONFIGURATION_TYPES}" "${CMAKE_BUILD_TYPE}" MATCHED_CONFIG)
--    if (${MATCHED_CONFIG} EQUAL -1)
--         message(FATAL_ERROR "CMAKE_BUILD_TYPE (${CMAKE_BUILD_TYPE}) allows only the following values: ${CONFIGURATION_TYPES}")
--    endif()
- else(NOT CMAKE_BUILD_TYPE)
-     set(CMAKE_BUILD_TYPE "Release")
-     message(STATUS "Build type not specified: Use Release by default.")
diff --git a/srcpkgs/ispc/patches/llvm12-001.patch b/srcpkgs/ispc/patches/llvm12-001.patch
deleted file mode 100644
index 5f2d3f5a409e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-001.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 1c0f89dccb774f216c7f6e76a99ee907a1e641cb Mon Sep 17 00:00:00 2001
-From: Dmitry Babokin <dmitry.y.babokin@intel.com>
-Date: Tue, 22 Dec 2020 17:03:59 -0800
-Subject: [PATCH] Fix to work with LLVM trunk after llvm/llvm-project@41c3b2713
-
----
- src/ctx.cpp | 18 ++++++++++++------
- 1 file changed, 12 insertions(+), 6 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 6fbb8b9cf..977e9d222 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1473,11 +1473,15 @@ void FunctionEmitContext::AddDebugPos(llvm::Value *value, const SourcePos *pos,
-     llvm::Instruction *inst = llvm::dyn_cast<llvm::Instruction>(value);
-     if (inst != NULL && m->diBuilder) {
-         SourcePos p = pos ? *pos : currentPos;
--        if (p.first_line != 0)
-+        if (p.first_line != 0) {
-             // If first_line == 0, then we're in the middle of setting up
-             // the standard library or the like; don't add debug positions
-             // for those functions
--            inst->setDebugLoc(llvm::DebugLoc::get(p.first_line, p.first_column, scope ? scope : GetDIScope()));
-+            scope = scope ? scope : GetDIScope();
-+            llvm::DebugLoc diLoc =
-+                llvm::DILocation::get(scope->getContext(), p.first_line, p.first_column, scope, nullptr, false);
-+            inst->setDebugLoc(diLoc);
-+        }
-     }
- }
- 
-@@ -1518,9 +1522,10 @@ void FunctionEmitContext::EmitVariableDebugInfo(Symbol *sym) {
-     llvm::DILocalVariable *var = m->diBuilder->createAutoVariable(
-         scope, sym->name, sym->pos.GetDIFile(), sym->pos.first_line, diType, true /* preserve through opts */);
- 
-+    llvm::DebugLoc diLoc =
-+        llvm::DILocation::get(scope->getContext(), sym->pos.first_line, sym->pos.first_column, scope, nullptr, false);
-     llvm::Instruction *declareInst =
--        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(),
--                                    llvm::DebugLoc::get(sym->pos.first_line, sym->pos.first_column, scope), bblock);
-+        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(), diLoc, bblock);
-     AddDebugPos(declareInst, &sym->pos, scope);
- }
- 
-@@ -1535,9 +1540,10 @@ void FunctionEmitContext::EmitFunctionParameterDebugInfo(Symbol *sym, int argNum
-         m->diBuilder->createParameterVariable(scope, sym->name, argNum + 1, sym->pos.GetDIFile(), sym->pos.first_line,
-                                               diType, true /* preserve through opts */, flags);
- 
-+    llvm::DebugLoc diLoc =
-+        llvm::DILocation::get(scope->getContext(), sym->pos.first_line, sym->pos.first_column, scope, nullptr, false);
-     llvm::Instruction *declareInst =
--        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(),
--                                    llvm::DebugLoc::get(sym->pos.first_line, sym->pos.first_column, scope), bblock);
-+        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(), diLoc, bblock);
-     AddDebugPos(declareInst, &sym->pos, scope);
- }
- 
diff --git a/srcpkgs/ispc/patches/llvm12-002.patch b/srcpkgs/ispc/patches/llvm12-002.patch
deleted file mode 100644
index 0903f30da10d..000000000000
--- a/srcpkgs/ispc/patches/llvm12-002.patch
+++ /dev/null
@@ -1,923 +0,0 @@
-From 0597a79d084c014780136da906afe21d15e982cb Mon Sep 17 00:00:00 2001
-From: DeepakRajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Tue, 5 Jan 2021 13:53:30 -0800
-Subject: [PATCH] Remove LLVM 8.0 and LLVM 9.0. (#1966)
-
----
- .appveyor.yml                        |  3 --
- .travis.yml                          |  7 ---
- CMakeLists.txt                       | 12 ++----
- src/ast.cpp                          |  4 --
- src/ctx.cpp                          | 30 -------------
- src/gen/GlobalsLocalization.cpp      |  4 --
- src/ispc.cpp                         | 20 ---------
- src/ispc.h                           |  3 +-
- src/ispc_version.h                   |  4 +-
- src/main.cpp                         | 13 ------
- src/module.cpp                       | 27 ------------
- src/module.h                         |  2 -
- src/opt.cpp                          | 64 ++--------------------------
- src/type.cpp                         | 10 ++---
- tests/lit-tests/1771.ispc            |  1 -
- tests/lit-tests/1844.ispc            |  3 --
- tests/lit-tests/1926.ispc            |  2 -
- tests/lit-tests/cpus_x86.ispc        |  2 +
- tests/lit-tests/cpus_x86_llvm10.ispc | 11 -----
- tests/lit-tests/lit.cfg              |  5 ---
- 20 files changed, 14 insertions(+), 213 deletions(-)
- delete mode 100644 tests/lit-tests/cpus_x86_llvm10.ispc
-
-diff --git a/.appveyor.yml b/.appveyor.yml
-index 451a7b3e0..7945cca2a 100644
---- a/.appveyor.yml
-+++ b/.appveyor.yml
-@@ -41,8 +41,6 @@ environment:
-       LLVM_VERSION: latest
-     - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
-       LLVM_VERSION: 10.0
--    - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
--      LLVM_VERSION: 9.0
- 
- for:
- -
-@@ -62,7 +60,6 @@ for:
-         if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2019" ( (set generator="Visual Studio 16") & (set vsversion=2019))
-         set LLVM_TAR=llvm-11.0.0-win.vs2019-Release+Asserts-x86.arm.wasm.7z
-         if "%LLVM_VERSION%"=="10.0" (set LLVM_TAR=llvm-10.0.1-win.vs2019-Release+Asserts-x86.arm.wasm.zip)
--        if "%LLVM_VERSION%"=="9.0" (set LLVM_TAR=llvm-9.0.1-win.vs2017-Release+Asserts-x86.arm.wasm.zip)
-   install:
-     - ps: choco install --no-progress winflexbison3 wget 7zip
-     - cmd: |-
-diff --git a/.travis.yml b/.travis.yml
-index 2e96017a6..3a6b85264 100644
---- a/.travis.yml
-+++ b/.travis.yml
-@@ -108,13 +108,6 @@ jobs:
-         - LLVM_TAR=llvm-10.0.1-ubuntu16.04-Release+Asserts-x86.arm.wasm.tar.xz
-         - LLVM_REPO=https://github.com/dbabokin/llvm-project
-         - ISPC_HOME=$TRAVIS_BUILD_DIR
--    # LLVM 9.0 + Ubuntu 16.04: build, lit tests, examples (build + run), benchmarks (build + trial run)
--    - <<: *my_tag
--      env:
--        - LLVM_VERSION=9.0 OS=Ubuntu16.04
--        - LLVM_TAR=llvm-9.0.1-ubuntu16.04-Release+Asserts-x86.arm.wasm.tar.xz
--        - LLVM_REPO=https://github.com/dbabokin/llvm-project
--        - ISPC_HOME=$TRAVIS_BUILD_DIR
-     # WASM enabled build
-     # LLVM 11.0 + Ubuntu 16.04: build, lit tests, examples (build), benchmarks (build + trial run)
-     - <<: *my_tag
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 5fa863fcf..a6b3ed251 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -241,10 +241,8 @@ if (X86_ENABLED)
-         avx2-i8x32 avx2-i16x16
-         avx2-i32x4 avx2-i32x8 avx2-i32x16 avx2-i64x4
-         avx512knl-i32x16
--        avx512skx-i32x16 avx512skx-i32x8)
--    if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "10.0.0")
--        list(APPEND ISPC_TARGETS avx512skx-i8x64 avx512skx-i16x32)
--    endif()
-+        avx512skx-i32x16 avx512skx-i32x8
-+        avx512skx-i8x64 avx512skx-i16x32)
- endif()
- if (ARM_ENABLED)
-     list(APPEND ISPC_TARGETS neon-i8x16 neon-i16x8 neon-i32x4 neon-i32x8)
-@@ -259,11 +257,7 @@ if (WASM_ENABLED)
- endif()
- 
- set(CLANG_LIBRARY_LIST clangFrontend clangDriver clangSerialization clangParse clangSema clangAnalysis clangAST clangBasic clangEdit clangLex)
--set(LLVM_COMPONENTS engine ipo bitreader bitwriter instrumentation linker option)
--
--if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "10.0.0")
--    list(APPEND LLVM_COMPONENTS frontendopenmp)
--endif()
-+set(LLVM_COMPONENTS engine ipo bitreader bitwriter instrumentation linker option frontendopenmp)
- 
- if (X86_ENABLED)
-     list(APPEND LLVM_COMPONENTS x86)
-diff --git a/src/ast.cpp b/src/ast.cpp
-index 20f75a29c..5a43c4854 100644
---- a/src/ast.cpp
-+++ b/src/ast.cpp
-@@ -44,9 +44,7 @@
- #include "sym.h"
- #include "util.h"
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/TimeProfiler.h>
--#endif
- ///////////////////////////////////////////////////////////////////////////
- // ASTNode
- 
-@@ -62,9 +60,7 @@ void AST::AddFunction(Symbol *sym, Stmt *code) {
- }
- 
- void AST::GenerateIR() {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope TimeScope("GenerateIR");
--#endif
-     for (unsigned int i = 0; i < functions.size(); ++i)
-         functions[i]->GenerateIR();
- }
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 977e9d222..42c4ea09d 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -309,21 +309,13 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym, llvm::F
-             char buf[256];
-             snprintf(buf, sizeof(buf), "__off_all_on_mask_%s", g->target->GetISAString());
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_8_0
--            llvm::Constant *offFunc = m->module->getOrInsertFunction(buf, LLVMTypes::VoidType);
--#else // LLVM 9.0+
-             llvm::FunctionCallee offFuncCallee = m->module->getOrInsertFunction(buf, LLVMTypes::VoidType);
-             llvm::Constant *offFunc = llvm::cast<llvm::Constant>(offFuncCallee.getCallee());
--#endif
-             AssertPos(currentPos, llvm::isa<llvm::Function>(offFunc));
-             llvm::BasicBlock *offBB = llvm::BasicBlock::Create(*g->ctx, "entry", (llvm::Function *)offFunc, 0);
-             llvm::StoreInst *inst = new llvm::StoreInst(LLVMMaskAllOff, globalAllOnMaskPtr, offBB);
-             if (g->opt.forceAlignedMemory) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-                 inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-             }
-             llvm::ReturnInst::Create(*g->ctx, offBB);
-         }
-@@ -2288,11 +2280,7 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
- #endif
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-     }
- 
-     AddDebugPos(inst);
-@@ -2431,11 +2419,7 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-                 // vs the proper alignment in practice.)
-                 int align = 1;
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                inst->setAlignment(align);
--#else // LLVM 10.0+
-                 inst->setAlignment(llvm::MaybeAlign(align).valueOrOne());
--#endif
-             }
- 
-             AddDebugPos(inst);
-@@ -2649,11 +2633,7 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-         align = g->target->getNativeVectorAlignment();
- 
-     if (align != 0) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(align);
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(align).valueOrOne());
--#endif
-     }
-     // Don't add debugging info to alloca instructions
-     return inst;
-@@ -2926,11 +2906,7 @@ void FunctionEmitContext::StoreInst(llvm::Value *value, llvm::Value *ptr, const
-     llvm::StoreInst *inst = new llvm::StoreInst(value, ptr, bblock);
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-     }
- 
- #ifdef ISPC_GENX_ENABLED
-@@ -3025,16 +3001,10 @@ void FunctionEmitContext::MemcpyInst(llvm::Value *dest, llvm::Value *src, llvm::
-     }
-     if (align == NULL)
-         align = LLVMInt32(1);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_8_0
--    llvm::Constant *mcFunc =
--        m->module->getOrInsertFunction("llvm.memcpy.p0i8.p0i8.i64", LLVMTypes::VoidType, LLVMTypes::VoidPointerType,
--                                       LLVMTypes::VoidPointerType, LLVMTypes::Int64Type, LLVMTypes::BoolType);
--#else // LLVM 9.0+
-     llvm::FunctionCallee mcFuncCallee =
-         m->module->getOrInsertFunction("llvm.memcpy.p0i8.p0i8.i64", LLVMTypes::VoidType, LLVMTypes::VoidPointerType,
-                                        LLVMTypes::VoidPointerType, LLVMTypes::Int64Type, LLVMTypes::BoolType);
-     llvm::Constant *mcFunc = llvm::cast<llvm::Constant>(mcFuncCallee.getCallee());
--#endif
-     AssertPos(currentPos, mcFunc != NULL);
-     AssertPos(currentPos, llvm::isa<llvm::Function>(mcFunc));
- 
-diff --git a/src/gen/GlobalsLocalization.cpp b/src/gen/GlobalsLocalization.cpp
-index 193a66289..a176e9462 100644
---- a/src/gen/GlobalsLocalization.cpp
-+++ b/src/gen/GlobalsLocalization.cpp
-@@ -470,11 +470,7 @@ void GlobalsLocalization::LocalizeGlobals(LocalizationInfo &LI) {
-         Instruction &FirstI = *Fn->getEntryBlock().begin();
-         Type *ElemTy = GV->getType()->getElementType();
-         AllocaInst *Alloca = new AllocaInst(ElemTy, 0, GV->getName() + ".local", &FirstI);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        Alloca->setAlignment(GV->getAlignment());
--#else // LLVM 10.0+
-         Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()));
--#endif
-         if (!isa<UndefValue>(GV->getInitializer()))
-             new StoreInst(GV->getInitializer(), Alloca, &FirstI);
- 
-diff --git a/src/ispc.cpp b/src/ispc.cpp
-index e2d0f206e..fac5233f7 100644
---- a/src/ispc.cpp
-+++ b/src/ispc.cpp
-@@ -272,9 +272,7 @@ typedef enum {
-     CPU_Silvermont,
- 
-     CPU_ICX,
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     CPU_TGL,
--#endif
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-     CPU_ADL,
-     CPU_SPR,
-@@ -365,10 +363,8 @@ class AllCPUs {
- 
-         names[CPU_ICX].push_back("icelake-server");
-         names[CPU_ICX].push_back("icx");
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         names[CPU_TGL].push_back("tigerlake");
-         names[CPU_TGL].push_back("tgl");
--#endif
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-         names[CPU_ADL].push_back("alderlake");
-         names[CPU_ADL].push_back("adl");
-@@ -411,11 +407,9 @@ class AllCPUs {
-         compat[CPU_ADL] = Set(CPU_ADL, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont,
-                               CPU_SandyBridge, CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_None);
- #endif
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         compat[CPU_TGL] =
-             Set(CPU_TGL, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont, CPU_SandyBridge,
-                 CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_SKX, CPU_ICL, CPU_ICX, CPU_None);
--#endif
-         compat[CPU_ICX] = Set(CPU_ICX, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont,
-                               CPU_SandyBridge, CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_SKX, CPU_ICL, CPU_None);
- 
-@@ -556,9 +550,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-         case CPU_SPR:
- #endif
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         case CPU_TGL:
--#endif
-         case CPU_ICX:
-         case CPU_ICL:
-         case CPU_SKX:
-@@ -916,7 +908,6 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         }
-         break;
-     case ISPCTarget::avx512skx_i8x64:
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0 // LLVM 10.0+
-         // This target is enabled only for LLVM 10.0 and later
-         // because LLVM requires a number of fixes, which are
-         // committed to LLVM 11.0 and can be applied to 10.0, but not
-@@ -937,12 +928,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         this->m_hasVecPrefetch = false;
-         CPUfromISA = CPU_SKX;
-         break;
--#else
--        unsupported_target = true;
--        break;
--#endif
-     case ISPCTarget::avx512skx_i16x32:
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0 // LLVM 10.0+
-         // This target is enabled only for LLVM 10.0 and later
-         // because LLVM requires a number of fixes, which are
-         // committed to LLVM 11.0 and can be applied to 10.0, but not
-@@ -963,10 +949,6 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         this->m_hasVecPrefetch = false;
-         CPUfromISA = CPU_SKX;
-         break;
--#else
--        unsupported_target = true;
--        break;
--#endif
- #ifdef ISPC_ARM_ENABLED
-     case ISPCTarget::neon_i8x16:
-         this->m_isa = Target::NEON;
-@@ -1662,11 +1644,9 @@ Globals::Globals() {
-     isMultiTargetCompilation = false;
-     errorLimit = -1;
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     enableTimeTrace = false;
-     // set default granularity to 500.
-     timeTraceGranularity = 500;
--#endif
-     target = NULL;
-     ctx = new llvm::LLVMContext;
- 
-diff --git a/src/ispc.h b/src/ispc.h
-index e25d8830e..de357a21c 100644
---- a/src/ispc.h
-+++ b/src/ispc.h
-@@ -695,13 +695,12 @@ struct Globals {
- 
-     /* Number of errors to show in ISPC. */
-     int errorLimit;
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-+
-     /* When true, enable compile time tracing. */
-     bool enableTimeTrace;
- 
-     /* When compile time tracing is enabled, set time granularity. */
-     int timeTraceGranularity;
--#endif
- };
- 
- enum {
-diff --git a/src/ispc_version.h b/src/ispc_version.h
-index d781347fd..434b2d678 100644
---- a/src/ispc_version.h
-+++ b/src/ispc_version.h
-@@ -44,13 +44,11 @@
- 
- #define ISPC_LLVM_VERSION (LLVM_VERSION_MAJOR * 10000 + LLVM_VERSION_MINOR * 100)
- 
--#define ISPC_LLVM_8_0 80000
--#define ISPC_LLVM_9_0 90000
- #define ISPC_LLVM_10_0 100000
- #define ISPC_LLVM_11_0 110000
- #define ISPC_LLVM_12_0 120000
- 
--#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_8_0
-+#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_10_0
- #define LATEST_SUPPORTED_LLVM ISPC_LLVM_12_0
- 
- #ifdef __ispc__xstr
-diff --git a/src/main.cpp b/src/main.cpp
-index 8f64330cc..5c920eabc 100644
---- a/src/main.cpp
-+++ b/src/main.cpp
-@@ -55,9 +55,7 @@
- #include <llvm/Support/Signals.h>
- #include <llvm/Support/TargetRegistry.h>
- #include <llvm/Support/TargetSelect.h>
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/ToolOutputFile.h>
--#endif
- 
- #ifdef ISPC_HOST_IS_WINDOWS
- #define strcasecmp stricmp
-@@ -181,11 +179,9 @@ static void lPrintVersion() {
-     snprintf(targetHelp, sizeof(targetHelp), "[--target-os=<os>]\t\t\tSelect target OS.  <os>={%s}",
-              g->target_registry->getSupportedOSes().c_str());
-     PrintWithWordBreaks(targetHelp, 24, TerminalWidth(), stdout);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     printf("    [--time-trace]\t\t\tTurn on time profiler. Generates JSON file based on output filename.\n");
-     printf("    [--time-trace-granularity=<value>\tMinimum time granularity (in microseconds) traced by time "
-            "profiler.\n");
--#endif
-     printf("    [--version]\t\t\t\tPrint ispc version\n");
- #ifdef ISPC_GENX_ENABLED
-     printf("    [--vc-options=<\"-option1 -option2...\">]\t\t\t\tPass additional options to Vector Compiler backend\n");
-@@ -462,7 +458,6 @@ static void setCallingConv(VectorCallStatus vectorCall, Arch arch) {
-     }
- }
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- static void writeCompileTimeFile(const char *outFileName) {
-     llvm::SmallString<128> jsonFileName(outFileName);
-     jsonFileName.append(".json");
-@@ -479,7 +474,6 @@ static void writeCompileTimeFile(const char *outFileName) {
-     of->keep();
-     return;
- }
--#endif
- 
- static std::set<int> ParsingPhases(char *stages, ArgErrors &errorHandler) {
-     constexpr int parsing_limit = 100;
-@@ -791,12 +785,10 @@ int main(int Argc, char *Argv[]) {
-             }
-         } else if (!strncmp(argv[i], "--force-alignment=", 18)) {
-             g->forceAlignment = atoi(argv[i] + 18);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         } else if (!strcmp(argv[i], "--time-trace")) {
-             g->enableTimeTrace = true;
-         } else if (!strncmp(argv[i], "--time-trace-granularity=", 25)) {
-             g->timeTraceGranularity = atoi(argv[i] + 25);
--#endif
-         } else if (!strcmp(argv[i], "--woff") || !strcmp(argv[i], "-woff")) {
-             g->disableWarnings = true;
-             g->emitPerfWarnings = false;
-@@ -1059,7 +1051,6 @@ int main(int Argc, char *Argv[]) {
- 
-     // This needs to happen after the TargetOS is decided.
-     setCallingConv(vectorCall, arch);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     if (g->enableTimeTrace) {
-         llvm::timeTraceProfilerInitialize(g->timeTraceGranularity, "ispc");
-     }
-@@ -1077,9 +1068,5 @@ int main(int Argc, char *Argv[]) {
-         }
-         llvm::timeTraceProfilerCleanup();
-     }
--#else
--    int ret = Module::CompileAndOutput(file, arch, cpu, targets, flags, ot, outFileName, headerFileName, depsFileName,
--                                       depsTargetName, hostStubFileName, devStubFileName);
--#endif
-     return ret;
- }
-diff --git a/src/module.cpp b/src/module.cpp
-index fe7452df1..a85fec77a 100644
---- a/src/module.cpp
-+++ b/src/module.cpp
-@@ -170,9 +170,7 @@ Module::Module(const char *fn) {
-     module->setDataLayout(g->target->getDataLayout()->getStringRepresentation());
- 
-     if (g->generateDebuggingSymbols) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Create Debug Data");
--#endif
-         // To enable debug information on Windows, we have to let llvm know, that
-         // debug information should be emitted in CodeView format.
-         if (g->target_os == TargetOS::windows) {
-@@ -226,10 +224,8 @@ extern YY_BUFFER_STATE yy_create_buffer(FILE *, int);
- extern void yy_delete_buffer(YY_BUFFER_STATE);
- 
- int Module::CompileFile() {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope CompileFileTimeScope(
-         "CompileFile", llvm::StringRef(filename + ("_" + std::string(g->target->GetISAString()))));
--#endif
-     extern void ParserInit();
-     ParserInit();
- 
-@@ -238,18 +234,14 @@ int Module::CompileFile() {
-     // variable 'm' to be initialized and available (which it isn't until
-     // the Module constructor returns...)
-     {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("DefineStdlib");
--#endif
-         DefineStdlib(symbolTable, g->ctx, module, g->includeStdlib);
-     }
- 
-     bool runPreprocessor = g->runCPP;
- 
-     if (runPreprocessor) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Frontend parser");
--#endif
-         if (!IsStdin(filename)) {
-             // Try to open the file first, since otherwise we crash in the
-             // preprocessor if the file doesn't exist.
-@@ -268,9 +260,7 @@ int Module::CompileFile() {
-         yyparse();
-         yy_delete_buffer(strbuf);
-     } else {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Frontend parser");
--#endif
-         // No preprocessor, just open up the file if it's not stdin..
-         FILE *f = NULL;
-         if (IsStdin(filename)) {
-@@ -297,9 +287,7 @@ int Module::CompileFile() {
- 
-     if (diBuilder)
-         diBuilder->finalize();
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope TimeScope("Optimize");
--#endif
-     if (errorCount == 0)
-         Optimize(module, g->opt.level);
- 
-@@ -1243,15 +1231,8 @@ bool Module::writeObjectFileOrAssembly(llvm::TargetMachine *targetMachine, llvm:
-                                        const char *outFileName) {
-     // Figure out if we're generating object file or assembly output, and
-     // set binary output for object files
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    Assert(!g->target->isGenXTarget());
--    llvm::TargetMachine::CodeGenFileType fileType =
--        (outputType == Object) ? llvm::TargetMachine::CGFT_ObjectFile : llvm::TargetMachine::CGFT_AssemblyFile;
--    bool binary = (fileType == llvm::TargetMachine::CGFT_ObjectFile);
--#else // LLVM 10.0+
-     llvm::CodeGenFileType fileType = (outputType == Object) ? llvm::CGFT_ObjectFile : llvm::CGFT_AssemblyFile;
-     bool binary = (fileType == llvm::CGFT_ObjectFile);
--#endif
- 
-     llvm::sys::fs::OpenFlags flags = binary ? llvm::sys::fs::F_None : llvm::sys::fs::F_Text;
- 
-@@ -2219,11 +2200,7 @@ void Module::execPreprocessor(const char *infilename, llvm::raw_string_ostream *
-     inst.setTarget(target);
-     inst.createSourceManager(inst.getFileManager());
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    clang::FrontendInputFile inputFile(infilename, clang::InputKind::Unknown);
--#else // LLVM 10.0+
-     clang::FrontendInputFile inputFile(infilename, clang::InputKind());
--#endif
- 
-     inst.InitializeSourceManager(inputFile);
- 
-@@ -2722,9 +2699,7 @@ int Module::CompileAndOutput(const char *srcFile, Arch arch, const char *cpu, st
- 
-         m = new Module(srcFile);
-         if (m->CompileFile() == 0) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-             llvm::TimeTraceScope TimeScope("Backend");
--#endif
- #ifdef ISPC_GENX_ENABLED
-             if (outputType == Asm || outputType == Object) {
-                 if (g->target->isGenXTarget()) {
-@@ -2855,9 +2830,7 @@ int Module::CompileAndOutput(const char *srcFile, Arch arch, const char *cpu, st
- 
-             m = new Module(srcFile);
-             int compileFileError = m->CompileFile();
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-             llvm::TimeTraceScope TimeScope("Backend");
--#endif
-             if (compileFileError == 0) {
-                 // Create the dispatch module, unless already created;
-                 // in the latter case, just do the checking
-diff --git a/src/module.h b/src/module.h
-index 61d3cfea0..603124d50 100644
---- a/src/module.h
-+++ b/src/module.h
-@@ -43,9 +43,7 @@
- 
- #include <llvm/IR/DebugInfo.h>
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/TimeProfiler.h>
--#endif
- 
- #ifdef ISPC_GENX_ENABLED
- #include "ocl_igc_interface/igc_ocl_device_ctx.h"
-diff --git a/src/opt.cpp b/src/opt.cpp
-index a655a8344..5b1ac7b63 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -66,6 +66,7 @@
- #include <llvm/IR/Instructions.h>
- #include <llvm/IR/IntrinsicInst.h>
- #include <llvm/IR/Intrinsics.h>
-+#include <llvm/IR/IntrinsicsX86.h>
- #include <llvm/IR/LegacyPassManager.h>
- #include <llvm/IR/Module.h>
- #include <llvm/IR/PatternMatch.h>
-@@ -85,9 +86,6 @@
- #include <llvm/Transforms/Scalar/InstSimplifyPass.h>
- #include <llvm/Transforms/Utils.h>
- #include <llvm/Transforms/Utils/BasicBlockUtils.h>
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
--#include <llvm/IR/IntrinsicsX86.h>
--#endif
- 
- #ifdef ISPC_HOST_IS_LINUX
- #include <alloca.h>
-@@ -1003,10 +1001,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
-                 name = LLVMGetName(callInst->getArgOperand(0), "_load");
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                llvm::Instruction *loadInst =
--                    new llvm::LoadInst(castPtr, name, false /* not volatile */, align, (llvm::Instruction *)NULL);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-                 llvm::Instruction *loadInst = new llvm::LoadInst(castPtr, name, false /* not volatile */,
-                                                                  llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
- #else
-@@ -1043,13 +1038,8 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedStore32 ? 4 : 8;
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                llvm::StoreInst *storeInst = new llvm::StoreInst(rvalue, castPtr, (llvm::Instruction *)NULL);
--                storeInst->setAlignment(align);
--#else
-                 llvm::StoreInst *storeInst = new llvm::StoreInst(rvalue, castPtr, (llvm::Instruction *)NULL,
-                                                                  llvm::MaybeAlign(align).valueOrOne());
--#endif
-                 lCopyMetadata(storeInst, callInst);
-                 llvm::ReplaceInstWithInst(callInst, storeInst);
- 
-@@ -1066,9 +1056,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool IntrinsicsOpt::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("IntrinsicsOpt::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -1239,9 +1227,7 @@ bool InstructionSimplifyPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool InstructionSimplifyPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("InstructionSimplifyPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -2974,16 +2960,10 @@ static bool lImproveMaskedStore(llvm::CallInst *callInst) {
- 
-             lvalue = new llvm::BitCastInst(lvalue, ptrType, "lvalue_to_ptr_type", callInst);
-             lCopyMetadata(lvalue, callInst);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--            store =
--                new llvm::StoreInst(rvalue, lvalue, false /* not volatile */,
--                                    g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align);
--#else
-             store = new llvm::StoreInst(
-                 rvalue, lvalue, false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-                     .valueOrOne());
--#endif
-         }
-         if (store != NULL) {
-             lCopyMetadata(store, callInst);
-@@ -3059,11 +3039,7 @@ static bool lImproveMaskedLoad(llvm::CallInst *callInst, llvm::BasicBlock::itera
-         {
-             llvm::Type *ptrType = llvm::PointerType::get(callInst->getType(), 0);
-             ptr = new llvm::BitCastInst(ptr, ptrType, "ptr_cast_for_load", callInst);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--            load = new llvm::LoadInst(ptr, callInst->getName(), false /* not volatile */,
--                                      g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align,
--                                      (llvm::Instruction *)NULL);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-             load = new llvm::LoadInst(
-                 ptr, callInst->getName(), false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-@@ -3129,9 +3105,7 @@ bool ImproveMemoryOpsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ImproveMemoryOpsPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ImproveMemoryOpsPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -3424,9 +3398,7 @@ llvm::Value *lGEPAndLoad(llvm::Value *basePtr, int64_t offset, int align, llvm::
-                          llvm::Type *type) {
-     llvm::Value *ptr = lGEPInst(basePtr, LLVMInt64(offset), "new_base", insertBefore);
-     ptr = new llvm::BitCastInst(ptr, llvm::PointerType::get(type, 0), "ptr_cast", insertBefore);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, align, insertBefore);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-     return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, llvm::MaybeAlign(align), insertBefore);
- #else // LLVM 11.0+
-     return new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-@@ -4135,9 +4107,7 @@ bool GatherCoalescePass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool GatherCoalescePass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("GatherCoalescePass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -4467,9 +4437,7 @@ bool ReplacePseudoMemoryOpsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplacePseudoMemoryOpsPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplacePseudoMemoryOpsPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -4573,9 +4541,7 @@ bool IsCompileTimeConstantPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool IsCompileTimeConstantPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("IsCompileTimeConstantPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5201,9 +5167,7 @@ bool PeepholePass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool PeepholePass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("PeepholePass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5299,9 +5263,7 @@ bool ReplaceStdlibShiftPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceStdlibShiftPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceStdlibShiftPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5399,9 +5361,7 @@ llvm::Instruction *FixBooleanSelectPass::fixSelect(llvm::SelectInst *sel, llvm::
- }
- 
- bool FixBooleanSelectPass::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("FixBooleanSelectPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
- 
-     return modifiedAny;
-@@ -5964,9 +5924,7 @@ bool GenXGatherCoalescing::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool GenXGatherCoalescing::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("GenXGatherCoalescing::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6113,9 +6071,7 @@ bool PromoteToPrivateMemoryPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool PromoteToPrivateMemoryPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("PromoteToPrivateMemoryPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6181,9 +6137,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceLLVMIntrinsics::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceLLVMIntrinsics::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6278,9 +6232,7 @@ bool ReplaceUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceUnsupportedInsts::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceUnsupportedInsts::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6369,9 +6321,7 @@ bool CheckUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool CheckUnsupportedInsts::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("CheckUnsupportedInsts::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6440,9 +6390,7 @@ bool MangleOpenCLBuiltins::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool MangleOpenCLBuiltins::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("MangleOpenCLBuiltins::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6828,9 +6776,7 @@ bool FixAddressSpace::runOnFunction(llvm::Function &F) {
-     // Transformations are correct when the function is not internal.
-     // This is due to address space calculation algorithm.
-     // TODO: problems can be met in case of Stack Calls
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("FixAddressSpace::runOnFunction", F.getName());
--#endif
-     if (F.getLinkage() == llvm::GlobalValue::LinkageTypes::InternalLinkage)
-         return false;
- 
-@@ -6854,9 +6800,7 @@ class DemotePHIs : public llvm::FunctionPass {
- char DemotePHIs::ID = 0;
- 
- bool DemotePHIs::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("DemotePHIs::runOnFunction", F.getName());
--#endif
-     if (F.isDeclaration() || skipFunction(F))
-         return false;
-     std::vector<llvm::Instruction *> WorkList;
-diff --git a/src/type.cpp b/src/type.cpp
-index 688a4e874..fa0cb04db 100644
---- a/src/type.cpp
-+++ b/src/type.cpp
-@@ -1822,14 +1822,10 @@ llvm::DIType *StructType::GetDIType(llvm::DIScope *scope) const {
-     llvm::DIFile *diFile = pos.GetDIFile();
-     llvm::DINamespace *diSpace = pos.GetDINamespace();
-     return m->diBuilder->createStructType(diSpace, GetString(), diFile,
--                                          pos.first_line,          // Line number
--                                          layout->getSizeInBits(), // Size in bits
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                                          layout->getAlignment() * 8, // Alignment in bits
--#else                                                                 // LLVM 10.0+
-+                                          pos.first_line,                     // Line number
-+                                          layout->getSizeInBits(),            // Size in bits
-                                           layout->getAlignment().value() * 8, // Alignment in bits
--#endif
--                                          llvm::DINode::FlagZero, // Flags
-+                                          llvm::DINode::FlagZero,             // Flags
-                                           NULL, elements);
- }
- 
-diff --git a/tests/lit-tests/1771.ispc b/tests/lit-tests/1771.ispc
-index 98064d84d..4feb73dd7 100644
---- a/tests/lit-tests/1771.ispc
-+++ b/tests/lit-tests/1771.ispc
-@@ -5,7 +5,6 @@
- // RUN: %{ispc} %s --target=sse4-i16x8 --emit-asm -o - | FileCheck %s -check-prefix=CHECKSSE4_I16X8
- // RUN: %{ispc} %s --target=sse4-i8x16 --emit-asm -o - | FileCheck %s -check-prefix=CHECKSSE4_I8X16
- 
--// REQUIRES: LLVM_10_0+
- // REQUIRES: X86_ENABLED
- 
- // CHECKAVX2_I32X8: {{[a-z]*xor[a-z]*}}  %xmm0, %xmm0, %xmm0
-diff --git a/tests/lit-tests/1844.ispc b/tests/lit-tests/1844.ispc
-index 793a8866c..189edf4c3 100644
---- a/tests/lit-tests/1844.ispc
-+++ b/tests/lit-tests/1844.ispc
-@@ -6,9 +6,6 @@
- 
- // REQUIRES: X86_ENABLED
- 
--// It doesn't work for anything earlier than 10.0, but it will not be fixed, so don't run.
--// REQUIRES: LLVM_10_0+
--
- extern uniform unsigned int64 var_6;
- extern uniform unsigned int16 var_11;
- extern uniform bool arr_201 [1] [15] [20];
-diff --git a/tests/lit-tests/1926.ispc b/tests/lit-tests/1926.ispc
-index 70f7cc3c2..7921c91a6 100644
---- a/tests/lit-tests/1926.ispc
-+++ b/tests/lit-tests/1926.ispc
-@@ -2,8 +2,6 @@
- // RUN: cat %T/1926.o.json \
- // RUN:   | FileCheck %s
- 
--// REQUIRES: LLVM_10_0+
--
- // CHECK: "traceEvents"
- // CHECK: "detail"
- export uniform int foo(uniform int a[], uniform int count) {
-diff --git a/tests/lit-tests/cpus_x86.ispc b/tests/lit-tests/cpus_x86.ispc
-index 516efdd4c..4d60186f6 100644
---- a/tests/lit-tests/cpus_x86.ispc
-+++ b/tests/lit-tests/cpus_x86.ispc
-@@ -24,6 +24,8 @@
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icl
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icelake-server
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icx
-+//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tigerlake
-+//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tgl
- 
- // REQUIRES: X86_ENABLED
- 
-diff --git a/tests/lit-tests/cpus_x86_llvm10.ispc b/tests/lit-tests/cpus_x86_llvm10.ispc
-deleted file mode 100644
-index ef00000e5..000000000
---- a/tests/lit-tests/cpus_x86_llvm10.ispc
-+++ /dev/null
-@@ -1,11 +0,0 @@
--// The test checks that cpu definitions (including all synonyms) are successfully consumed by compiler.
--
--//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tigerlake
--//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tgl
--
--// REQUIRES: X86_ENABLED
--// REQUIRES: LLVM_10_0+
--
--uniform int i;
--
--void foo() {}
-diff --git a/tests/lit-tests/lit.cfg b/tests/lit-tests/lit.cfg
-index 17016579d..045e69437 100644
---- a/tests/lit-tests/lit.cfg
-+++ b/tests/lit-tests/lit.cfg
-@@ -30,11 +30,6 @@ print("Config:")
- 
- # LLVM version
- llvm_version = LooseVersion(ispc_llvm_version_number)
--if llvm_version >= LooseVersion("10.0.0"):
--    print("LLVM_10_0+: YES")
--    config.available_features.add("LLVM_10_0+")
--else:
--    print("LLVM_10_0+: NO")
- 
- if llvm_version >= LooseVersion("12.0.0"):
-     print("LLVM_12_0+: YES")
diff --git a/srcpkgs/ispc/patches/llvm12-003.patch b/srcpkgs/ispc/patches/llvm12-003.patch
deleted file mode 100644
index 0423afc9e3f9..000000000000
--- a/srcpkgs/ispc/patches/llvm12-003.patch
+++ /dev/null
@@ -1,1504 +0,0 @@
-From 1851d18b213dbad169937076176b2d5509733c76 Mon Sep 17 00:00:00 2001
-From: Deepak Rajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Tue, 12 Jan 2021 22:15:12 -0800
-Subject: [PATCH] fixes #1821 - Removing LLVMGetName() and switching to
- LLVM::Twine.
-
----
- src/ctx.cpp      | 304 ++++++++++++++++++++++-------------------------
- src/ctx.h        |  72 +++++------
- src/expr.cpp     |  36 +++---
- src/llvmutil.cpp |  17 ---
- src/llvmutil.h   |   5 -
- src/opt.cpp      | 103 +++++++++-------
- 6 files changed, 255 insertions(+), 282 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 42c4ea09d..ded524b71 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1020,8 +1020,8 @@ void FunctionEmitContext::EmitCaseLabel(int value, bool checkMask, SourcePos pos
-     llvm::BasicBlock *bbCaseImpl = NULL;
-     if (emitGenXHardwareMask()) {
-         // Create basic block with actual case implementation
--        std::string bbName = bbCase->getName().str() + "_impl";
--        bbCaseImpl = CreateBasicBlock(bbName.c_str(), bbCase);
-+        llvm::Twine bbName = llvm::Twine(bbCase->getName()) + "_impl";
-+        bbCaseImpl = CreateBasicBlock(bbName, bbCase);
-     }
- #endif
- 
-@@ -1185,7 +1185,7 @@ bool FunctionEmitContext::initLabelBBlocks(ASTNode *node, void *data) {
-     if (ctx->labelMap.find(ls->name) != ctx->labelMap.end())
-         Error(ls->pos, "Multiple labels named \"%s\" in function.", ls->name.c_str());
-     else {
--        llvm::BasicBlock *bb = ctx->CreateBasicBlock(ls->name.c_str());
-+        llvm::BasicBlock *bb = ctx->CreateBasicBlock(ls->name);
-         ctx->labelMap[ls->name] = bb;
-     }
-     return true;
-@@ -1299,7 +1299,7 @@ llvm::Value *FunctionEmitContext::Any(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_any"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_any");
- }
- 
- llvm::Value *FunctionEmitContext::All(llvm::Value *mask) {
-@@ -1315,7 +1315,7 @@ llvm::Value *FunctionEmitContext::All(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_all"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_all");
- }
- 
- llvm::Value *FunctionEmitContext::None(llvm::Value *mask) {
-@@ -1331,7 +1331,7 @@ llvm::Value *FunctionEmitContext::None(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_none"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_none");
- }
- 
- llvm::Value *FunctionEmitContext::LaneMask(llvm::Value *v) {
-@@ -1349,7 +1349,7 @@ llvm::Value *FunctionEmitContext::LaneMask(llvm::Value *v) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, v, LLVMGetName(v, "_movmsk"));
-+    return CallInst(fmm, NULL, v, llvm::Twine(v->getName()) + "_movmsk");
- }
- 
- llvm::Value *FunctionEmitContext::MasksAllEqual(llvm::Value *v1, llvm::Value *v2) {
-@@ -1364,11 +1364,12 @@ llvm::Value *FunctionEmitContext::MasksAllEqual(llvm::Value *v1, llvm::Value *v2
- #else
-     if (g->target->getArch() == Arch::wasm32) {
-         llvm::Function *fmm = m->module->getFunction("__wasm_cmp_msk_eq");
--        return CallInst(fmm, NULL, {v1, v2}, LLVMGetName("wasm_cmp_msk_eq", v1, v2));
-+        return CallInst(fmm, NULL, {v1, v2}, ((llvm::Twine("wasm_cmp_msk_eq_") + v1->getName()) + "_") + v2->getName());
-     }
-     llvm::Value *mm1 = LaneMask(v1);
-     llvm::Value *mm2 = LaneMask(v2);
--    return CmpInst(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_EQ, mm1, mm2, LLVMGetName("equal", v1, v2));
-+    return CmpInst(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_EQ, mm1, mm2,
-+                   ((llvm::Twine("equal_") + v1->getName()) + "_") + v2->getName());
- #endif
- }
- 
-@@ -1392,7 +1393,7 @@ llvm::Value *FunctionEmitContext::GetStringPtr(const std::string &str) {
-     return new llvm::BitCastInst(lstrPtr, LLVMTypes::VoidPointerType, "str_void_ptr", bblock);
- }
- 
--llvm::BasicBlock *FunctionEmitContext::CreateBasicBlock(const char *name, llvm::BasicBlock *insertAfter) {
-+llvm::BasicBlock *FunctionEmitContext::CreateBasicBlock(const llvm::Twine &name, llvm::BasicBlock *insertAfter) {
-     llvm::BasicBlock *newBB = llvm::BasicBlock::Create(*g->ctx, name, llvmFunction);
-     if (insertAfter)
-         newBB->moveAfter(insertAfter);
-@@ -1416,14 +1417,15 @@ llvm::Value *FunctionEmitContext::I1VecToBoolVec(llvm::Value *b) {
- 
-         for (unsigned int i = 0; i < at->getNumElements(); ++i) {
-             llvm::Value *elt = ExtractInst(b, i);
--            llvm::Value *sext = SwitchBoolSize(elt, LLVMTypes::BoolVectorStorageType, LLVMGetName(elt, "_to_boolvec"));
-+            llvm::Value *sext =
-+                SwitchBoolSize(elt, LLVMTypes::BoolVectorStorageType, llvm::Twine(elt->getName()) + "_to_boolvec");
-             ret = InsertInst(ret, sext, i);
-         }
-         return ret;
-     } else {
-         // For non-array types, convert to 'LLVMTypes::BoolVectorType' if
-         // necessary.
--        return SwitchBoolSize(b, LLVMTypes::BoolVectorType, LLVMGetName(b, "_to_boolvec"));
-+        return SwitchBoolSize(b, LLVMTypes::BoolVectorType, llvm::Twine(b->getName()) + "_to_boolvec");
-     }
- }
- 
-@@ -1563,7 +1565,7 @@ static int lArrayVectorWidth(llvm::Type *t) {
- }
- 
- llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps inst, llvm::Value *v0, llvm::Value *v1,
--                                                 const char *name) {
-+                                                 const llvm::Twine &name) {
-     if (v0 == NULL || v1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1573,7 +1575,7 @@ llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps in
-     llvm::Type *type = v0->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *bop = llvm::BinaryOperator::Create(inst, v0, v1, name ? name : "", bblock);
-+        llvm::Instruction *bop = llvm::BinaryOperator::Create(inst, v0, v1, name, bblock);
-         AddDebugPos(bop);
-         return bop;
-     } else {
-@@ -1591,7 +1593,7 @@ llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps in
-     }
- }
- 
--llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const char *name) {
-+llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const llvm::Twine &name) {
-     if (v == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1603,14 +1605,14 @@ llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const char *name)
-     llvm::Type *type = v->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *binst = llvm::BinaryOperator::CreateNot(v, name ? name : "not", bblock);
-+        llvm::Instruction *binst = llvm::BinaryOperator::CreateNot(v, name.isTriviallyEmpty() ? "not" : name, bblock);
-         AddDebugPos(binst);
-         return binst;
-     } else {
-         llvm::Value *ret = llvm::UndefValue::get(type);
-         for (int i = 0; i < arraySize; ++i) {
-             llvm::Value *a = ExtractInst(v, i);
--            llvm::Value *op = llvm::BinaryOperator::CreateNot(a, name ? name : "not", bblock);
-+            llvm::Value *op = llvm::BinaryOperator::CreateNot(a, name.isTriviallyEmpty() ? "not" : name, bblock);
-             AddDebugPos(op);
-             ret = InsertInst(ret, op, i);
-         }
-@@ -1638,7 +1640,7 @@ static llvm::Type *lGetMatchingBoolVectorType(llvm::Type *type) {
- }
- 
- llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm::CmpInst::Predicate pred,
--                                          llvm::Value *v0, llvm::Value *v1, const char *name) {
-+                                          llvm::Value *v0, llvm::Value *v1, const llvm::Twine &name) {
-     if (v0 == NULL || v1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1648,7 +1650,8 @@ llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm
-     llvm::Type *type = v0->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *ci = llvm::CmpInst::Create(inst, pred, v0, v1, name ? name : "cmp", bblock);
-+        llvm::Instruction *ci =
-+            llvm::CmpInst::Create(inst, pred, v0, v1, name.isTriviallyEmpty() ? "cmp" : name, bblock);
-         AddDebugPos(ci);
-         return ci;
-     } else {
-@@ -1657,14 +1660,14 @@ llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm
-         for (int i = 0; i < arraySize; ++i) {
-             llvm::Value *a = ExtractInst(v0, i);
-             llvm::Value *b = ExtractInst(v1, i);
--            llvm::Value *op = CmpInst(inst, pred, a, b, name);
-+            llvm::Value *op = CmpInst(inst, pred, a, b, name.isTriviallyEmpty() ? "cmp" : name);
-             ret = InsertInst(ret, op, i);
-         }
-         return ret;
-     }
- }
- 
--llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const char *name) {
-+llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1704,21 +1707,19 @@ llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const char *n
-     return ret;
- }
- 
--llvm::Value *FunctionEmitContext::BitCastInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Value *FunctionEmitContext::BitCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_bitcast");
--
--    llvm::Instruction *inst = new llvm::BitCastInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::BitCastInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_bitcast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const char *name) {
-+llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1728,23 +1729,19 @@ llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const char *n
-         // no-op for varying pointers; they're already vectors of ints
-         return value;
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_ptr2int");
-     llvm::Type *type = LLVMTypes::PointerIntType;
--    llvm::Instruction *inst = new llvm::PtrToIntInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::PtrToIntInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_ptr2int");
--
-     llvm::Type *fromType = value->getType();
-     if (llvm::isa<llvm::VectorType>(fromType)) {
-         // varying pointer
-@@ -1752,27 +1749,26 @@ llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *t
-             // already the right type--done
-             return value;
-         else if (fromType->getScalarSizeInBits() > toType->getScalarSizeInBits())
--            return TruncInst(value, toType, name);
-+            return TruncInst(value, toType,
-+                             name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name);
-         else {
-             AssertPos(currentPos, fromType->getScalarSizeInBits() < toType->getScalarSizeInBits());
--            return ZExtInst(value, toType, name);
-+            return ZExtInst(value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name);
-         }
-     }
- 
--    llvm::Instruction *inst = new llvm::PtrToIntInst(value, toType, name, bblock);
-+    llvm::Instruction *inst = new llvm::PtrToIntInst(
-+        value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_int2ptr");
--
-     llvm::Type *fromType = value->getType();
-     if (llvm::isa<llvm::VectorType>(fromType)) {
-         // varying pointer
-@@ -1780,95 +1776,87 @@ llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *t
-             // done
-             return value;
-         else if (fromType->getScalarSizeInBits() > toType->getScalarSizeInBits())
--            return TruncInst(value, toType, name);
-+            return TruncInst(value, toType,
-+                             name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name);
-         else {
-             AssertPos(currentPos, fromType->getScalarSizeInBits() < toType->getScalarSizeInBits());
--            return ZExtInst(value, toType, name);
-+            return ZExtInst(value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name);
-         }
-     }
- 
--    llvm::Instruction *inst = new llvm::IntToPtrInst(value, toType, name, bblock);
-+    llvm::Instruction *inst = new llvm::IntToPtrInst(
-+        value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::TruncInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::TruncInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_trunc");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::TruncInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::TruncInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_trunc" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
- llvm::Instruction *FunctionEmitContext::CastInst(llvm::Instruction::CastOps op, llvm::Value *value, llvm::Type *type,
--                                                 const char *name) {
-+                                                 const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_cast");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = llvm::CastInst::Create(op, value, type, name, bblock);
-+    llvm::Instruction *inst = llvm::CastInst::Create(
-+        op, value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_cast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::FPCastInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::FPCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_cast");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = llvm::CastInst::CreateFPCast(value, type, name, bblock);
-+    llvm::Instruction *inst = llvm::CastInst::CreateFPCast(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_cast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::SExtInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::SExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_sext");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::SExtInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::SExtInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_sext" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::ZExtInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::ZExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_zext");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::ZExtInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::ZExtInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_zext" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
-@@ -1913,14 +1901,15 @@ llvm::Value *FunctionEmitContext::applyVaryingGEP(llvm::Value *basePtr, llvm::Va
-         scale = SmearUniform(scale);
-         Assert(index != NULL);
-         // offset = index * scale
--        offset = BinaryOperator(llvm::Instruction::Mul, scale, index, LLVMGetName("mul", scale, index));
-+        offset = BinaryOperator(llvm::Instruction::Mul, scale, index,
-+                                ((llvm::Twine("mul_") + scale->getName()) + "_") + index->getName());
-     }
- 
-     // For 64-bit targets, if we've been doing our offset calculations in
-     // 32 bits, we still have to convert to a 64-bit value before we
-     // actually add the offset to the pointer.
-     if (g->target->is32Bit() == false && g->opt.force32BitAddressing == true)
--        offset = SExtInst(offset, LLVMTypes::Int64VectorType, LLVMGetName(offset, "_to_64"));
-+        offset = SExtInst(offset, LLVMTypes::Int64VectorType, llvm::Twine(offset->getName()) + "_to_64");
- 
-     // Smear out the pointer to be varying; either the base pointer or the
-     // index must be varying for this method to be called.
-@@ -1929,7 +1918,7 @@ llvm::Value *FunctionEmitContext::applyVaryingGEP(llvm::Value *basePtr, llvm::Va
-     llvm::Value *varyingPtr = baseIsUniform ? SmearUniform(basePtr) : basePtr;
- 
-     // newPtr = ptr + offset
--    return BinaryOperator(llvm::Instruction::Add, varyingPtr, offset, LLVMGetName(basePtr, "_offset"));
-+    return BinaryOperator(llvm::Instruction::Add, varyingPtr, offset, llvm::Twine(basePtr->getName()) + "_offset");
- }
- 
- void FunctionEmitContext::MatchIntegerTypes(llvm::Value **v0, llvm::Value **v1) {
-@@ -2006,13 +1995,13 @@ llvm::Value *FunctionEmitContext::MakeSlicePointer(llvm::Value *ptr, llvm::Value
-     llvm::StructType *st = llvm::StructType::get(*g->ctx, eltTypes);
- 
-     llvm::Value *ret = llvm::UndefValue::get(st);
--    ret = InsertInst(ret, ptr, 0, LLVMGetName(ret, "_slice_ptr"));
--    ret = InsertInst(ret, offset, 1, LLVMGetName(ret, "_slice_offset"));
-+    ret = InsertInst(ret, ptr, 0, llvm::Twine(ret->getName()) + "_slice_ptr");
-+    ret = InsertInst(ret, offset, 1, llvm::Twine(ret->getName()) + "_slice_offset");
-     return ret;
- }
- 
- llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index, const Type *ptrRefType,
--                                                    const char *name) {
-+                                                    const llvm::Twine &name) {
-     if (basePtr == NULL || index == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2065,8 +2054,8 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
-         // uniform, so just emit the regular LLVM GEP instruction
-         llvm::Value *ind[1] = {index};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&ind[0], &ind[1]);
--        llvm::Instruction *inst =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "gep", bblock);
-+        llvm::Instruction *inst = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                                  name.isTriviallyEmpty() ? "gep" : name, bblock);
-         AddDebugPos(inst);
-         return inst;
-     } else
-@@ -2074,7 +2063,7 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
- }
- 
- llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0, llvm::Value *index1,
--                                                    const Type *ptrRefType, const char *name) {
-+                                                    const Type *ptrRefType, const llvm::Twine &name) {
-     if (basePtr == NULL || index0 == NULL || index1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2114,8 +2103,8 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
-         // uniform, so just emit the regular LLVM GEP instruction
-         llvm::Value *indices[2] = {index0, index1};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&indices[0], &indices[2]);
--        llvm::Instruction *inst =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "gep", bblock);
-+        llvm::Instruction *inst = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                                  name.isTriviallyEmpty() ? "gep" : name, bblock);
-         AddDebugPos(inst);
-         return inst;
-     } else {
-@@ -2138,7 +2127,7 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
- }
- 
- llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int elementNum, const Type *ptrRefType,
--                                                   const char *name, const PointerType **resultPtrType) {
-+                                                   const llvm::Twine &name, const PointerType **resultPtrType) {
-     if (resultPtrType != NULL)
-         AssertPos(currentPos, ptrRefType != NULL);
- 
-@@ -2195,8 +2184,8 @@ llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int
-         // If the pointer is uniform, we can use the regular LLVM GEP.
-         llvm::Value *offsets[2] = {LLVMInt32(0), LLVMInt32(elementNum)};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&offsets[0], &offsets[2]);
--        resultPtr =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "struct_offset", bblock);
-+        resultPtr = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                    name.isTriviallyEmpty() ? "struct_offset" : name, bblock);
-     } else {
-         // Otherwise do the math to find the offset and add it to the given
-         // varying pointers
-@@ -2237,7 +2226,7 @@ llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int
-         return resultPtr;
- }
- 
--llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if ((value == NULL) || (toType == NULL)) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2248,20 +2237,18 @@ llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type
-     llvm::Value *newBool = value;
-     if (g->target->getDataLayout()->getTypeSizeInBits(fromType) >
-         g->target->getDataLayout()->getTypeSizeInBits(toType)) {
--        if (name == NULL)
--            name = LLVMGetName(value, "_switchBool");
--        newBool = TruncInst(value, toType, name);
-+        newBool =
-+            TruncInst(value, toType, name.isTriviallyEmpty() ? (llvm::Twine(value->getName()) + "_switchBool") : name);
-     } else if (g->target->getDataLayout()->getTypeSizeInBits(fromType) <
-                g->target->getDataLayout()->getTypeSizeInBits(toType)) {
--        if (name == NULL)
--            name = LLVMGetName(value, "_switchBool");
--        newBool = SExtInst(value, toType, name);
-+        newBool =
-+            SExtInst(value, toType, name.isTriviallyEmpty() ? (llvm::Twine(value->getName()) + "_switchBool") : name);
-     }
- 
-     return newBool;
- }
- 
--llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, const char *name) {
-+llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, const llvm::Twine &name) {
-     if (ptr == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2270,13 +2257,13 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
-     llvm::PointerType *pt = llvm::dyn_cast<llvm::PointerType>(ptr->getType());
-     AssertPos(currentPos, pt != NULL);
- 
--    if (name == NULL)
--        name = LLVMGetName(ptr, "_load");
--
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    llvm::LoadInst *inst = new llvm::LoadInst(pt->getPointerElementType(), ptr, name, bblock);
-+    llvm::LoadInst *inst =
-+        new llvm::LoadInst(pt->getPointerElementType(), ptr,
-+                           name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name, bblock);
- #else
--    llvm::LoadInst *inst = new llvm::LoadInst(ptr, name, bblock);
-+    llvm::LoadInst *inst =
-+        new llvm::LoadInst(ptr, name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name, bblock);
- #endif
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
-@@ -2307,8 +2294,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
- static llvm::Value *lFinalSliceOffset(FunctionEmitContext *ctx, llvm::Value *ptr, const PointerType **ptrType) {
-     Assert(CastType<PointerType>(*ptrType) != NULL);
- 
--    llvm::Value *slicePtr = ctx->ExtractInst(ptr, 0, LLVMGetName(ptr, "_ptr"));
--    llvm::Value *sliceOffset = ctx->ExtractInst(ptr, 1, LLVMGetName(ptr, "_offset"));
-+    llvm::Value *slicePtr = ctx->ExtractInst(ptr, 0, llvm::Twine(ptr->getName()) + "_ptr");
-+    llvm::Value *sliceOffset = ctx->ExtractInst(ptr, 1, llvm::Twine(ptr->getName()) + "_offset");
- 
-     // slicePtr should be a pointer to an soa-width wide array of the
-     // final atomic/enum/pointer type
-@@ -2327,14 +2314,14 @@ static llvm::Value *lFinalSliceOffset(FunctionEmitContext *ctx, llvm::Value *ptr
-         slicePtr = ctx->BitCastInst(slicePtr, (*ptrType)->LLVMType(g->ctx));
- 
-     // And finally index based on the slice offset
--    return ctx->GetElementPtrInst(slicePtr, sliceOffset, *ptrType, LLVMGetName(slicePtr, "_final_gep"));
-+    return ctx->GetElementPtrInst(slicePtr, sliceOffset, *ptrType, llvm::Twine(slicePtr->getName()) + "_final_gep");
- }
- 
- /** Utility routine that loads from a uniform pointer to soa<> data,
-     returning a regular uniform (non-SOA result).
-  */
- llvm::Value *FunctionEmitContext::loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType,
--                                                     const char *name) {
-+                                                     const llvm::Twine &name) {
-     const Type *unifType = ptrType->GetBaseType()->GetAsUniformType();
- 
-     const CollectionType *ct = CastType<CollectionType>(ptrType->GetBaseType());
-@@ -2363,7 +2350,7 @@ llvm::Value *FunctionEmitContext::loadUniformFromSOA(llvm::Value *ptr, llvm::Val
- }
- 
- llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrRefType,
--                                           const char *name, bool one_elem) {
-+                                           const llvm::Twine &name, bool one_elem) {
-     if (ptr == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2371,9 +2358,6 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
- 
-     AssertPos(currentPos, ptrRefType != NULL && mask != NULL);
- 
--    if (name == NULL)
--        name = LLVMGetName(ptr, "_load");
--
-     const PointerType *ptrType;
-     const Type *elType;
-     if (CastType<ReferenceType>(ptrRefType) != NULL) {
-@@ -2393,7 +2377,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
- 
-     if (ptrType->IsUniformType()) {
-         if (ptrType->IsSlice()) {
--            return loadUniformFromSOA(ptr, mask, ptrType, name);
-+            return loadUniformFromSOA(ptr, mask, ptrType,
-+                                      name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name);
-         } else {
-             // FIXME: same issue as above load inst regarding alignment...
-             //
-@@ -2405,11 +2390,15 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-             const AtomicType *atomicType = CastType<AtomicType>(ptrType->GetBaseType());
- 
- #if ISPC_LLVM_VERSION <= ISPC_LLVM_10_0
--            llvm::LoadInst *inst = new llvm::LoadInst(ptr, name, false /* not volatile */, bblock);
-+            llvm::LoadInst *inst =
-+                new llvm::LoadInst(ptr, name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name,
-+                                   false /* not volatile */, bblock);
- #else // LLVM 11.0+
-             llvm::PointerType *ptr_type = llvm::dyn_cast<llvm::PointerType>(ptr->getType());
-             llvm::LoadInst *inst =
--                new llvm::LoadInst(ptr_type->getPointerElementType(), ptr, name, false /* not volatile */, bblock);
-+                new llvm::LoadInst(ptr_type->getPointerElementType(), ptr,
-+                                   name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name,
-+                                   false /* not volatile */, bblock);
- #endif
- 
-             if (atomicType != NULL && atomicType->IsVaryingType()) {
-@@ -2433,7 +2422,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-     } else {
-         // Otherwise we should have a varying ptr and it's time for a
-         // gather.
--        llvm::Value *gather_result = gather(ptr, ptrType, GetFullMask(), name);
-+        llvm::Value *gather_result = gather(ptr, ptrType, GetFullMask(),
-+                                            name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name);
-         if (!one_elem)
-             return gather_result;
- 
-@@ -2453,19 +2443,19 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-         // We can actually call either one, since both are i32s as far as
-         // LLVM's type system is concerned...
-         llvm::Function *fmm = mm[0]->function;
--        llvm::Value *int_mask = CallInst(fmm, NULL, mask, LLVMGetName(mask, "_movmsk"));
-+        llvm::Value *int_mask = CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_movmsk");
-         std::vector<Symbol *> lz;
-         m->symbolTable->LookupFunction("__count_trailing_zeros_i64", &lz);
-         llvm::Function *flz = lz[0]->function;
--        llvm::Value *elem_idx = CallInst(flz, NULL, int_mask, LLVMGetName(mask, "_clz"));
--        llvm::Value *elem = llvm::ExtractElementInst::Create(gather_result, elem_idx,
--                                                             LLVMGetName(gather_result, "_umasked_elem"), bblock);
-+        llvm::Value *elem_idx = CallInst(flz, NULL, int_mask, llvm::Twine(mask->getName()) + "_clz");
-+        llvm::Value *elem = llvm::ExtractElementInst::Create(
-+            gather_result, elem_idx, llvm::Twine(gather_result->getName()) + "_umasked_elem", bblock);
-         return elem;
-     }
- }
- 
- llvm::Value *FunctionEmitContext::gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask,
--                                         const char *name) {
-+                                         const llvm::Twine &name) {
-     // We should have a varying pointer if we get here...
-     AssertPos(currentPos, ptrType->IsVaryingType());
- 
-@@ -2602,7 +2592,8 @@ void FunctionEmitContext::addGSMetadata(llvm::Value *v, SourcePos pos) {
-     inst->setMetadata("last_column", md);
- }
- 
--llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *name, int align, bool atEntryBlock) {
-+llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const llvm::Twine &name, int align,
-+                                             bool atEntryBlock) {
-     if (llvmType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2615,12 +2606,12 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-         llvm::Instruction *retInst = allocaBlock->getTerminator();
-         AssertPos(currentPos, retInst);
-         unsigned AS = llvmFunction->getParent()->getDataLayout().getAllocaAddrSpace();
--        inst = new llvm::AllocaInst(llvmType, AS, name ? name : "", retInst);
-+        inst = new llvm::AllocaInst(llvmType, AS, name, retInst);
-     } else {
-         // Unless the caller overrode the default and wants it in the
-         // current basic block
-         unsigned AS = llvmFunction->getParent()->getDataLayout().getAllocaAddrSpace();
--        inst = new llvm::AllocaInst(llvmType, AS, name ? name : "", bblock);
-+        inst = new llvm::AllocaInst(llvmType, AS, name, bblock);
-     }
- 
-     // If no alignment was specified but we have an array of a uniform
-@@ -2639,7 +2630,8 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::AllocaInst(const Type *ptrType, const char *name, int align, bool atEntryBlock) {
-+llvm::Value *FunctionEmitContext::AllocaInst(const Type *ptrType, const llvm::Twine &name, int align,
-+                                             bool atEntryBlock) {
-     if (ptrType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3075,66 +3067,59 @@ llvm::Instruction *FunctionEmitContext::BranchInst(llvm::BasicBlock *trueBlock,
-     return b;
- }
- 
--llvm::Value *FunctionEmitContext::ExtractInst(llvm::Value *v, int elt, const char *name) {
-+llvm::Value *FunctionEmitContext::ExtractInst(llvm::Value *v, int elt, const llvm::Twine &name) {
-     if (v == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_extract_%d", elt);
--        name = LLVMGetName(v, buf);
--    }
-     llvm::Instruction *ei = NULL;
-     if (llvm::isa<llvm::VectorType>(v->getType()))
--        ei = llvm::ExtractElementInst::Create(v, LLVMInt32(elt), name, bblock);
-+        ei = llvm::ExtractElementInst::Create(
-+            v, LLVMInt32(elt),
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_extract_") + llvm::Twine(elt)) : name, bblock);
-     else
--        ei = llvm::ExtractValueInst::Create(v, elt, name, bblock);
-+        ei = llvm::ExtractValueInst::Create(
-+            v, elt, name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_extract_") + llvm::Twine(elt)) : name,
-+            bblock);
-     AddDebugPos(ei);
-     return ei;
- }
- 
--llvm::Value *FunctionEmitContext::InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const char *name) {
-+llvm::Value *FunctionEmitContext::InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const llvm::Twine &name) {
-     if (v == NULL || eltVal == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_insert_%d", elt);
--        name = LLVMGetName(v, buf);
--    }
--
-     llvm::Instruction *ii = NULL;
-     if (llvm::isa<llvm::VectorType>(v->getType()))
--        ii = llvm::InsertElementInst::Create(v, eltVal, LLVMInt32(elt), name, bblock);
-+        ii = llvm::InsertElementInst::Create(
-+            v, eltVal, LLVMInt32(elt),
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_insert_") + llvm::Twine(elt)) : name, bblock);
-     else
--        ii = llvm::InsertValueInst::Create(v, eltVal, elt, name, bblock);
-+        ii = llvm::InsertValueInst::Create(
-+            v, eltVal, elt,
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_insert_") + llvm::Twine(elt)) : name, bblock);
-     AddDebugPos(ii);
-     return ii;
- }
- 
--llvm::Value *FunctionEmitContext::ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const char *name) {
-+llvm::Value *FunctionEmitContext::ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask,
-+                                              const llvm::Twine &name) {
-     if (v1 == NULL || v2 == NULL || mask == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_shuffle");
--        name = LLVMGetName(v1, buf);
--    }
--
--    llvm::Instruction *ii = new llvm::ShuffleVectorInst(v1, v2, mask, name, bblock);
-+    llvm::Instruction *ii = new llvm::ShuffleVectorInst(
-+        v1, v2, mask, name.isTriviallyEmpty() ? (llvm::Twine(v1->getName()) + "_shuffle") : name, bblock);
- 
-     AddDebugPos(ii);
-     return ii;
- }
- 
--llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vecType, const char *name) {
-+llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vecType, const llvm::Twine &name) {
-     if (v == NULL || vecType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3148,12 +3133,6 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     Assert(ty && ty->getVectorElementType() == v->getType());
- #endif
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_broadcast");
--        name = LLVMGetName(v, buf);
--    }
--
-     // Generate the following sequence:
-     //   %name_init.i = insertelement <4 x i32> undef, i32 %val, i32 0
-     //   %name.i = shufflevector <4 x i32> %name_init.i, <4 x i32> undef,
-@@ -3163,7 +3142,7 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     llvm::Value *undef2 = llvm::UndefValue::get(vecType);
- 
-     // InsertElement
--    llvm::Twine tw = llvm::Twine(name) + llvm::Twine("_init");
-+    llvm::Twine tw = name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + llvm::Twine("_init");
-     llvm::Value *insert = InsertInst(undef1, v, 0, tw.str().c_str());
- 
-     // ShuffleVector
-@@ -3179,28 +3158,27 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-         llvm::ConstantVector::getSplat(llvm::ElementCount::get(static_cast<unsigned int>(ty->getNumElements()), false),
-                                        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
- #endif
--    llvm::Value *ret = ShuffleInst(insert, undef2, zeroVec, name);
-+    llvm::Value *ret = ShuffleInst(insert, undef2, zeroVec,
-+                                   name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name);
- 
-     return ret;
- }
- 
--llvm::PHINode *FunctionEmitContext::PhiNode(llvm::Type *type, int count, const char *name) {
--    llvm::PHINode *pn = llvm::PHINode::Create(type, count, name ? name : "phi", bblock);
-+llvm::PHINode *FunctionEmitContext::PhiNode(llvm::Type *type, int count, const llvm::Twine &name) {
-+    llvm::PHINode *pn = llvm::PHINode::Create(type, count, name.isTriviallyEmpty() ? "phi" : name, bblock);
-     AddDebugPos(pn);
-     return pn;
- }
- 
- llvm::Instruction *FunctionEmitContext::SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1,
--                                                   const char *name) {
-+                                                   const llvm::Twine &name) {
-     if (test == NULL || val0 == NULL || val1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(test, "_select");
--
--    llvm::Instruction *inst = llvm::SelectInst::Create(test, val0, val1, name, bblock);
-+    llvm::Instruction *inst = llvm::SelectInst::Create(
-+        test, val0, val1, name.isTriviallyEmpty() ? (llvm::Twine(test->getName()) + "_select") : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
-@@ -3226,7 +3204,7 @@ static unsigned int lCalleeArgCount(llvm::Value *callee, const FunctionType *fun
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType,
--                                           const std::vector<llvm::Value *> &args, const char *name) {
-+                                           const std::vector<llvm::Value *> &args, const llvm::Twine &name) {
-     if (func == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3258,9 +3236,9 @@ llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-         llvm::PointerType *func_ptr_type = llvm::dyn_cast<llvm::PointerType>(func->getType());
-         llvm::FunctionType *func_type = llvm::dyn_cast<llvm::FunctionType>(func_ptr_type->getPointerElementType());
--        llvm::CallInst *callinst = llvm::CallInst::Create(func_type, func, argVals, name ? name : "", bblock);
-+        llvm::CallInst *callinst = llvm::CallInst::Create(func_type, func, argVals, name, bblock);
- #else
--        llvm::CallInst *callinst = llvm::CallInst::Create(func, argVals, name ? name : "", bblock);
-+        llvm::CallInst *callinst = llvm::CallInst::Create(func, argVals, name, bblock);
- #endif
- 
-         // We could be dealing with a function pointer in which case this will not be a 'llvm::Function'.
-@@ -3464,14 +3442,14 @@ llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg,
--                                           const char *name) {
-+                                           const llvm::Twine &name) {
-     std::vector<llvm::Value *> args;
-     args.push_back(arg);
-     return CallInst(func, funcType, args, name);
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg0,
--                                           llvm::Value *arg1, const char *name) {
-+                                           llvm::Value *arg1, const llvm::Twine &name) {
-     std::vector<llvm::Value *> args;
-     args.push_back(arg0);
-     args.push_back(arg1);
-diff --git a/src/ctx.h b/src/ctx.h
-index 6e5ad74ba..48b3bb826 100644
---- a/src/ctx.h
-+++ b/src/ctx.h
-@@ -302,7 +302,7 @@ class FunctionEmitContext {
-     llvm::Value *GetStringPtr(const std::string &str);
- 
-     /** Create a new basic block with given name */
--    llvm::BasicBlock *CreateBasicBlock(const char *name, llvm::BasicBlock *insertAfter = NULL);
-+    llvm::BasicBlock *CreateBasicBlock(const llvm::Twine &name, llvm::BasicBlock *insertAfter = NULL);
- 
-     /** Given a vector with element type i1, return a vector of type
-         LLVMTypes::BoolVectorType.  This method handles the conversion for
-@@ -380,33 +380,33 @@ class FunctionEmitContext {
-         this also handles applying the given operation to the vector
-         elements. */
-     llvm::Value *BinaryOperator(llvm::Instruction::BinaryOps inst, llvm::Value *v0, llvm::Value *v1,
--                                const char *name = NULL);
-+                                const llvm::Twine &name = "");
- 
-     /** Emit the "not" operator.  Like BinaryOperator(), this also handles
-         a VectorType-based operand. */
--    llvm::Value *NotOperator(llvm::Value *v, const char *name = NULL);
-+    llvm::Value *NotOperator(llvm::Value *v, const llvm::Twine &name = "");
- 
-     /** Emit a comparison instruction.  If the operands are VectorTypes,
-         then a value for the corresponding boolean VectorType is
-         returned. */
-     llvm::Value *CmpInst(llvm::Instruction::OtherOps inst, llvm::CmpInst::Predicate pred, llvm::Value *v0,
--                         llvm::Value *v1, const char *name = NULL);
-+                         llvm::Value *v1, const llvm::Twine &name = "");
- 
-     /** Given a scalar value, return a vector of the same type (or an
-         array, for pointer types). */
--    llvm::Value *SmearUniform(llvm::Value *value, const char *name = NULL);
-+    llvm::Value *SmearUniform(llvm::Value *value, const llvm::Twine &name = "");
- 
--    llvm::Value *BitCastInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Value *PtrToIntInst(llvm::Value *value, const char *name = NULL);
--    llvm::Value *PtrToIntInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Value *IntToPtrInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+    llvm::Value *BitCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Value *PtrToIntInst(llvm::Value *value, const llvm::Twine &name = "");
-+    llvm::Value *PtrToIntInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Value *IntToPtrInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
- 
--    llvm::Instruction *TruncInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+    llvm::Instruction *TruncInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-     llvm::Instruction *CastInst(llvm::Instruction::CastOps op, llvm::Value *value, llvm::Type *type,
--                                const char *name = NULL);
--    llvm::Instruction *FPCastInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Instruction *SExtInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Instruction *ZExtInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+                                const llvm::Twine &name = "");
-+    llvm::Instruction *FPCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Instruction *SExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Instruction *ZExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
- 
-     /** Given two integer-typed values (but possibly one vector and the
-         other not, and or of possibly-different bit-widths), update their
-@@ -426,9 +426,9 @@ class FunctionEmitContext {
-         pointers.  The underlying type of the base pointer must be provided
-         via the ptrType parameter */
-     llvm::Value *GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index, const Type *ptrType,
--                                   const char *name = NULL);
-+                                   const llvm::Twine &name = "");
-     llvm::Value *GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0, llvm::Value *index1, const Type *ptrType,
--                                   const char *name = NULL);
-+                                   const llvm::Twine &name = "");
- 
-     /** This method returns a new pointer that represents offsetting the
-         given base pointer to point at the given element number of the
-@@ -436,26 +436,26 @@ class FunctionEmitContext {
-         pointer must be a pointer to a structure type.  The ptrType gives
-         the type of the pointer, though it may be NULL if the base pointer
-         is uniform. */
--    llvm::Value *AddElementOffset(llvm::Value *basePtr, int elementNum, const Type *ptrType, const char *name = NULL,
--                                  const PointerType **resultPtrType = NULL);
-+    llvm::Value *AddElementOffset(llvm::Value *basePtr, int elementNum, const Type *ptrType,
-+                                  const llvm::Twine &name = "", const PointerType **resultPtrType = NULL);
- 
-     /** Bool is stored as i8 and <WIDTH x i8> but represented in IR as i1 and
-      * <WIDTH x MASK>. This is a helper function to match bool size at storage
-      * interface. */
--    llvm::Value *SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const char *name = NULL);
-+    llvm::Value *SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name = "");
-     /** Load from the memory location(s) given by lvalue, using the given
-         mask.  The lvalue may be varying, in which case this corresponds to
-         a gather from the multiple memory locations given by the array of
-         pointer values given by the lvalue.  If the lvalue is not varying,
-         then both the mask pointer and the type pointer may be NULL. */
--    llvm::Value *LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrType, const char *name = NULL,
-+    llvm::Value *LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrType, const llvm::Twine &name = "",
-                           bool one_elem = false);
- 
-     /* Load from memory location(s) given.
-      * 'type' needs to be provided when storage type is different from IR type. For example,
-      * 'unform bool' is 'i1' in IR but stored as 'i8'.
-      * Otherwise leave this as NULL. */
--    llvm::Value *LoadInst(llvm::Value *ptr, const Type *type = NULL, const char *name = NULL);
-+    llvm::Value *LoadInst(llvm::Value *ptr, const Type *type = NULL, const llvm::Twine &name = "");
- 
-     /** Emits an alloca instruction to allocate stack storage for the given
-         type.  If a non-zero alignment is specified, the object is also
-@@ -463,7 +463,8 @@ class FunctionEmitContext {
-         instruction is added at the start of the function in the entry
-         basic block; if it should be added to the current basic block, then
-         the atEntryBlock parameter should be false. */
--    llvm::Value *AllocaInst(llvm::Type *llvmType, const char *name = NULL, int align = 0, bool atEntryBlock = true);
-+    llvm::Value *AllocaInst(llvm::Type *llvmType, const llvm::Twine &name = "", int align = 0,
-+                            bool atEntryBlock = true);
- 
-     /** Emits an alloca instruction to allocate stack storage for the given
-         type.  If a non-zero alignment is specified, the object is also
-@@ -474,7 +475,7 @@ class FunctionEmitContext {
-         This implementation is preferred when possible. It is needed when
-         storage type is different from IR type. For example,
-         'unform bool' is 'i1' in IR but stored as 'i8'. */
--    llvm::Value *AllocaInst(const Type *ptrType, const char *name = NULL, int align = 0, bool atEntryBlock = true);
-+    llvm::Value *AllocaInst(const Type *ptrType, const llvm::Twine &name = "", int align = 0, bool atEntryBlock = true);
- 
-     /** Standard store instruction; for this variant, the lvalue must be a
-         single pointer, not a varying lvalue.
-@@ -502,39 +503,41 @@ class FunctionEmitContext {
-     /** This convenience method maps to an llvm::ExtractElementInst if the
-         given value is a llvm::VectorType, and to an llvm::ExtractValueInst
-         otherwise. */
--    llvm::Value *ExtractInst(llvm::Value *v, int elt, const char *name = NULL);
-+    llvm::Value *ExtractInst(llvm::Value *v, int elt, const llvm::Twine &name = "");
- 
-     /** This convenience method maps to an llvm::InsertElementInst if the
-         given value is a llvm::VectorType, and to an llvm::InsertValueInst
-         otherwise. */
--    llvm::Value *InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const char *name = NULL);
-+    llvm::Value *InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const llvm::Twine &name = "");
- 
-     /** This convenience method maps to an llvm::ShuffleVectorInst. */
--    llvm::Value *ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const char *name = NULL);
-+    llvm::Value *ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const llvm::Twine &name = "");
- 
-     /** This convenience method to generate broadcast pattern. It takes a value
-         and a vector type. Type of the value must match element type of the
-         vector. */
--    llvm::Value *BroadcastValue(llvm::Value *v, llvm::Type *vecType, const char *name = NULL);
-+    llvm::Value *BroadcastValue(llvm::Value *v, llvm::Type *vecType, const llvm::Twine &name = "");
- 
--    llvm::PHINode *PhiNode(llvm::Type *type, int count, const char *name = NULL);
--    llvm::Instruction *SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1, const char *name = NULL);
-+    llvm::PHINode *PhiNode(llvm::Type *type, int count, const llvm::Twine &name = "");
-+    llvm::Instruction *SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1,
-+                                  const llvm::Twine &name = "");
- 
-     /** Emits IR to do a function call with the given arguments.  If the
-         function type is a varying function pointer type, its full type
-         must be provided in funcType.  funcType can be NULL if func is a
-         uniform function pointer. */
-     llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, const std::vector<llvm::Value *> &args,
--                          const char *name = NULL);
-+                          const llvm::Twine &name = "");
- 
-     /** This is a convenience method that issues a call instruction to a
-         function that takes just a single argument. */
--    llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg, const char *name = NULL);
-+    llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg,
-+                          const llvm::Twine &name = "");
- 
-     /** This is a convenience method that issues a call instruction to a
-         function that takes two arguments. */
-     llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg0, llvm::Value *arg1,
--                          const char *name = NULL);
-+                          const llvm::Twine &name = "");
- 
-     /** Launch an asynchronous task to run the given function, passing it
-         he given argument values. */
-@@ -756,9 +759,10 @@ class FunctionEmitContext {
-     void maskedStore(llvm::Value *value, llvm::Value *ptr, const Type *ptrType, llvm::Value *mask);
-     void storeUniformToSOA(llvm::Value *value, llvm::Value *ptr, llvm::Value *mask, const Type *valueType,
-                            const PointerType *ptrType);
--    llvm::Value *loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType, const char *name);
-+    llvm::Value *loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType,
-+                                    const llvm::Twine &name = "");
- 
--    llvm::Value *gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask, const char *name);
-+    llvm::Value *gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask, const llvm::Twine &name = "");
- 
-     llvm::Value *addVaryingOffsetsIfNeeded(llvm::Value *ptr, const Type *ptrType);
- };
-diff --git a/src/expr.cpp b/src/expr.cpp
-index 80cc3020a..6d38d1889 100644
---- a/src/expr.cpp
-+++ b/src/expr.cpp
-@@ -1021,11 +1021,11 @@ static llvm::Value *lEmitNegate(Expr *arg, SourcePos pos, FunctionEmitContext *c
-     ctx->SetDebugPos(pos);
-     if (type->IsFloatType()) {
-         llvm::Value *zero = llvm::ConstantFP::getZeroValueForNegation(type->LLVMType(g->ctx));
--        return ctx->BinaryOperator(llvm::Instruction::FSub, zero, argVal, LLVMGetName(argVal, "_negate"));
-+        return ctx->BinaryOperator(llvm::Instruction::FSub, zero, argVal, llvm::Twine(argVal->getName()) + "_negate");
-     } else {
-         llvm::Value *zero = lLLVMConstantValue(type, g->ctx, 0.);
-         AssertPos(pos, type->IsIntType());
--        return ctx->BinaryOperator(llvm::Instruction::Sub, zero, argVal, LLVMGetName(argVal, "_negate"));
-+        return ctx->BinaryOperator(llvm::Instruction::Sub, zero, argVal, llvm::Twine(argVal->getName()) + "_negate");
-     }
- }
- 
-@@ -1047,11 +1047,11 @@ llvm::Value *UnaryExpr::GetValue(FunctionEmitContext *ctx) const {
-         return lEmitNegate(expr, pos, ctx);
-     case LogicalNot: {
-         llvm::Value *argVal = expr->GetValue(ctx);
--        return ctx->NotOperator(argVal, LLVMGetName(argVal, "_logicalnot"));
-+        return ctx->NotOperator(argVal, llvm::Twine(argVal->getName()) + "_logicalnot");
-     }
-     case BitNot: {
-         llvm::Value *argVal = expr->GetValue(ctx);
--        return ctx->NotOperator(argVal, LLVMGetName(argVal, "_bitnot"));
-+        return ctx->NotOperator(argVal, llvm::Twine(argVal->getName()) + "_bitnot");
-     }
-     default:
-         FATAL("logic error");
-@@ -1518,7 +1518,8 @@ static llvm::Value *lEmitBinaryArith(BinaryExpr::Op op, llvm::Value *value0, llv
-             return NULL;
-         }
- 
--        return ctx->BinaryOperator(inst, value0, value1, LLVMGetName(opName, value0, value1));
-+        return ctx->BinaryOperator(inst, value0, value1,
-+                                   (((llvm::Twine(opName) + "_") + value0->getName()) + "_") + value1->getName());
-     }
- }
- 
-@@ -1563,7 +1564,7 @@ static llvm::Value *lEmitBinaryCmp(BinaryExpr::Op op, llvm::Value *e0Val, llvm::
-     }
- 
-     llvm::Value *cmp = ctx->CmpInst(isFloatOp ? llvm::Instruction::FCmp : llvm::Instruction::ICmp, pred, e0Val, e1Val,
--                                    LLVMGetName(opName, e0Val, e1Val));
-+                                    (((llvm::Twine(opName) + "_") + e0Val->getName()) + "_") + e1Val->getName());
-     // This is a little ugly: CmpInst returns i1 values, but we use vectors
-     // of i32s for varying bool values; type convert the result here if
-     // needed.
-@@ -4177,7 +4178,7 @@ static llvm::Value *lConvertToSlicePointer(FunctionEmitContext *ctx, llvm::Value
-     // offsets
-     llvm::Value *result = llvm::Constant::getNullValue(sliceStructType);
-     // And replace the pointer in the struct with the given pointer
--    return ctx->InsertInst(result, ptr, 0, LLVMGetName(ptr, "_slice"));
-+    return ctx->InsertInst(result, ptr, 0, llvm::Twine(ptr->getName()) + "_slice");
- }
- 
- /** If the given array index is a compile time constant, check to see if it
-@@ -4258,8 +4259,8 @@ llvm::Value *IndexExpr::GetLValue(FunctionEmitContext *ctx) const {
-         // Convert to a slice pointer if we're indexing into SOA data
-         basePtrValue = lConvertPtrToSliceIfNeeded(ctx, basePtrValue, &baseExprType);
- 
--        llvm::Value *ptr =
--            ctx->GetElementPtrInst(basePtrValue, indexValue, baseExprType, LLVMGetName(basePtrValue, "_offset"));
-+        llvm::Value *ptr = ctx->GetElementPtrInst(basePtrValue, indexValue, baseExprType,
-+                                                  llvm::Twine(basePtrValue->getName()) + "_offset");
-         return lAddVaryingOffsetsIfNeeded(ctx, ptr, GetLValueType());
-     }
- 
-@@ -4290,8 +4291,8 @@ llvm::Value *IndexExpr::GetLValue(FunctionEmitContext *ctx) const {
-     ctx->SetDebugPos(pos);
- 
-     // And do the actual indexing calculation..
--    llvm::Value *ptr =
--        ctx->GetElementPtrInst(basePtr, LLVMInt32(0), indexValue, basePtrType, LLVMGetName(basePtr, "_offset"));
-+    llvm::Value *ptr = ctx->GetElementPtrInst(basePtr, LLVMInt32(0), indexValue, basePtrType,
-+                                              llvm::Twine(basePtr->getName()) + "_offset");
-     return lAddVaryingOffsetsIfNeeded(ctx, ptr, GetLValueType());
- }
- 
-@@ -4788,15 +4789,14 @@ llvm::Value *VectorMemberExpr::GetValue(FunctionEmitContext *ctx) const {
-         for (size_t i = 0; i < identifier.size(); ++i) {
-             char idStr[2] = {identifier[i], '\0'};
-             llvm::Value *elementPtr =
--                ctx->AddElementOffset(basePtr, indices[i], basePtrType, LLVMGetName(basePtr, idStr));
-+                ctx->AddElementOffset(basePtr, indices[i], basePtrType, llvm::Twine(basePtr->getName()) + idStr);
-             llvm::Value *elementValue = ctx->LoadInst(elementPtr, elementMask, elementPtrType);
- 
--            const char *resultName = LLVMGetName(resultPtr, idStr);
--            llvm::Value *ptmp = ctx->AddElementOffset(resultPtr, i, NULL, resultName);
-+            llvm::Value *ptmp = ctx->AddElementOffset(resultPtr, i, NULL, llvm::Twine(resultPtr->getName()) + idStr);
-             ctx->StoreInst(elementValue, ptmp, elementPtrType, expr->GetType()->IsUniformType());
-         }
- 
--        return ctx->LoadInst(resultPtr, memberType, LLVMGetName(basePtr, "_swizzle"));
-+        return ctx->LoadInst(resultPtr, memberType, llvm::Twine(basePtr->getName()) + "_swizzle");
-     }
- }
- 
-@@ -4932,7 +4932,7 @@ llvm::Value *MemberExpr::GetValue(FunctionEmitContext *ctx) const {
- 
-     ctx->SetDebugPos(pos);
-     std::string suffix = std::string("_") + identifier;
--    return ctx->LoadInst(lvalue, mask, lvalueType, LLVMGetName(lvalue, suffix.c_str()));
-+    return ctx->LoadInst(lvalue, mask, lvalueType, llvm::Twine(lvalue->getName()) + suffix);
- }
- 
- const Type *MemberExpr::GetType() const { return NULL; }
-@@ -6502,7 +6502,7 @@ static llvm::Value *lTypeConvAtomic(FunctionEmitContext *ctx, llvm::Value *exprV
-                 // does for everyone else...
-                 Assert(cast);
-                 cast = ctx->SwitchBoolSize(cast, LLVMTypes::BoolVectorType->getElementType(),
--                                           LLVMGetName(cast, "to_i_bool"));
-+                                           llvm::Twine(cast->getName()) + "to_i_bool");
-             }
-         } else {
-             // fromType->IsVaryingType())
-@@ -8246,7 +8246,7 @@ llvm::Value *NewExpr::GetValue(FunctionEmitContext *ctx) const {
-         // pointer of the return type and to run the code for initializers,
-         // if present.
-         llvm::Type *ptrType = retType->LLVMType(g->ctx);
--        ptrValue = ctx->BitCastInst(ptrValue, ptrType, LLVMGetName(ptrValue, "_cast_ptr"));
-+        ptrValue = ctx->BitCastInst(ptrValue, ptrType, llvm::Twine(ptrValue->getName()) + "_cast_ptr");
- 
-         if (initExpr != NULL)
-             InitSymbol(ptrValue, allocType, initExpr, ctx, pos);
-diff --git a/src/llvmutil.cpp b/src/llvmutil.cpp
-index 970175dbf..d0becb9f5 100644
---- a/src/llvmutil.cpp
-+++ b/src/llvmutil.cpp
-@@ -1605,23 +1605,6 @@ llvm::Value *LLVMShuffleVectors(llvm::Value *v1, llvm::Value *v2, int32_t shuf[]
-     return new llvm::ShuffleVectorInst(v1, v2, vec, "shuffle", insertBefore);
- }
- 
--const char *LLVMGetName(llvm::Value *v, const char *s) {
--    if (v == NULL)
--        return s;
--    std::string ret = std::string(v->getName());
--    ret += s;
--    return strdup(ret.c_str());
--}
--
--const char *LLVMGetName(const char *op, llvm::Value *v1, llvm::Value *v2) {
--    std::string r = op;
--    r += "_";
--    r += v1->getName().str();
--    r += "_";
--    r += v2->getName().str();
--    return strdup(r.c_str());
--}
--
- #ifdef ISPC_GENX_ENABLED
- bool lIsSVMLoad(llvm::Instruction *inst) {
-     Assert(inst);
-diff --git a/src/llvmutil.h b/src/llvmutil.h
-index 42cce4d83..07d089bb4 100644
---- a/src/llvmutil.h
-+++ b/src/llvmutil.h
-@@ -328,11 +328,6 @@ extern llvm::Value *LLVMConcatVectors(llvm::Value *v1, llvm::Value *v2, llvm::In
- extern llvm::Value *LLVMShuffleVectors(llvm::Value *v1, llvm::Value *v2, int32_t shuf[], int shufSize,
-                                        llvm::Instruction *insertBefore);
- 
--/** Utility routines to concat strings with the names of existing values to
--    create meaningful new names for instruction values.
--*/
--extern const char *LLVMGetName(llvm::Value *v, const char *);
--extern const char *LLVMGetName(const char *op, llvm::Value *v1, llvm::Value *v2);
- #ifdef ISPC_GENX_ENABLED
- enum AddressSpace { Local, Global, External };
- 
-diff --git a/src/opt.cpp b/src/opt.cpp
-index 5b1ac7b63..9d6cae058 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -257,7 +257,7 @@ static bool lGetSourcePosFromMetadata(const llvm::Instruction *inst, SourcePos *
-     return true;
- }
- 
--static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, const char *name,
-+static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[2] = {arg0, arg1};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[2]);
-@@ -265,21 +265,22 @@ static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llv
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    const char *name, llvm::Instruction *insertBefore = NULL) {
-+                                    const llvm::Twine &name, llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[3] = {arg0, arg1, arg2};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[3]);
-     return llvm::CallInst::Create(func, newArgArray, name, insertBefore);
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, const char *name, llvm::Instruction *insertBefore = NULL) {
-+                                    llvm::Value *arg3, const llvm::Twine &name,
-+                                    llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[4] = {arg0, arg1, arg2, arg3};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[4]);
-     return llvm::CallInst::Create(func, newArgArray, name, insertBefore);
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, llvm::Value *arg4, const char *name,
-+                                    llvm::Value *arg3, llvm::Value *arg4, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[5] = {arg0, arg1, arg2, arg3, arg4};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[5]);
-@@ -287,7 +288,7 @@ static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llv
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, llvm::Value *arg4, llvm::Value *arg5, const char *name,
-+                                    llvm::Value *arg3, llvm::Value *arg4, llvm::Value *arg5, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[6] = {arg0, arg1, arg2, arg3, arg4, arg5};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[6]);
-@@ -991,23 +992,24 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 llvm::Type *returnType = callInst->getType();
-                 Assert(llvm::isa<llvm::VectorType>(returnType));
-                 // cast the i8 * to the appropriate type
--                const char *name = LLVMGetName(callInst->getArgOperand(0), "_cast");
--                llvm::Value *castPtr = new llvm::BitCastInst(callInst->getArgOperand(0),
--                                                             llvm::PointerType::get(returnType, 0), name, callInst);
-+                llvm::Value *castPtr =
-+                    new llvm::BitCastInst(callInst->getArgOperand(0), llvm::PointerType::get(returnType, 0),
-+                                          llvm::Twine(callInst->getArgOperand(0)->getName()) + "_cast", callInst);
-                 lCopyMetadata(castPtr, callInst);
-                 int align;
-                 if (g->opt.forceAlignedMemory)
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
--                name = LLVMGetName(callInst->getArgOperand(0), "_load");
- #if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
--                llvm::Instruction *loadInst = new llvm::LoadInst(castPtr, name, false /* not volatile */,
--                                                                 llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
-+                llvm::Instruction *loadInst =
-+                    new llvm::LoadInst(castPtr, llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load",
-+                                       false /* not volatile */, llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
- #else
-                 llvm::Instruction *loadInst = new llvm::LoadInst(
--                    llvm::dyn_cast<llvm::PointerType>(castPtr->getType())->getPointerElementType(), castPtr, name,
--                    false /* not volatile */, llvm::MaybeAlign(align).valueOrOne(), (llvm::Instruction *)NULL);
-+                    llvm::dyn_cast<llvm::PointerType>(castPtr->getType())->getPointerElementType(), castPtr,
-+                    llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load", false /* not volatile */,
-+                    llvm::MaybeAlign(align).valueOrOne(), (llvm::Instruction *)NULL);
- #endif
-                 lCopyMetadata(loadInst, callInst);
-                 llvm::ReplaceInstWithInst(callInst, loadInst);
-@@ -1028,9 +1030,9 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 // all lanes storing, so replace with a regular store
-                 llvm::Value *rvalue = callInst->getArgOperand(2);
-                 llvm::Type *storeType = rvalue->getType();
--                const char *name = LLVMGetName(callInst->getArgOperand(0), "_ptrcast");
--                llvm::Value *castPtr = new llvm::BitCastInst(callInst->getArgOperand(0),
--                                                             llvm::PointerType::get(storeType, 0), name, callInst);
-+                llvm::Value *castPtr =
-+                    new llvm::BitCastInst(callInst->getArgOperand(0), llvm::PointerType::get(storeType, 0),
-+                                          llvm::Twine(callInst->getArgOperand(0)->getName()) + "_ptrcast", callInst);
-                 lCopyMetadata(castPtr, callInst);
- 
-                 int align;
-@@ -1339,8 +1341,8 @@ static llvm::Value *lGetBasePointer(llvm::Value *v, llvm::Instruction *insertBef
-         if (t == NULL) {
-             return NULL;
-         } else {
--            return llvm::CastInst::Create(ci->getOpcode(), t, ci->getType()->getScalarType(), LLVMGetName(t, "_cast"),
--                                          insertBefore);
-+            return llvm::CastInst::Create(ci->getOpcode(), t, ci->getType()->getScalarType(),
-+                                          llvm::Twine(t->getName()) + "_cast", insertBefore);
-         }
-     }
- 
-@@ -1583,13 +1585,13 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-         if (co == NULL)
-             *constOffset = NULL;
-         else
--            *constOffset =
--                llvm::CastInst::Create(cast->getOpcode(), co, cast->getType(), LLVMGetName(co, "_cast"), insertBefore);
-+            *constOffset = llvm::CastInst::Create(cast->getOpcode(), co, cast->getType(),
-+                                                  llvm::Twine(co->getName()) + "_cast", insertBefore);
-         if (vo == NULL)
-             *variableOffset = NULL;
-         else
--            *variableOffset =
--                llvm::CastInst::Create(cast->getOpcode(), vo, cast->getType(), LLVMGetName(vo, "_cast"), insertBefore);
-+            *variableOffset = llvm::CastInst::Create(cast->getOpcode(), vo, cast->getType(),
-+                                                     llvm::Twine(vo->getName()) + "_cast", insertBefore);
-         return;
-     }
- 
-@@ -1608,16 +1610,18 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-             else if (c1 == NULL || llvm::isa<llvm::ConstantAggregateZero>(c1))
-                 *constOffset = c0;
-             else
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, c0, c1, LLVMGetName("add", c0, c1),
--                                                            insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, c0, c1, ((llvm::Twine("add_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
- 
-             if (v0 == NULL || llvm::isa<llvm::ConstantAggregateZero>(v0))
-                 *variableOffset = v1;
-             else if (v1 == NULL || llvm::isa<llvm::ConstantAggregateZero>(v1))
-                 *variableOffset = v0;
-             else
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, v0, v1,
--                                                               LLVMGetName("add", v0, v1), insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, v0, v1, ((llvm::Twine("add_") + v0->getName()) + "_") + v1->getName(),
-+                    insertBefore);
-             return;
-         } else if (bop->getOpcode() == llvm::Instruction::Shl) {
-             lExtractConstantOffset(op0, &c0, &v0, insertBefore);
-@@ -1633,10 +1637,12 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-                 *constOffset = vec;
-                 *variableOffset = NULL;
-             } else {
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Shl, c0, c1, LLVMGetName("shl", c0, c1),
--                                                            insertBefore);
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Shl, v0, c1,
--                                                               LLVMGetName("shl", v0, c1), insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Shl, c0, c1, ((llvm::Twine("shl_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Shl, v0, c1, ((llvm::Twine("shl_") + v0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-             }
-             return;
-         } else if (bop->getOpcode() == llvm::Instruction::Mul) {
-@@ -1648,25 +1654,30 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-             // Note that the first term is a constant and the last three are
-             // variable.
-             if (c0 != NULL && c1 != NULL)
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, c1, LLVMGetName("mul", c0, c1),
--                                                            insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Mul, c0, c1, ((llvm::Twine("mul_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-             else
-                 *constOffset = NULL;
- 
-             llvm::Value *va = NULL, *vb = NULL, *vc = NULL;
-             if (v0 != NULL && c1 != NULL)
--                va = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, c1, LLVMGetName("mul", v0, c1),
-+                va = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, c1,
-+                                                  ((llvm::Twine("mul_") + v0->getName()) + "_") + c1->getName(),
-                                                   insertBefore);
-             if (c0 != NULL && v1 != NULL)
--                vb = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, v1, LLVMGetName("mul", c0, v1),
-+                vb = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, v1,
-+                                                  ((llvm::Twine("mul_") + c0->getName()) + "_") + v1->getName(),
-                                                   insertBefore);
-             if (v0 != NULL && v1 != NULL)
--                vc = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, v1, LLVMGetName("mul", v0, v1),
-+                vc = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, v1,
-+                                                  ((llvm::Twine("mul_") + v0->getName()) + "_") + v1->getName(),
-                                                   insertBefore);
- 
-             llvm::Value *vab = NULL;
-             if (va != NULL && vb != NULL)
--                vab = llvm::BinaryOperator::Create(llvm::Instruction::Add, va, vb, LLVMGetName("add", va, vb),
-+                vab = llvm::BinaryOperator::Create(llvm::Instruction::Add, va, vb,
-+                                                   ((llvm::Twine("add_") + va->getName()) + "_") + vb->getName(),
-                                                    insertBefore);
-             else if (va != NULL)
-                 vab = va;
-@@ -1674,8 +1685,9 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-                 vab = vb;
- 
-             if (vab != NULL && vc != NULL)
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, vab, vc,
--                                                               LLVMGetName("add", vab, vc), insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, vab, vc, ((llvm::Twine("add_") + vab->getName()) + "_") + vc->getName(),
-+                    insertBefore);
-             else if (vab != NULL)
-                 *variableOffset = vab;
-             else
-@@ -1943,7 +1955,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-             // all zeros (i.e. a ConstantAggregateZero, but just in case,
-             // do the more general check with lVectorIs32BitInts().
-             variableOffset = new llvm::TruncInst(variableOffset, LLVMTypes::Int32VectorType,
--                                                 LLVMGetName(variableOffset, "_trunc"), insertBefore);
-+                                                 llvm::Twine(variableOffset->getName()) + "_trunc", insertBefore);
-         else
-             return false;
-     }
-@@ -1952,7 +1964,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-         if (lVectorIs32BitInts(constOffset)) {
-             // Truncate them so we have a 32-bit vector type for them.
-             constOffset = new llvm::TruncInst(constOffset, LLVMTypes::Int32VectorType,
--                                              LLVMGetName(constOffset, "_trunc"), insertBefore);
-+                                              llvm::Twine(constOffset->getName()) + "_trunc", insertBefore);
-         } else {
-             // FIXME: otherwise we just assume that all constant offsets
-             // can actually always fit into 32-bits...  (This could be
-@@ -1963,7 +1975,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-             // llvm::ConstantFoldInstruction() doesn't seem to be doing
-             // enough for us in some cases if we call it from here.
-             constOffset = new llvm::TruncInst(constOffset, LLVMTypes::Int32VectorType,
--                                              LLVMGetName(constOffset, "_trunc"), insertBefore);
-+                                              llvm::Twine(constOffset->getName()) + "_trunc", insertBefore);
-         }
-     }
- 
-@@ -2012,8 +2024,8 @@ static bool lOffsets32BitSafe(llvm::Value **offsetPtr, llvm::Instruction *insert
- 
-         // Alternatively, offset could be a sequence of adds terminating
-         // in safe constant vectors or a SExt.
--        *offsetPtr =
--            new llvm::TruncInst(offset, LLVMTypes::Int32VectorType, LLVMGetName(offset, "_trunc"), insertBefore);
-+        *offsetPtr = new llvm::TruncInst(offset, LLVMTypes::Int32VectorType, llvm::Twine(offset->getName()) + "_trunc",
-+                                         insertBefore);
-         return true;
-     } else
-         return false;
-@@ -2229,7 +2241,8 @@ static bool lGSToGSBaseOffsets(llvm::CallInst *callInst) {
-     }
-     // Cast the base pointer to a void *, since that's what the
-     // __pseudo_*_base_offsets_* functions want.
--    basePtr = new llvm::IntToPtrInst(basePtr, LLVMTypes::VoidPointerType, LLVMGetName(basePtr, "_2void"), callInst);
-+    basePtr = new llvm::IntToPtrInst(basePtr, LLVMTypes::VoidPointerType, llvm::Twine(basePtr->getName()) + "_2void",
-+                                     callInst);
-     lCopyMetadata(basePtr, callInst);
-     llvm::Function *gatherScatterFunc = info->baseOffsetsFunc;
- 
-@@ -2803,7 +2816,7 @@ static bool lGSToLoadStore(llvm::CallInst *callInst) {
-                 lCopyMetadata(ptr, callInst);
-                 Debug(pos, "Transformed gather to unaligned vector load!");
-                 llvm::Instruction *newCall =
--                    lCallInst(gatherInfo->loadMaskedFunc, ptr, mask, LLVMGetName(ptr, "_masked_load"));
-+                    lCallInst(gatherInfo->loadMaskedFunc, ptr, mask, llvm::Twine(ptr->getName()) + "_masked_load");
-                 lCopyMetadata(newCall, callInst);
-                 llvm::ReplaceInstWithInst(callInst, newCall);
-                 return true;
diff --git a/srcpkgs/ispc/patches/llvm12-004.patch b/srcpkgs/ispc/patches/llvm12-004.patch
deleted file mode 100644
index 3a94d8443a5e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-004.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From c03a5142444476a1caa5c2ba7fa2d92d7793d6f1 Mon Sep 17 00:00:00 2001
-From: Deepak Rajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Mon, 25 Jan 2021 09:22:49 -0800
-Subject: [PATCH] Fixing build on llvm trunk.
-
----
- src/ctx.cpp | 7 +++----
- 1 file changed, 3 insertions(+), 4 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index ded524b71..b60e6fe84 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1020,8 +1020,7 @@ void FunctionEmitContext::EmitCaseLabel(int value, bool checkMask, SourcePos pos
-     llvm::BasicBlock *bbCaseImpl = NULL;
-     if (emitGenXHardwareMask()) {
-         // Create basic block with actual case implementation
--        llvm::Twine bbName = llvm::Twine(bbCase->getName()) + "_impl";
--        bbCaseImpl = CreateBasicBlock(bbName, bbCase);
-+        bbCaseImpl = CreateBasicBlock(llvm::Twine(bbCase->getName()) + "_impl", bbCase);
-     }
- #endif
- 
-@@ -3142,8 +3141,8 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     llvm::Value *undef2 = llvm::UndefValue::get(vecType);
- 
-     // InsertElement
--    llvm::Twine tw = name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + llvm::Twine("_init");
--    llvm::Value *insert = InsertInst(undef1, v, 0, tw.str().c_str());
-+    llvm::Value *insert =
-+        InsertInst(undef1, v, 0, name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + "_init");
- 
-     // ShuffleVector
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
diff --git a/srcpkgs/ispc/patches/llvm12-005.patch b/srcpkgs/ispc/patches/llvm12-005.patch
deleted file mode 100644
index e3e96b00abfa..000000000000
--- a/srcpkgs/ispc/patches/llvm12-005.patch
+++ /dev/null
@@ -1,372 +0,0 @@
-From c1d0a51bf8416d42144de9e2bdd59825eaeff1ac Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Fri, 8 Jan 2021 14:13:49 -0800
-Subject: [PATCH] LLVM 11 support for gen code
-
----
- src/ctx.cpp                     |  13 ++-
- src/gen/GlobalsLocalization.cpp |   9 +-
- src/opt.cpp                     | 143 ++++++++++++++++++++++++--------
- 3 files changed, 124 insertions(+), 41 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index b60e6fe84..2a72e6837 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1,5 +1,5 @@
- /*
--  Copyright (c) 2010-2020, Intel Corporation
-+  Copyright (c) 2010-2021, Intel Corporation
-   All rights reserved.
- 
-   Redistribution and use in source and binary forms, with or without
-@@ -3685,8 +3685,17 @@ llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::
-     AssertPos(currentPos, llvm::isa<llvm::VectorType>(value->getType()));
-     llvm::VectorType *vt = llvm::dyn_cast<llvm::VectorType>(value->getType());
-     if (defaults == NULL) {
--        defaults = llvm::ConstantVector::getSplat(value->getType()->getVectorNumElements(),
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+        defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-+                                                  llvm::Constant::getNullValue(vt->getElementType()));
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+        defaults = llvm::ConstantVector::getSplat({static_cast<unsigned int>(vt->getNumElements()), false},
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
-+#else
-+        defaults = llvm::ConstantVector::getSplat(
-+            llvm::ElementCount::get(static_cast<unsigned int>(vt->getNumElements()), false),
-+            llvm::Constant::getNullValue(vt->getElementType()));
-+#endif
-     }
- 
-     auto Fn = llvm::GenXIntrinsic::getGenXDeclaration(m->module, llvm::GenXIntrinsic::genx_simdcf_predicate,
-diff --git a/src/gen/GlobalsLocalization.cpp b/src/gen/GlobalsLocalization.cpp
-index a176e9462..41f3b00e2 100644
---- a/src/gen/GlobalsLocalization.cpp
-+++ b/src/gen/GlobalsLocalization.cpp
-@@ -1,5 +1,5 @@
- /*
--  Copyright (c) 2014, 2016-2020, Intel Corporation
-+  Copyright (c) 2014, 2016-2021, Intel Corporation
-   All rights reserved.
- 
-   Redistribution and use in source and binary forms, with or without
-@@ -53,8 +53,10 @@
- #include <llvm/GenXIntrinsics/GenXIntrOpts.h>
- #include <llvm/GenXIntrinsics/GenXIntrinsics.h>
- #include <llvm/GenXIntrinsics/GenXMetadata.h>
--#include <llvm/IR/CFG.h>
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
- #include <llvm/IR/CallSite.h>
-+#endif
-+#include <llvm/IR/CFG.h>
- #include <llvm/IR/DebugInfo.h>
- #include <llvm/IR/Dominators.h>
- #include <llvm/IR/Function.h>
-@@ -470,7 +472,8 @@ void GlobalsLocalization::LocalizeGlobals(LocalizationInfo &LI) {
-         Instruction &FirstI = *Fn->getEntryBlock().begin();
-         Type *ElemTy = GV->getType()->getElementType();
-         AllocaInst *Alloca = new AllocaInst(ElemTy, 0, GV->getName() + ".local", &FirstI);
--        Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()));
-+        Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()).valueOrOne());
-+
-         if (!isa<UndefValue>(GV->getInitializer()))
-             new StoreInst(GV->getInitializer(), Alloca, &FirstI);
- 
-diff --git a/src/opt.cpp b/src/opt.cpp
-index d58d77f73..1789b8476 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -2899,15 +2899,17 @@ static llvm::Function *lGenXMaskedInt8Inst(llvm::Instruction *inst, bool isStore
- static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::Instruction *inst) {
-     Assert(g->target->isGenXTarget());
-     Assert(llvm::isa<llvm::VectorType>(val->getType()));
--    Assert(llvm::isPowerOf2_32(val->getType()->getVectorNumElements()));
--    Assert(val->getType()->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-+
-+    llvm::VectorType *valVecType = llvm::dyn_cast<llvm::VectorType>(val->getType());
-+    Assert(llvm::isPowerOf2_32(valVecType->getNumElements()));
-+    Assert(valVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
- 
-     // The data write of svm store must have a size that is a power of two from 16 to 128
-     // bytes. However for int8 type and simd width = 8, the data write size is 8.
-     // So we use masked store function here instead of svm store which process int8 type
-     // correctly.
--    if (val->getType()->getPrimitiveSizeInBits() / 8 < 16) {
--        Assert(val->getType()->getScalarType() == LLVMTypes::Int8Type);
-+    if (valVecType->getPrimitiveSizeInBits() / 8 < 16) {
-+        Assert(valVecType->getScalarType() == LLVMTypes::Int8Type);
-         if (llvm::Function *maskedFunc = lGenXMaskedInt8Inst(inst, true))
-             return llvm::dyn_cast<llvm::CallInst>(lCallInst(maskedFunc, ptr, val, LLVMMaskAllOn, ""));
-         else {
-@@ -2923,15 +2925,17 @@ static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::
- 
- static llvm::CallInst *lGenXLoadInst(llvm::Value *ptr, llvm::Type *retType, llvm::Instruction *inst) {
-     Assert(llvm::isa<llvm::VectorType>(retType));
--    Assert(llvm::isPowerOf2_32(retType->getVectorNumElements()));
--    Assert(retType->getPrimitiveSizeInBits());
--    Assert(retType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-+
-+    llvm::VectorType *retVecType = llvm::dyn_cast<llvm::VectorType>(retType);
-+    Assert(llvm::isPowerOf2_32(retVecType->getNumElements()));
-+    Assert(retVecType->getPrimitiveSizeInBits());
-+    Assert(retVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-     // The data read of svm load must have a size that is a power of two from 16 to 128
-     // bytes. However for int8 type and simd width = 8, the data read size is 8.
-     // So we use masked load function here instead of svm load which process int8 type
-     // correctly.
--    if (retType->getPrimitiveSizeInBits() / 8 < 16) {
--        Assert(retType->getScalarType() == LLVMTypes::Int8Type);
-+    if (retVecType->getPrimitiveSizeInBits() / 8 < 16) {
-+        Assert(retVecType->getScalarType() == LLVMTypes::Int8Type);
-         if (llvm::Function *maskedFunc = lGenXMaskedInt8Inst(inst, false))
-             return llvm::dyn_cast<llvm::CallInst>(lCallInst(maskedFunc, ptr, LLVMMaskAllOn, ""));
-         else {
-@@ -5622,15 +5626,24 @@ static bool lVectorizeGEPs(llvm::Value *ptr, std::vector<PtrUse> &ptrUses, std::
-         llvm::PtrToIntInst *ptrToInt =
-             new llvm::PtrToIntInst(ptr, LLVMTypes::Int64Type, "vectorized_ptrtoint", insertBefore);
-         llvm::Instruction *addr = llvm::BinaryOperator::CreateAdd(ptrToInt, offset, "vectorized_address", insertBefore);
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        llvm::Type *retType = llvm::FixedVectorType::get(scalar_type, reqSize / t_size);
-+#else
-         llvm::Type *retType = llvm::VectorType::get(scalar_type, reqSize / t_size);
-+#endif
-         llvm::Function *fn = llvm::GenXIntrinsic::getGenXDeclaration(
-             m->module, llvm::GenXIntrinsic::genx_svm_block_ld_unaligned, {retType, addr->getType()});
-         llvm::Instruction *ld = llvm::CallInst::Create(fn, {addr}, "vectorized_ld", insertBefore);
- 
-         if (loadingPtr) {
-             // Cast int to ptr via inttoptr
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            ld = new llvm::IntToPtrInst(ld, llvm::FixedVectorType::get(originalType, reqSize / t_size),
-+                                        "vectorized_inttoptr", insertBefore);
-+#else
-             ld = new llvm::IntToPtrInst(ld, llvm::VectorType::get(originalType, reqSize / t_size),
-                                         "vectorized_inttoptr", insertBefore);
-+#endif
-         }
- 
-         // Scalar extracts for all loaded elements
-@@ -6160,19 +6173,34 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-         llvm::Instruction *inst = &*I;
-         if (llvm::CallInst *ci = llvm::dyn_cast<llvm::CallInst>(inst)) {
-             llvm::Function *func = ci->getCalledFunction();
--            if (func && func->getName() == "llvm.trap") {
-+            if (func && func->getName().equals("llvm.trap")) {
-                 llvm::Type *argTypes[] = {LLVMTypes::Int1VectorType, LLVMTypes::Int16VectorType};
-                 // Description of parameters for genx_raw_send_noresult can be found in target-genx.ll
-                 auto Fn = +llvm::GenXIntrinsic::getGenXDeclaration(
-                     m->module, llvm::GenXIntrinsic::genx_raw_send_noresult, argTypes);
-                 llvm::SmallVector<llvm::Value *, 8> Args;
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 0));
--                Args.push_back(llvm::ConstantVector::getSplat(g->target->getNativeVectorWidth(),
--                                                              llvm::ConstantInt::getTrue(*g->ctx)));
-+                Args.push_back(llvm::ConstantVector::getSplat(
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+                    g->target->getNativeVectorWidth(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+                    {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
-+#else // LLVM 12.0+
-+                    llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-+#endif
-+                    llvm::ConstantInt::getTrue(*g->ctx)));
-+
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 39));
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 33554448));
-                 llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
--                    g->target->getNativeVectorWidth(), llvm::Constant::getNullValue(llvm::Type::getInt16Ty(*g->ctx)));
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+                    g->target->getNativeVectorWidth(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+                    {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
-+#else // LLVM 12.0+
-+                    llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-+#endif
-+                    llvm::Constant::getNullValue(llvm::Type::getInt16Ty(*g->ctx)));
-                 Args.push_back(zeroMask);
- 
-                 llvm::Instruction *newInst = llvm::CallInst::Create(Fn, Args, ci->getName());
-@@ -6181,7 +6209,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     modifiedAny = true;
-                     goto restart;
-                 }
--            } else if (func && func->getName() == "llvm.assume") {
-+            } else if (func && func->getName().equals("llvm.assume")) {
-                 ci->eraseFromParent();
-                 modifiedAny = true;
-                 goto restart;
-@@ -6335,7 +6363,7 @@ bool CheckUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 continue;
-             for (int i = 0; i < unsupportedFuncs.size(); i++) {
-                 std::smatch match;
--                std::string funcName = func->getName();
-+                std::string funcName = func->getName().str();
-                 if (std::regex_match(funcName, match, unsupportedFuncs[i])) {
-                     // We found unsupported function. Generate error and stop compilation.
-                     SourcePos pos;
-@@ -6418,12 +6446,14 @@ bool MangleOpenCLBuiltins::runOnBasicBlock(llvm::BasicBlock &bb) {
-             if (func->getName().startswith("__spirv_ocl")) {
-                 std::string mangledName;
-                 llvm::Type *retType = func->getReturnType();
--                std::string funcName = func->getName();
-+                std::string funcName = func->getName().str();
-                 std::vector<llvm::Type *> ArgTy;
-                 // spirv OpenCL builtins are used for double types only
--                Assert(retType->isVectorTy() && retType->getVectorElementType()->isDoubleTy() ||
-+                Assert(retType->isVectorTy() &&
-+                           llvm::dyn_cast<llvm::VectorType>(retType)->getElementType()->isDoubleTy() ||
-                        retType->isSingleValueType() && retType->isDoubleTy());
--                if (retType->isVectorTy() && retType->getVectorElementType()->isDoubleTy()) {
-+                if (retType->isVectorTy() &&
-+                    llvm::dyn_cast<llvm::VectorType>(retType)->getElementType()->isDoubleTy()) {
-                     ArgTy.push_back(LLVMTypes::DoubleVectorType);
-                     // _DvWIDTH suffix is used in target file to differentiate scalar
-                     // and vector versions of intrinsics. Here we remove this
-@@ -6511,8 +6541,15 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- 
-     // Cast offsets to int64
-     Offsets = new llvm::ZExtInst(
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        Offsets,
-+        llvm::FixedVectorType::get(LLVMTypes::Int64Type,
-+                                   llvm::dyn_cast<llvm::VectorType>(Offsets->getType())->getNumElements()),
-+        "svm_offset_zext", InsertBefore);
-+#else
-         Offsets, llvm::VectorType::get(LLVMTypes::Int64Type, Offsets->getType()->getVectorNumElements()),
-         "svm_offset_zext", InsertBefore);
-+#endif
- 
-     if (!llvm::isa<llvm::ConstantPointerNull>(Ptr)) {
-         // Cast ptr to int64
-@@ -6520,13 +6557,31 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- 
-         // Vectorize ptr
-         llvm::Value *undefInsertValue =
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            llvm::UndefValue::get(llvm::FixedVectorType::get(
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+#else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
-+#endif
-         address = llvm::InsertElementInst::Create(undefInsertValue, address, LLVMInt32(0), "svm_ptr_iei", InsertBefore);
-         llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+            {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
-+#else
-+        llvm::ElementCount::get(
-+                                llvm::dyn_cast<llvm::FixedVectorType>(addressType->getNumElements(), false),
-+#endif
-             llvm::Constant::getNullValue(llvm::Type::getInt32Ty(InsertBefore->getContext())));
-+
-         llvm::Value *undefShuffleValue =
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            llvm::UndefValue::get(llvm::FixedVectorType::get(
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+#else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
-+#endif
-         address = new llvm::ShuffleVectorInst(address, undefShuffleValue, zeroVec, "svm_ptr_svi", InsertBefore);
- 
-         // Calculate address
-@@ -6553,9 +6608,12 @@ llvm::Instruction *FixAddressSpace::processVectorLoad(llvm::LoadInst *LI) {
-     if (retType->getScalarType()->isPointerTy()) {
-         isPtrLoad = true;
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        retType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(retType)->getNumElements());
-+#else
-         retType = llvm::VectorType::get(scalarType, retType->getVectorNumElements());
-+#endif
-     }
--
-     llvm::Instruction *res = lGenXLoadInst(ptr, retType, llvm::dyn_cast<llvm::Instruction>(LI));
-     Assert(res);
- 
-@@ -6580,11 +6638,16 @@ llvm::Instruction *FixAddressSpace::processSVMVectorLoad(llvm::Instruction *CI)
-     ptr = new llvm::IntToPtrInst(ptr, llvm::PointerType::get(retType, 0), CI->getName() + "_inttoptr", CI);
-     llvm::Instruction *loadInst = NULL;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    loadInst = new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), loadInst,
--                                  CI->getName(), (llvm::Instruction *)NULL);
-+    loadInst = new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-+                                  CI->getName(), false /* not volatile */,
-+                                  llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne(),
-+                                  (llvm::Instruction *)NULL);
- #else
--    loadInst = new llvm::LoadInst(ptr, CI->getName(), (llvm::Instruction *)NULL);
-+    loadInst = new llvm::LoadInst(ptr, CI->getName(), false,
-+                                  llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne(),
-+                                  (llvm::Instruction *)NULL);
- #endif
-+
-     Assert(loadInst);
-     return loadInst;
- }
-@@ -6606,7 +6669,11 @@ llvm::Instruction *FixAddressSpace::processVectorStore(llvm::StoreInst *SI) {
-     // Note: it doesn't look like a normal case for GenX target
-     if (valType->getScalarType()->isPointerTy()) {
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        valType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(valType)->getNumElements());
-+#else
-         valType = llvm::VectorType::get(scalarType, valType->getVectorNumElements());
-+#endif
-         val = new llvm::PtrToIntInst(val, valType, "svm_st_val_ptrtoint", SI);
-     }
- 
-@@ -6631,12 +6698,8 @@ llvm::Instruction *FixAddressSpace::processSVMVectorStore(llvm::Instruction *CI)
-     ptr = new llvm::IntToPtrInst(ptr, llvm::PointerType::get(valType, 0), CI->getName() + "_inttoptr", CI);
- 
-     llvm::Instruction *storeInst = NULL;
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    loadInst = new llvm::StoreInst(val, llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(),
--                                   storeInst, CI->getName(), (llvm::Instruction *)NULL);
--#else
--    storeInst = new llvm::StoreInst(val, ptr, (llvm::Instruction *)NULL);
--#endif
-+    storeInst = new llvm::StoreInst(val, ptr, (llvm::Instruction *)NULL,
-+                                    llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
-     Assert(storeInst);
-     return storeInst;
- }
-@@ -6645,15 +6708,18 @@ llvm::Instruction *FixAddressSpace::createInt8WrRegion(llvm::Value *Val, llvm::V
-     int width = g->target->getVectorWidth();
- 
-     llvm::Value *Args[8];
--
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Args[0] = llvm::UndefValue::get(llvm::FixedVectorType::get(LLVMTypes::Int8Type, width * 4)); // old value
-+#else
-     Args[0] = llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int8Type, width * 4)); // old value
--    Args[1] = Val;                                                                          // value to store
--    Args[2] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);                              // vstride
--    Args[3] = llvm::ConstantInt::get(LLVMTypes::Int32Type, width);                          // width
--    Args[4] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 4);                              // stride
--    Args[5] = llvm::ConstantInt::get(LLVMTypes::Int16Type, 0);                              // offsets
--    Args[6] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);                              // parent width (ignored)
--    Args[7] = Mask;                                                                         // mask
-+#endif
-+    Args[1] = Val;                                                 // value to store
-+    Args[2] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);     // vstride
-+    Args[3] = llvm::ConstantInt::get(LLVMTypes::Int32Type, width); // width
-+    Args[4] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 4);     // stride
-+    Args[5] = llvm::ConstantInt::get(LLVMTypes::Int16Type, 0);     // offsets
-+    Args[6] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);     // parent width (ignored)
-+    Args[7] = Mask;                                                // mask
- 
-     llvm::Type *Tys[4];
- 
-@@ -6708,7 +6774,12 @@ llvm::Instruction *FixAddressSpace::processGatherScatterPrivate(llvm::CallInst *
-         return NULL;
- 
-     llvm::Value *address = calculateGatherScatterAddress(ptr, offsets, CI);
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    llvm::Type *i8VecType = llvm::FixedVectorType::get(LLVMTypes::Int8Type, width * 4);
-+#else
-     llvm::Type *i8VecType = llvm::VectorType::get(LLVMTypes::Int8Type, width * 4);
-+#endif
-+
-     bool isInt8 = (value->getType()->getScalarType() == LLVMTypes::Int8Type);
- 
-     Assert(address && "Bad gather/scatter address!");
diff --git a/srcpkgs/ispc/patches/llvm12-006.patch b/srcpkgs/ispc/patches/llvm12-006.patch
deleted file mode 100644
index a829ea48391e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-006.patch
+++ /dev/null
@@ -1,126 +0,0 @@
-From bb3f493d1fbd45c79e1d9dee67a0430ba313eaad Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 19 Jan 2021 11:07:33 -0800
-Subject: [PATCH] Fixed ifdefs for LLVM_11
-
----
- src/ctx.cpp |  6 +++---
- src/opt.cpp | 18 +++++++++---------
- 2 files changed, 12 insertions(+), 12 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 2a72e6837..527a02f30 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1691,7 +1691,7 @@ llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const llvm::T
-     if (llvm::Constant *const_val = llvm::dyn_cast<llvm::Constant>(value)) {
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         ret = llvm::ConstantVector::getSplat(g->target->getVectorWidth(), const_val);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-         ret =
-             llvm::ConstantVector::getSplat({static_cast<unsigned int>(g->target->getVectorWidth()), false}, const_val);
- #else // LLVM 12.0+
-@@ -3148,7 +3148,7 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-     llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
-         vecType->getVectorNumElements(), llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-     llvm::Constant *zeroVec =
-         llvm::ConstantVector::getSplat({static_cast<unsigned int>(ty->getNumElements()), false},
-                                        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
-@@ -3688,7 +3688,7 @@ llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-         defaults = llvm::ConstantVector::getSplat({static_cast<unsigned int>(vt->getNumElements()), false},
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
- #else
-diff --git a/src/opt.cpp b/src/opt.cpp
-index 1789b8476..3ff191a0a 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -1045,7 +1045,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                 llvm::Instruction *loadInst =
-                     new llvm::LoadInst(castPtr, llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load",
-                                        false /* not volatile */, llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
-@@ -1472,7 +1472,7 @@ static llvm::Value *lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offse
-                     llvm::Value *zeroMask =
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                         llvm::ConstantVector::getSplat(cv->getType()->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                         llvm::ConstantVector::getSplat(
-                             {llvm::dyn_cast<llvm::VectorType>(cv->getType())->getNumElements(), false},
- #else // LLVM 12.0+
-@@ -1495,7 +1495,7 @@ static llvm::Value *lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offse
-                         llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                             bop_var_type->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                             {llvm::dyn_cast<llvm::VectorType>(bop_var_type)->getNumElements(), false},
- #else // LLVM 12.0+
-                             llvm::ElementCount::get(
-@@ -2803,7 +2803,7 @@ static bool lGSToLoadStore(llvm::CallInst *callInst) {
-             llvm::Value *zeroMask =
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                 llvm::ConstantVector::getSplat(callInst->getType()->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                 llvm::ConstantVector::getSplat(
-                     {llvm::dyn_cast<llvm::VectorType>(callInst->getType())->getNumElements(), false},
- 
-@@ -3100,7 +3100,7 @@ static bool lImproveMaskedLoad(llvm::CallInst *callInst, llvm::BasicBlock::itera
-         {
-             llvm::Type *ptrType = llvm::PointerType::get(callInst->getType(), 0);
-             ptr = new llvm::BitCastInst(ptr, ptrType, "ptr_cast_for_load", callInst);
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             load = new llvm::LoadInst(
-                 ptr, callInst->getName(), false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-@@ -3459,7 +3459,7 @@ llvm::Value *lGEPAndLoad(llvm::Value *basePtr, int64_t offset, int align, llvm::
-                          llvm::Type *type) {
-     llvm::Value *ptr = lGEPInst(basePtr, LLVMInt64(offset), "new_base", insertBefore);
-     ptr = new llvm::BitCastInst(ptr, llvm::PointerType::get(type, 0), "ptr_cast", insertBefore);
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-     return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, llvm::MaybeAlign(align), insertBefore);
- #else // LLVM 11.0+
-     return new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-@@ -6183,7 +6183,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 Args.push_back(llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                     g->target->getNativeVectorWidth(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                     {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
- #else // LLVM 12.0+
-                     llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-@@ -6195,7 +6195,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                     g->target->getNativeVectorWidth(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                     {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
- #else // LLVM 12.0+
-                     llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-@@ -6567,7 +6567,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
-         llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-             {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
- #else
-         llvm::ElementCount::get(
diff --git a/srcpkgs/ispc/patches/llvm12-007.patch b/srcpkgs/ispc/patches/llvm12-007.patch
deleted file mode 100644
index 1b975f896c7e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-007.patch
+++ /dev/null
@@ -1,160 +0,0 @@
-From 62f5a6c37bf26fc25a7cf81868052d3472874610 Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 23 Mar 2021 23:07:30 -0700
-Subject: [PATCH] Do not generate function mask when it is not required
-
----
- src/ctx.cpp                    | 39 ++++++++++++++-------
- tests/lit-tests/full_mask.ispc | 63 ++++++++++++++++++++++++++++++++++
- 2 files changed, 90 insertions(+), 12 deletions(-)
- create mode 100644 tests/lit-tests/full_mask.ispc
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 527a02f30..9e775fc5c 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -231,10 +231,18 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym, llvm::F
-     internalMaskPointer = AllocaInst(LLVMTypes::MaskType, "internal_mask_memory");
-     StoreInst(LLVMMaskAllOn, internalMaskPointer);
- 
--    functionMaskValue = LLVMMaskAllOn;
--
--    fullMaskPointer = AllocaInst(LLVMTypes::MaskType, "full_mask_memory");
--    StoreInst(LLVMMaskAllOn, fullMaskPointer);
-+    // If the function doesn't have __mask in parameters, there is no need to
-+    // have function mask
-+    if ((func->GetType()->isExported &&
-+         (lf->getFunctionType()->getNumParams() == func->GetType()->GetNumParameters())) ||
-+        (func->GetType()->isUnmasked) || (func->GetType()->isTask)) {
-+        functionMaskValue = NULL;
-+        fullMaskPointer = NULL;
-+    } else {
-+        functionMaskValue = LLVMMaskAllOn;
-+        fullMaskPointer = AllocaInst(LLVMTypes::MaskType, "full_mask_memory");
-+        StoreInst(LLVMMaskAllOn, fullMaskPointer);
-+    }
- 
-     blockEntryMask = NULL;
-     breakLanesPtr = continueLanesPtr = NULL;
-@@ -389,20 +397,26 @@ llvm::BasicBlock *FunctionEmitContext::GetCurrentBasicBlock() { return bblock; }
- 
- void FunctionEmitContext::SetCurrentBasicBlock(llvm::BasicBlock *bb) { bblock = bb; }
- 
--llvm::Value *FunctionEmitContext::GetFunctionMask() { return functionMaskValue; }
-+llvm::Value *FunctionEmitContext::GetFunctionMask() { return fullMaskPointer ? functionMaskValue : LLVMMaskAllOn; }
- 
- llvm::Value *FunctionEmitContext::GetInternalMask() { return LoadInst(internalMaskPointer, NULL, "load_mask"); }
- 
- llvm::Value *FunctionEmitContext::GetFullMask() {
--    return BinaryOperator(llvm::Instruction::And, GetInternalMask(), functionMaskValue, "internal_mask&function_mask");
-+    return fullMaskPointer ? BinaryOperator(llvm::Instruction::And, GetInternalMask(), functionMaskValue,
-+                                            "internal_mask&function_mask")
-+                           : GetInternalMask();
- }
- 
--llvm::Value *FunctionEmitContext::GetFullMaskPointer() { return fullMaskPointer; }
-+llvm::Value *FunctionEmitContext::GetFullMaskPointer() {
-+    return fullMaskPointer ? fullMaskPointer : internalMaskPointer;
-+}
- 
- void FunctionEmitContext::SetFunctionMask(llvm::Value *value) {
--    functionMaskValue = value;
--    if (bblock != NULL)
--        StoreInst(GetFullMask(), fullMaskPointer);
-+    if (fullMaskPointer != NULL) {
-+        functionMaskValue = value;
-+        if (bblock != NULL)
-+            StoreInst(GetFullMask(), fullMaskPointer);
-+    }
- }
- 
- void FunctionEmitContext::SetBlockEntryMask(llvm::Value *value) { blockEntryMask = value; }
-@@ -410,7 +424,8 @@ void FunctionEmitContext::SetBlockEntryMask(llvm::Value *value) { blockEntryMask
- void FunctionEmitContext::SetInternalMask(llvm::Value *value) {
-     StoreInst(value, internalMaskPointer);
-     // kludge so that __mask returns the right value in ispc code.
--    StoreInst(GetFullMask(), fullMaskPointer);
-+    if (fullMaskPointer)
-+        StoreInst(GetFullMask(), fullMaskPointer);
- }
- 
- void FunctionEmitContext::SetInternalMaskAnd(llvm::Value *oldMask, llvm::Value *test) {
-@@ -1265,7 +1280,7 @@ void FunctionEmitContext::CurrentLanesReturned(Expr *expr, bool doCoherenceCheck
-         // lanes have returned
-         if (doCoherenceCheck) {
-             // if newReturnedLanes == functionMaskValue, get out of here!
--            llvm::Value *cmp = MasksAllEqual(functionMaskValue, newReturnedLanes);
-+            llvm::Value *cmp = MasksAllEqual(GetFunctionMask(), newReturnedLanes);
-             llvm::BasicBlock *bDoReturn = CreateBasicBlock("do_return");
-             llvm::BasicBlock *bNoReturn = CreateBasicBlock("no_return");
-             BranchInst(bDoReturn, bNoReturn, cmp);
-diff --git a/tests/lit-tests/full_mask.ispc b/tests/lit-tests/full_mask.ispc
-new file mode 100644
-index 000000000..ac0b0bca3
---- /dev/null
-+++ b/tests/lit-tests/full_mask.ispc
-@@ -0,0 +1,63 @@
-+// RUN: %{ispc} %s -DISPC_EXPORT --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_EXPORT %s
-+
-+// RUN: %{ispc} %s -DISPC_UNMASKED --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_UNMASKED %s
-+
-+// RUN: %{ispc} %s -DISPC_NOQUALIF --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_NOQUALIF %s
-+
-+// RUN: %{ispc} %s -DISPC_TASK --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_TASK %s
-+
-+struct Parameters {
-+    float *vout;
-+    int param;
-+};
-+
-+#ifdef ISPC_EXPORT
-+// CHECK_ISPC_EXPORT: define void @simple_export___
-+// CHECK_ISPC_EXPORT: %full_mask_memory = alloca
-+// CHECK_ISPC_EXPORT: define void @simple_export(
-+// CHECK_ISPC_EXPORT-NOT: %full_mask_memory = alloca
-+export void simple_export(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_UNMASKED
-+// CHECK_ISPC_UNMASKED: define void @simple_unmasked
-+// CHECK_ISPC_UNMASKED-NOT: %full_mask_memory = alloca
-+unmasked void simple_unmasked(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_NOQUALIF
-+// CHECK_ISPC_NOQUALIF: define void @simple
-+// CHECK_ISPC_NOQUALIF: %full_mask_memory = alloca
-+void simple(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_TASK
-+
-+// CHECK_ISPC_TASK: define void @simple_task
-+// CHECK_ISPC_TASK-NOT: %full_mask_memory = alloca
-+// CHECK_ISPC_TASK: define void @simple_entry_point__
-+// CHECK_ISPC_TASK: %full_mask_memory = alloca
-+// CHECK_ISPC_TASK: define void @simple_entry_point(
-+// CHECK_ISPC_TASK-NOT: %full_mask_memory = alloca
-+task void simple_task(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+export void simple_entry_point(void *uniform parameters, uniform int dim0, uniform int dim1, uniform int dim2) {
-+    launch[dim0, dim1, dim2] simple_task(parameters);
-+}
-+#endif
-\ No newline at end of file
diff --git a/srcpkgs/ispc/patches/llvm12-008.patch b/srcpkgs/ispc/patches/llvm12-008.patch
deleted file mode 100644
index c8413d8b7887..000000000000
--- a/srcpkgs/ispc/patches/llvm12-008.patch
+++ /dev/null
@@ -1,149 +0,0 @@
-From afad14227d9204a3c8a626ca608f5b43c3218fe9 Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 4 May 2021 11:43:52 -0700
-Subject: [PATCH] Fixed ISPC gen build for LLVM12
-
----
- src/ctx.cpp |  4 ++++
- src/opt.cpp | 43 +++++++++++++++++++++++++++++--------------
- 2 files changed, 33 insertions(+), 14 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 0c7050591..f7dc06939 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -3738,7 +3738,11 @@ llvm::Value *FunctionEmitContext::GenXSimdCFAny(llvm::Value *value) {
- 
- llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::Value *defaults) {
-     AssertPos(currentPos, llvm::isa<llvm::VectorType>(value->getType()));
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    llvm::FixedVectorType *vt = llvm::dyn_cast<llvm::FixedVectorType>(value->getType());
-+#else
-     llvm::VectorType *vt = llvm::dyn_cast<llvm::VectorType>(value->getType());
-+#endif
-     if (defaults == NULL) {
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-diff --git a/src/opt.cpp b/src/opt.cpp
-index cea4afa23..4e33d6b1a 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -2916,9 +2916,13 @@ static llvm::Function *lGenXMaskedInt8Inst(llvm::Instruction *inst, bool isStore
- 
- static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::Instruction *inst) {
-     Assert(g->target->isGenXTarget());
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Assert(llvm::isa<llvm::FixedVectorType>(val->getType()));
-+    llvm::FixedVectorType *valVecType = llvm::dyn_cast<llvm::FixedVectorType>(val->getType());
-+#else
-     Assert(llvm::isa<llvm::VectorType>(val->getType()));
--
-     llvm::VectorType *valVecType = llvm::dyn_cast<llvm::VectorType>(val->getType());
-+#endif
-     Assert(llvm::isPowerOf2_32(valVecType->getNumElements()));
-     Assert(valVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
- 
-@@ -2942,9 +2946,13 @@ static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::
- }
- 
- static llvm::CallInst *lGenXLoadInst(llvm::Value *ptr, llvm::Type *retType, llvm::Instruction *inst) {
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Assert(llvm::isa<llvm::FixedVectorType>(retType));
-+    llvm::FixedVectorType *retVecType = llvm::dyn_cast<llvm::FixedVectorType>(retType);
-+#else
-     Assert(llvm::isa<llvm::VectorType>(retType));
--
-     llvm::VectorType *retVecType = llvm::dyn_cast<llvm::VectorType>(retType);
-+#endif
-     Assert(llvm::isPowerOf2_32(retVecType->getNumElements()));
-     Assert(retVecType->getPrimitiveSizeInBits());
-     Assert(retVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-@@ -5485,8 +5493,13 @@ static void lCreateBlockLDUse(llvm::Instruction *currInst, std::vector<llvm::Ext
-         } else if (auto gather = lGetPseudoGather(llvm::dyn_cast<llvm::Instruction>(ui->getUser()))) {
-             // Collect idxs from gather and fix users
-             llvm::Value *res = llvm::UndefValue::get(gather->getType());
--            for (unsigned i = 0, end = llvm::dyn_cast<llvm::VectorType>(res->getType())->getNumElements(); i < end;
--                 ++i) {
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            for (unsigned i = 0, end = llvm::dyn_cast<llvm::FixedVectorType>(res->getType())->getNumElements(); i < end;
-+                 ++i)
-+#else
-+            for (unsigned i = 0, end = llvm::dyn_cast<llvm::VectorType>(res->getType())->getNumElements(); i < end; ++i)
-+#endif
-+            {
-                 // Get element via IEI
-                 res = llvm::InsertElementInst::Create(res, EEIs[ptrUse.idxs[curr_idx++]],
-                                                       llvm::ConstantInt::get(LLVMTypes::Int32Type, i),
-@@ -5522,10 +5535,11 @@ static bool lVectorizeGEPs(llvm::Value *ptr, std::vector<PtrUse> &ptrUses, std::
- 
-     // Adjust values for vector load
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    if (auto vecTy = llvm::dyn_cast<llvm::FixedVectorType>(type)) {
-+    if (auto vecTy = llvm::dyn_cast<llvm::FixedVectorType>(type))
- #else
--    if (auto vecTy = llvm::dyn_cast<llvm::VectorType>(type)) {
-+    if (auto vecTy = llvm::dyn_cast<llvm::VectorType>(type))
- #endif
-+    {
-         // Get single element size
-         t_size /= vecTy->getNumElements();
-         // Get single element type
-@@ -6477,7 +6491,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-         Offsets,
-         llvm::FixedVectorType::get(LLVMTypes::Int64Type,
--                                   llvm::dyn_cast<llvm::VectorType>(Offsets->getType())->getNumElements()),
-+                                   llvm::dyn_cast<llvm::FixedVectorType>(Offsets->getType())->getNumElements()),
-         "svm_offset_zext", InsertBefore);
- #else
-         Offsets, llvm::VectorType::get(LLVMTypes::Int64Type, Offsets->getType()->getVectorNumElements()),
-@@ -6492,7 +6506,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
-         llvm::Value *undefInsertValue =
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-             llvm::UndefValue::get(llvm::FixedVectorType::get(
--                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements()));
- #else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
- #endif
-@@ -6501,17 +6515,16 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
- #elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
--            {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
-+            {llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements(), false},
- #else
--        llvm::ElementCount::get(
--                                llvm::dyn_cast<llvm::FixedVectorType>(addressType->getNumElements(), false),
-+            llvm::ElementCount::get(llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements(), false),
- #endif
-             llvm::Constant::getNullValue(llvm::Type::getInt32Ty(InsertBefore->getContext())));
- 
-         llvm::Value *undefShuffleValue =
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-             llvm::UndefValue::get(llvm::FixedVectorType::get(
--                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements()));
- #else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
- #endif
-@@ -6542,7 +6555,8 @@ llvm::Instruction *FixAddressSpace::processVectorLoad(llvm::LoadInst *LI) {
-         isPtrLoad = true;
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--        retType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(retType)->getNumElements());
-+        retType =
-+            llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::FixedVectorType>(retType)->getNumElements());
- #else
-         retType = llvm::VectorType::get(scalarType, retType->getVectorNumElements());
- #endif
-@@ -6604,7 +6618,8 @@ llvm::Instruction *FixAddressSpace::processVectorStore(llvm::StoreInst *SI) {
-     if (valType->getScalarType()->isPointerTy()) {
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--        valType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(valType)->getNumElements());
-+        valType =
-+            llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::FixedVectorType>(valType)->getNumElements());
- #else
-         valType = llvm::VectorType::get(scalarType, valType->getVectorNumElements());
- #endif
diff --git a/srcpkgs/ispc/patches/llvm12-009.patch b/srcpkgs/ispc/patches/llvm12-009.patch
deleted file mode 100644
index d3ea67828582..000000000000
--- a/srcpkgs/ispc/patches/llvm12-009.patch
+++ /dev/null
@@ -1,2109 +0,0 @@
-From 97b13c32132e2704a5e3e7b2eae49d854d087e3e Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 4 May 2021 11:31:55 -0700
-Subject: [PATCH] Updated builtins-cm* for switch to LLVM12
-
----
- builtins/builtins-cm-32.ll | 234 ++++++++++++++++++-------------------
- builtins/builtins-cm-64.ll | 232 ++++++++++++++++++------------------
- 2 files changed, 233 insertions(+), 233 deletions(-)
-
-diff --git a/builtins/builtins-cm-32.ll b/builtins/builtins-cm-32.ll
-index 32debf32e..481bbdc48 100644
---- a/builtins/builtins-cm-32.ll
-+++ b/builtins/builtins-cm-32.ll
-@@ -557,7 +557,7 @@ $_ZN13VaryingWriter12WriteVecElemIPvEEvv = comdat any
- @.str.10 = private unnamed_addr constant [5 x i8] c"%08X\00", align 1
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -618,7 +618,7 @@ define internal <1 x i8> @_ZN7details13__impl_divremILi1EEEu2CMvbT__cS1_S1_u2CMv
- declare <1 x i8> @llvm.genx.rdregioni.v1i8.v1i8.i16(<1 x i8>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -634,7 +634,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -680,7 +680,7 @@ define internal <2 x i8> @_ZN7details13__impl_divremILi2EEEu2CMvbT__cS1_S1_u2CMv
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -818,7 +818,7 @@ define internal <16 x i8> @_ZN7details13__impl_divremILi16EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -864,7 +864,7 @@ define internal <32 x i8> @_ZN7details13__impl_divremILi32EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -890,7 +890,7 @@ define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -904,7 +904,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -918,7 +918,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -932,7 +932,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -946,7 +946,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -960,7 +960,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -974,7 +974,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1058,7 +1058,7 @@ define internal <1 x i16> @_ZN7details13__impl_divremILi1EEEu2CMvbT__sS1_S1_u2CM
- declare <1 x i16> @llvm.genx.rdregioni.v1i16.v1i16.i16(<1 x i16>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1074,7 +1074,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1143,7 +1143,7 @@ define internal <2 x i16> @_ZN7details13__impl_divremILi2EEEu2CMvbT__sS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1350,7 +1350,7 @@ define internal <16 x i16> @_ZN7details13__impl_divremILi16EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1419,7 +1419,7 @@ define internal <32 x i16> @_ZN7details13__impl_divremILi32EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1445,7 +1445,7 @@ define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 si
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1459,7 +1459,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1473,7 +1473,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1487,7 +1487,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -1501,7 +1501,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -1515,7 +1515,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1529,7 +1529,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1730,7 +1730,7 @@ define internal <1 x i32> @_ZN7details13__impl_divremILi1EEEu2CMvbT__iS1_S1_u2CM
- declare <1 x i32> @llvm.genx.rdregioni.v1i32.v1i32.i16(<1 x i32>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1746,7 +1746,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -1932,7 +1932,7 @@ define internal <2 x i32> @_ZN7details13__impl_divremILi2EEEu2CMvbT__iS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2490,7 +2490,7 @@ define internal <16 x i32> @_ZN7details13__impl_divremILi16EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2676,7 +2676,7 @@ define internal <32 x i32> @_ZN7details13__impl_divremILi32EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2702,7 +2702,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2716,7 +2716,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -2730,7 +2730,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2744,7 +2744,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -2758,7 +2758,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -2772,7 +2772,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2786,7 +2786,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2844,7 +2844,7 @@ define internal <1 x i8> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2860,7 +2860,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -2906,7 +2906,7 @@ define internal <2 x i8> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3044,7 +3044,7 @@ define internal <16 x i8> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3090,7 +3090,7 @@ define internal <32 x i8> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3116,7 +3116,7 @@ define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3130,7 +3130,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -3144,7 +3144,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3158,7 +3158,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -3172,7 +3172,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -3186,7 +3186,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3200,7 +3200,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3278,7 +3278,7 @@ define internal <1 x i16> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3294,7 +3294,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3360,7 +3360,7 @@ define internal <2 x i16> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3558,7 +3558,7 @@ define internal <16 x i16> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3624,7 +3624,7 @@ define internal <32 x i16> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3650,7 +3650,7 @@ define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 ze
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3664,7 +3664,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3678,7 +3678,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3692,7 +3692,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -3706,7 +3706,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -3720,7 +3720,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3734,7 +3734,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3892,7 +3892,7 @@ define internal <1 x i32> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3908,7 +3908,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4054,7 +4054,7 @@ define internal <2 x i32> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4492,7 +4492,7 @@ define internal <16 x i32> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4638,7 +4638,7 @@ define internal <32 x i32> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4664,7 +4664,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4678,7 +4678,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4692,7 +4692,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4706,7 +4706,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -4720,7 +4720,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -4734,7 +4734,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4748,7 +4748,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-+define internal void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-   %8 = alloca i8*, align 4
-   %9 = alloca i8*, align 4
-   %10 = alloca i32, align 4
-@@ -4988,7 +4988,7 @@ define internal void @_ZN7details16_cm_print_formatILi128EEEv15cm_surfaceindexju
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i32) #26 !dbg !117 {
-+define internal void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i32) #26 !dbg !117 {
-   %10 = alloca i32, align 4
-   %11 = alloca i8*, align 4
-   %12 = alloca i32, align 4
-@@ -5069,7 +5069,7 @@ define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i3
-   %67 = load i64, i64* %13, align 8, !dbg !159, !tbaa !19
-   %68 = load <5 x i32>, <5 x i32>* %21, align 32, !dbg !160, !tbaa !7
-   call void @_ZN13VaryingWriterC2ERjRPKjiyu2CMvb5_i(%class.VaryingWriter* %23, i32* dereferenceable(4) %19, i32** dereferenceable(4) %14, i32 %66, i64 %67, <5 x i32> %68), !dbg !161
--  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval align 32 %22, %class.VaryingWriter* byval align 32 %23), !dbg !162
-+  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval(%class.UniformWriter) align 32 %22, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %23), !dbg !162
-   br label %70, !dbg !163
- 
- ; <label>:70:                                     ; preds = %60
-@@ -5187,7 +5187,7 @@ define internal <5 x i32> @_Z17get_auxiliary_strv() #28 comdat !dbg !178 {
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %class.VaryingWriter* byval align 32) #25 comdat !dbg !191 {
-+define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !191 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %class.VaryingWriter, align 32
-@@ -5196,7 +5196,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %8 = bitcast %class.UniformWriter* %5 to i8*, !dbg !196
-   %9 = bitcast %class.UniformWriter* %1 to i8*, !dbg !196
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %8, i8* align 32 %9, i32 64, i1 false), !dbg !196, !tbaa.struct !197
--  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval align 32 %5), !dbg !198
-+  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5), !dbg !198
-   br i1 %10, label %16, label %11, !dbg !199
- 
- ; <label>:11:                                     ; preds = %3
-@@ -5204,7 +5204,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %13 = bitcast %class.VaryingWriter* %6 to i8*, !dbg !201
-   %14 = bitcast %class.VaryingWriter* %2 to i8*, !dbg !201
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %13, i8* align 32 %14, i32 64, i1 false), !dbg !201, !tbaa.struct !197
--  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval align 32 %6), !dbg !202
-+  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %6), !dbg !202
-   br label %16, !dbg !199
- 
- ; <label>:16:                                     ; preds = %11, %3
-@@ -5279,7 +5279,7 @@ define internal void @_ZN13VaryingWriterC2ERjRPKjiyu2CMvb5_i(%class.VaryingWrite
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @__num_cores() #29 !dbg !236 {
-+define internal i32 @__num_cores() #29 !dbg !236 {
-   ret i32 -1, !dbg !237
- }
- 
-@@ -8860,7 +8860,7 @@ declare dso_local void @_ZN7details37__cm_intrinsic_impl_svm_scatter_writeIiLi1E
- declare void @llvm.genx.svm.scatter.v1i1.v1i64.v1i32(<1 x i1>, i32, <1 x i64>, <1 x i32>) #27
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval align 32) #25 comdat !dbg !1645 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32) #25 comdat !dbg !1645 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.UniformWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8869,7 +8869,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
-   %7 = bitcast %class.UniformWriter* %4 to i8*, !dbg !1647
-   %8 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1647
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %7, i8* align 32 %8, i32 64, i1 false), !dbg !1647, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %5), !dbg !1648
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval(%class.UniformWriter) align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %5), !dbg !1648
-   ret i1 %9, !dbg !1649
- }
- 
-@@ -8877,7 +8877,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
- declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture readonly, i32, i1) #32
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval align 32) #25 comdat !dbg !1650 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !1650 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.VaryingWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -8886,12 +8886,12 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWrite
-   %7 = bitcast %class.VaryingWriter* %4 to i8*, !dbg !1652
-   %8 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !1652
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %7, i8* align 32 %8, i32 64, i1 false), !dbg !1652, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %5), !dbg !1653
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %5), !dbg !1653
-   ret i1 %9, !dbg !1654
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1655 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1655 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8914,7 +8914,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %22 = bitcast %class.UniformWriter* %5 to i8*, !dbg !1657
-   %23 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1657
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %22, i8* align 32 %23, i32 64, i1 false), !dbg !1657, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %6), !dbg !1658
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %6), !dbg !1658
-   br i1 %24, label %60, label %25, !dbg !1659
- 
- ; <label>:25:                                     ; preds = %3
-@@ -8922,7 +8922,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %27 = bitcast %class.UniformWriter* %7 to i8*, !dbg !1661
-   %28 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1661
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %27, i8* align 32 %28, i32 64, i1 false), !dbg !1661, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %8), !dbg !1662
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval(%class.UniformWriter) align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %8), !dbg !1662
-   br i1 %29, label %60, label %30, !dbg !1663
- 
- ; <label>:30:                                     ; preds = %25
-@@ -8930,7 +8930,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %32 = bitcast %class.UniformWriter* %9 to i8*, !dbg !1665
-   %33 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1665
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %32, i8* align 32 %33, i32 64, i1 false), !dbg !1665, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %10), !dbg !1666
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval(%class.UniformWriter) align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %10), !dbg !1666
-   br i1 %34, label %60, label %35, !dbg !1667
- 
- ; <label>:35:                                     ; preds = %30
-@@ -8938,7 +8938,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %37 = bitcast %class.UniformWriter* %11 to i8*, !dbg !1669
-   %38 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1669
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %37, i8* align 32 %38, i32 64, i1 false), !dbg !1669, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %12), !dbg !1670
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval(%class.UniformWriter) align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %12), !dbg !1670
-   br i1 %39, label %60, label %40, !dbg !1671
- 
- ; <label>:40:                                     ; preds = %35
-@@ -8946,7 +8946,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %42 = bitcast %class.UniformWriter* %13 to i8*, !dbg !1673
-   %43 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1673
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %42, i8* align 32 %43, i32 64, i1 false), !dbg !1673, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %14), !dbg !1674
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval(%class.UniformWriter) align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %14), !dbg !1674
-   br i1 %44, label %60, label %45, !dbg !1675
- 
- ; <label>:45:                                     ; preds = %40
-@@ -8954,7 +8954,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %47 = bitcast %class.UniformWriter* %15 to i8*, !dbg !1677
-   %48 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1677
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %47, i8* align 32 %48, i32 64, i1 false), !dbg !1677, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %16), !dbg !1678
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval(%class.UniformWriter) align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %16), !dbg !1678
-   br i1 %49, label %60, label %50, !dbg !1679
- 
- ; <label>:50:                                     ; preds = %45
-@@ -8962,7 +8962,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %52 = bitcast %class.UniformWriter* %17 to i8*, !dbg !1681
-   %53 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1681
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %52, i8* align 32 %53, i32 64, i1 false), !dbg !1681, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %18), !dbg !1682
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval(%class.UniformWriter) align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %18), !dbg !1682
-   br i1 %54, label %60, label %55, !dbg !1683
- 
- ; <label>:55:                                     ; preds = %50
-@@ -8970,7 +8970,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %57 = bitcast %class.UniformWriter* %19 to i8*, !dbg !1685
-   %58 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1685
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %57, i8* align 32 %58, i32 64, i1 false), !dbg !1685, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %20), !dbg !1686
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval(%class.UniformWriter) align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %20), !dbg !1686
-   br label %60, !dbg !1683
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -8979,7 +8979,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1688 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1688 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9005,7 +9005,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1697 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1697 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9031,7 +9031,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1706 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1706 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9057,7 +9057,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1715 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1715 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9083,7 +9083,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1724 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1724 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9109,7 +9109,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1733 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1733 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9135,7 +9135,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1742 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1742 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9161,7 +9161,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1751 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1751 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9984,7 +9984,7 @@ define internal i32 @_ZN7details18_cm_print_type_oclIPvEENS_18SHADER_PRINTF_TYPE
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2055 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2055 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.VaryingWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -10007,7 +10007,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %22 = bitcast %class.VaryingWriter* %5 to i8*, !dbg !2057
-   %23 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2057
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %22, i8* align 32 %23, i32 64, i1 false), !dbg !2057, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %6), !dbg !2058
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %6), !dbg !2058
-   br i1 %24, label %60, label %25, !dbg !2059
- 
- ; <label>:25:                                     ; preds = %3
-@@ -10015,7 +10015,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %27 = bitcast %class.VaryingWriter* %7 to i8*, !dbg !2061
-   %28 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2061
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %27, i8* align 32 %28, i32 64, i1 false), !dbg !2061, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %8), !dbg !2062
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %8), !dbg !2062
-   br i1 %29, label %60, label %30, !dbg !2063
- 
- ; <label>:30:                                     ; preds = %25
-@@ -10023,7 +10023,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %32 = bitcast %class.VaryingWriter* %9 to i8*, !dbg !2065
-   %33 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2065
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %32, i8* align 32 %33, i32 64, i1 false), !dbg !2065, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %10), !dbg !2066
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %10), !dbg !2066
-   br i1 %34, label %60, label %35, !dbg !2067
- 
- ; <label>:35:                                     ; preds = %30
-@@ -10031,7 +10031,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %37 = bitcast %class.VaryingWriter* %11 to i8*, !dbg !2069
-   %38 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2069
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %37, i8* align 32 %38, i32 64, i1 false), !dbg !2069, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %12), !dbg !2070
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %12), !dbg !2070
-   br i1 %39, label %60, label %40, !dbg !2071
- 
- ; <label>:40:                                     ; preds = %35
-@@ -10039,7 +10039,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %42 = bitcast %class.VaryingWriter* %13 to i8*, !dbg !2073
-   %43 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2073
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %42, i8* align 32 %43, i32 64, i1 false), !dbg !2073, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %14), !dbg !2074
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %14), !dbg !2074
-   br i1 %44, label %60, label %45, !dbg !2075
- 
- ; <label>:45:                                     ; preds = %40
-@@ -10047,7 +10047,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %47 = bitcast %class.VaryingWriter* %15 to i8*, !dbg !2077
-   %48 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2077
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %47, i8* align 32 %48, i32 64, i1 false), !dbg !2077, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %16), !dbg !2078
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %16), !dbg !2078
-   br i1 %49, label %60, label %50, !dbg !2079
- 
- ; <label>:50:                                     ; preds = %45
-@@ -10055,7 +10055,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %52 = bitcast %class.VaryingWriter* %17 to i8*, !dbg !2081
-   %53 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2081
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %52, i8* align 32 %53, i32 64, i1 false), !dbg !2081, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %18), !dbg !2082
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %18), !dbg !2082
-   br i1 %54, label %60, label %55, !dbg !2083
- 
- ; <label>:55:                                     ; preds = %50
-@@ -10063,7 +10063,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %57 = bitcast %class.VaryingWriter* %19 to i8*, !dbg !2085
-   %58 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2085
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %57, i8* align 32 %58, i32 64, i1 false), !dbg !2085, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %20), !dbg !2086
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %20), !dbg !2086
-   br label %60, !dbg !2083
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -10072,7 +10072,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2088 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2088 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10098,7 +10098,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2097 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2097 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10124,7 +10124,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2106 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2106 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10150,7 +10150,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2115 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2115 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10176,7 +10176,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2124 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2124 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10202,7 +10202,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2133 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2133 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10228,7 +10228,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2142 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2142 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10254,7 +10254,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2151 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2151 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-diff --git a/builtins/builtins-cm-64.ll b/builtins/builtins-cm-64.ll
-index 39a2dd8be..375d01bed 100644
---- a/builtins/builtins-cm-64.ll
-+++ b/builtins/builtins-cm-64.ll
-@@ -557,7 +557,7 @@ $_ZN13VaryingWriter12WriteVecElemIPvEEvv = comdat any
- @.str.10 = private unnamed_addr constant [8 x i8] c"%016llX\00", align 1
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -618,7 +618,7 @@ define internal <1 x i8> @_ZN7details13__impl_divremILi1EEEu2CMvbT__cS1_S1_u2CMv
- declare <1 x i8> @llvm.genx.rdregioni.v1i8.v1i8.i16(<1 x i8>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -634,7 +634,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -680,7 +680,7 @@ define internal <2 x i8> @_ZN7details13__impl_divremILi2EEEu2CMvbT__cS1_S1_u2CMv
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -818,7 +818,7 @@ define internal <16 x i8> @_ZN7details13__impl_divremILi16EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -864,7 +864,7 @@ define internal <32 x i8> @_ZN7details13__impl_divremILi32EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -890,7 +890,7 @@ define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -904,7 +904,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -918,7 +918,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -932,7 +932,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -946,7 +946,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -960,7 +960,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -974,7 +974,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1058,7 +1058,7 @@ define internal <1 x i16> @_ZN7details13__impl_divremILi1EEEu2CMvbT__sS1_S1_u2CM
- declare <1 x i16> @llvm.genx.rdregioni.v1i16.v1i16.i16(<1 x i16>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1074,7 +1074,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1143,7 +1143,7 @@ define internal <2 x i16> @_ZN7details13__impl_divremILi2EEEu2CMvbT__sS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1350,7 +1350,7 @@ define internal <16 x i16> @_ZN7details13__impl_divremILi16EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1419,7 +1419,7 @@ define internal <32 x i16> @_ZN7details13__impl_divremILi32EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1445,7 +1445,7 @@ define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 si
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1459,7 +1459,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1473,7 +1473,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1487,7 +1487,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -1501,7 +1501,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -1515,7 +1515,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1529,7 +1529,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1730,7 +1730,7 @@ define internal <1 x i32> @_ZN7details13__impl_divremILi1EEEu2CMvbT__iS1_S1_u2CM
- declare <1 x i32> @llvm.genx.rdregioni.v1i32.v1i32.i16(<1 x i32>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1746,7 +1746,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -1932,7 +1932,7 @@ define internal <2 x i32> @_ZN7details13__impl_divremILi2EEEu2CMvbT__iS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2490,7 +2490,7 @@ define internal <16 x i32> @_ZN7details13__impl_divremILi16EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2676,7 +2676,7 @@ define internal <32 x i32> @_ZN7details13__impl_divremILi32EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2702,7 +2702,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2716,7 +2716,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -2730,7 +2730,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2744,7 +2744,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -2758,7 +2758,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -2772,7 +2772,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2786,7 +2786,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2844,7 +2844,7 @@ define internal <1 x i8> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2860,7 +2860,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -2906,7 +2906,7 @@ define internal <2 x i8> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3044,7 +3044,7 @@ define internal <16 x i8> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3090,7 +3090,7 @@ define internal <32 x i8> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3116,7 +3116,7 @@ define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3130,7 +3130,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -3144,7 +3144,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3158,7 +3158,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -3172,7 +3172,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -3186,7 +3186,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3200,7 +3200,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3278,7 +3278,7 @@ define internal <1 x i16> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3294,7 +3294,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3360,7 +3360,7 @@ define internal <2 x i16> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3558,7 +3558,7 @@ define internal <16 x i16> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3624,7 +3624,7 @@ define internal <32 x i16> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3650,7 +3650,7 @@ define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 ze
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3664,7 +3664,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3678,7 +3678,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3692,7 +3692,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -3706,7 +3706,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -3720,7 +3720,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3734,7 +3734,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3892,7 +3892,7 @@ define internal <1 x i32> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3908,7 +3908,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4054,7 +4054,7 @@ define internal <2 x i32> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4492,7 +4492,7 @@ define internal <16 x i32> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4638,7 +4638,7 @@ define internal <32 x i32> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4664,7 +4664,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4678,7 +4678,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4692,7 +4692,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4706,7 +4706,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -4720,7 +4720,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -4734,7 +4734,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4748,7 +4748,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-+define internal void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-   %8 = alloca i8*, align 8
-   %9 = alloca i8*, align 8
-   %10 = alloca i32, align 4
-@@ -5070,7 +5070,7 @@ define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i3
-   %67 = load i64, i64* %13, align 8, !dbg !159, !tbaa !19
-   %68 = load <5 x i32>, <5 x i32>* %21, align 32, !dbg !160, !tbaa !7
-   call void @_ZN13VaryingWriterC2ERyRPKjiyu2CMvb5_i(%class.VaryingWriter* %23, i64* dereferenceable(8) %19, i32** dereferenceable(8) %14, i32 %66, i64 %67, <5 x i32> %68), !dbg !161
--  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval align 32 %22, %class.VaryingWriter* byval align 32 %23), !dbg !162
-+  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval(%class.UniformWriter) align 32 %22, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %23), !dbg !162
-   br label %70, !dbg !163
- 
- ; <label>:70:                                     ; preds = %60
-@@ -5188,7 +5188,7 @@ define internal <5 x i32> @_Z17get_auxiliary_strv() #28 comdat !dbg !178 {
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %class.VaryingWriter* byval align 32) #25 comdat !dbg !191 {
-+define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !191 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %class.VaryingWriter, align 32
-@@ -5197,7 +5197,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %8 = bitcast %class.UniformWriter* %5 to i8*, !dbg !196
-   %9 = bitcast %class.UniformWriter* %1 to i8*, !dbg !196
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %8, i8* align 32 %9, i64 64, i1 false), !dbg !196, !tbaa.struct !197
--  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval align 32 %5), !dbg !198
-+  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5), !dbg !198
-   br i1 %10, label %16, label %11, !dbg !199
- 
- ; <label>:11:                                     ; preds = %3
-@@ -5205,7 +5205,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %13 = bitcast %class.VaryingWriter* %6 to i8*, !dbg !201
-   %14 = bitcast %class.VaryingWriter* %2 to i8*, !dbg !201
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %13, i8* align 32 %14, i64 64, i1 false), !dbg !201, !tbaa.struct !197
--  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval align 32 %6), !dbg !202
-+  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %6), !dbg !202
-   br label %16, !dbg !199
- 
- ; <label>:16:                                     ; preds = %11, %3
-@@ -5280,7 +5280,7 @@ define internal void @_ZN13VaryingWriterC2ERyRPKjiyu2CMvb5_i(%class.VaryingWrite
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @__num_cores() #29 !dbg !236 {
-+define internal i32 @__num_cores() #29 !dbg !236 {
-   ret i32 -1, !dbg !237
- }
- 
-@@ -8870,7 +8870,7 @@ declare dso_local void @_ZN7details37__cm_intrinsic_impl_svm_scatter_writeIiLi1E
- declare void @llvm.genx.svm.scatter.v1i1.v1i64.v1i32(<1 x i1>, i32, <1 x i64>, <1 x i32>) #27
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval align 32) #25 comdat !dbg !1645 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32) #25 comdat !dbg !1645 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.UniformWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8879,7 +8879,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
-   %7 = bitcast %class.UniformWriter* %4 to i8*, !dbg !1647
-   %8 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1647
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %7, i8* align 32 %8, i64 64, i1 false), !dbg !1647, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %5), !dbg !1648
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval(%class.UniformWriter) align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %5), !dbg !1648
-   ret i1 %9, !dbg !1649
- }
- 
-@@ -8887,7 +8887,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
- declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1) #32
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval align 32) #25 comdat !dbg !1650 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !1650 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.VaryingWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -8896,12 +8896,12 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWrite
-   %7 = bitcast %class.VaryingWriter* %4 to i8*, !dbg !1652
-   %8 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !1652
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %7, i8* align 32 %8, i64 64, i1 false), !dbg !1652, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %5), !dbg !1653
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %5), !dbg !1653
-   ret i1 %9, !dbg !1654
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1655 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1655 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8924,7 +8924,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %22 = bitcast %class.UniformWriter* %5 to i8*, !dbg !1657
-   %23 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1657
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %22, i8* align 32 %23, i64 64, i1 false), !dbg !1657, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %6), !dbg !1658
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %6), !dbg !1658
-   br i1 %24, label %60, label %25, !dbg !1659
- 
- ; <label>:25:                                     ; preds = %3
-@@ -8932,7 +8932,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %27 = bitcast %class.UniformWriter* %7 to i8*, !dbg !1661
-   %28 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1661
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %27, i8* align 32 %28, i64 64, i1 false), !dbg !1661, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %8), !dbg !1662
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval(%class.UniformWriter) align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %8), !dbg !1662
-   br i1 %29, label %60, label %30, !dbg !1663
- 
- ; <label>:30:                                     ; preds = %25
-@@ -8940,7 +8940,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %32 = bitcast %class.UniformWriter* %9 to i8*, !dbg !1665
-   %33 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1665
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %32, i8* align 32 %33, i64 64, i1 false), !dbg !1665, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %10), !dbg !1666
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval(%class.UniformWriter) align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %10), !dbg !1666
-   br i1 %34, label %60, label %35, !dbg !1667
- 
- ; <label>:35:                                     ; preds = %30
-@@ -8948,7 +8948,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %37 = bitcast %class.UniformWriter* %11 to i8*, !dbg !1669
-   %38 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1669
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %37, i8* align 32 %38, i64 64, i1 false), !dbg !1669, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %12), !dbg !1670
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval(%class.UniformWriter) align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %12), !dbg !1670
-   br i1 %39, label %60, label %40, !dbg !1671
- 
- ; <label>:40:                                     ; preds = %35
-@@ -8956,7 +8956,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %42 = bitcast %class.UniformWriter* %13 to i8*, !dbg !1673
-   %43 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1673
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %42, i8* align 32 %43, i64 64, i1 false), !dbg !1673, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %14), !dbg !1674
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval(%class.UniformWriter) align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %14), !dbg !1674
-   br i1 %44, label %60, label %45, !dbg !1675
- 
- ; <label>:45:                                     ; preds = %40
-@@ -8964,7 +8964,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %47 = bitcast %class.UniformWriter* %15 to i8*, !dbg !1677
-   %48 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1677
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %47, i8* align 32 %48, i64 64, i1 false), !dbg !1677, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %16), !dbg !1678
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval(%class.UniformWriter) align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %16), !dbg !1678
-   br i1 %49, label %60, label %50, !dbg !1679
- 
- ; <label>:50:                                     ; preds = %45
-@@ -8972,7 +8972,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %52 = bitcast %class.UniformWriter* %17 to i8*, !dbg !1681
-   %53 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1681
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %52, i8* align 32 %53, i64 64, i1 false), !dbg !1681, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %18), !dbg !1682
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval(%class.UniformWriter) align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %18), !dbg !1682
-   br i1 %54, label %60, label %55, !dbg !1683
- 
- ; <label>:55:                                     ; preds = %50
-@@ -8980,7 +8980,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %57 = bitcast %class.UniformWriter* %19 to i8*, !dbg !1685
-   %58 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1685
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %57, i8* align 32 %58, i64 64, i1 false), !dbg !1685, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %20), !dbg !1686
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval(%class.UniformWriter) align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %20), !dbg !1686
-   br label %60, !dbg !1683
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -8989,7 +8989,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1688 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1688 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9015,7 +9015,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1697 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1697 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9041,7 +9041,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1706 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1706 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9067,7 +9067,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1715 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1715 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9093,7 +9093,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1724 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1724 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9119,7 +9119,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1733 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1733 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9145,7 +9145,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1742 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1742 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9171,7 +9171,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1751 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1751 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10013,7 +10013,7 @@ define internal i32 @_ZN7details18_cm_print_type_oclIPvEENS_18SHADER_PRINTF_TYPE
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2061 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2061 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.VaryingWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -10036,7 +10036,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %22 = bitcast %class.VaryingWriter* %5 to i8*, !dbg !2063
-   %23 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2063
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %22, i8* align 32 %23, i64 64, i1 false), !dbg !2063, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %6), !dbg !2064
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %6), !dbg !2064
-   br i1 %24, label %60, label %25, !dbg !2065
- 
- ; <label>:25:                                     ; preds = %3
-@@ -10044,7 +10044,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %27 = bitcast %class.VaryingWriter* %7 to i8*, !dbg !2067
-   %28 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2067
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %27, i8* align 32 %28, i64 64, i1 false), !dbg !2067, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %8), !dbg !2068
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %8), !dbg !2068
-   br i1 %29, label %60, label %30, !dbg !2069
- 
- ; <label>:30:                                     ; preds = %25
-@@ -10052,7 +10052,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %32 = bitcast %class.VaryingWriter* %9 to i8*, !dbg !2071
-   %33 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2071
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %32, i8* align 32 %33, i64 64, i1 false), !dbg !2071, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %10), !dbg !2072
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %10), !dbg !2072
-   br i1 %34, label %60, label %35, !dbg !2073
- 
- ; <label>:35:                                     ; preds = %30
-@@ -10060,7 +10060,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %37 = bitcast %class.VaryingWriter* %11 to i8*, !dbg !2075
-   %38 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2075
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %37, i8* align 32 %38, i64 64, i1 false), !dbg !2075, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %12), !dbg !2076
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %12), !dbg !2076
-   br i1 %39, label %60, label %40, !dbg !2077
- 
- ; <label>:40:                                     ; preds = %35
-@@ -10068,7 +10068,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %42 = bitcast %class.VaryingWriter* %13 to i8*, !dbg !2079
-   %43 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2079
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %42, i8* align 32 %43, i64 64, i1 false), !dbg !2079, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %14), !dbg !2080
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %14), !dbg !2080
-   br i1 %44, label %60, label %45, !dbg !2081
- 
- ; <label>:45:                                     ; preds = %40
-@@ -10076,7 +10076,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %47 = bitcast %class.VaryingWriter* %15 to i8*, !dbg !2083
-   %48 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2083
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %47, i8* align 32 %48, i64 64, i1 false), !dbg !2083, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %16), !dbg !2084
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %16), !dbg !2084
-   br i1 %49, label %60, label %50, !dbg !2085
- 
- ; <label>:50:                                     ; preds = %45
-@@ -10084,7 +10084,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %52 = bitcast %class.VaryingWriter* %17 to i8*, !dbg !2087
-   %53 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2087
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %52, i8* align 32 %53, i64 64, i1 false), !dbg !2087, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %18), !dbg !2088
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %18), !dbg !2088
-   br i1 %54, label %60, label %55, !dbg !2089
- 
- ; <label>:55:                                     ; preds = %50
-@@ -10092,7 +10092,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %57 = bitcast %class.VaryingWriter* %19 to i8*, !dbg !2091
-   %58 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2091
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %57, i8* align 32 %58, i64 64, i1 false), !dbg !2091, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %20), !dbg !2092
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %20), !dbg !2092
-   br label %60, !dbg !2089
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -10101,7 +10101,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2094 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2094 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10127,7 +10127,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2103 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2103 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10153,7 +10153,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2112 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2112 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10179,7 +10179,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2121 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2121 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10205,7 +10205,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2130 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2130 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10231,7 +10231,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2139 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2139 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10257,7 +10257,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2148 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2148 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10283,7 +10283,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2157 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2157 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
diff --git a/srcpkgs/ispc/template b/srcpkgs/ispc/template
index 9c3acb42a9cf..3a85ff2605af 100644
--- a/srcpkgs/ispc/template
+++ b/srcpkgs/ispc/template
@@ -1,7 +1,7 @@
 # Template file for 'ispc'
 pkgname=ispc
-version=1.15.0
-revision=2
+version=1.17.0
+revision=1
 archs="x86_64*"
 build_style=cmake
 configure_args="-DISPC_NO_DUMPS=ON -DARM_ENABLED=OFF"
@@ -12,7 +12,7 @@ maintainer="Andrea Brancaleoni <abc@pompel.me>"
 license="BSD-3-Clause"
 homepage="https://ispc.github.io"
 distfiles="https://github.com/ispc/ispc/archive/v${version}.tar.gz"
-checksum=2658ff00dc045ac9fcefbf6bd26dffaf723b059a942a27df91bbb61bc503a285
+checksum=37fb1055d6c6b232e112d8d50145d726824ed4d8da93a7396315dceba6c76e62
 nocross=yes
 nopie=yes
 

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: [PR PATCH] [Updated] Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
@ 2022-05-02 23:21 ` prez
  2022-05-03  9:03 ` Llvm14 ifreund
                   ` (68 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-05-02 23:21 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 667 bytes --]

There is an updated pull request by prez against master on the void-packages repository

https://github.com/prez/void-packages llvm
https://github.com/void-linux/void-packages/pull/36962

Llvm14
Supersedes https://github.com/void-linux/void-packages/pull/36229, https://github.com/void-linux/void-packages/pull/34800 - thank you @motorto and @DBLouis.

Updated patches, ping @q66 .

@ifreund todo: zig. Since it depends on `lld-devel`, I guess we need to split out `lld12`? Would appreciate your help with this, I don't want to wait for the next zig version.

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/36962.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-llvm-36962.patch --]
[-- Type: text/x-diff, Size: 518532 bytes --]

From ec2fd44373ac613abdf290572d116bf50a0093de Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:15:06 +0200
Subject: [PATCH 01/26] New package: llvm14-14.0.3

---
 common/shlibs                                 |  16 +-
 srcpkgs/clang                                 |   2 +-
 srcpkgs/clang-analyzer                        |   2 +-
 srcpkgs/clang-tools-extra                     |   2 +-
 srcpkgs/libclang                              |   2 +-
 srcpkgs/libclang-cpp                          |   2 +-
 srcpkgs/libcxx                                |   2 +-
 srcpkgs/libcxx-devel                          |   2 +-
 srcpkgs/libcxxabi                             |   2 +-
 srcpkgs/libcxxabi-devel                       |   2 +-
 srcpkgs/libllvm14                             |   1 +
 srcpkgs/libomp                                |   2 +-
 srcpkgs/libomp-devel                          |   2 +-
 srcpkgs/lld                                   |   2 +-
 srcpkgs/lld-devel                             |   2 +-
 srcpkgs/lldb                                  |   2 +-
 srcpkgs/llvm-libunwind                        |   2 +-
 srcpkgs/llvm-libunwind-devel                  |   2 +-
 .../patches/clang-002-add-musl-triples.patch  | 110 +++++
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 +
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ++
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 ++
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 +++
 srcpkgs/llvm14/patches/libcxx-musl.patch      |  26 ++
 srcpkgs/llvm14/patches/libcxx-ppc.patch       |  22 +
 .../llvm14/patches/libcxx-ssp-nonshared.patch |  11 +
 srcpkgs/llvm14/patches/libcxxabi-dl.patch     |  25 ++
 srcpkgs/llvm14/patches/lldb-musl.patch        |  31 ++
 srcpkgs/llvm14/patches/llvm-001-musl.patch    |  57 +++
 .../patches/llvm-002-musl-ppc64-elfv2.patch   |  30 ++
 .../patches/llvm-003-ppc-secureplt.patch      |  11 +
 .../patches/llvm-004-override-opt.patch       |  18 +
 .../llvm14/patches/llvm-005-ppc-bigpic.patch  |  36 ++
 .../patches/llvm-006-aarch64-mf_exec.patch    |  25 ++
 srcpkgs/llvm14/template                       | 424 ++++++++++++++++++
 srcpkgs/llvm14/update                         |   3 +
 36 files changed, 1017 insertions(+), 19 deletions(-)
 create mode 120000 srcpkgs/libllvm14
 create mode 100644 srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
 create mode 100644 srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
 create mode 100644 srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
 create mode 100644 srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-ppc.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxxabi-dl.patch
 create mode 100644 srcpkgs/llvm14/patches/lldb-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-001-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-004-override-opt.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
 create mode 100644 srcpkgs/llvm14/template
 create mode 100644 srcpkgs/llvm14/update

diff --git a/common/shlibs b/common/shlibs
index 4114151662fb..81acc39defb4 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -975,11 +975,12 @@ libuchardet.so.0 uchardet-0.0.6_1
 libgtksourceviewmm-3.0.so.0 gtksourceviewmm-3.2.0_1
 libyajl.so.2 yajl-2.0.1_1
 libconfuse.so.2 confuse-3.2.1_1
-liblldb.so.12 lldb-12.0.0_1
-libclang.so.12 libclang-12.0.0_1
-libclang-cpp.so.12 libclang-cpp-12.0.0_1
+liblldb.so.14 lldb-14.0.3_1
+libclang.so.14 libclang-14.0.3_1
+libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
+libLLVM-14.so libllvm14-14.0.3_1
 libisofs.so.6 libisofs-0.6.24_1
 libmpack.so.0 libmpack-1.0.5_1
 libGeoIP.so.1 libgeoip-1.4.8_1
@@ -4152,3 +4153,12 @@ librz_bin.so.0.3.4 rizin-0.3.4_1
 libaravis-0.8.so.0 libaravis-0.8.21_1
 libLimeSuite.so.20.10-1 LimeSuite-20.10.0_1
 libnvme.so.1 libnvme-1.0_1
+libomp.so libomp-14.0.3_1
+libomptarget.rtl.amdgpu.so libomp-14.0.3_1
+libomptarget.rtl.cuda.so libomp-14.0.3_1
+libomptarget.rtl.x86_64.so libomp-14.0.3_1
+libarcher.so libomp-14.0.3_1
+libomptarget.so libomp-14.0.3_1
+liblldbIntelFeatures.so.14 lldb-14.0.3_1
+libLTO.so.14 llvm14-14.0.3_1
+libRemarks.so.14 llvm14-14.0.3_1
diff --git a/srcpkgs/clang b/srcpkgs/clang
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang
+++ b/srcpkgs/clang
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/clang-analyzer b/srcpkgs/clang-analyzer
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang-analyzer
+++ b/srcpkgs/clang-analyzer
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/clang-tools-extra b/srcpkgs/clang-tools-extra
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang-tools-extra
+++ b/srcpkgs/clang-tools-extra
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libclang b/srcpkgs/libclang
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libclang
+++ b/srcpkgs/libclang
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libclang-cpp b/srcpkgs/libclang-cpp
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libclang-cpp
+++ b/srcpkgs/libclang-cpp
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxx b/srcpkgs/libcxx
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxx
+++ b/srcpkgs/libcxx
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxx-devel b/srcpkgs/libcxx-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxx-devel
+++ b/srcpkgs/libcxx-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxxabi b/srcpkgs/libcxxabi
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxxabi
+++ b/srcpkgs/libcxxabi
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxxabi-devel b/srcpkgs/libcxxabi-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxxabi-devel
+++ b/srcpkgs/libcxxabi-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libllvm14 b/srcpkgs/libllvm14
new file mode 120000
index 000000000000..1d42ed7632a6
--- /dev/null
+++ b/srcpkgs/libllvm14
@@ -0,0 +1 @@
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libomp b/srcpkgs/libomp
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libomp
+++ b/srcpkgs/libomp
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libomp-devel b/srcpkgs/libomp-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libomp-devel
+++ b/srcpkgs/libomp-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lld b/srcpkgs/lld
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lld
+++ b/srcpkgs/lld
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lld-devel b/srcpkgs/lld-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lld-devel
+++ b/srcpkgs/lld-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lldb b/srcpkgs/lldb
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lldb
+++ b/srcpkgs/lldb
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm-libunwind b/srcpkgs/llvm-libunwind
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/llvm-libunwind
+++ b/srcpkgs/llvm-libunwind
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm-libunwind-devel b/srcpkgs/llvm-libunwind-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/llvm-libunwind-devel
+++ b/srcpkgs/llvm-libunwind-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
new file mode 100644
index 000000000000..7b640e102bed
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
@@ -0,0 +1,110 @@
+--- a/clang/lib/Driver/ToolChains/Gnu.cpp
++++ b/clang/lib/Driver/ToolChains/Gnu.cpp
+@@ -2083,7 +2083,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
+                                              "armv7hl-redhat-linux-gnueabi",
+                                              "armv6hl-suse-linux-gnueabi",
+-                                             "armv7hl-suse-linux-gnueabi"};
++                                             "armv7hl-suse-linux-gnueabi",
++                                             "armv7l-linux-gnueabihf"};
+   static const char *const ARMebLibDirs[] = {"/lib"};
+   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi"};
+   static const char *const ARMebHFTriples[] = {
+@@ -2151,8 +2152,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
+   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
+   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
+-                                             "powerpcle-unknown-linux-gnu",
+-                                             "powerpcle-linux-musl"};
++                                             "powerpcle-unknown-linux-gnu"};
+
+   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
+   static const char *const PPC64Triples[] = {
+@@ -2231,6 +2231,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+     return;
+   }
+
++  if (TargetTriple.isMusl()) {
++    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
++    static const char *const ARMHFMuslTriples[] = {
++        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
++    };
++    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
++    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
++    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
++    static const char *const MIPSMuslTriples[] = {
++        "mips-linux-musl", "mipsel-linux-musl",
++        "mipsel-linux-muslhf", "mips-linux-muslhf"
++    };
++    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
++    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
++    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
++    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
++
++    switch (TargetTriple.getArch()) {
++    case llvm::Triple::aarch64:
++      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      break;
++    case llvm::Triple::arm:
++      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
++      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
++        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
++      } else {
++        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
++      }
++      break;
++    case llvm::Triple::x86_64:
++      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      break;
++    case llvm::Triple::x86:
++      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      break;
++    case llvm::Triple::mips:
++      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
++      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
++      break;
++    case llvm::Triple::ppc:
++      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      break;
++    case llvm::Triple::ppcle:
++      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      break;
++    case llvm::Triple::ppc64:
++      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      break;
++    case llvm::Triple::ppc64le:
++      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      break;
++    default:
++      break;
++    }
++    TripleAliases.push_back(TargetTriple.str());
++    if (TargetTriple.str() != BiarchTriple.str())
++      BiarchTripleAliases.push_back(BiarchTriple.str());
++    return;
++  }
++
+   // Android targets should not use GNU/Linux tools or libraries.
+   if (TargetTriple.isAndroid()) {
+     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
new file mode 100644
index 000000000000..47128af79b7f
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
@@ -0,0 +1,13 @@
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -490,10 +490,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+     Loader = "ld.so.1";
+     break;
+   case llvm::Triple::ppc64:
+-    LibDir = "lib64";
+-    Loader =
+-        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
+-    break;
+   case llvm::Triple::ppc64le:
+     LibDir = "lib64";
+     Loader =
diff --git a/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
new file mode 100644
index 000000000000..21fc8003c5f1
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
@@ -0,0 +1,48 @@
+--- a/clang/lib/Basic/Targets/PPC.h
++++ b/clang/lib/Basic/Targets/PPC.h
+@@ -415,11 +415,10 @@ public:
+       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
+     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
+       DataLayout = "e-m:e-i64:64-n32:64";
+-      ABI = "elfv2";
+     } else {
+       DataLayout = "E-m:e-i64:64-n32:64";
+-      ABI = "elfv1";
+     }
++    ABI = "elfv2";
+ 
+     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
+       LongDoubleWidth = LongDoubleAlign = 64;
+--- a/clang/lib/CodeGen/TargetInfo.cpp
++++ b/clang/lib/CodeGen/TargetInfo.cpp
+@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
+       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
+ 
+     if (Triple.isOSBinFormatELF()) {
+-      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
+-      if (getTarget().getABI() == "elfv2")
+-        Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      if (getTarget().getABI() == "elfv1")
++        Kind = PPC64_SVR4_ABIInfo::ELFv1;
+       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
+ 
+       return SetCGInfo(
+--- a/clang/lib/Driver/ToolChains/Clang.cpp
++++ b/clang/lib/Driver/ToolChains/Clang.cpp
+@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
+   const llvm::Triple &T = getToolChain().getTriple();
+   if (T.isOSBinFormatELF()) {
+     switch (getToolChain().getArch()) {
+-    case llvm::Triple::ppc64: {
+-      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
+-          T.isOSOpenBSD() || T.isMusl())
+-        ABIName = "elfv2";
+-      else
+-        ABIName = "elfv1";
+-      break;
+-    }
++    case llvm::Triple::ppc64:
+     case llvm::Triple::ppc64le:
+       ABIName = "elfv2";
+       break;
diff --git a/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch b/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
new file mode 100644
index 000000000000..4135bfd4486a
--- /dev/null
+++ b/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
@@ -0,0 +1,35 @@
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
+@@ -74,6 +74,10 @@
+ #include <sys/utsname.h>
+ #endif
+
++#if SANITIZER_LINUX && defined(__powerpc__)
++#include <asm/ptrace.h>
++#endif
++
+ #if SANITIZER_LINUX && !SANITIZER_ANDROID
+ #include <sys/personality.h>
+ #endif
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
+@@ -92,7 +92,7 @@
+ # include <utime.h>
+ # include <sys/ptrace.h>
+ #    if defined(__mips64) || defined(__aarch64__) || defined(__arm__) || \
+-        defined(__hexagon__) || SANITIZER_RISCV64
++        defined(__hexagon__) || defined(__powerpc__) || SANITIZER_RISCV64
+ #      include <asm/ptrace.h>
+ #      ifdef __arm__
+ typedef struct user_fpregs elf_fpregset_t;
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
+@@ -31,7 +31,7 @@
+ #include <sys/types.h> // for pid_t
+ #include <sys/uio.h> // for iovec
+ #include <elf.h> // for NT_PRSTATUS
+-#if (defined(__aarch64__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
++#if (defined(__aarch64__) || defined(__powerpc__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
+ // GLIBC 2.20+ sys/user does not include asm/ptrace.h
+ # include <asm/ptrace.h>
+ #endif
diff --git a/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch b/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
new file mode 100644
index 000000000000..d0b61c80c897
--- /dev/null
+++ b/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
@@ -0,0 +1,62 @@
+--- a/compiler-rt/lib/xray/xray_powerpc64.inc
++++ b/compiler-rt/lib/xray/xray_powerpc64.inc
+@@ -12,7 +12,13 @@
+ 
+ #include <cstdint>
+ #include <mutex>
++#ifdef __GLIBC__
+ #include <sys/platform/ppc.h>
++#else
++#include <cctype>
++#include <cstring>
++#include <cstdlib>
++#endif
+ 
+ #include "xray_defs.h"
+ 
+@@ -20,13 +26,45 @@ namespace __xray {
+ 
+ ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
+   CPU = 0;
++#ifdef __GLIBC__
+   return __ppc_get_timebase();
++#else
++  return __builtin_ppc_get_timebase();
++#endif
+ }
+ 
+ inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
+   static std::mutex M;
+   std::lock_guard<std::mutex> Guard(M);
++#ifdef __GLIBC__
+   return __ppc_get_timebase_freq();
++#else
++  /* FIXME: a less dirty implementation? */
++  static uint64_t base;
++  if (!base) {
++    FILE *f = fopen("/proc/cpuinfo", "rb");
++    if (f) {
++      ssize_t nr;
++      /* virtually always big enough to hold the line */
++      char buf[512];
++      while (fgets(buf, sizeof(buf), f)) {
++        char *ret = strstr(buf, "timebase");
++        if (!ret) {
++          continue;
++        }
++        ret += sizeof("timebase") - 1;
++        ret = strchr(ret, ':');
++        if (!ret) {
++          continue;
++        }
++        base = strtoul(ret + 1, nullptr, 10);
++        break;
++      }
++      fclose(f);
++    }
++  }
++  return base;
++#endif
+ }
+ 
+ inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
diff --git a/srcpkgs/llvm14/patches/libcxx-musl.patch b/srcpkgs/llvm14/patches/libcxx-musl.patch
new file mode 100644
index 000000000000..bbd31ffc2cb1
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-musl.patch
@@ -0,0 +1,26 @@
+--- a/libcxx/include/locale
++++ b/libcxx/include/locale
+@@ -742,7 +742,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
+         typename remove_reference<decltype(errno)>::type __save_errno = errno;
+         errno = 0;
+         char *__p2;
++#if defined(__linux__) && !defined(__GLIBC__)
++        long long __ll = strtoll(__a, &__p2, __base);
++#else
+         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
++#endif
+         typename remove_reference<decltype(errno)>::type __current_errno = errno;
+         if (__current_errno == 0)
+             errno = __save_errno;
+@@ -782,7 +786,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
+         typename remove_reference<decltype(errno)>::type __save_errno = errno;
+         errno = 0;
+         char *__p2;
++#if defined(__linux__) && !defined(__GLIBC__)
++        unsigned long long __ll = strtoull(__a, &__p2, __base);
++#else
+         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
++#endif
+         typename remove_reference<decltype(errno)>::type __current_errno = errno;
+         if (__current_errno == 0)
+             errno = __save_errno;
diff --git a/srcpkgs/llvm14/patches/libcxx-ppc.patch b/srcpkgs/llvm14/patches/libcxx-ppc.patch
new file mode 100644
index 000000000000..7a92f8004e1c
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-ppc.patch
@@ -0,0 +1,22 @@
+This ensures `is_iec559` is defined correctly under all long double ABIs,
+including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__`
+is not defined on gcc.
+
+--- a/libcxx/include/limits
++++ b/libcxx/include/limits
+@@ -426,8 +426,14 @@ protected:
+     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
+     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
+ 
+-#if (defined(__ppc__) || defined(__ppc64__))
++#if defined(__powerpc__) || defined(__powerpc64__)
++#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__)
++    /* IEEE 754 quadruple or double precision */
++    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
++#else
++    /* 128-bit IBM double-double */
+     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
++#endif
+ #else
+     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
+ #endif
diff --git a/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch b/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
new file mode 100644
index 000000000000..70292beb2fcd
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
@@ -0,0 +1,11 @@
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -769,6 +769,8 @@ function(cxx_link_system_libraries target)
+     target_link_libraries(${target} PRIVATE atomic)
+   endif()
+ 
++#ssp  target_link_libraries(${target} PRIVATE ssp_nonshared)
++
+   if (MINGW)
+     target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
+   endif()
diff --git a/srcpkgs/llvm14/patches/libcxxabi-dl.patch b/srcpkgs/llvm14/patches/libcxxabi-dl.patch
new file mode 100644
index 000000000000..3a15f9db8c98
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxxabi-dl.patch
@@ -0,0 +1,25 @@
+Also link to -ldl to prevent undefined references.
+
+--- a/libcxxabi/src/CMakeLists.txt
++++ b/libcxxabi/src/CMakeLists.txt
+@@ -73,6 +73,7 @@
+   endif()
+ 
+   add_library_flags_if(LIBCXXABI_HAS_C_LIB c)
++  add_library_flags_if(LIBCXXABI_HAS_C_LIB dl)
+ endif()
+ 
+ if (LIBCXXABI_USE_LLVM_UNWINDER)
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -745,6 +745,10 @@
+     target_link_libraries(${target} PRIVATE m)
+   endif()
+ 
++  if (LIBCXX_HAS_C_LIB)
++    target_link_libraries(${target} PRIVATE dl)
++  endif()
++
+   if (LIBCXX_HAS_RT_LIB)
+     target_link_libraries(${target} PRIVATE rt)
+   endif()
diff --git a/srcpkgs/llvm14/patches/lldb-musl.patch b/srcpkgs/llvm14/patches/lldb-musl.patch
new file mode 100644
index 000000000000..601c0d138523
--- /dev/null
+++ b/srcpkgs/llvm14/patches/lldb-musl.patch
@@ -0,0 +1,31 @@
+--- a/lldb/source/Plugins/Process/Linux/Procfs.h
++++ b/lldb/source/Plugins/Process/Linux/Procfs.h
+@@ -10,21 +10,12 @@
+ // sys/procfs.h on Android/Linux for all supported architectures.
+ 
+ #include <sys/ptrace.h>
++#include <asm/ptrace.h>
+ 
+-#ifdef __ANDROID__
+-#if defined(__arm64__) || defined(__aarch64__)
+-typedef unsigned long elf_greg_t;
+-typedef elf_greg_t
+-    elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
+-typedef struct user_fpsimd_state elf_fpregset_t;
+-#ifndef NT_FPREGSET
+-#define NT_FPREGSET NT_PRFPREG
+-#endif // NT_FPREGSET
+-#elif defined(__mips__)
+-#ifndef NT_FPREGSET
+-#define NT_FPREGSET NT_PRFPREG
+-#endif // NT_FPREGSET
+-#endif
+-#else // __ANDROID__
++#if !defined(__GLIBC__) && defined(__powerpc__)
++#define pt_regs musl_pt_regs
++#include <sys/procfs.h>
++#undef pt_regs
++#else
+ #include <sys/procfs.h>
+-#endif // __ANDROID__
++#endif
diff --git a/srcpkgs/llvm14/patches/llvm-001-musl.patch b/srcpkgs/llvm14/patches/llvm-001-musl.patch
new file mode 100644
index 000000000000..f2a3f8d62813
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-001-musl.patch
@@ -0,0 +1,57 @@
+From faca3fbd15d0c3108493c3c54cd93138e049ac43 Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe@gmail.com>
+Date: Tue, 8 Sep 2015 22:03:02 +0200
+Subject: [PATCH 3/3] musl
+
+---
+ include/llvm/Analysis/TargetLibraryInfo.h | 9 +++++++++
+ lib/Support/DynamicLibrary.cpp            | 2 +-
+ lib/Support/Unix/Signals.inc              | 6 +++---
+ utils/unittest/googletest/src/gtest.cc    | 1 +
+ 5 files changed, 17 insertions(+), 6 deletions(-)
+
+diff --git a/include/llvm/Analysis/TargetLibraryInfo.h b/include/llvm/Analysis/TargetLibraryInfo.h
+index 34a8a1e3..1214ece5 100644
+--- a/llvm/include/llvm/Analysis/TargetLibraryInfo.h
++++ b/llvm/include/llvm/Analysis/TargetLibraryInfo.h
+@@ -18,6 +18,15 @@
+ #include "llvm/IR/PassManager.h"
+ #include "llvm/Pass.h"
+ 
++#undef fopen64
++#undef fseeko64
++#undef fstat64
++#undef fstatvfs64
++#undef ftello64
++#undef lstat64
++#undef stat64
++#undef tmpfile64
++
+ namespace llvm {
+ template <typename T> class ArrayRef;
+ class Triple;
+diff --git a/lib/Support/Unix/DynamicLibrary.inc b/lib/Support/Unix/DynamicLibrary.inc
+index a2a37996..2f86c470 100644
+--- a/llvm/lib/Support/Unix/DynamicLibrary.inc
++++ b/llvm/lib/Support/Unix/DynamicLibrary.inc
+@@ -102,7 +102,7 @@ static void *DoSearch(const char* SymbolName) {
+ 
+ // This macro returns the address of a well-known, explicit symbol
+ #define EXPLICIT_SYMBOL(SYM) \
+-   if (!strcmp(SymbolName, #SYM)) return &SYM
++   if (!strcmp(SymbolName, #SYM)) return (void *)&SYM
+ 
+ // Under glibc we have a weird situation. The stderr/out/in symbols are both
+ // macros and global variables because of standards requirements. So, we
+diff --git a/utils/unittest/googletest/src/gtest.cc b/utils/unittest/googletest/src/gtest.cc
+index d882ab2e..f1fb12d0 100644
+--- a/llvm/utils/unittest/googletest/src/gtest.cc
++++ b/llvm/utils/unittest/googletest/src/gtest.cc
+@@ -128,6 +128,7 @@
+ 
+ #if GTEST_CAN_STREAM_RESULTS_
+ # include <arpa/inet.h>  // NOLINT
++# include <sys/socket.h>  // NOLINT
+ # include <netdb.h>  // NOLINT
+ # include <sys/socket.h>  // NOLINT
+ # include <sys/types.h>  // NOLINT
diff --git a/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch b/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
new file mode 100644
index 000000000000..0071d964bd37
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
@@ -0,0 +1,30 @@
+This patches LLVM to use ELFv2 on ppc64 unconditionally unless overridden. We
+need this because unlike most distros we use ELFv2 for both glibc and musl
+on big endian ppc64.
+
+diff --git a/lib/Target/PowerPC/PPCTargetMachine.cpp b/lib/Target/PowerPC/PPCTargetMachine.cpp
+index 0634833e..b7cbc2e7 100644
+--- a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
++++ b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
+@@ -222,9 +222,8 @@ static PPCTargetMachine::PPCABI computeTargetABI(const Triple &TT,
+ 
+   switch (TT.getArch()) {
+   case Triple::ppc64le:
+-    return PPCTargetMachine::PPC_ABI_ELFv2;
+   case Triple::ppc64:
+-    return PPCTargetMachine::PPC_ABI_ELFv1;
++    return PPCTargetMachine::PPC_ABI_ELFv2;
+   default:
+     return PPCTargetMachine::PPC_ABI_UNKNOWN;
+   }
+diff --git a/test/CodeGen/PowerPC/ppc64-elf-abi.ll b/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+index 8b1cf6b5..296a2afa 100644
+--- a/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
++++ b/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+@@ -1,4 +1,5 @@
+-; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv1
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-musl < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv1 < %s | FileCheck %s -check-prefix=CHECK-ELFv1
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv2 < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
diff --git a/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch b/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
new file mode 100644
index 000000000000..b5d15974375d
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
@@ -0,0 +1,11 @@
+--- a/llvm/lib/Target/PowerPC/PPCSubtarget.cpp
++++ b/llvm/lib/Target/PowerPC/PPCSubtarget.cpp
+@@ -165,7 +165,7 @@ void PPCSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) {
+ 
+   if ((TargetTriple.isOSFreeBSD() && TargetTriple.getOSMajorVersion() >= 13) ||
+       TargetTriple.isOSNetBSD() || TargetTriple.isOSOpenBSD() ||
+-      TargetTriple.isMusl())
++      isTargetLinux())
+     SecurePlt = true;
+ 
+   if (HasSPE && IsPPC64)
diff --git a/srcpkgs/llvm14/patches/llvm-004-override-opt.patch b/srcpkgs/llvm14/patches/llvm-004-override-opt.patch
new file mode 100644
index 000000000000..51d0e4b31b32
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-004-override-opt.patch
@@ -0,0 +1,18 @@
+This allows us to override the optimization level as not all platforms can
+deal with -O3.
+
+--- a/llvm/CMakeLists.txt
++++ b/llvm/CMakeLists.txt
+@@ -918,6 +918,12 @@ if( MINGW AND NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" )
+   llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "-O2")
+ endif()
+ 
++set(VOID_CXX_OPT_FLAGS "" CACHE STRING "Optimization level to use")
++
++if (NOT VOID_CXX_OPT_FLAGS STREQUAL "")
++    llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "${VOID_CXX_OPT_FLAGS}")
++endif()
++
+ # Put this before tblgen. Else we have a circular dependence.
+ add_subdirectory(lib/Demangle)
+ add_subdirectory(lib/Support)
diff --git a/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch b/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
new file mode 100644
index 000000000000..d332687b9d92
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
@@ -0,0 +1,36 @@
+From f3dbdd49c06bfafc1d6138094cf42889c14d38b6 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Sun, 3 Nov 2019 10:57:27 -0600
+Subject: [PATCH] [LLVM][PowerPC] Assume BigPIC if no PIC level is specified
+
+---
+ llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp  | 2 +-
+ llvm/lib/Target/PowerPC/PPCMCInstLower.cpp | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/Target/PowerPC/PPCAsmPrinter.cpp b/lib/Target/PowerPC/PPCAsmPrinter.cpp
+index cce21f32..87ca5f9b 100644
+--- a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
++++ b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
+@@ -520,7 +520,7 @@ void PPCAsmPrinter::EmitTlsCall(const MachineInstr *MI,
+ 
+   // Add 32768 offset to the symbol so we follow up the latest GOT/PLT ABI.
+   if (Kind == MCSymbolRefExpr::VK_PLT && Subtarget->isSecurePlt() &&
+-      M->getPICLevel() == PICLevel::BigPIC)
++      M->getPICLevel() != PICLevel::SmallPIC)
+     TlsRef = MCBinaryExpr::createAdd(
+         TlsRef, MCConstantExpr::create(32768, OutContext), OutContext);
+   const MachineOperand &MO = MI->getOperand(2);
+diff --git a/lib/Target/PowerPC/PPCMCInstLower.cpp b/lib/Target/PowerPC/PPCMCInstLower.cpp
+index 5cc180d7..a5b02565 100644
+--- a/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
++++ b/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
+@@ -117,7 +117,7 @@ static MCOperand GetSymbolRef(const MachineOperand &MO, const MCSymbol *Symbol,
+   const MCExpr *Expr = MCSymbolRefExpr::create(Symbol, RefKind, Ctx);
+   // If -msecure-plt -fPIC, add 32768 to symbol.
+   if (Subtarget->isSecurePlt() && TM.isPositionIndependent() &&
+-      M->getPICLevel() == PICLevel::BigPIC &&
++      M->getPICLevel() != PICLevel::SmallPIC &&
+       MO.getTargetFlags() == PPCII::MO_PLT)
+     Expr =
+         MCBinaryExpr::createAdd(Expr, MCConstantExpr::create(32768, Ctx), Ctx);
diff --git a/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch b/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
new file mode 100644
index 000000000000..a00abd216665
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
@@ -0,0 +1,25 @@
+Fix failures in AllocationTests/MappedMemoryTest.* on aarch64:
+
+    Failing Tests (8):
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.AllocAndRelease/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.DuplicateNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.EnabledWrite/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.MultipleAllocAndRelease/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.SuccessiveNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.UnalignedNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.ZeroNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.ZeroSizeNear/3
+
+Upstream-Issue: https://bugs.llvm.org/show_bug.cgi?id=14278#c10
+
+--- a/llvm/lib/Support/Unix/Memory.inc
++++ b/llvm/lib/Support/Unix/Memory.inc
+@@ -58,7 +58,7 @@ static int getPosixProtectionFlags(unsigned Flags) {
+     return PROT_READ | PROT_WRITE | PROT_EXEC;
+   case llvm::sys::Memory::MF_EXEC:
+ #if (defined(__FreeBSD__) || defined(__POWERPC__) || defined (__ppc__) || \
+-     defined(_POWER) || defined(_ARCH_PPC))
++     defined(_POWER) || defined(_ARCH_PPC) || (defined(__linux__) && defined(__aarch64__)))
+     // On PowerPC, having an executable page that has no read permission
+     // can have unintended consequences.  The function InvalidateInstruction-
+     // Cache uses instructions dcbf and icbi, both of which are treated by
diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
new file mode 100644
index 000000000000..3e7e6ab2c00b
--- /dev/null
+++ b/srcpkgs/llvm14/template
@@ -0,0 +1,424 @@
+# Template file for 'llvm14'
+pkgname=llvm14
+version=14.0.3
+revision=1
+wrksrc="llvm-project-${version}.src"
+build_wrksrc=llvm
+build_style=cmake
+configure_args="
+ -DCMAKE_BUILD_TYPE=Release -Wno-dev
+ -DENABLE_LINKER_BUILD_ID=YES
+ -DLLDB_USE_SYSTEM_SIX=YES
+ -DLIBCXX_CXX_ABI=libcxxabi
+ -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
+ -DLIBCXXABI_USE_LLVM_UNWINDER=YES
+ -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
+ -DLIBOMP_ENABLE_SHARED=YES
+ -DLIBOMP_INSTALL_ALIASES=NO
+ -DLLVM_INCLUDE_DOCS=YES
+ -DLLVM_BUILD_DOCS=YES
+ -DLLVM_ENABLE_SPHINX=YES
+ -DSPHINX_WARNINGS_AS_ERRORS=NO
+ -DLLVM_INSTALL_UTILS=YES
+ -DLLVM_BUILD_LLVM_DYLIB=YES
+ -DLLVM_LINK_LLVM_DYLIB=YES
+ -DLLVM_ENABLE_RTTI=YES
+ -DLLVM_ENABLE_FFI=YES
+ -DLLVM_BINUTILS_INCDIR=/usr/include"
+hostmakedepends="perl python3 zlib-devel libffi-devel swig python3-Sphinx
+ python3-recommonmark python3-sphinx-automodapi"
+makedepends="python3-devel zlib-devel elfutils-devel libffi-devel libedit-devel
+ libxml2-devel binutils-devel libatomic-devel"
+depends="libllvm14>=${version}_${revision}"
+short_desc="Low Level Virtual Machine"
+maintainer="q66 <daniel@octaforge.org>"
+license="Apache-2.0"
+homepage="https://www.llvm.org"
+distfiles="https://github.com/llvm/llvm-project/releases/download/llvmorg-${version}/llvm-project-${version}.src.tar.xz"
+checksum=44d3e7a784d5cf805e72853bb03f218bd1058d448c03ca883dabbebc99204e0c
+lib32disabled=yes
+python_version=3
+
+if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+	configure_args+=" -DLIBCXX_HAS_MUSL_LIBC=YES"
+	makedepends+=" libexecinfo-devel"
+	depends+=" libexecinfo-devel"
+fi
+
+# "operand out of range" assembler failures
+case "$XBPS_TARGET_MACHINE" in
+	ppc64*) ;;
+	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
+esac
+
+_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
+
+_lldb_enable=yes
+_libomp_enable=no
+
+case "$XBPS_TARGET_MACHINE" in
+	ppc64le*) ;;
+	ppc*|i686*) _lldb_enable=no ;;
+esac
+
+case "$XBPS_TARGET_MACHINE" in
+	x86_64*|aarch64*|ppc64*) _libomp_enable=yes;;
+esac
+
+subpackages="clang-tools-extra"
+
+# must go before clang
+if [ "$_libomp_enable" = "yes" ]; then
+	_enabled_projects+=";openmp"
+	subpackages+=" libomp libomp-devel"
+	# because of cmake nonsense referencing libomptarget.so.*
+	depends+=" libomp>=${version}_${revision}"
+fi
+
+subpackages+=" clang clang-analyzer libclang libclang-cpp
+ llvm-libunwind llvm-libunwind-devel libcxx libcxx-devel
+ libcxxabi libcxxabi-devel libllvm14"
+
+if [ "$_lldb_enable" = "yes" ]; then
+	# XXX fails to cross compile due to python
+	_enabled_projects+=";lldb"
+	subpackages+=" lldb lldb-devel"
+fi
+
+subpackages+=" lld lld-devel"
+
+configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+
+post_patch() {
+	if [ "$_lldb_enable" = "yes" ]; then
+		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+			vsed -i 's|__ptrace_request|int|g' \
+				${wrksrc}/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
+		fi
+		# disable docs for lldb as they fail to generate
+		vsed -i '/add_subdirectory(docs)/d' \
+			${wrksrc}/lldb/CMakeLists.txt
+	fi
+
+	# update config.guess for better platform detection
+	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
+		${wrksrc}/llvm/cmake
+
+	# fix linker failures on some archs
+	vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
+		${wrksrc}/libcxxabi/cmake/config-ix.cmake
+	vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
+		${wrksrc}/libcxxabi/cmake/config-ix.cmake
+
+	# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*) ;;
+		ppc*-musl|i686-musl|mips*-musl)
+			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
+				${wrksrc}/libunwind/src/CMakeLists.txt
+			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
+				${wrksrc}/libcxxabi/src/CMakeLists.txt
+			vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
+			;;
+	esac
+
+	case "$XBPS_TARGET_MACHINE" in
+		x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
+			vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
+				${wrksrc}/compiler-rt/CMakeLists.txt
+			;;
+		arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
+			vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
+				${wrksrc}/compiler-rt/cmake/config-ix.cmake
+			;;
+	esac
+}
+
+pre_configure() {
+	local triplet
+
+	# Vastly reduce size of debugging symbols:
+	CFLAGS=${CFLAGS/ -g/ -g1}
+	CXXFLAGS=${CXXFLAGS/ -g/ -g1}
+
+	# since gcc9, the build likes to blow up for ppc32 apparently because
+	# of clang being too large for a 24-bit relative call to the PLT, so
+	# optimize for size instead
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*) ;;
+		mips*-musl|ppc*) configure_args+=" -DVOID_CXX_OPT_FLAGS=-Os" ;;
+	esac
+
+	if [ "$CROSS_BUILD" ]; then
+		msg_normal "Building host tblgen\n"
+		mkdir -p build/HOST
+		cd build/HOST
+		CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
+			CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
+			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
+			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
+		make ${makejobs} -C utils/TableGen
+		make ${makejobs} -C tools/clang/utils/TableGen
+		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
+		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
+		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
+		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
+		cd ../..
+	fi
+
+	case "$XBPS_TARGET_MACHINE" in
+		i686*) _arch="X86";;
+		x86_64*) _arch="X86";;
+		armv5*) _arch="Armv5te";;
+		armv6*) _arch="Armv6";;
+		armv7*) _arch="Armv7";;
+		aarch64*) _arch="AArch64";;
+		mips*) _arch="Mips";;
+		ppc*) _arch="PowerPC";;
+		riscv64*) _arch="RISCV64";;
+	esac
+
+	triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
+
+	configure_args+=" -DLLVM_TARGET_ARCH=${_arch}"
+	configure_args+=" -DLLVM_HOST_TRIPLE=${triplet}"
+	configure_args+=" -DLLVM_DEFAULT_TARGET_TRIPLE=${triplet}"
+}
+
+do_install() {
+	cd build
+	cmake -DCMAKE_INSTALL_PREFIX=${DESTDIR}/usr -P cmake_install.cmake
+
+	# Required for multilib.
+	if [ "$XBPS_TARGET_MACHINE" = "x86_64" ]; then
+		for _header in llvm-config; do
+			mv ${DESTDIR}/usr/include/llvm/Config/${_header}{,-64}.h
+			vinstall ${FILESDIR}/llvm-Config-${_header}.h 644 \
+				usr/include/llvm/Config ${_header}.h
+		done
+	fi
+
+	# Remove llvm-config-host in cross builds.
+	if [ "$CROSS_BUILD" ]; then
+		rm -f ${DESTDIR}/usr/bin/llvm-config-host
+	fi
+
+	# Install libcxxabi headers
+	vinstall ${wrksrc}/libcxxabi/include/__cxxabi_config.h 644 usr/include
+	vinstall ${wrksrc}/libcxxabi/include/cxxabi.h 644 usr/include
+
+	# Install libunwind headers
+	vinstall ${wrksrc}/libunwind/include/__libunwind_config.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/libunwind.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/unwind.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/mach-o/compact_unwind_encoding.h \
+		644 usr/include/mach-o
+}
+
+clang-analyzer_package() {
+	pycompile_dirs="usr/share/scan-view"
+	depends="clang-${version}_${revision} python3 perl"
+	short_desc+=" - A source code analysis framework"
+	homepage="https://clang-analyzer.llvm.org/"
+	pkg_install() {
+		vmove usr/share/man/man1/scan-build.1
+		vmove "/usr/bin/scan-*"
+		vmove "/usr/share/scan-*"
+		vmove "/usr/libexec/*analyzer"
+	}
+}
+
+clang-tools-extra_package() {
+	lib32disabled=yes
+	depends="clang-${version}_${revision} python3"
+	short_desc+=" - Extra Clang tools"
+	homepage="https://clang.llvm.org/extra/"
+	pkg_install() {
+		vmove usr/include/clang-tidy
+		vmove usr/bin/clang-apply-replacements
+		vmove usr/bin/clang-query
+		vmove usr/bin/clang-rename
+		vmove usr/bin/clang-tidy
+		vmove usr/bin/diagtool
+		vmove usr/bin/find-all-symbols
+		vmove usr/bin/hmaptool
+		vmove usr/bin/modularize
+		vmove usr/bin/pp-trace
+		vmove usr/bin/sancov
+		vmove "usr/lib/libclangApplyReplacements*"
+		vmove "usr/lib/libclangQuery*"
+		vmove "usr/lib/libclangTidy*"
+		vmove "usr/share/clang/*tidy*"
+		vmove usr/share/doc/clang-tools
+		vmove usr/share/man/man1/extraclangtools.1
+		vmove usr/share/man/man1/diagtool.1
+	}
+}
+
+clang_package() {
+	lib32disabled=yes
+	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
+	 libclang-${version}_${revision}"
+	short_desc+=" - C language family frontend"
+	homepage="https://clang.llvm.org/"
+	pkg_install() {
+		vmove usr/include/clang
+		vmove usr/include/clang-c
+		vmove "usr/bin/*clang*"
+		vmove usr/bin/c-index-test
+		vmove usr/lib/clang
+		vmove usr/lib/cmake/clang
+		vmove "usr/lib/libclang*.a"
+		vmove "usr/lib/libclang*.so"
+		vmove usr/share/clang
+		vmove usr/share/doc/clang
+		vmove usr/share/man/man1/clang.1
+	}
+}
+
+libclang_package() {
+	short_desc+=" - C frontend runtime library"
+	pkg_install() {
+		vmove "usr/lib/libclang.so.*"
+	}
+}
+
+libclang-cpp_package() {
+	short_desc+=" - C frontend runtime library (C++ interface)"
+	pkg_install() {
+		vmove "usr/lib/libclang-cpp.so.*"
+	}
+}
+
+lld_package() {
+	lib32disabled=yes
+	short_desc+=" - linker"
+	homepage="https://lld.llvm.org"
+	pkg_install() {
+		vmove usr/bin/lld*
+		vmove usr/bin/wasm-ld
+		vmove usr/bin/ld.lld*
+		vmove usr/bin/ld64.lld*
+		vmove usr/share/doc/lld
+	}
+}
+
+lld-devel_package() {
+	lib32disabled=yes
+	short_desc+=" - linker - development files"
+	homepage="https://lld.llvm.org"
+	depends="lld>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include/lld
+		vmove usr/lib/cmake/lld
+		vmove "usr/lib/liblld*a"
+	}
+}
+
+lldb_package() {
+	lib32disabled=yes
+	depends+=" python3-six"
+	short_desc+=" - LLDB debugger"
+	homepage="https://lldb.llvm.org/"
+	pkg_install() {
+		vmove usr/bin/*lldb*
+		vmove usr/lib/liblldb*so.*
+		vmove /usr/lib/python*
+	}
+}
+
+lldb-devel_package() {
+	lib32disabled=yes
+	depends="lldb>=${version}_${revision}"
+	short_desc+=" - LLDB debugger - development files"
+	pkg_install() {
+		vmove usr/include/lldb
+		vmove "usr/lib/liblldb*.so"
+	}
+}
+
+llvm-libunwind_package() {
+	short_desc+=" - libunwind"
+	pkg_install() {
+		vmove "usr/lib/libunwind.so.*"
+	}
+}
+
+llvm-libunwind-devel_package() {
+	short_desc+=" - libunwind - development files"
+	depends="llvm-libunwind>=${version}_${revision}"
+	conflicts="libunwind-devel>=0"
+	pkg_install() {
+		vmove usr/lib/libunwind.so
+		vmove usr/lib/libunwind.a
+		vmove "usr/include/*unwind*"
+		vmove usr/include/mach-o
+		vmove usr/share/doc/libunwind
+	}
+}
+
+libcxxabi_package() {
+	short_desc+=" - low level support for libc++"
+	pkg_install() {
+		vmove "usr/lib/libc++abi.so.*"
+	}
+}
+
+libcxxabi-devel_package() {
+	short_desc+=" - low level support for libc++ - development files"
+	depends="libcxxabi>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/lib/libc++abi.so
+		vmove usr/lib/libc++abi.a
+		vmove "usr/include/*cxxabi*"
+	}
+}
+
+libcxx_package() {
+	short_desc+=" - C++ standard library"
+	pkg_install() {
+		vmove "usr/lib/libc++.so.*"
+	}
+}
+
+libcxx-devel_package() {
+	short_desc+=" - C++ standard library - development files"
+	depends="libcxx>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/lib/libc++.so
+		vmove usr/lib/libc++.a
+		vmove usr/lib/libc++experimental.a
+		vmove usr/include/c++
+		vmove usr/share/doc/libcxx
+	}
+}
+
+libomp_package() {
+	short_desc+=" - Clang OpenMP support library"
+	pkg_install() {
+		vmove usr/lib/libomp.so
+		vmove "usr/lib/libomptarget.rtl.*.so"
+		vmove usr/lib/libarcher.so
+		vmove "usr/lib/libomp*.so.*"
+	}
+}
+
+libomp-devel_package() {
+	short_desc+=" - Clang OpenMP support library - development files"
+	depends="libomp>=${version}_${revision}"
+	pkg_install() {
+		vmove "usr/lib/libomp*.so"
+		vmove "usr/lib/libarcher*"
+		vmove "usr/include/omp*.h"
+		vmove "usr/lib/clang/${version}/include/omp*.h"
+		vmove usr/share/man/man1/llvmopenmp.1
+		vmove usr/share/doc/openmp
+	}
+}
+
+libllvm14_package() {
+	short_desc+=" - runtime library"
+	pkg_install() {
+		vmove "usr/lib/libLLVM-*.so*"
+	}
+}
diff --git a/srcpkgs/llvm14/update b/srcpkgs/llvm14/update
new file mode 100644
index 000000000000..e95cf26b3586
--- /dev/null
+++ b/srcpkgs/llvm14/update
@@ -0,0 +1,3 @@
+site="https://github.com/llvm/llvm-project/releases"
+pattern="llvmorg-\K(\d+.){2}\d+(-rc\d+)?"
+ignore="*-rc*"

From 3a7245c791279f95fa6fea968eecc8f5f7d7d135 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:16:07 +0200
Subject: [PATCH 02/26] llvm: update to 14.0.3.

---
 srcpkgs/llvm/template | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/llvm/template b/srcpkgs/llvm/template
index a92db6f94f9f..d226c61c734e 100644
--- a/srcpkgs/llvm/template
+++ b/srcpkgs/llvm/template
@@ -1,10 +1,10 @@
 # Template file for 'llvm'
 pkgname=llvm
-version=12.0.0
+version=14.0.3
 revision=1
 build_style=meta
-depends="llvm12"
-replaces="llvm11>=0 llvm10>=0 llvm9>=0 llvm8>=0 llvm7>=0 llvm6.0>=0 llvm3.9>=0"
+depends="llvm14"
+replaces="llvm13>=0 llvm12>=0 llvm11>=0 llvm10>=0 llvm9>=0 llvm8>=0 llvm7>=0 llvm6.0>=0 llvm3.9>=0"
 short_desc="LLVM meta package"
 maintainer="Enno Boland <gottox@voidlinux.org>"
 license="Public Domain"

From f5ea041e89e99615d020048178758853592a82bd Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:36:32 +0200
Subject: [PATCH 03/26] llvm12: drop non-llvm components

---
 ...clang-001-fix-unwind-chain-inclusion.patch |  44 ---
 .../patches/clang-002-add-musl-triples.patch  | 110 -------
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 -
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ---
 .../compiler-rt-aarch64-ucontext.patch        |  11 -
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 --
 .../llvm12/patches/compiler-rt-size_t.patch   |  10 -
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 ----
 srcpkgs/llvm12/patches/libcxx-musl.patch      |  26 --
 srcpkgs/llvm12/patches/libcxx-ppc.patch       |  22 --
 .../llvm12/patches/libcxx-ssp-nonshared.patch |  11 -
 srcpkgs/llvm12/patches/libcxxabi-dl.patch     |  25 --
 srcpkgs/llvm12/patches/libunwind-ppc32.patch  |  63 ----
 srcpkgs/llvm12/patches/lldb-musl.patch        |  31 --
 .../llvm12/patches/ppc32-compiler-rt.patch    |  21 --
 srcpkgs/llvm12/template                       | 301 +-----------------
 16 files changed, 1 insertion(+), 832 deletions(-)
 delete mode 100644 srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-size_t.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-ppc.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxxabi-dl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libunwind-ppc32.patch
 delete mode 100644 srcpkgs/llvm12/patches/lldb-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/ppc32-compiler-rt.patch

diff --git a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
deleted file mode 100644
index e4eaa7783e7a..000000000000
--- a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 352974169f0d2b5da3d5321f588f5e3b5941330e Mon Sep 17 00:00:00 2001
-From: Andrea Brancaleoni <miwaxe@gmail.com>
-Date: Tue, 8 Sep 2015 22:14:57 +0200
-Subject: [PATCH 2/7] fix unwind chain inclusion
-
----
- lib/Headers/unwind.h | 9 +++++----
- 1 file changed, 5 insertions(+), 4 deletions(-)
-
-diff --git a/lib/Headers/unwind.h b/lib/Headers/unwind.h
-index 303d792..44e10cc 100644
---- a/clang/lib/Headers/unwind.h
-+++ b/clang/lib/Headers/unwind.h
-@@ -9,9 +9,6 @@
- 
- /* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/
- 
--#ifndef __CLANG_UNWIND_H
--#define __CLANG_UNWIND_H
--
- #if defined(__APPLE__) && __has_include_next(<unwind.h>)
- /* Darwin (from 11.x on) provide an unwind.h. If that's available,
-  * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE,
-@@ -39,6 +36,9 @@
- # endif
- #else
- 
-+#ifndef __CLANG_UNWIND_H
-+#define __CLANG_UNWIND_H
-+
- #include <stdint.h>
- 
- #ifdef __cplusplus
-@@ -322,6 +322,7 @@ _Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *);
- }
- #endif
- 
-+#endif /* __CLANG_UNWIND_H */
-+
- #endif
- 
--#endif /* __CLANG_UNWIND_H */
--- 
-2.5.1
diff --git a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
deleted file mode 100644
index 25688d40dbc2..000000000000
--- a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
+++ /dev/null
@@ -1,110 +0,0 @@
---- a/clang/lib/Driver/ToolChains/Gnu.cpp
-+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
-@@ -2086,7 +2086,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
-                                              "armv7hl-redhat-linux-gnueabi",
-                                              "armv6hl-suse-linux-gnueabi",
--                                             "armv7hl-suse-linux-gnueabi"};
-+                                             "armv7hl-suse-linux-gnueabi",
-+                                             "armv7l-linux-gnueabihf"};
-   static const char *const ARMebLibDirs[] = {"/lib"};
-   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
-                                              "armeb-linux-androideabi"};
-@@ -2153,8 +2154,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
-   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
-   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
--                                             "powerpcle-unknown-linux-gnu",
--                                             "powerpcle-linux-musl"};
-+                                             "powerpcle-unknown-linux-gnu"};
- 
-   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
-   static const char *const PPC64Triples[] = {
-@@ -2235,6 +2235,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-     return;
-   }
- 
-+  if (TargetTriple.isMusl()) {
-+    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
-+    static const char *const ARMHFMuslTriples[] = {
-+        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
-+    };
-+    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
-+    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
-+    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
-+    static const char *const MIPSMuslTriples[] = {
-+        "mips-linux-musl", "mipsel-linux-musl",
-+        "mipsel-linux-muslhf", "mips-linux-muslhf"
-+    };
-+    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
-+    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
-+    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
-+    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
-+
-+    switch (TargetTriple.getArch()) {
-+    case llvm::Triple::aarch64:
-+      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
-+      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
-+      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
-+      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
-+      break;
-+    case llvm::Triple::arm:
-+      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
-+      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
-+        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
-+      } else {
-+        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
-+      }
-+      break;
-+    case llvm::Triple::x86_64:
-+      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-+      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
-+      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-+      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
-+      break;
-+    case llvm::Triple::x86:
-+      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-+      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
-+      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-+      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
-+      break;
-+    case llvm::Triple::mips:
-+      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
-+      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
-+      break;
-+    case llvm::Triple::ppc:
-+      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
-+      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
-+      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
-+      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
-+      break;
-+    case llvm::Triple::ppcle:
-+      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
-+      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
-+      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
-+      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
-+      break;
-+    case llvm::Triple::ppc64:
-+      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
-+      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
-+      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
-+      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
-+      break;
-+    case llvm::Triple::ppc64le:
-+      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
-+      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
-+      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
-+      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
-+      break;
-+    default:
-+      break;
-+    }
-+    TripleAliases.push_back(TargetTriple.str());
-+    if (TargetTriple.str() != BiarchTriple.str())
-+      BiarchTripleAliases.push_back(BiarchTriple.str());
-+    return;
-+  }
-+
-   // Android targets should not use GNU/Linux tools or libraries.
-   if (TargetTriple.isAndroid()) {
-     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
deleted file mode 100644
index 4ad6412d1e6c..000000000000
--- a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/clang/lib/Driver/ToolChains/Linux.cpp
-+++ b/clang/lib/Driver/ToolChains/Linux.cpp
-@@ -504,10 +504,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
-     Loader = "ld.so.1";
-     break;
-   case llvm::Triple::ppc64:
--    LibDir = "lib64";
--    Loader =
--        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
--    break;
-   case llvm::Triple::ppc64le:
-     LibDir = "lib64";
-     Loader =
diff --git a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
deleted file mode 100644
index 21fc8003c5f1..000000000000
--- a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
+++ /dev/null
@@ -1,48 +0,0 @@
---- a/clang/lib/Basic/Targets/PPC.h
-+++ b/clang/lib/Basic/Targets/PPC.h
-@@ -415,11 +415,10 @@ public:
-       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
-     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
-       DataLayout = "e-m:e-i64:64-n32:64";
--      ABI = "elfv2";
-     } else {
-       DataLayout = "E-m:e-i64:64-n32:64";
--      ABI = "elfv1";
-     }
-+    ABI = "elfv2";
- 
-     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
-       LongDoubleWidth = LongDoubleAlign = 64;
---- a/clang/lib/CodeGen/TargetInfo.cpp
-+++ b/clang/lib/CodeGen/TargetInfo.cpp
-@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
-       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
- 
-     if (Triple.isOSBinFormatELF()) {
--      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
--      if (getTarget().getABI() == "elfv2")
--        Kind = PPC64_SVR4_ABIInfo::ELFv2;
-+      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
-+      if (getTarget().getABI() == "elfv1")
-+        Kind = PPC64_SVR4_ABIInfo::ELFv1;
-       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
- 
-       return SetCGInfo(
---- a/clang/lib/Driver/ToolChains/Clang.cpp
-+++ b/clang/lib/Driver/ToolChains/Clang.cpp
-@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
-   const llvm::Triple &T = getToolChain().getTriple();
-   if (T.isOSBinFormatELF()) {
-     switch (getToolChain().getArch()) {
--    case llvm::Triple::ppc64: {
--      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
--          T.isOSOpenBSD() || T.isMusl())
--        ABIName = "elfv2";
--      else
--        ABIName = "elfv1";
--      break;
--    }
-+    case llvm::Triple::ppc64:
-     case llvm::Triple::ppc64le:
-       ABIName = "elfv2";
-       break;
diff --git a/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch b/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
deleted file mode 100644
index 893c059d7b8d..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp.orig
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-@@ -1799,7 +1799,7 @@
- 
- static bool Aarch64GetESR(ucontext_t *ucontext, u64 *esr) {
-   static const u32 kEsrMagic = 0x45535201;
--  u8 *aux = ucontext->uc_mcontext.__reserved;
-+  u8 *aux = reinterpret_cast<u8 *>(ucontext->uc_mcontext.__reserved);
-   while (true) {
-     _aarch64_ctx *ctx = (_aarch64_ctx *)aux;
-     if (ctx->size == 0) break;
diff --git a/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch b/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
deleted file mode 100644
index 35f16d24f340..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
+++ /dev/null
@@ -1,35 +0,0 @@
---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-@@ -74,6 +74,10 @@
- #include <sys/utsname.h>
- #endif
- 
-+#if SANITIZER_LINUX && defined(__powerpc__)
-+#include <asm/ptrace.h>
-+#endif
-+
- #if SANITIZER_LINUX && !SANITIZER_ANDROID
- #include <sys/personality.h>
- #endif
---- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
-@@ -92,7 +92,7 @@
- # include <utime.h>
- # include <sys/ptrace.h>
- #if defined(__mips64) || defined(__aarch64__) || defined(__arm__) || \
--    SANITIZER_RISCV64
-+    defined(__powerpc__) || SANITIZER_RISCV64
- #  include <asm/ptrace.h>
- #  ifdef __arm__
- typedef struct user_fpregs elf_fpregset_t;
---- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
-@@ -31,7 +31,7 @@
- #include <sys/types.h> // for pid_t
- #include <sys/uio.h> // for iovec
- #include <elf.h> // for NT_PRSTATUS
--#if (defined(__aarch64__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
-+#if (defined(__aarch64__) || defined(__powerpc__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
- // GLIBC 2.20+ sys/user does not include asm/ptrace.h
- # include <asm/ptrace.h>
- #endif
diff --git a/srcpkgs/llvm12/patches/compiler-rt-size_t.patch b/srcpkgs/llvm12/patches/compiler-rt-size_t.patch
deleted file mode 100644
index 2c63063a5e9e..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-size_t.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/compiler-rt/lib/fuzzer/FuzzerInterceptors.cpp.orig
-+++ b/compiler-rt/lib/fuzzer/FuzzerInterceptors.cpp
-@@ -25,6 +25,7 @@
-   }
- 
- #include <cassert>
-+#include <cstddef>
- #include <cstdint>
- #include <dlfcn.h> // for dlsym()
- 
diff --git a/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch b/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
deleted file mode 100644
index d0b61c80c897..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
+++ /dev/null
@@ -1,62 +0,0 @@
---- a/compiler-rt/lib/xray/xray_powerpc64.inc
-+++ b/compiler-rt/lib/xray/xray_powerpc64.inc
-@@ -12,7 +12,13 @@
- 
- #include <cstdint>
- #include <mutex>
-+#ifdef __GLIBC__
- #include <sys/platform/ppc.h>
-+#else
-+#include <cctype>
-+#include <cstring>
-+#include <cstdlib>
-+#endif
- 
- #include "xray_defs.h"
- 
-@@ -20,13 +26,45 @@ namespace __xray {
- 
- ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
-   CPU = 0;
-+#ifdef __GLIBC__
-   return __ppc_get_timebase();
-+#else
-+  return __builtin_ppc_get_timebase();
-+#endif
- }
- 
- inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
-   static std::mutex M;
-   std::lock_guard<std::mutex> Guard(M);
-+#ifdef __GLIBC__
-   return __ppc_get_timebase_freq();
-+#else
-+  /* FIXME: a less dirty implementation? */
-+  static uint64_t base;
-+  if (!base) {
-+    FILE *f = fopen("/proc/cpuinfo", "rb");
-+    if (f) {
-+      ssize_t nr;
-+      /* virtually always big enough to hold the line */
-+      char buf[512];
-+      while (fgets(buf, sizeof(buf), f)) {
-+        char *ret = strstr(buf, "timebase");
-+        if (!ret) {
-+          continue;
-+        }
-+        ret += sizeof("timebase") - 1;
-+        ret = strchr(ret, ':');
-+        if (!ret) {
-+          continue;
-+        }
-+        base = strtoul(ret + 1, nullptr, 10);
-+        break;
-+      }
-+      fclose(f);
-+    }
-+  }
-+  return base;
-+#endif
- }
- 
- inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
diff --git a/srcpkgs/llvm12/patches/libcxx-musl.patch b/srcpkgs/llvm12/patches/libcxx-musl.patch
deleted file mode 100644
index bbd31ffc2cb1..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-musl.patch
+++ /dev/null
@@ -1,26 +0,0 @@
---- a/libcxx/include/locale
-+++ b/libcxx/include/locale
-@@ -742,7 +742,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
-         typename remove_reference<decltype(errno)>::type __save_errno = errno;
-         errno = 0;
-         char *__p2;
-+#if defined(__linux__) && !defined(__GLIBC__)
-+        long long __ll = strtoll(__a, &__p2, __base);
-+#else
-         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
-+#endif
-         typename remove_reference<decltype(errno)>::type __current_errno = errno;
-         if (__current_errno == 0)
-             errno = __save_errno;
-@@ -782,7 +786,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
-         typename remove_reference<decltype(errno)>::type __save_errno = errno;
-         errno = 0;
-         char *__p2;
-+#if defined(__linux__) && !defined(__GLIBC__)
-+        unsigned long long __ll = strtoull(__a, &__p2, __base);
-+#else
-         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
-+#endif
-         typename remove_reference<decltype(errno)>::type __current_errno = errno;
-         if (__current_errno == 0)
-             errno = __save_errno;
diff --git a/srcpkgs/llvm12/patches/libcxx-ppc.patch b/srcpkgs/llvm12/patches/libcxx-ppc.patch
deleted file mode 100644
index 7a92f8004e1c..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-ppc.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-This ensures `is_iec559` is defined correctly under all long double ABIs,
-including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__`
-is not defined on gcc.
-
---- a/libcxx/include/limits
-+++ b/libcxx/include/limits
-@@ -426,8 +426,14 @@ protected:
-     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
-     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
- 
--#if (defined(__ppc__) || defined(__ppc64__))
-+#if defined(__powerpc__) || defined(__powerpc64__)
-+#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__)
-+    /* IEEE 754 quadruple or double precision */
-+    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
-+#else
-+    /* 128-bit IBM double-double */
-     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
-+#endif
- #else
-     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
- #endif
diff --git a/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch b/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
deleted file mode 100644
index 70292beb2fcd..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/libcxx/CMakeLists.txt
-+++ b/libcxx/CMakeLists.txt
-@@ -769,6 +769,8 @@ function(cxx_link_system_libraries target)
-     target_link_libraries(${target} PRIVATE atomic)
-   endif()
- 
-+#ssp  target_link_libraries(${target} PRIVATE ssp_nonshared)
-+
-   if (MINGW)
-     target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
-   endif()
diff --git a/srcpkgs/llvm12/patches/libcxxabi-dl.patch b/srcpkgs/llvm12/patches/libcxxabi-dl.patch
deleted file mode 100644
index 3a15f9db8c98..000000000000
--- a/srcpkgs/llvm12/patches/libcxxabi-dl.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-Also link to -ldl to prevent undefined references.
-
---- a/libcxxabi/src/CMakeLists.txt
-+++ b/libcxxabi/src/CMakeLists.txt
-@@ -73,6 +73,7 @@
-   endif()
- 
-   add_library_flags_if(LIBCXXABI_HAS_C_LIB c)
-+  add_library_flags_if(LIBCXXABI_HAS_C_LIB dl)
- endif()
- 
- if (LIBCXXABI_USE_LLVM_UNWINDER)
---- a/libcxx/CMakeLists.txt
-+++ b/libcxx/CMakeLists.txt
-@@ -745,6 +745,10 @@
-     target_link_libraries(${target} PRIVATE m)
-   endif()
- 
-+  if (LIBCXX_HAS_C_LIB)
-+    target_link_libraries(${target} PRIVATE dl)
-+  endif()
-+
-   if (LIBCXX_HAS_RT_LIB)
-     target_link_libraries(${target} PRIVATE rt)
-   endif()
diff --git a/srcpkgs/llvm12/patches/libunwind-ppc32.patch b/srcpkgs/llvm12/patches/libunwind-ppc32.patch
deleted file mode 100644
index 74aa7576ecf9..000000000000
--- a/srcpkgs/llvm12/patches/libunwind-ppc32.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-This fixes build at least with gcc9 which does not define `__ppc__`.
-
---- a/libunwind/include/__libunwind_config.h
-+++ b/libunwind/include/__libunwind_config.h
-@@ -49,7 +49,7 @@
- #  define _LIBUNWIND_CONTEXT_SIZE 167
- #  define _LIBUNWIND_CURSOR_SIZE 179
- #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64
--# elif defined(__ppc__)
-+# elif defined(__powerpc__)
- #  define _LIBUNWIND_TARGET_PPC 1
- #  define _LIBUNWIND_CONTEXT_SIZE 117
- #  define _LIBUNWIND_CURSOR_SIZE 124
---- a/libunwind/src/UnwindRegistersRestore.S
-+++ b/libunwind/src/UnwindRegistersRestore.S
-@@ -392,7 +392,7 @@ Lnovec:
-   PPC64_LR(3)
-   bctr
- 
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- 
- DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind13Registers_ppc6jumptoEv)
- //
---- a/libunwind/src/UnwindRegistersSave.S
-+++ b/libunwind/src/UnwindRegistersSave.S
-@@ -554,7 +554,7 @@ DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext)
-   blr
- 
- 
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- 
- //
- // extern int unw_getcontext(unw_context_t* thread_state)
---- a/libunwind/src/config.h
-+++ b/libunwind/src/config.h
-@@ -95,12 +95,12 @@
- #define _LIBUNWIND_BUILD_SJLJ_APIS
- #endif
- 
--#if defined(__i386__) || defined(__x86_64__) || defined(__ppc__) || defined(__ppc64__) || defined(__powerpc64__)
-+#if defined(__i386__) || defined(__x86_64__) || defined(__powerpc__) || defined(__powerpc64__)
- #define _LIBUNWIND_SUPPORT_FRAME_APIS
- #endif
- 
- #if defined(__i386__) || defined(__x86_64__) ||                                \
--    defined(__ppc__) || defined(__ppc64__) || defined(__powerpc64__) ||        \
-+    defined(__powerpc__) || defined(__powerpc64__) ||                          \
-     (!defined(__APPLE__) && defined(__arm__)) ||                               \
-     (defined(__arm64__) || defined(__aarch64__)) ||                            \
-     defined(__mips__)
---- a/libunwind/src/libunwind.cpp
-+++ b/libunwind/src/libunwind.cpp
-@@ -42,7 +42,7 @@ _LIBUNWIND_HIDDEN int __unw_init_local(unw_cursor_t *cursor,
- # define REGISTER_KIND Registers_x86_64
- #elif defined(__powerpc64__)
- # define REGISTER_KIND Registers_ppc64
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- # define REGISTER_KIND Registers_ppc
- #elif defined(__aarch64__)
- # define REGISTER_KIND Registers_arm64
diff --git a/srcpkgs/llvm12/patches/lldb-musl.patch b/srcpkgs/llvm12/patches/lldb-musl.patch
deleted file mode 100644
index 601c0d138523..000000000000
--- a/srcpkgs/llvm12/patches/lldb-musl.patch
+++ /dev/null
@@ -1,31 +0,0 @@
---- a/lldb/source/Plugins/Process/Linux/Procfs.h
-+++ b/lldb/source/Plugins/Process/Linux/Procfs.h
-@@ -10,21 +10,12 @@
- // sys/procfs.h on Android/Linux for all supported architectures.
- 
- #include <sys/ptrace.h>
-+#include <asm/ptrace.h>
- 
--#ifdef __ANDROID__
--#if defined(__arm64__) || defined(__aarch64__)
--typedef unsigned long elf_greg_t;
--typedef elf_greg_t
--    elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
--typedef struct user_fpsimd_state elf_fpregset_t;
--#ifndef NT_FPREGSET
--#define NT_FPREGSET NT_PRFPREG
--#endif // NT_FPREGSET
--#elif defined(__mips__)
--#ifndef NT_FPREGSET
--#define NT_FPREGSET NT_PRFPREG
--#endif // NT_FPREGSET
--#endif
--#else // __ANDROID__
-+#if !defined(__GLIBC__) && defined(__powerpc__)
-+#define pt_regs musl_pt_regs
-+#include <sys/procfs.h>
-+#undef pt_regs
-+#else
- #include <sys/procfs.h>
--#endif // __ANDROID__
-+#endif
diff --git a/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch b/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch
deleted file mode 100644
index 8e0a9a779d1b..000000000000
--- a/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-commit ba4ede595ff9599232f5dd2b4384c243137b53fc
-Author: Daniel Kolesa <daniel@octaforge.org>
-Date:   Tue Jun 22 23:40:54 2021 +0200
-
-    enable compiler-rt support for ppc32
-
-diff --git a/compiler-rt/cmake/base-config-ix.cmake b/compiler-rt/cmake/base-config-ix.cmake
-index 1edab43..5c0c8a2 100644
---- a/compiler-rt/cmake/base-config-ix.cmake
-+++ b/compiler-rt/cmake/base-config-ix.cmake
-@@ -182,9 +182,7 @@ macro(test_targets)
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc64le")
-       test_target_arch(powerpc64le "" "-m64")
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc")
--      if(CMAKE_SYSTEM_NAME MATCHES "AIX")
--        test_target_arch(powerpc "" "-m32")
--      endif()
-+      test_target_arch(powerpc "" "-m32")
-       test_target_arch(powerpc64 "" "-m64")
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "s390x")
-       test_target_arch(s390x "" "")
diff --git a/srcpkgs/llvm12/template b/srcpkgs/llvm12/template
index 7ce18028e4a3..7b361bbbf5bc 100644
--- a/srcpkgs/llvm12/template
+++ b/srcpkgs/llvm12/template
@@ -1,25 +1,17 @@
 # Template file for 'llvm12'
 pkgname=llvm12
 version=12.0.1
-revision=2
+revision=3
 wrksrc="llvm-project-${version}.src"
 build_wrksrc=llvm
 build_style=cmake
 configure_args="
  -DCMAKE_BUILD_TYPE=Release -Wno-dev
  -DENABLE_LINKER_BUILD_ID=YES
- -DLLDB_USE_SYSTEM_SIX=YES
- -DLIBCXX_CXX_ABI=libcxxabi
- -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
- -DLIBCXXABI_USE_LLVM_UNWINDER=YES
- -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
- -DLIBOMP_ENABLE_SHARED=YES
- -DLIBOMP_INSTALL_ALIASES=NO
  -DLLVM_INCLUDE_DOCS=YES
  -DLLVM_BUILD_DOCS=YES
  -DLLVM_ENABLE_SPHINX=YES
  -DSPHINX_WARNINGS_AS_ERRORS=NO
- -DLLVM_INSTALL_UTILS=YES
  -DLLVM_BUILD_LLVM_DYLIB=YES
  -DLLVM_LINK_LLVM_DYLIB=YES
  -DLLVM_ENABLE_RTTI=YES
@@ -51,87 +43,10 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
-_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
-
-_lldb_enable=yes
-_libomp_enable=no
-
-case "$XBPS_TARGET_MACHINE" in
-	ppc64le*) ;;
-	ppc*|i686*) _lldb_enable=no ;;
-esac
-
-case "$XBPS_TARGET_MACHINE" in
-	x86_64*|aarch64*|ppc64*) _libomp_enable=yes;;
-esac
-
-subpackages="clang-tools-extra"
-
-# must go before clang
-if [ "$_libomp_enable" = "yes" ]; then
-	_enabled_projects+=";openmp"
-	subpackages+=" libomp libomp-devel"
-	# because of cmake nonsense referencing libomptarget.so.*
-	depends+=" libomp>=${version}_${revision}"
-fi
-
-subpackages+=" clang clang-analyzer libclang libclang-cpp
- llvm-libunwind llvm-libunwind-devel libcxx libcxx-devel
- libcxxabi libcxxabi-devel libllvm12"
-
-if [ "$_lldb_enable" = "yes" ]; then
-	# XXX fails to cross compile due to python
-	_enabled_projects+=";lldb"
-	subpackages+=" lldb lldb-devel"
-fi
-
-subpackages+=" lld lld-devel"
-
-configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
-
 post_patch() {
-	if [ "$_lldb_enable" = "yes" ]; then
-		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
-			vsed -i 's|__ptrace_request|int|g' \
-				${wrksrc}/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
-		fi
-		# disable docs for lldb as they fail to generate
-		vsed -i '/add_subdirectory(docs)/d' \
-			${wrksrc}/lldb/CMakeLists.txt
-	fi
-
 	# update config.guess for better platform detection
 	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
 		${wrksrc}/llvm/cmake
-
-	# fix linker failures on some archs
-	vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
-		${wrksrc}/libcxxabi/cmake/config-ix.cmake
-	vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
-		${wrksrc}/libcxxabi/cmake/config-ix.cmake
-
-	# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
-	case "$XBPS_TARGET_MACHINE" in
-		ppc64*) ;;
-		ppc*-musl|i686-musl|mips*-musl)
-			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
-				${wrksrc}/libunwind/src/CMakeLists.txt
-			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
-				${wrksrc}/libcxxabi/src/CMakeLists.txt
-			vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
-			;;
-	esac
-
-	case "$XBPS_TARGET_MACHINE" in
-		x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
-			vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
-				${wrksrc}/compiler-rt/CMakeLists.txt
-			;;
-		arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
-			vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
-				${wrksrc}/compiler-rt/cmake/config-ix.cmake
-			;;
-	esac
 }
 
 pre_configure() {
@@ -158,10 +73,8 @@ pre_configure() {
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
 			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
 		make ${makejobs} -C utils/TableGen
-		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
 		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
-		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
 		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
 		cd ../..
 	fi
@@ -202,218 +115,6 @@ do_install() {
 	if [ "$CROSS_BUILD" ]; then
 		rm -f ${DESTDIR}/usr/bin/llvm-config-host
 	fi
-
-	# Install libcxxabi headers
-	vinstall ${wrksrc}/libcxxabi/include/__cxxabi_config.h 644 usr/include
-	vinstall ${wrksrc}/libcxxabi/include/cxxabi.h 644 usr/include
-
-	# Install libunwind headers
-	vinstall ${wrksrc}/libunwind/include/__libunwind_config.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/libunwind.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/unwind.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/mach-o/compact_unwind_encoding.h \
-		644 usr/include/mach-o
-}
-
-clang-analyzer_package() {
-	pycompile_dirs="usr/share/scan-view"
-	depends="clang-${version}_${revision} python3 perl"
-	short_desc+=" - A source code analysis framework"
-	homepage="https://clang-analyzer.llvm.org/"
-	pkg_install() {
-		vmove usr/share/man/man1/scan-build.1
-		vmove "/usr/bin/scan-*"
-		vmove "/usr/share/scan-*"
-		vmove "/usr/libexec/*analyzer"
-	}
-}
-
-clang-tools-extra_package() {
-	lib32disabled=yes
-	depends="clang-${version}_${revision} python3"
-	short_desc+=" - Extra Clang tools"
-	homepage="https://clang.llvm.org/extra/"
-	pkg_install() {
-		vmove usr/include/clang-tidy
-		vmove usr/bin/clang-apply-replacements
-		vmove usr/bin/clang-query
-		vmove usr/bin/clang-rename
-		vmove usr/bin/clang-tidy
-		vmove usr/bin/diagtool
-		vmove usr/bin/find-all-symbols
-		vmove usr/bin/hmaptool
-		vmove usr/bin/modularize
-		vmove usr/bin/pp-trace
-		vmove usr/bin/sancov
-		vmove "usr/lib/libclangApplyReplacements*"
-		vmove "usr/lib/libclangQuery*"
-		vmove "usr/lib/libclangTidy*"
-		vmove "usr/share/clang/*tidy*"
-		vmove usr/share/doc/clang-tools
-		vmove usr/share/man/man1/extraclangtools.1
-		vmove usr/share/man/man1/diagtool.1
-	}
-}
-
-clang_package() {
-	lib32disabled=yes
-	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
-	 libclang-${version}_${revision}"
-	short_desc+=" - C language family frontend"
-	homepage="https://clang.llvm.org/"
-	pkg_install() {
-		vmove usr/include/clang
-		vmove usr/include/clang-c
-		vmove "usr/bin/*clang*"
-		vmove usr/bin/c-index-test
-		vmove usr/lib/clang
-		vmove usr/lib/cmake/clang
-		vmove "usr/lib/libclang*.a"
-		vmove "usr/lib/libclang*.so"
-		vmove usr/share/clang
-		vmove usr/share/doc/clang
-		vmove usr/share/man/man1/clang.1
-	}
-}
-
-libclang_package() {
-	short_desc+=" - C frontend runtime library"
-	pkg_install() {
-		vmove "usr/lib/libclang.so.*"
-	}
-}
-
-libclang-cpp_package() {
-	short_desc+=" - C frontend runtime library (C++ interface)"
-	pkg_install() {
-		vmove "usr/lib/libclang-cpp.so.*"
-	}
-}
-
-lld_package() {
-	lib32disabled=yes
-	short_desc+=" - linker"
-	homepage="https://lld.llvm.org"
-	pkg_install() {
-		vmove usr/bin/lld*
-		vmove usr/bin/wasm-ld
-		vmove usr/bin/ld.lld*
-		vmove usr/bin/ld64.lld*
-		vmove usr/share/doc/lld
-	}
-}
-
-lld-devel_package() {
-	lib32disabled=yes
-	short_desc+=" - linker - development files"
-	homepage="https://lld.llvm.org"
-	depends="lld>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/include/lld
-		vmove usr/lib/cmake/lld
-		vmove "usr/lib/liblld*a"
-	}
-}
-
-lldb_package() {
-	lib32disabled=yes
-	depends+=" python3-six"
-	short_desc+=" - LLDB debugger"
-	homepage="https://lldb.llvm.org/"
-	pkg_install() {
-		vmove usr/bin/*lldb*
-		vmove usr/lib/liblldb*so.*
-		vmove /usr/lib/python*
-	}
-}
-
-lldb-devel_package() {
-	lib32disabled=yes
-	depends="lldb>=${version}_${revision}"
-	short_desc+=" - LLDB debugger - development files"
-	pkg_install() {
-		vmove usr/include/lldb
-		vmove "usr/lib/liblldb*.so"
-	}
-}
-
-llvm-libunwind_package() {
-	short_desc+=" - libunwind"
-	pkg_install() {
-		vmove "usr/lib/libunwind.so.*"
-	}
-}
-
-llvm-libunwind-devel_package() {
-	short_desc+=" - libunwind - development files"
-	depends="llvm-libunwind>=${version}_${revision}"
-	conflicts="libunwind-devel>=0"
-	pkg_install() {
-		vmove usr/lib/libunwind.so
-		vmove usr/lib/libunwind.a
-		vmove "usr/include/*unwind*"
-		vmove usr/include/mach-o
-		vmove usr/share/doc/libunwind
-	}
-}
-
-libcxxabi_package() {
-	short_desc+=" - low level support for libc++"
-	pkg_install() {
-		vmove "usr/lib/libc++abi.so.*"
-	}
-}
-
-libcxxabi-devel_package() {
-	short_desc+=" - low level support for libc++ - development files"
-	depends="libcxxabi>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/lib/libc++abi.so
-		vmove usr/lib/libc++abi.a
-		vmove "usr/include/*cxxabi*"
-	}
-}
-
-libcxx_package() {
-	short_desc+=" - C++ standard library"
-	pkg_install() {
-		vmove "usr/lib/libc++.so.*"
-	}
-}
-
-libcxx-devel_package() {
-	short_desc+=" - C++ standard library - development files"
-	depends="libcxx>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/lib/libc++.so
-		vmove usr/lib/libc++.a
-		vmove usr/lib/libc++experimental.a
-		vmove usr/include/c++
-		vmove usr/share/doc/libcxx
-	}
-}
-
-libomp_package() {
-	short_desc+=" - Clang OpenMP support library"
-	pkg_install() {
-		vmove usr/lib/libomp.so
-		vmove "usr/lib/libomptarget.rtl.*.so"
-		vmove usr/lib/libarcher.so
-		vmove "usr/lib/libomp*.so.*"
-	}
-}
-
-libomp-devel_package() {
-	short_desc+=" - Clang OpenMP support library - development files"
-	depends="libomp>=${version}_${revision}"
-	pkg_install() {
-		vmove "usr/lib/libomp*.so"
-		vmove "usr/lib/libarcher*"
-		vmove "usr/include/omp*.h"
-		vmove "usr/lib/clang/${version}/include/omp*.h"
-		vmove usr/share/man/man1/llvmopenmp.1
-		vmove usr/share/doc/openmp
-	}
 }
 
 libllvm12_package() {

From 7c9022bb1271fa68b24f4608f2665acac4618adb Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 04/26] chromium: update for llvm14

---
 srcpkgs/chromium/template | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/srcpkgs/chromium/template b/srcpkgs/chromium/template
index 0dce8772fdb8..8b604a349229 100644
--- a/srcpkgs/chromium/template
+++ b/srcpkgs/chromium/template
@@ -2,7 +2,7 @@
 pkgname=chromium
 # See https://chromiumdash.appspot.com/releases?platform=Linux for the latest version
 version=101.0.4951.41
-revision=1
+revision=2
 archs="i686* x86_64* aarch64* armv7l* ppc64le*"
 short_desc="Google's attempt at creating a safer, faster, and more stable browser"
 maintainer="Duncaen <duncaen@voidlinux.org>"
@@ -20,7 +20,7 @@ desc_option_debug="Build with debug symbols"
 desc_option_js_optimize="Optimize the JS used for Chromium's UI"
 desc_option_pipewire="Enable support for screen sharing for WebRTC via PipeWire"
 
-hostmakedepends="$(vopt_if clang "clang lld llvm12") python python3 pkgconf perl gperf bison ninja nodejs hwids
+hostmakedepends="$(vopt_if clang "clang lld llvm14") python python3 pkgconf perl gperf bison ninja nodejs hwids
  libatomic-devel libevent-devel libglib-devel $(vopt_if js_optimize openjdk) wayland-devel libepoxy-devel"
 makedepends="libpng-devel gtk+-devel gtk+3-devel nss-devel pciutils-devel
  libXi-devel libgcrypt-devel libgnome-keyring-devel cups-devel elfutils-devel
@@ -266,12 +266,6 @@ do_configure() {
 		'disable_fieldtrial_testing_config=true'
 
 		'is_official_build=true'
-
-		# segfaults with llvm-12.0.1
-		'is_cfi=false'
-		'use_thin_lto=false'
-		'use_cfi_icall=false'
-		'chrome_pgo_phase=0'
 	)
 
 	if [ "$CROSS_BUILD" ]; then

From 1b7a3aaf8207ce5711b414557f56a43e7b572acf Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 05/26] ghdl: update for llvm14

---
 srcpkgs/ghdl/patches/{llvm12.patch => llvm.patch} | 2 ++
 srcpkgs/ghdl/template                             | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)
 rename srcpkgs/ghdl/patches/{llvm12.patch => llvm.patch} (82%)

diff --git a/srcpkgs/ghdl/patches/llvm12.patch b/srcpkgs/ghdl/patches/llvm.patch
similarity index 82%
rename from srcpkgs/ghdl/patches/llvm12.patch
rename to srcpkgs/ghdl/patches/llvm.patch
index 8d2f76bfda06..9201816ae053 100644
--- a/srcpkgs/ghdl/patches/llvm12.patch
+++ b/srcpkgs/ghdl/patches/llvm.patch
@@ -7,6 +7,8 @@ index c1c1a6d..dad7c38 100755
         check_version 10.0 $llvm_version ||
         check_version 11.0 $llvm_version ||
 +       check_version 12.0 $llvm_version ||
++       check_version 13.0 $llvm_version ||
++       check_version 14.0 $llvm_version ||
         false; then
      echo "Debugging is enabled with llvm $llvm_version"
    else
diff --git a/srcpkgs/ghdl/template b/srcpkgs/ghdl/template
index e756d8c3cd87..9ca1169b22bd 100644
--- a/srcpkgs/ghdl/template
+++ b/srcpkgs/ghdl/template
@@ -7,7 +7,7 @@
 pkgname=ghdl
 reverts="20181129_1"
 version=1.0.0
-revision=1
+revision=2
 build_style=configure
 configure_args="--prefix=/usr --srcdir=.. --incdir=lib/ghdl/include"
 makedepends="zlib-devel"

From 48dfac4f244a5e54acc74115e28bb204c857e0ef Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 06/26] qt5: rebuild for llvm14

---
 srcpkgs/qt5/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index ee788fad2019..25f15583a42d 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -3,7 +3,7 @@ pkgname=qt5
 version=5.15.3+20220222
 # commit fcca82ca40a5d8a02a4ddd90846d070f2c58cfad
 # base repo: https://invent.kde.org/qt/qt/qt5
-revision=3
+revision=4
 build_style=meta
 hostmakedepends="cmake clang flex perl glib-devel pkg-config
  python re2c ruby which"

From 53294cbe5b85fbb9fdfda2fe2e713376744eb13a Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 07/26] tilix: rebuild for llvm14

---
 srcpkgs/tilix/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/tilix/template b/srcpkgs/tilix/template
index d8f014bc78c5..ac1bf7dd3bdd 100644
--- a/srcpkgs/tilix/template
+++ b/srcpkgs/tilix/template
@@ -1,7 +1,7 @@
 # Template file for 'tilix'
 pkgname=tilix
 version=1.9.4
-revision=3
+revision=4
 build_style=meson
 configure_args="-Db_lto=false"
 hostmakedepends="automake gettext-devel gdk-pixbuf glib-devel ldc po4a pkg-config

From eba71ea7547082828850474586266c9e2f6523cd Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 08/26] shiboken2: rebuild for llvm14

---
 srcpkgs/shiboken2/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/shiboken2/template b/srcpkgs/shiboken2/template
index b56613229c13..ab9d2c4cb8f9 100644
--- a/srcpkgs/shiboken2/template
+++ b/srcpkgs/shiboken2/template
@@ -1,7 +1,7 @@
 # Template file for 'shiboken2'
 pkgname=shiboken2
 version=5.15.2
-revision=4
+revision=5
 _pkgname="pyside-setup-opensource-src-${version}"
 wrksrc="${_pkgname/%5.14.2.1/5.14.2}"
 build_wrksrc="sources/shiboken2"

From 01f31250553d7e635d0f7228fd177a6e7aea0dbf Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 09/26] gnome-builder: rebuild for llvm14

---
 srcpkgs/gnome-builder/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/gnome-builder/template b/srcpkgs/gnome-builder/template
index 93559b21774f..5a5a51893ae8 100644
--- a/srcpkgs/gnome-builder/template
+++ b/srcpkgs/gnome-builder/template
@@ -1,7 +1,7 @@
 # Template file for 'gnome-builder'
 pkgname=gnome-builder
 version=41.3
-revision=1
+revision=2
 build_style=meson
 build_helper=qemu
 configure_args="-Dhelp=true -Dnetwork_tests=false"

From 56344602f96339444bfa7d8b6e9669036bf6ff22 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 10/26] bcc: rebuild for llvm14

---
 srcpkgs/bcc/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/bcc/template b/srcpkgs/bcc/template
index 54509b63d5a7..2cfa0a2977d0 100644
--- a/srcpkgs/bcc/template
+++ b/srcpkgs/bcc/template
@@ -1,7 +1,7 @@
 # Template file for 'bcc'
 pkgname=bcc
 version=0.24.0
-revision=1
+revision=2
 wrksrc="bcc"
 build_style=cmake
 configure_args="-DREVISION=${version} -DENABLE_LLVM_SHARED=1"

From 0f97631f352be89708a51b386d4c8ad81d0e86dd Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 11/26] mesa: rebuild for llvm14

---
 srcpkgs/mesa/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/mesa/template b/srcpkgs/mesa/template
index c90500de7416..8f08262fb135 100644
--- a/srcpkgs/mesa/template
+++ b/srcpkgs/mesa/template
@@ -1,7 +1,7 @@
 # Template file for 'mesa'
 pkgname=mesa
 version=21.3.7
-revision=1
+revision=2
 build_style=meson
 configure_args="-Dglvnd=true -Dshared-glapi=enabled -Dgbm=enabled -Degl=enabled
  -Dosmesa=true -Dgles1=enabled -Dgles2=enabled -Dglx=dri -Ddri3=enabled

From 7447ccbe3db14ae2be3619035ecb18ffe354e836 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 12/26] juCi++: rebuild for llvm14

---
 srcpkgs/juCi++/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/juCi++/template b/srcpkgs/juCi++/template
index 1a7604b44a00..5103324dec20 100644
--- a/srcpkgs/juCi++/template
+++ b/srcpkgs/juCi++/template
@@ -1,7 +1,7 @@
 # Template file for 'juCi++'
 pkgname=juCi++
 version=1.6.2
-revision=2
+revision=3
 _libclangmm_commit="b342f4dd6de4fe509a692a4b4fcfc7e24aae9590"
 _tiny_commit="c9c8bf810ddad8cd17882b9a9ee628a690e779f5"
 wrksrc="jucipp-v${version}"

From 9592b01322c02830a70c25e68cdb3882e43e9cb3 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 13/26] kdevelop: rebuild for llvm14

---
 srcpkgs/kdevelop/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/kdevelop/template b/srcpkgs/kdevelop/template
index 010185849d80..abf08c313071 100644
--- a/srcpkgs/kdevelop/template
+++ b/srcpkgs/kdevelop/template
@@ -1,7 +1,7 @@
 # Template file for 'kdevelop'
 pkgname=kdevelop
 version=21.12.3
-revision=1
+revision=2
 build_style=cmake
 configure_args="-DBUILD_TESTING=OFF"
 hostmakedepends="extra-cmake-modules qt5-qmake qt5-host-tools qt5-tools

From c369bc0a551cae932ad9090fc636f1cb947c4d90 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 14/26] codelite: rebuild for llvm14

---
 srcpkgs/codelite/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/codelite/template b/srcpkgs/codelite/template
index 3a993a2c0cfb..24e2c879dd45 100644
--- a/srcpkgs/codelite/template
+++ b/srcpkgs/codelite/template
@@ -1,7 +1,7 @@
 # Template file for 'codelite'
 pkgname=codelite
 version=15.0.6
-revision=1
+revision=2
 build_style=cmake
 build_helper=cmake-wxWidgets-gtk3
 configure_args="-DWITH_PCH=0 -DWITH_WX_CONFIG=wx-config-gtk3

From 1e3ec21e3e57bf89d1ce90ca7ee92653e6a6eb81 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 15/26] ccls: rebuild for llvm14

---
 srcpkgs/ccls/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/ccls/template b/srcpkgs/ccls/template
index fbb7c6847bc1..40aba3b55bfe 100644
--- a/srcpkgs/ccls/template
+++ b/srcpkgs/ccls/template
@@ -1,7 +1,7 @@
 # Template file for 'ccls'
 pkgname=ccls
 version=0.20210330
-revision=2
+revision=3
 build_style=cmake
 hostmakedepends="clang-tools-extra"
 makedepends="llvm ncurses-devel rapidjson zlib-devel clang-tools-extra"

From 75e8f23c0ff608d82c08e42d961fec261dd434e9 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 16/26] clazy: rebuild for llvm14

---
 srcpkgs/clazy/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/clazy/template b/srcpkgs/clazy/template
index 11f3bab55aef..f81de08ab836 100644
--- a/srcpkgs/clazy/template
+++ b/srcpkgs/clazy/template
@@ -1,7 +1,7 @@
 # Template file for 'clazy'
 pkgname=clazy
 version=1.11
-revision=1
+revision=2
 build_style=cmake
 build_helper=qemu
 hostmakedepends="llvm"

From 3199aae70c0b5099058505a55993295e6609d3fb Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 17/26] bpftrace: rebuild for llvm14

---
 srcpkgs/bpftrace/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/bpftrace/template b/srcpkgs/bpftrace/template
index 28ab3c626399..eb2480d2230e 100644
--- a/srcpkgs/bpftrace/template
+++ b/srcpkgs/bpftrace/template
@@ -1,7 +1,7 @@
 # Template file for 'bpftrace'
 pkgname=bpftrace
 version=0.14.1
-revision=1
+revision=2
 archs="x86_64* aarch64* ppc64*"
 build_style=cmake
 configure_args="-DBUILD_TESTING=OFF"  # needs root to run

From d7132dcc43dab1b4bc22231387e5ae6dfe95d8db Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 18/26] rtags: rebuild for llvm14

---
 srcpkgs/rtags/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/rtags/template b/srcpkgs/rtags/template
index b496a1b0e721..9b161e690d76 100644
--- a/srcpkgs/rtags/template
+++ b/srcpkgs/rtags/template
@@ -1,7 +1,7 @@
 # Template file for 'rtags'
 pkgname=rtags
 version=2.38
-revision=5
+revision=6
 build_style=cmake
 # Don't run tests in do_install, please.
 configure_args="-DSKIP_CTEST=TRUE"

From 04a9e53d7a15745352b24063ad69293436478912 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:07:19 +0200
Subject: [PATCH 19/26] beignet: remove package

---
 srcpkgs/beignet/patches/cl_uint.patch         |  22 -
 ...419a0008e38ef2d9d255d9e9c74e9fba084b.patch | 134 ---
 srcpkgs/beignet/patches/llvm06.patch          |  33 -
 srcpkgs/beignet/patches/llvm08.patch          |  56 --
 srcpkgs/beignet/patches/llvm09.patch          | 111 ---
 srcpkgs/beignet/patches/llvm10.patch          | 347 -------
 srcpkgs/beignet/patches/llvm11.patch          | 937 ------------------
 srcpkgs/beignet/patches/llvm12.patch          | 115 ---
 srcpkgs/beignet/patches/musl.patch            |  11 -
 srcpkgs/beignet/template                      |  22 -
 srcpkgs/beignet/update                        |   1 -
 srcpkgs/removed-packages/template             |   3 +-
 12 files changed, 2 insertions(+), 1790 deletions(-)
 delete mode 100644 srcpkgs/beignet/patches/cl_uint.patch
 delete mode 100644 srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm06.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm08.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm09.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm10.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm11.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm12.patch
 delete mode 100644 srcpkgs/beignet/patches/musl.patch
 delete mode 100644 srcpkgs/beignet/template
 delete mode 100644 srcpkgs/beignet/update

diff --git a/srcpkgs/beignet/patches/cl_uint.patch b/srcpkgs/beignet/patches/cl_uint.patch
deleted file mode 100644
index 86ba00f04e95..000000000000
--- a/srcpkgs/beignet/patches/cl_uint.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/src/cl_api_kernel.c	2017-09-22 10:05:22.000000000 +0200
-+++ b/src/cl_api_kernel.c	2020-03-24 18:27:40.186485887 +0100
-@@ -151,7 +151,7 @@
-         fixed_local_sz[0] = 16;
-         fixed_local_sz[1] = 1;
-       } else {
--        uint j, maxDimSize = 64 /* from 64? */, maxGroupSize = 256; //MAX_WORK_GROUP_SIZE may too large
-+        cl_uint j, maxDimSize = 64 /* from 64? */, maxGroupSize = 256; //MAX_WORK_GROUP_SIZE may too large
-         size_t realGroupSize = 1;
-         for (i = 0; i < work_dim; i++) {
-           for (j = maxDimSize; j > 1; j--) {
---- a/src/cl_enqueue.c	2017-09-22 10:05:22.000000000 +0200
-+++ b/src/cl_enqueue.c	2020-03-24 18:30:12.031479833 +0100
-@@ -494,7 +494,7 @@
- cl_int cl_enqueue_svm_free(enqueue_data *data, cl_int status) {
-   int i;
-   void **pointers = data->pointers;
--  uint num_svm_ptrs = data->size;
-+  cl_uint num_svm_ptrs = data->size;
-   cl_int err = CL_SUCCESS;
- 
-   if (status != CL_COMPLETE)
diff --git a/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch b/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
deleted file mode 100644
index 8de9e6e2f093..000000000000
--- a/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
+++ /dev/null
@@ -1,134 +0,0 @@
-From e1b2419a0008e38ef2d9d255d9e9c74e9fba084b Mon Sep 17 00:00:00 2001
-From: "Rebecca N. Palmer" <rebecca_palmer@zoho.com>
-Date: Sat, 21 Jul 2018 20:05:54 +0100
-Subject: Add preliminary LLVM 7 support
-
-This is preliminary because LLVM 7 has not been released yet:
-it was tested with the snapshot from Debian experimental (svn336894).
-
-1.Change linking order, as clangCodeGen now links to clangFrontend
-2.Pass references not pointers to WriteBitcodeToFile and CloneModule
-3.Add the headers that LoopSimplifyID, LCSSAID and
-some create*Pass have moved to
-4.Define our DEBUG whether or not we just undefined LLVM's
-(theirs is now LLVM_DEBUG, but we never actually use it)
-
-Signed-off-by: Rebecca N. Palmer <rebecca_palmer@zoho.com>
-Reviewed-by: Yang Rong <rong.r.yang@intel.com>
----
- CMake/FindLLVM.cmake                     | 2 +-
- backend/src/backend/gen_program.cpp      | 8 ++++++++
- backend/src/backend/program.cpp          | 4 ++++
- backend/src/llvm/ExpandLargeIntegers.cpp | 2 +-
- backend/src/llvm/llvm_bitcode_link.cpp   | 4 ++++
- backend/src/llvm/llvm_includes.hpp       | 4 ++++
- 6 files changed, 22 insertions(+), 2 deletions(-)
-
-diff --git a/CMake/FindLLVM.cmake b/CMake/FindLLVM.cmake
-index 5457f24..f882589 100644
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -113,10 +113,10 @@ macro(add_one_lib name)
- endmacro()
- 
- #Assume clang lib path same as llvm lib path
-+add_one_lib("clangCodeGen")
- add_one_lib("clangFrontend")
- add_one_lib("clangSerialization")
- add_one_lib("clangDriver")
--add_one_lib("clangCodeGen")
- add_one_lib("clangSema")
- add_one_lib("clangStaticAnalyzerFrontend")
- add_one_lib("clangStaticAnalyzerCheckers")
-diff --git a/backend/src/backend/gen_program.cpp b/backend/src/backend/gen_program.cpp
-index 274c99c..4159234 100644
---- a/backend/src/backend/gen_program.cpp
-+++ b/backend/src/backend/gen_program.cpp
-@@ -454,7 +454,11 @@ namespace gbe {
- #ifdef GBE_COMPILER_AVAILABLE
-       std::string str;
-       llvm::raw_string_ostream OS(str);
-+#if LLVM_VERSION_MAJOR >= 7
-+      llvm::WriteBitcodeToFile(*((llvm::Module*)prog->module), OS);
-+#else
-       llvm::WriteBitcodeToFile((llvm::Module*)prog->module, OS);
-+#endif
-       std::string& bin_str = OS.str();
-       int llsz = bin_str.size();
-       *binary = (char *)malloc(sizeof(char) * (llsz+1) );
-@@ -545,7 +549,11 @@ namespace gbe {
-                                     &modRef);
-         src = llvm::unwrap(modRef);
-       }
-+#if LLVM_VERSION_MAJOR >= 7
-+      llvm::Module* clone = llvm::CloneModule(*src).release();
-+#else
-       llvm::Module* clone = llvm::CloneModule(src).release();
-+#endif
-       if (LLVMLinkModules2(wrap(dst), wrap(clone))) {
- #elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-       if (LLVMLinkModules(wrap(dst), wrap(src), LLVMLinkerPreserveSource_Removed, &errMsg)) {
-diff --git a/backend/src/backend/program.cpp b/backend/src/backend/program.cpp
-index c37c595..b36f7b4 100644
---- a/backend/src/backend/program.cpp
-+++ b/backend/src/backend/program.cpp
-@@ -794,7 +794,11 @@ namespace gbe {
-       llvm::raw_fd_ostream ostream (dumpSPIRBinaryName.c_str(),
-                                     err, llvm::sys::fs::F_None);
-       if (!err)
-+#if LLVM_VERSION_MAJOR<7
-         llvm::WriteBitcodeToFile(*out_module, ostream);
-+#else
-+        llvm::WriteBitcodeToFile(**out_module, ostream);
-+#endif
-     }
- #endif
-     return true;
-diff --git a/backend/src/llvm/ExpandLargeIntegers.cpp b/backend/src/llvm/ExpandLargeIntegers.cpp
-index 8515dc1..4aec44e 100644
---- a/backend/src/llvm/ExpandLargeIntegers.cpp
-+++ b/backend/src/llvm/ExpandLargeIntegers.cpp
-@@ -99,8 +99,8 @@ using namespace llvm;
- 
- #ifdef DEBUG
-   #undef DEBUG
--  #define DEBUG(...)
- #endif
-+#define DEBUG(...)
- // Break instructions up into no larger than 64-bit chunks.
- static const unsigned kChunkBits = 64;
- static const unsigned kChunkBytes = kChunkBits / CHAR_BIT;
-diff --git a/backend/src/llvm/llvm_bitcode_link.cpp b/backend/src/llvm/llvm_bitcode_link.cpp
-index ef56e4c..4c3e20e 100644
---- a/backend/src/llvm/llvm_bitcode_link.cpp
-+++ b/backend/src/llvm/llvm_bitcode_link.cpp
-@@ -340,7 +340,11 @@ namespace gbe
-     /* We use beignet's bitcode as dst because it will have a lot of
-        lazy functions which will not be loaded. */
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 39
-+#if LLVM_VERSION_MAJOR >= 7
-+    llvm::Module * linked_module = llvm::CloneModule(*(llvm::Module*)mod).release();
-+#else
-     llvm::Module * linked_module = llvm::CloneModule((llvm::Module*)mod).release();
-+#endif
-     if(LLVMLinkModules2(wrap(clonedLib), wrap(linked_module))) {
- #else
-     char* errorMsg;
-diff --git a/backend/src/llvm/llvm_includes.hpp b/backend/src/llvm/llvm_includes.hpp
-index 184553a..ffccf02 100644
---- a/backend/src/llvm/llvm_includes.hpp
-+++ b/backend/src/llvm/llvm_includes.hpp
-@@ -89,6 +89,10 @@
- #include "llvm/CodeGen/IntrinsicLowering.h"
- 
- #include "llvm/Transforms/Scalar.h"
-+#if LLVM_VERSION_MAJOR >= 7
-+#include "llvm/Transforms/Utils.h"
-+#include "llvm/Transforms/InstCombine/InstCombine.h"
-+#endif
- #include "llvm/MC/MCAsmInfo.h"
- #include "llvm/MC/MCContext.h"
- #include "llvm/MC/MCInstrInfo.h"
--- 
-cgit v1.1
-
diff --git a/srcpkgs/beignet/patches/llvm06.patch b/srcpkgs/beignet/patches/llvm06.patch
deleted file mode 100644
index 3389e66c82df..000000000000
--- a/srcpkgs/beignet/patches/llvm06.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-Source: Arch Linux
-Upstream: unknown
-Reason: fixes llvm6 compilation
-
---- a/backend/src/llvm/llvm_to_gen.cpp	2017-10-24 09:04:48.000000000 +0300
-+++ b/backend/src/llvm/llvm_to_gen.cpp	2018-03-16 16:08:54.669963824 +0200
-@@ -322,7 +322,11 @@ namespace gbe
-     DataLayout DL(&mod);
-     
-     gbeDiagnosticContext dc;
-+#if LLVM_VERSION_MAJOR >= 6
-+    mod.getContext().setDiagnosticHandlerCallBack(&gbeDiagnosticHandler,&dc);
-+#else
-     mod.getContext().setDiagnosticHandler(&gbeDiagnosticHandler,&dc);
-+#endif
- 
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-     mod.setDataLayout(DL);
---- a/backend/src/llvm/llvm_unroll.cpp	2017-10-24 09:04:48.000000000 +0300
-+++ b/backend/src/llvm/llvm_unroll.cpp	2018-03-16 16:09:47.736403557 +0200
-@@ -205,7 +205,9 @@ namespace gbe {
-           if (parentTripCount != 0 && currTripCount * parentTripCount > 32) {
-             //Don't change the unrollID if doesn't force unroll.
-             //setUnrollID(parentL, false);
--#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-+#if LLVM_VERSION_MAJOR >= 6
-+            loopInfo.erase(parentL);
-+#elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-             loopInfo.markAsRemoved(parentL);
- #else
-             LPM.deleteLoopFromQueue(parentL);
-Only in Beignet-1.3.2-Source: build
-
diff --git a/srcpkgs/beignet/patches/llvm08.patch b/srcpkgs/beignet/patches/llvm08.patch
deleted file mode 100644
index a0c5e7a7c4f7..000000000000
--- a/srcpkgs/beignet/patches/llvm08.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 75c152599a7c1739e6dadcdb9b377acf7e44d9cf Mon Sep 17 00:00:00 2001
-From: Jan Beich <jbeich@FreeBSD.org>
-Date: Wed, 30 Jan 2019 12:42:34 +0000
-Subject: [PATCH] lang/beignet: unbreak with llvm80
-
-Regressed by https://github.com/llvm/llvm-project/commit/721d95713a9e
-
-unable to load /usr/local/lib/beignet//libgbeinterp.so which is part of the driver, please check!
-ld-elf.so.1: /usr/local/lib/beignet//libgbeinterp.so: Undefined symbol "_ZN4llvm24DisableABIBreakingChecksE"
-
-Regressed by https://github.com/llvm/llvm-project/commit/4a2d58e16acc
-
-backend/src/llvm/llvm_gen_backend.cpp:3076:5: error:
-      unknown type name 'TerminatorInst'
-    TerminatorInst *term = bb->getTerminator();
-    ^
-backend/src/llvm/llvm_gen_backend.cpp:3083:5: error:
-      unknown type name 'TerminatorInst'
-    TerminatorInst *term = bb->getTerminator();
-    ^
-
---- a/backend/src/CMakeLists.txt	2017-09-22 08:05:22 UTC
-+++ b/backend/src/CMakeLists.txt
-@@ -168,6 +168,7 @@ add_dependencies(gbe beignet_bitcode)
- endif (NOT (USE_STANDALONE_GBE_COMPILER STREQUAL "true"))
- 
- add_library(gbeinterp SHARED gbe_bin_interpreter.cpp)
-+target_link_libraries(gbeinterp ${LLVM_MODULE_LIBS})
- 
- if (LLVM_VERSION_NODOT VERSION_EQUAL 34)
-   find_library(TERMINFO NAMES tinfo ncurses)
---- a/backend/src/llvm/llvm_gen_backend.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -3073,14 +3073,22 @@ namespace gbe
- 
- 
-   static unsigned getChildNo(BasicBlock *bb) {
-+#if LLVM_VERSION_MAJOR < 8
-     TerminatorInst *term = bb->getTerminator();
-+#else
-+    Instruction *term = bb->getTerminator();
-+#endif
-     return term->getNumSuccessors();
-   }
- 
-   // return NULL if index out-range of children number
-   static BasicBlock *getChildPossible(BasicBlock *bb, unsigned index) {
- 
-+#if LLVM_VERSION_MAJOR < 8
-     TerminatorInst *term = bb->getTerminator();
-+#else
-+    Instruction *term = bb->getTerminator();
-+#endif
-     unsigned childNo = term->getNumSuccessors();
-     BasicBlock *child = NULL;
-     if(index < childNo) {
diff --git a/srcpkgs/beignet/patches/llvm09.patch b/srcpkgs/beignet/patches/llvm09.patch
deleted file mode 100644
index acaeceabb6dd..000000000000
--- a/srcpkgs/beignet/patches/llvm09.patch
+++ /dev/null
@@ -1,111 +0,0 @@
-Source: FreeBSD + q66
-
-Mostly FreeBSD other than FindLLVM.cmake changes.
-Linking against clang-cpp does not work for us.
-
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -140,6 +140,7 @@ add_one_lib("clangStaticAnalyzerCore")
- add_one_lib("clangAnalysis")
- add_one_lib("clangEdit")
- add_one_lib("clangAST")
-+add_one_lib("clangASTMatchers")
- add_one_lib("clangParse")
- add_one_lib("clangSema")
- add_one_lib("clangLex")
---- a/backend/src/llvm/llvm_intrinsic_lowering.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_intrinsic_lowering.cpp
-@@ -77,7 +77,11 @@ namespace gbe {
-         std::vector<Type *> ParamTys;
-         for (Value** I = ArgBegin; I != ArgEnd; ++I)
-           ParamTys.push_back((*I)->getType());
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+        FunctionCallee FCache = M->getOrInsertFunction(NewFn,
-+#else
-         Constant* FCache = M->getOrInsertFunction(NewFn,
-+#endif
-                                         FunctionType::get(RetTy, ParamTys, false));
- 
-         IRBuilder<> Builder(CI->getParent(), BasicBlock::iterator(CI));
---- a/backend/src/llvm/llvm_sampler_fix.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp
-@@ -82,7 +82,11 @@ namespace gbe {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-           Module *M = I->getParent()->getParent()->getParent();
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+          FunctionCallee samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#endif
- #else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType(), nullptr);
- #endif
-@@ -124,7 +128,11 @@ namespace gbe {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-           Module *M = I->getParent()->getParent()->getParent();
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+          FunctionCallee samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#endif
- #else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType(), nullptr);
- #endif
---- a/backend/src/llvm/llvm_profiling.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_profiling.cpp
-@@ -163,10 +163,18 @@ namespace gbe
-       // __gen_ocl_store_timestamp(int nth, int type);
-       Value *Args[2] = {ConstantInt::get(intTy, pointNum++), ConstantInt::get(intTy, profilingType)};
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+      builder->CreateCall(module->getOrInsertFunction(
-+#else
-       builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-+#endif
-               "__gen_ocl_calc_timestamp", Type::getVoidTy(module->getContext()),
-               IntegerType::getInt32Ty(module->getContext()),
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+              IntegerType::getInt32Ty(module->getContext())),
-+#else
-               IntegerType::getInt32Ty(module->getContext()))),
-+#endif
-               ArrayRef<Value*>(Args));
- #else
-       builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-@@ -185,10 +193,18 @@ namespace gbe
-     Value *Args2[2] = {profilingBuf, ConstantInt::get(intTy, profilingType)};
- 
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+    builder->CreateCall(module->getOrInsertFunction(
-+#else
-     builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-+#endif
-             "__gen_ocl_store_profiling", Type::getVoidTy(module->getContext()),
-             ptrTy,
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+            IntegerType::getInt32Ty(module->getContext())),
-+#else
-             IntegerType::getInt32Ty(module->getContext()))),
-+#endif
-             ArrayRef<Value*>(Args2));
- #else
-     builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
---- a/backend/src/llvm/llvm_device_enqueue.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_device_enqueue.cpp
-@@ -398,8 +398,13 @@ namespace gbe {
-               std::vector<Type *> ParamTys;
-               for (Value** iter = args.begin(); iter != args.end(); ++iter)
-                 ParamTys.push_back((*iter)->getType());
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+              CallInst* newCI = builder.CreateCall(mod->getOrInsertFunction(
-+                              "__gen_enqueue_kernel_slm", FunctionType::get(intTy, ParamTys, false)), args);
-+#else
-               CallInst* newCI = builder.CreateCall(cast<llvm::Function>(mod->getOrInsertFunction(
-                               "__gen_enqueue_kernel_slm", FunctionType::get(intTy, ParamTys, false))), args);
-+#endif
-               CI->replaceAllUsesWith(newCI);
-               deadInsnSet.insert(CI);
-             }
diff --git a/srcpkgs/beignet/patches/llvm10.patch b/srcpkgs/beignet/patches/llvm10.patch
deleted file mode 100644
index 8aafe48a240d..000000000000
--- a/srcpkgs/beignet/patches/llvm10.patch
+++ /dev/null
@@ -1,347 +0,0 @@
-diff --git CMake/FindLLVM.cmake CMake/FindLLVM.cmake
-index 0a59e47..6e90923 100644
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -104,28 +104,16 @@ string(REGEX REPLACE " *\n" "" LLVM_SYSTEM_LIBS ${LLVM_SYSTEM_LIBS_ORIG})
- endif (LLVM_SYSTEM_LIBS_ORIG)
- endif (LLVM_VERSION_NODOT VERSION_GREATER 34)
- 
-+#something harmless because whitespace at start is an error
-+set(CLANG_LIBRARIES "-ldl")
- macro(add_one_lib name)
-   FIND_LIBRARY(CLANG_LIB
-     NAMES ${name}
-     PATHS ${LLVM_LIBRARY_DIR} NO_DEFAULT_PATH)
--  set(CLANG_LIBRARIES ${CLANG_LIBRARIES} ${CLANG_LIB})
-+  set(CLANG_LIBRARIES "${CLANG_LIBRARIES} ${CLANG_LIB}")
-+  message(STATUS "clanglibs name ${name} this ${CLANG_LIB} all ${CLANG_LIBRARIES} ")
- 	unset(CLANG_LIB CACHE)
- endmacro()
- 
- #Assume clang lib path same as llvm lib path
--add_one_lib("clangCodeGen")
--add_one_lib("clangFrontend")
--add_one_lib("clangSerialization")
--add_one_lib("clangDriver")
--add_one_lib("clangSema")
--add_one_lib("clangStaticAnalyzerFrontend")
--add_one_lib("clangStaticAnalyzerCheckers")
--add_one_lib("clangStaticAnalyzerCore")
--add_one_lib("clangAnalysis")
--add_one_lib("clangEdit")
--add_one_lib("clangAST")
--add_one_lib("clangASTMatchers")
--add_one_lib("clangParse")
--add_one_lib("clangSema")
--add_one_lib("clangLex")
--add_one_lib("clangBasic")
-+add_one_lib("clang-cpp")
-diff --git CMakeLists.txt CMakeLists.txt
-index c11acbb..08f427d 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -79,7 +79,7 @@ elseif (COMPILER STREQUAL "CLANG")
- elseif (COMPILER STREQUAL "ICC")
-   set (CMAKE_C_CXX_FLAGS "${CMAKE_C_CXX_FLAGS}  -wd2928 -Wall -fPIC -fstrict-aliasing -fp-model fast -msse4.1 -Wl,-E")
- endif ()
--set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
-+set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof")
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
- set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
- set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
-diff --git backend/src/backend/program.cpp backend/src/backend/program.cpp
-index b36f7b4..e666031 100644
---- a/backend/src/backend/program.cpp
-+++ b/backend/src/backend/program.cpp
-@@ -694,9 +694,9 @@ namespace gbe {
- #endif
-                 );
- 
-+    llvm::cl::ResetAllOptionOccurrences();
-     clang::CompilerInvocation::CreateFromArgs(*CI,
--                                              &args[0],
--                                              &args[0] + args.size(),
-+                                              clang::ArrayRef<const char*>(args),
-                                               Diags);
-     // Create the compiler instance
-     clang::CompilerInstance Clang;
-@@ -1242,8 +1242,7 @@ EXTEND_QUOTE:
-       // Create the compiler invocation
-       std::unique_ptr<clang::CompilerInvocation> CI(new clang::CompilerInvocation);
-       return clang::CompilerInvocation::CreateFromArgs(*CI,
--                                                       &args[0],
--                                                       &args[0] + args.size(),
-+                                                       clang::ArrayRef<const char*>(args),
-                                                        Diags);
-     }
- #endif
-diff --git backend/src/llvm/llvm_gen_backend.cpp backend/src/llvm/llvm_gen_backend.cpp
-index c6fc30d..82441d8 100644
---- a/backend/src/llvm/llvm_gen_backend.cpp
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -575,10 +575,12 @@ namespace gbe
-         has_errors(false),
-         legacyMode(true)
-     {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-       initializeLoopInfoWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeLoopInfoPass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-       pass = PASS_EMIT_REGISTERS;
-     }
-diff --git backend/src/llvm/llvm_gen_backend.hpp backend/src/llvm/llvm_gen_backend.hpp
-index b4715b1..8e74f7a 100644
---- a/backend/src/llvm/llvm_gen_backend.hpp
-+++ b/backend/src/llvm/llvm_gen_backend.hpp
-@@ -130,10 +130,10 @@ namespace gbe
-   llvm::FunctionPass *createGenPass(ir::Unit &unit);
- 
-   /*! Remove the GEP instructions */
--  llvm::BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit);
-+  llvm::FunctionPass *createRemoveGEPPass(const ir::Unit &unit);
- 
-   /*! Merge load/store if possible */
--  llvm::BasicBlockPass *createLoadStoreOptimizationPass();
-+  llvm::FunctionPass *createLoadStoreOptimizationPass();
- 
-   /*! Scalarize all vector op instructions */
-   llvm::FunctionPass* createScalarizePass();
-@@ -141,7 +141,7 @@ namespace gbe
-   llvm::ModulePass* createBarrierNodupPass(bool);
- 
-   /*! Convert the Intrinsic call to gen function */
--  llvm::BasicBlockPass *createIntrinsicLoweringPass();
-+  llvm::FunctionPass *createIntrinsicLoweringPass();
- 
-   /*! Passer the printf function call. */
-   llvm::FunctionPass* createPrintfParserPass(ir::Unit &unit);
-diff --git backend/src/llvm/llvm_intrinsic_lowering.cpp backend/src/llvm/llvm_intrinsic_lowering.cpp
-index 94f0ce6..b5539e9 100644
---- a/backend/src/llvm/llvm_intrinsic_lowering.cpp
-+++ b/backend/src/llvm/llvm_intrinsic_lowering.cpp
-@@ -29,12 +29,12 @@
- using namespace llvm;
- 
- namespace gbe {
--    class InstrinsicLowering : public BasicBlockPass
-+    class InstrinsicLowering : public FunctionPass
-     {
-     public:
-       static char ID;
-       InstrinsicLowering() :
--        BasicBlockPass(ID) {}
-+        FunctionPass(ID) {}
- 
-       void getAnalysisUsage(AnalysisUsage &AU) const {
- 
-@@ -93,9 +93,9 @@ namespace gbe {
-         CI->eraseFromParent();
-         return NewCI;
-       }
--      virtual bool runOnBasicBlock(BasicBlock &BB)
-+      virtual bool runOnFunction(Function &F)
-       {
--        bool changedBlock = false;
-+        for (BasicBlock &BB : F) {
-         Module *M = BB.getParent()->getParent();
- 
-         DataLayout TD(M);
-@@ -159,13 +159,14 @@ namespace gbe {
-             }
-           }
-         }
--        return changedBlock;
-+        }
-+        return true;
-       }
-     };
- 
-     char InstrinsicLowering::ID = 0;
- 
--    BasicBlockPass *createIntrinsicLoweringPass() {
-+    FunctionPass *createIntrinsicLoweringPass() {
-       return new InstrinsicLowering();
-     }
- } // end namespace
-diff --git backend/src/llvm/llvm_loadstore_optimization.cpp backend/src/llvm/llvm_loadstore_optimization.cpp
-index 5aa38be..e314302 100644
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
-@@ -26,13 +26,13 @@
- 
- using namespace llvm;
- namespace gbe {
--  class GenLoadStoreOptimization : public BasicBlockPass {
-+  class GenLoadStoreOptimization : public FunctionPass {
- 
-   public:
-     static char ID;
-     ScalarEvolution *SE;
-     const DataLayout *TD;
--    GenLoadStoreOptimization() : BasicBlockPass(ID) {}
-+    GenLoadStoreOptimization() : FunctionPass(ID) {}
- 
-     void getAnalysisUsage(AnalysisUsage &AU) const {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-@@ -45,7 +45,9 @@ namespace gbe {
-       AU.setPreservesCFG();
-     }
- 
--    virtual bool runOnBasicBlock(BasicBlock &BB) {
-+    virtual bool runOnFunction(Function &F) {
-+        bool changedAnyBlock = false;
-+        for (BasicBlock &BB : F) {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-       SE = &getAnalysis<ScalarEvolutionWrapperPass>().getSE();
- #else
-@@ -59,7 +61,9 @@ namespace gbe {
-       #else
-         TD = getAnalysisIfAvailable<DataLayout>();
-       #endif
--      return optimizeLoadStore(BB);
-+           changedAnyBlock = optimizeLoadStore(BB) | changedAnyBlock;
-+        }
-+        return changedAnyBlock;
-     }
-     Type    *getValueType(Value *insn);
-     Value   *getPointerOperand(Value *I);
-@@ -148,7 +152,7 @@ namespace gbe {
-       values.push_back(merged[i]);
-     }
-     LoadInst *ld = cast<LoadInst>(merged[0]);
--    unsigned align = ld->getAlignment();
-+    MaybeAlign align = ld->getAlign();
-     unsigned addrSpace = ld->getPointerAddressSpace();
-     // insert before first load
-     Builder.SetInsertPoint(ld);
-@@ -231,7 +235,7 @@ namespace gbe {
- 
-     unsigned addrSpace = st->getPointerAddressSpace();
- 
--    unsigned align = st->getAlignment();
-+    MaybeAlign align = st->getAlign();
-     // insert before the last store
-     Builder.SetInsertPoint(merged[size-1]);
- 
-@@ -325,7 +329,7 @@ namespace gbe {
-     return changed;
-   }
- 
--  BasicBlockPass *createLoadStoreOptimizationPass() {
-+  FunctionPass *createLoadStoreOptimizationPass() {
-     return new GenLoadStoreOptimization();
-   }
- };
-diff --git backend/src/llvm/llvm_passes.cpp backend/src/llvm/llvm_passes.cpp
-index 10752a3..b8f2282 100644
---- a/backend/src/llvm/llvm_passes.cpp
-+++ b/backend/src/llvm/llvm_passes.cpp
-@@ -37,7 +37,7 @@
- #include "sys/map.hpp"
- 
- using namespace llvm;
--
-+template class cfg::Update<BasicBlock *>;
- namespace gbe
- {
-   bool isKernelFunction(const llvm::Function &F) {
-@@ -219,13 +219,13 @@ namespace gbe
-     return offset;
-   }
- 
--  class GenRemoveGEPPasss : public BasicBlockPass
-+  class GenRemoveGEPPasss : public FunctionPass
-   {
- 
-    public:
-     static char ID;
-     GenRemoveGEPPasss(const ir::Unit &unit) :
--      BasicBlockPass(ID),
-+      FunctionPass(ID),
-       unit(unit) {}
-     const ir::Unit &unit;
-     void getAnalysisUsage(AnalysisUsage &AU) const {
-@@ -242,16 +242,18 @@ namespace gbe
- 
-     bool simplifyGEPInstructions(GetElementPtrInst* GEPInst);
- 
--    virtual bool runOnBasicBlock(BasicBlock &BB)
-+    virtual bool runOnFunction(Function &F)
-     {
--      bool changedBlock = false;
-+      bool changedAnyBlock = false;
-+        for (BasicBlock &BB : F) {
-       iplist<Instruction>::iterator I = BB.getInstList().begin();
-       for (auto nextI = I, E = --BB.getInstList().end(); I != E; I = nextI) {
-         iplist<Instruction>::iterator I = nextI++;
-         if(GetElementPtrInst* gep = dyn_cast<GetElementPtrInst>(&*I))
--          changedBlock = (simplifyGEPInstructions(gep) || changedBlock);
-+          changedAnyBlock = (simplifyGEPInstructions(gep) | changedAnyBlock);
-       }
--      return changedBlock;
-+        }
-+      return changedAnyBlock;
-     }
-   };
- 
-@@ -367,7 +369,7 @@ namespace gbe
-     return true;
-   }
- 
--  BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit) {
-+  FunctionPass *createRemoveGEPPass(const ir::Unit &unit) {
-     return new GenRemoveGEPPasss(unit);
-   }
- } /* namespace gbe */
-diff --git backend/src/llvm/llvm_sampler_fix.cpp backend/src/llvm/llvm_sampler_fix.cpp
-index 2a097c8..863be6d 100644
---- a/backend/src/llvm/llvm_sampler_fix.cpp
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp
-@@ -33,10 +33,12 @@ namespace gbe {
-   class SamplerFix : public FunctionPass {
-   public:
-     SamplerFix() : FunctionPass(ID) {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
-       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-     }
- 
-diff --git backend/src/llvm/llvm_scalarize.cpp backend/src/llvm/llvm_scalarize.cpp
-index e9a2a66..e9d2ee4 100644
---- a/backend/src/llvm/llvm_scalarize.cpp
-+++ b/backend/src/llvm/llvm_scalarize.cpp
-@@ -96,10 +96,12 @@ namespace gbe {
- 
-     Scalarize() : FunctionPass(ID)
-     {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
-       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-     }
- 
-diff --git utests/CMakeLists.txt utests/CMakeLists.txt
-index 300d87a..64179c7 100644
---- a/utests/CMakeLists.txt
-+++ b/utests/CMakeLists.txt
-@@ -26,8 +26,8 @@ if (NOT NOT_BUILD_STAND_ALONE_UTEST)
-   # Threads
-   Find_Package(Threads)
- 
--  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
--  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
-+  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof -ffloat-store -fno-strict-aliasing")
-+  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS} -ffloat-store -fno-strict-aliasing") #compiler_{degrees,radians,function_argument2} use equality comparison of floats, compiler_long_bitcast uses aliasing
-   set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
-   set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
-   set (CMAKE_CXX_FLAGS_MINSIZEREL     "-Os -DNDEBUG -DGBE_DEBUG=0")
diff --git a/srcpkgs/beignet/patches/llvm11.patch b/srcpkgs/beignet/patches/llvm11.patch
deleted file mode 100644
index 2c3a4278943c..000000000000
--- a/srcpkgs/beignet/patches/llvm11.patch
+++ /dev/null
@@ -1,937 +0,0 @@
-Source: Snektron
-
-There were a few changes required for LLVM 11:
-* llvm::StringRef requires .str(), implicit conversion was removed
-* llvm::CallSite was removed, but the required methods are available on llvm::CallInst
-* VectorTyID was split into FixedVectorTyID and ScalableVectorTyID, FixedVectorTyID was used
-* CallInst::getCalledValue() was renamed to CallInst::getCalledOperand()
-* Implicit conversion from MaybeAlign to Align was removed, so MaybeAlign::valueOrOne was used instead.
-
---- a/backend/src/llvm/StripAttributes.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/StripAttributes.cpp	2020-11-09 19:04:19.641897141 +0100
-@@ -107,9 +107,8 @@
-        BB != E; ++BB) {
-     for (BasicBlock::iterator Inst = BB->begin(), E = BB->end();
-          Inst != E; ++Inst) {
--      CallSite Call(&*Inst);
--      if (Call)
--        Call.setCallingConv(CallingConv::C);
-+      if (CallInst* callInst = dyn_cast<CallInst>(&*Inst))
-+        callInst->setCallingConv(CallingConv::C);
-     }
-   }
-
---- a/backend/src/llvm/llvm_bitcode_link.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_bitcode_link.cpp	2020-11-09 17:04:09.633753428 +0100
-@@ -98,7 +98,7 @@
-         if (callFunc && callFunc->getIntrinsicID() != 0)
-           continue;
-
--        std::string fnName = call->getCalledValue()->stripPointerCasts()->getName();
-+        std::string fnName = call->getCalledOperand()->stripPointerCasts()->getName().str();
-
-         if (!MFS.insert(fnName).second) {
-           continue;
---- a/backend/src/llvm/llvm_device_enqueue.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_device_enqueue.cpp	2020-11-09 19:01:49.201915008 +0100
-@@ -45,7 +45,7 @@
-       return NULL;
-
-     /* This is a fake, to check the function bitcast is for block or not */
--    std::string fnName = Fn->getName();
-+    std::string fnName = Fn->getName().str();
-     if(fnName.find("_invoke") == std::string::npos)
-       return NULL;
-
-@@ -119,18 +119,18 @@
-       ParamTys.push_back(ty);
-     }
-     FunctionType* NewFT = FunctionType::get(Fn->getReturnType(), ParamTys, false);
--    Function* NewFn = Function::Create(NewFT, Function::ExternalLinkage, Fn->getName());
-+    Function* NewFn = Function::Create(NewFT, Function::ExternalLinkage, Fn->getName().str());
-     SmallVector<ReturnInst*, 8> Returns;
-
-     Function::arg_iterator NewFnArgIt = NewFn->arg_begin();
-     for (Function::arg_iterator I = Fn->arg_begin(), E = Fn->arg_end(); I != E; ++I) {
--      std::string ArgName = I->getName();
-+      std::string ArgName = I->getName().str();
-       NewFnArgIt->setName(ArgName);
-       VMap[&*I] = &(*NewFnArgIt++);
-     }
-     CloneFunctionInto(NewFn, Fn, VMap, /*ModuleLevelChanges=*/true, Returns);
-
--    Fn->setName("__d" + Fn->getName());
-+    Fn->setName("__d" + Fn->getName().str());
-     mod->getFunctionList().push_back(NewFn);
-     //mod->getOrInsertFunction(NewFn->getName(), NewFn->getFunctionType(),
-     //                         NewFn->getAttributes());
-@@ -147,7 +147,7 @@
-       argTypeNames.push_back(llvm::MDString::get(Context, "char*"));
-       argBaseTypeNames.push_back(llvm::MDString::get(Context, "char*"));
-       argTypeQuals.push_back(llvm::MDString::get(Context, ""));
--      argNames.push_back(llvm::MDString::get(Context, I->getName()));
-+      argNames.push_back(llvm::MDString::get(Context, I->getName().str()));
-     }
-
-     //If run to here, llvm version always > 3.9, add the version check just for build.
-@@ -198,7 +198,7 @@
-            * invoke pointer to store the index in the unit's block functions index.*/
-           Function *Fn = dyn_cast<Function>(bt->getOperand(0));
-
--          std::string fnName = Fn->getName();
-+          std::string fnName = Fn->getName().str();
-           int index = -1;
-           for(size_t i=0; i<unit.blockFuncs.size(); i++) {
-             if(unit.blockFuncs[i] == fnName) {
-@@ -241,7 +241,7 @@
-             //unnamed call function, parse the use to find the define of called function
-             SmallVector<Value*, 16> args(CI->op_begin(), CI->op_end()-1);
-
--            Value *v = CI->getCalledValue();
-+            Value *v = CI->getCalledOperand();
-             BitCastInst* bt = dyn_cast<BitCastInst>(v);
-             if(bt == NULL)
-               continue;
-@@ -316,7 +316,7 @@
-                   ConstantExpr *expr = dyn_cast<ConstantExpr>(c->getOperand(3));
-                   BitCastInst *bt = dyn_cast<BitCastInst>(expr->getAsInstruction());
-                   Function* f = dyn_cast<Function>(bt->getOperand(0));
--                  blocks[v] = f->getName();
-+                  blocks[v] = f->getName().str();
-                 }
-               }
-
-@@ -332,7 +332,7 @@
-           } else {
-             //handle enqueue_kernel function call
-             Function *fn = CI->getCalledFunction();
--            if (fn->getName().find("enqueue_kernel") == std::string::npos)
-+            if (fn->getName().str().find("enqueue_kernel") == std::string::npos)
-               continue;
-
-             //block parameter's index, 3 or 6
-@@ -361,7 +361,7 @@
-                   ConstantExpr *expr = dyn_cast<ConstantExpr>(c->getOperand(3));
-                   BitCastInst *bt = dyn_cast<BitCastInst>(expr->getAsInstruction());
-                   Function* f = dyn_cast<Function>(bt->getOperand(0));
--                  blocks[v] = f->getName();
-+                  blocks[v] = f->getName().str();
-                 }
-               }
-             } else if(isa<AllocaInst>(block)) {
---- a/backend/src/llvm/llvm_gen_backend.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_gen_backend.cpp	2020-11-09 18:33:50.919114327 +0100
-@@ -376,7 +376,7 @@
-           GBE_ASSERT(index == 0);
-           return this->_newScalar(value, key, type, index, uniform);
-           break;
--        case Type::VectorTyID:
-+        case Type::FixedVectorTyID:
-         {
-           auto vectorType = cast<VectorType>(type);
-           auto elementType = vectorType->getElementType();
-@@ -743,20 +743,20 @@
- #undef DECL_VISIT_FN
-
-     // Emit rounding instructions from gen native function
--    void emitRoundingCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode);
-+    void emitRoundingCallInst(CallInst &I, ir::Opcode opcode);
-     // Emit unary instructions from gen native function
--    void emitUnaryCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode, ir::Type = ir::TYPE_FLOAT);
-+    void emitUnaryCallInst(CallInst &I, ir::Opcode opcode, ir::Type = ir::TYPE_FLOAT);
-     // Emit unary instructions from gen native function
--    void emitAtomicInst(CallInst &I, CallSite &CS, ir::AtomicOps opcode);
-+    void emitAtomicInst(CallInst &I, ir::AtomicOps opcode);
-     // Emit workgroup instructions
--    void emitWorkGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode);
-+    void emitWorkGroupInst(CallInst &I, ir::WorkGroupOps opcode);
-     // Emit subgroup instructions
--    void emitSubGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode);
-+    void emitSubGroupInst(CallInst &I, ir::WorkGroupOps opcode);
-     // Emit subgroup instructions
--    void emitBlockReadWriteMemInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
--    void emitBlockReadWriteImageInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-+    void emitBlockReadWriteMemInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-+    void emitBlockReadWriteImageInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-
--    uint8_t appendSampler(CallSite::arg_iterator AI);
-+    uint8_t appendSampler(User::op_iterator AI);
-     uint8_t getImageID(CallInst &I);
-
-     // These instructions are not supported at all
-@@ -1320,13 +1320,13 @@
- #endif
-
-       if(typeNameNode) {
--        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
-+        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-       }
-       if(typeBaseNameNode) {
--        llvmInfo.typeBaseName= (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString();
-+        llvmInfo.typeBaseName= (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString().str();
-       }
--      llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
--      llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString();
-+      llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-+      llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString().str();
-       bool isImage = llvmInfo.isImageType();
-       bool isPipe = llvmInfo.isPipeType();
-       if (I->getType()->isPointerTy() || isImage || isPipe) {
-@@ -1531,7 +1531,7 @@
-             EltTy = getEltType(EltTy, TypeIndex);
-         }
-
--        ir::Constant cc = unit.getConstantSet().getConstant(pointer->getName());
-+        ir::Constant cc = unit.getConstantSet().getConstant(pointer->getName().str());
-         unsigned int defOffset = cc.getOffset();
-         relocs.push_back(ir::RelocEntry(offset, defOffset + constantOffset));
-
-@@ -1546,7 +1546,7 @@
-       return;
-     }
-     if (isa<GlobalVariable>(c)) {
--      ir::Constant cc = unit.getConstantSet().getConstant(c->getName());
-+      ir::Constant cc = unit.getConstantSet().getConstant(c->getName().str());
-       unsigned int defOffset = cc.getOffset();
-
-       relocs.push_back(ir::RelocEntry(offset, defOffset));
-@@ -1609,7 +1609,7 @@
-           }
-           break;
-         }
--      case Type::TypeID::VectorTyID:
-+      case Type::TypeID::FixedVectorTyID:
-         {
-           const ConstantDataSequential *cds = dyn_cast<ConstantDataSequential>(c);
-           const VectorType *vecTy = cast<VectorType>(type);
-@@ -1936,7 +1936,7 @@
-       case Type::PointerTyID:
-         regTranslator.newScalar(value, key, 0, uniform);
-         break;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         auto vectorType = cast<VectorType>(type);
-         const uint32_t elemNum = vectorType->getNumElements();
-@@ -2395,7 +2395,7 @@
- #endif
-         }
-         if(typeNameNode) {
--          llvmInfo.typeName = (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
-+          llvmInfo.typeName = (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-           //LLVM 3.9 image's type name include access qual, don't match OpenCL spec, erase them.
-           std::vector<std::string> filters = {"__read_only ", "__write_only "};
-           for (uint32_t i = 0; i < filters.size(); i++) {
-@@ -2406,16 +2406,16 @@
-           }
-         }
-         if(typeBaseNameNode){
--          llvmInfo.typeBaseName = (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString();
-+          llvmInfo.typeBaseName = (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString().str();
-         }
-         if(accessQualNode) {
--          llvmInfo.accessQual = (cast<MDString>(accessQualNode->getOperand(opID)))->getString();
-+          llvmInfo.accessQual = (cast<MDString>(accessQualNode->getOperand(opID)))->getString().str();
-         }
-         if(typeQualNode) {
--          llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString();
-+          llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString().str();
-         }
-         if(argNameNode){
--          llvmInfo.argName = (cast<MDString>(argNameNode->getOperand(opID)))->getString();
-+          llvmInfo.argName = (cast<MDString>(argNameNode->getOperand(opID)))->getString().str();
-         }
-
-         // function arguments are uniform values.
-@@ -3010,7 +3010,7 @@
-         } else {
-           this->newRegister(const_cast<GlobalVariable*>(&v));
-           ir::Register reg = regTranslator.getScalar(const_cast<GlobalVariable*>(&v), 0);
--          ir::Constant &con = unit.getConstantSet().getConstant(v.getName());
-+          ir::Constant &con = unit.getConstantSet().getConstant(v.getName().str());
-           if (!legacyMode) {
-             ir::Register regload = ctx.reg(getFamily(getType(ctx, v.getType())));
-             ctx.LOADI(getType(ctx, v.getType()), regload, ctx.newIntegerImmediate(con.getOffset(), getType(ctx, v.getType())));
-@@ -3212,7 +3212,7 @@
-         GBE_ASSERTM(false, "Unsupported calling convention");
-     }
-
--    ctx.startFunction(F.getName());
-+    ctx.startFunction(F.getName().str());
-
-     ir::Function &fn = ctx.getFunction();
-     this->regTranslator.clear();
-@@ -3810,9 +3810,9 @@
-
-   void GenWriter::regAllocateCallInst(CallInst &I) {
-     Value *dst = &I;
--    Value *Callee = I.getCalledValue();
-+    Value *Callee = I.getCalledOperand();
-     GBE_ASSERT(ctx.getFunction().getProfile() == ir::PROFILE_OCL);
--    GBE_ASSERT(isa<InlineAsm>(I.getCalledValue()) == false);
-+    GBE_ASSERT(isa<InlineAsm>(I.getCalledOperand()) == false);
-     if(I.getNumArgOperands()) GBE_ASSERT(I.hasStructRetAttr() == false);
-
-     // We only support a small number of intrinsics right now
-@@ -3870,7 +3870,7 @@
-       }
-     }
-     // Get the name of the called function and handle it
--    const std::string fnName = Callee->stripPointerCasts()->getName();
-+    const std::string fnName = Callee->stripPointerCasts()->getName().str();
-     auto genIntrinsicID = intrinsicMap.find(fnName);
-     switch (genIntrinsicID) {
-       case GEN_OCL_GET_GROUP_ID0:
-@@ -4166,7 +4166,7 @@
-     };
-   }
-
--  void GenWriter::emitRoundingCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode) {
-+  void GenWriter::emitRoundingCallInst(CallInst &I, ir::Opcode opcode) {
-     if (I.getType()->isHalfTy()) {
-       const ir::Register src = this->getRegister(I.getOperand(0));
-       const ir::Register srcFloat = ctx.reg(ir::FAMILY_DWORD);
-@@ -4177,14 +4177,14 @@
-       ctx.F32TO16(ir::TYPE_U16, ir::TYPE_FLOAT, dst, dstFloat);
-     } else {
-       GBE_ASSERT(I.getType()->isFloatTy());
--      this->emitUnaryCallInst(I,CS,opcode);
-+      this->emitUnaryCallInst(I,opcode);
-     }
-   }
-
--  void GenWriter::emitUnaryCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
-+  void GenWriter::emitUnaryCallInst(CallInst &I, ir::Opcode opcode, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--    CallSite::arg_iterator AE = CS.arg_end();
-+    User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-     GBE_ASSERT(AI != AE);
-     const ir::Register src = this->getRegister(*AI);
-@@ -4293,9 +4293,9 @@
-     this->emitAtomicInstHelper(opcode, type, dst, llvmPtr, payloadTuple);
-   }
-
--  void GenWriter::emitAtomicInst(CallInst &I, CallSite &CS, ir::AtomicOps opcode) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitAtomicInst(CallInst &I, ir::AtomicOps opcode) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-     Value *llvmPtr = *AI;
-     ir::AddressSpace addrSpace = addressSpaceLLVMToGen(llvmPtr->getType()->getPointerAddressSpace());
-@@ -4348,7 +4348,7 @@
-     }
-   }
-
--  void GenWriter::emitWorkGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode) {
-+  void GenWriter::emitWorkGroupInst(CallInst &I, ir::WorkGroupOps opcode) {
-     ir::Function &f = ctx.getFunction();
-
-     if (f.getwgBroadcastSLM() < 0 && opcode == ir::WORKGROUP_OP_BROADCAST) {
-@@ -4378,8 +4378,8 @@
-       GBE_ASSERT(f.gettidMapSLM() >= 0);
-     }
-
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     if (opcode == ir::WORKGROUP_OP_ALL || opcode == ir::WORKGROUP_OP_ANY) {
-@@ -4391,14 +4391,14 @@
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], 3);
-       ctx.WORKGROUP(opcode, (uint32_t)f.gettidMapSLM(), getRegister(&I), srcTuple, 3, ir::TYPE_S32);
-     } else if (opcode == ir::WORKGROUP_OP_BROADCAST) {
--      int argNum = CS.arg_size();
-+      int argNum = I.arg_size();
-       std::vector<ir::Register> src(argNum);
-       for (int i = 0; i < argNum; i++) {
-         src[i] = this->getRegister(*(AI++));
-       }
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], argNum);
-       ctx.WORKGROUP(ir::WORKGROUP_OP_BROADCAST, (uint32_t)f.getwgBroadcastSLM(), getRegister(&I), srcTuple, argNum,
--          getType(ctx, (*CS.arg_begin())->getType()));
-+          getType(ctx, (*I.arg_begin())->getType()));
-     } else {
-       ConstantInt *sign = dyn_cast<ConstantInt>(AI);
-       GBE_ASSERT(sign);
-@@ -4423,9 +4423,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitSubGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitSubGroupInst(CallInst &I, ir::WorkGroupOps opcode) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     if (opcode == ir::WORKGROUP_OP_ALL || opcode == ir::WORKGROUP_OP_ANY) {
-@@ -4435,7 +4435,7 @@
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], 1);
-       ctx.SUBGROUP(opcode, getRegister(&I), srcTuple, 1, ir::TYPE_S32);
-     } else if (opcode == ir::WORKGROUP_OP_BROADCAST) {
--      int argNum = CS.arg_size();
-+      int argNum = I.arg_size();
-       GBE_ASSERT(argNum == 2);
-       std::vector<ir::Register> src(argNum);
-       for (int i = 0; i < argNum; i++) {
-@@ -4443,7 +4443,7 @@
-       }
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], argNum);
-       ctx.SUBGROUP(ir::WORKGROUP_OP_BROADCAST, getRegister(&I), srcTuple, argNum,
--          getType(ctx, (*CS.arg_begin())->getType()));
-+          getType(ctx, (*I.arg_begin())->getType()));
-     } else {
-       ConstantInt *sign = dyn_cast<ConstantInt>(AI);
-       GBE_ASSERT(sign);
-@@ -4466,9 +4466,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitBlockReadWriteMemInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitBlockReadWriteMemInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     Value *llvmPtr = *(AI++);
-@@ -4522,9 +4522,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitBlockReadWriteImageInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitBlockReadWriteImageInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     const uint8_t imageID = getImageID(I);
-@@ -4557,7 +4557,7 @@
-
-   /* append a new sampler. should be called before any reference to
-    * a sampler_t value. */
--  uint8_t GenWriter::appendSampler(CallSite::arg_iterator AI) {
-+  uint8_t GenWriter::appendSampler(User::op_iterator AI) {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-     CallInst *TC = dyn_cast<CallInst>(*AI);
-     Constant *CPV = TC ? dyn_cast<Constant>(TC->getOperand(0)) : NULL;
-@@ -4595,10 +4595,9 @@
-         const ir::Function &fn = ctx.getFunction();
-
-         // Get the function arguments
--        CallSite CS(&I);
--        CallSite::arg_iterator AI = CS.arg_begin();
-+        User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--        CallSite::arg_iterator AE = CS.arg_end();
-+        User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-         switch (F->getIntrinsicID()) {
-           case Intrinsic::stacksave:
-@@ -4764,17 +4763,17 @@
-             ctx.MAD(srcType, dst, src0, src1, src2);
-           }
-           break;
--          case Intrinsic::sqrt: this->emitUnaryCallInst(I,CS,ir::OP_SQR); break;
--          case Intrinsic::ceil: this->emitRoundingCallInst(I,CS,ir::OP_RNDU); break;
--          case Intrinsic::trunc: this->emitRoundingCallInst(I,CS,ir::OP_RNDZ); break;
--          case Intrinsic::rint: this->emitRoundingCallInst(I,CS,ir::OP_RNDE); break;
--          case Intrinsic::floor: this->emitRoundingCallInst(I,CS,ir::OP_RNDD); break;
--          case Intrinsic::sin: this->emitUnaryCallInst(I,CS,ir::OP_SIN); break;
--          case Intrinsic::cos: this->emitUnaryCallInst(I,CS,ir::OP_COS); break;
--          case Intrinsic::log2: this->emitUnaryCallInst(I,CS,ir::OP_LOG); break;
--          case Intrinsic::exp2: this->emitUnaryCallInst(I,CS,ir::OP_EXP); break;
-+          case Intrinsic::sqrt: this->emitUnaryCallInst(I,ir::OP_SQR); break;
-+          case Intrinsic::ceil: this->emitRoundingCallInst(I,ir::OP_RNDU); break;
-+          case Intrinsic::trunc: this->emitRoundingCallInst(I,ir::OP_RNDZ); break;
-+          case Intrinsic::rint: this->emitRoundingCallInst(I,ir::OP_RNDE); break;
-+          case Intrinsic::floor: this->emitRoundingCallInst(I,ir::OP_RNDD); break;
-+          case Intrinsic::sin: this->emitUnaryCallInst(I,ir::OP_SIN); break;
-+          case Intrinsic::cos: this->emitUnaryCallInst(I,ir::OP_COS); break;
-+          case Intrinsic::log2: this->emitUnaryCallInst(I,ir::OP_LOG); break;
-+          case Intrinsic::exp2: this->emitUnaryCallInst(I,ir::OP_EXP); break;
-           case Intrinsic::bswap:
--            this->emitUnaryCallInst(I,CS,ir::OP_BSWAP, getUnsignedType(ctx, I.getType())); break;
-+            this->emitUnaryCallInst(I,ir::OP_BSWAP, getUnsignedType(ctx, I.getType())); break;
-           case Intrinsic::pow:
-           {
-             const ir::Register src0 = this->getRegister(*AI); ++AI;
-@@ -4794,21 +4793,20 @@
-         }
-       } else {
-         // Get the name of the called function and handle it
--        Value *Callee = I.getCalledValue();
--        const std::string fnName = Callee->stripPointerCasts()->getName();
-+        Value *Callee = I.getCalledOperand();
-+        const std::string fnName = Callee->stripPointerCasts()->getName().str();
-         auto genIntrinsicID = intrinsicMap.find(fnName);
-
-         // Get the function arguments
--        CallSite CS(&I);
--        CallSite::arg_iterator AI = CS.arg_begin();
-+        User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--        CallSite::arg_iterator AE = CS.arg_end();
-+        User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-
-         switch (genIntrinsicID) {
--          case GEN_OCL_FBH: this->emitUnaryCallInst(I,CS,ir::OP_FBH, ir::TYPE_U32); break;
--          case GEN_OCL_FBL: this->emitUnaryCallInst(I,CS,ir::OP_FBL, ir::TYPE_U32); break;
--          case GEN_OCL_CBIT: this->emitUnaryCallInst(I,CS,ir::OP_CBIT, getUnsignedType(ctx, (*AI)->getType())); break;
-+          case GEN_OCL_FBH: this->emitUnaryCallInst(I,ir::OP_FBH, ir::TYPE_U32); break;
-+          case GEN_OCL_FBL: this->emitUnaryCallInst(I,ir::OP_FBL, ir::TYPE_U32); break;
-+          case GEN_OCL_CBIT: this->emitUnaryCallInst(I,ir::OP_CBIT, getUnsignedType(ctx, (*AI)->getType())); break;
-           case GEN_OCL_ABS:
-           {
-             const ir::Register src = this->getRegister(*AI);
-@@ -4915,8 +4913,8 @@
-             ctx.REGION(dst, src, x.getIntegerValue());
-             break;
-           }
--          case GEN_OCL_RSQ: this->emitUnaryCallInst(I,CS,ir::OP_RSQ); break;
--          case GEN_OCL_RCP: this->emitUnaryCallInst(I,CS,ir::OP_RCP); break;
-+          case GEN_OCL_RSQ: this->emitUnaryCallInst(I,ir::OP_RSQ); break;
-+          case GEN_OCL_RCP: this->emitUnaryCallInst(I,ir::OP_RCP); break;
-           case GEN_OCL_FORCE_SIMD8: ctx.setSimdWidth(8); break;
-           case GEN_OCL_FORCE_SIMD16: ctx.setSimdWidth(16); break;
-           case GEN_OCL_LBARRIER: ctx.SYNC(ir::syncLocalBarrier); break;
-@@ -4947,31 +4945,31 @@
-             break;
-           }
-           case GEN_OCL_ATOMIC_ADD0:
--          case GEN_OCL_ATOMIC_ADD1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_ADD); break;
-+          case GEN_OCL_ATOMIC_ADD1: this->emitAtomicInst(I,ir::ATOMIC_OP_ADD); break;
-           case GEN_OCL_ATOMIC_SUB0:
--          case GEN_OCL_ATOMIC_SUB1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_SUB); break;
-+          case GEN_OCL_ATOMIC_SUB1: this->emitAtomicInst(I,ir::ATOMIC_OP_SUB); break;
-           case GEN_OCL_ATOMIC_AND0:
--          case GEN_OCL_ATOMIC_AND1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_AND); break;
-+          case GEN_OCL_ATOMIC_AND1: this->emitAtomicInst(I,ir::ATOMIC_OP_AND); break;
-           case GEN_OCL_ATOMIC_OR0:
--          case GEN_OCL_ATOMIC_OR1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_OR); break;
-+          case GEN_OCL_ATOMIC_OR1: this->emitAtomicInst(I,ir::ATOMIC_OP_OR); break;
-           case GEN_OCL_ATOMIC_XOR0:
--          case GEN_OCL_ATOMIC_XOR1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_XOR); break;
-+          case GEN_OCL_ATOMIC_XOR1: this->emitAtomicInst(I,ir::ATOMIC_OP_XOR); break;
-           case GEN_OCL_ATOMIC_XCHG0:
--          case GEN_OCL_ATOMIC_XCHG1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_XCHG); break;
-+          case GEN_OCL_ATOMIC_XCHG1: this->emitAtomicInst(I,ir::ATOMIC_OP_XCHG); break;
-           case GEN_OCL_ATOMIC_INC0:
--          case GEN_OCL_ATOMIC_INC1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_INC); break;
-+          case GEN_OCL_ATOMIC_INC1: this->emitAtomicInst(I,ir::ATOMIC_OP_INC); break;
-           case GEN_OCL_ATOMIC_DEC0:
--          case GEN_OCL_ATOMIC_DEC1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_DEC); break;
-+          case GEN_OCL_ATOMIC_DEC1: this->emitAtomicInst(I,ir::ATOMIC_OP_DEC); break;
-           case GEN_OCL_ATOMIC_UMIN0:
--          case GEN_OCL_ATOMIC_UMIN1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_UMIN); break;
-+          case GEN_OCL_ATOMIC_UMIN1: this->emitAtomicInst(I,ir::ATOMIC_OP_UMIN); break;
-           case GEN_OCL_ATOMIC_UMAX0:
--          case GEN_OCL_ATOMIC_UMAX1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_UMAX); break;
-+          case GEN_OCL_ATOMIC_UMAX1: this->emitAtomicInst(I,ir::ATOMIC_OP_UMAX); break;
-           case GEN_OCL_ATOMIC_IMIN0:
--          case GEN_OCL_ATOMIC_IMIN1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_IMIN); break;
-+          case GEN_OCL_ATOMIC_IMIN1: this->emitAtomicInst(I,ir::ATOMIC_OP_IMIN); break;
-           case GEN_OCL_ATOMIC_IMAX0:
--          case GEN_OCL_ATOMIC_IMAX1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_IMAX); break;
-+          case GEN_OCL_ATOMIC_IMAX1: this->emitAtomicInst(I,ir::ATOMIC_OP_IMAX); break;
-           case GEN_OCL_ATOMIC_CMPXCHG0:
--          case GEN_OCL_ATOMIC_CMPXCHG1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_CMPXCHG); break;
-+          case GEN_OCL_ATOMIC_CMPXCHG1: this->emitAtomicInst(I,ir::ATOMIC_OP_CMPXCHG); break;
-           case GEN_OCL_GET_IMAGE_WIDTH:
-           case GEN_OCL_GET_IMAGE_HEIGHT:
-           case GEN_OCL_GET_IMAGE_DEPTH:
-@@ -5429,48 +5427,48 @@
-             ctx.WAIT();
-             break;
-           }
--          case GEN_OCL_WORK_GROUP_ALL: this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_ALL); break;
--          case GEN_OCL_WORK_GROUP_ANY: this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_ANY); break;
-+          case GEN_OCL_WORK_GROUP_ALL: this->emitWorkGroupInst(I, ir::WORKGROUP_OP_ALL); break;
-+          case GEN_OCL_WORK_GROUP_ANY: this->emitWorkGroupInst(I, ir::WORKGROUP_OP_ANY); break;
-           case GEN_OCL_WORK_GROUP_BROADCAST:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_BROADCAST); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_BROADCAST); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_ADD); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_MAX); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_MIN); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-           case GEN_OCL_SUB_GROUP_BROADCAST:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_BROADCAST); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_BROADCAST); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_ADD); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_MAX); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_MIN); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-           case GEN_OCL_LRP:
-           {
-             const ir::Register dst  = this->getRegister(&I);
-@@ -5484,69 +5482,69 @@
-             break;
-           }
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, false, 1); break;
-+            this->emitBlockReadWriteMemInst(I, false, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, false, 2); break;
-+            this->emitBlockReadWriteMemInst(I, false, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, false, 4); break;
-+            this->emitBlockReadWriteMemInst(I, false, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, false, 8); break;
-+            this->emitBlockReadWriteMemInst(I, false, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, true, 1); break;
-+            this->emitBlockReadWriteMemInst(I, true, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, true, 2); break;
-+            this->emitBlockReadWriteMemInst(I, true, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, true, 4); break;
-+            this->emitBlockReadWriteMemInst(I, true, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, true, 8); break;
-+            this->emitBlockReadWriteMemInst(I, true, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, false, 1); break;
-+            this->emitBlockReadWriteImageInst(I, false, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, false, 2); break;
-+            this->emitBlockReadWriteImageInst(I, false, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, false, 4); break;
-+            this->emitBlockReadWriteImageInst(I, false, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, false, 8); break;
-+            this->emitBlockReadWriteImageInst(I, false, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, true, 1); break;
-+            this->emitBlockReadWriteImageInst(I, true, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, true, 2); break;
-+            this->emitBlockReadWriteImageInst(I, true, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, true, 4); break;
-+            this->emitBlockReadWriteImageInst(I, true, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, true, 8); break;
-+            this->emitBlockReadWriteImageInst(I, true, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, false, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, false, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, false, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, false, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, true, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, true, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, true, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, true, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, false, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, false, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, false, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, false, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, true, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, true, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, true, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, true, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 8, ir::TYPE_U16); break;
-           case GEN_OCL_GET_PIPE:
-           case GEN_OCL_MAKE_RID:
-           case GEN_OCL_GET_RID:
---- a/backend/src/llvm/llvm_includes.hpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_includes.hpp	2020-11-09 19:00:09.955926795 +0100
-@@ -103,7 +103,6 @@
-
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
- #include "llvm/IR/Mangler.h"
--#include "llvm/IR/CallSite.h"
- #include "llvm/IR/CFG.h"
- #include "llvm/IR/InstVisitor.h"
- #include "llvm/IR/IRPrintingPasses.h"
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-11-09 19:10:37.141852308 +0100
-@@ -160,7 +160,7 @@
-     Value *vecPtr = Builder.CreateBitCast(ld->getPointerOperand(),
-                                         PointerType::get(vecTy, addrSpace));
-     LoadInst *vecValue = Builder.CreateLoad(vecPtr);
--    vecValue->setAlignment(align);
-+    vecValue->setAlignment(align.valueOrOne());
-
-     for (unsigned i = 0; i < size; ++i) {
-       Value *S = Builder.CreateExtractElement(vecValue, Builder.getInt32(i));
-@@ -251,7 +251,7 @@
-       return;
-     Value *newPtr = Builder.CreateBitCast(stPointer, PointerType::get(vecTy, addrSpace));
-     StoreInst *newST = Builder.CreateStore(parent, newPtr);
--    newST->setAlignment(align);
-+    newST->setAlignment(align.valueOrOne());
-   }
-
-   // Find the safe iterator we can point to. If reorder happens, we need to
---- a/backend/src/llvm/llvm_passes.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_passes.cpp	2020-11-09 18:48:55.997006837 +0100
-@@ -95,7 +95,7 @@
-   {
-     switch (Ty->getTypeID()) {
-       case Type::VoidTyID: NOT_SUPPORTED;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         const VectorType* VecTy = cast<VectorType>(Ty);
-         uint32_t elemNum = VecTy->getNumElements();
-@@ -138,7 +138,7 @@
-       case Type::HalfTyID:    return 16;
-       case Type::FloatTyID:   return 32;
-       case Type::DoubleTyID:  return 64;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         const VectorType* VecTy = cast<VectorType>(Ty);
-         uint32_t numElem = VecTy->getNumElements();
-@@ -184,10 +184,12 @@
-     Type *elementType = NULL;
-     if (PointerType* ptrType = dyn_cast<PointerType>(eltTy))
-       elementType = ptrType->getElementType();
--    else if(SequentialType * seqType = dyn_cast<SequentialType>(eltTy))
--      elementType = seqType->getElementType();
--    else if(CompositeType * compTy= dyn_cast<CompositeType>(eltTy))
--      elementType = compTy->getTypeAtIndex(index);
-+    else if (ArrayType * arrType = dyn_cast<ArrayType>(eltTy))
-+      elementType = arrType->getElementType();
-+    else if(VectorType * vecType = dyn_cast<VectorType>(eltTy))
-+      elementType = vecType->getElementType();
-+    else if(StructType * structType = dyn_cast<StructType>(eltTy))
-+      elementType = structType->getTypeAtIndex(index);
-     GBE_ASSERT(elementType);
-     return elementType;
-   }
---- a/backend/src/llvm/llvm_printf_parser.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_printf_parser.cpp	2020-11-09 18:57:52.618943105 +0100
-@@ -323,8 +323,7 @@
-
-   bool PrintfParser::parseOnePrintfInstruction(CallInst * call)
-   {
--    CallSite CS(call);
--    CallSite::arg_iterator CI_FMT = CS.arg_begin();
-+    User::op_iterator CI_FMT = call->arg_begin();
-     int param_num = 0;
-
-     llvm::Constant* arg0 = dyn_cast<llvm::ConstantExpr>(*CI_FMT);
-@@ -341,7 +340,7 @@
-       return false;
-     }
-
--    std::string fmt = fmt_arg->getAsCString();
-+    std::string fmt = fmt_arg->getAsCString().str();
-     if (fmt.size() == 0)
-       return false;
-
-@@ -437,8 +436,8 @@
-         if ( callFunc->getIntrinsicID() != 0)
-           continue;
-
--        Value *Callee = call->getCalledValue();
--        const std::string fnName = Callee->getName();
-+        Value *Callee = call->getCalledOperand();
-+        const std::string fnName = Callee->getName().str();
-
-         if (fnName != "__gen_ocl_printf_stub" && fnName != "__gen_ocl_puts_stub")
-           continue;
-@@ -582,7 +581,7 @@
-             if (!fmt_arg || !fmt_arg->isCString()) {
-               return false;
-             }
--            slot.state.str = fmt_arg->getAsCString();
-+            slot.state.str = fmt_arg->getAsCString().str();
-             return true;
-           }
-           case PRINTF_CONVERSION_P: {
-@@ -595,10 +594,10 @@
-
-         break;
-
--      case Type::VectorTyID: {
--        Type* vect_type = arg->getType();
--        Type* elt_type = vect_type->getVectorElementType();
--        int vec_num = vect_type->getVectorNumElements();
-+      case Type::FixedVectorTyID: {
-+        VectorType* vect_type = dyn_cast<VectorType>(arg->getType());
-+        Type* elt_type = vect_type->getElementType();
-+        int vec_num = vect_type->getNumElements();
-         bool sign = false;
-
-         if (vec_num != slot.state.vector_n) {
---- a/backend/src/llvm/llvm_profiling.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_profiling.cpp	2020-11-09 18:59:50.120929150 +0100
-@@ -35,7 +35,6 @@
- #include "llvm/IR/IRBuilder.h"
-
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
--#include "llvm/IR/CallSite.h"
- #include "llvm/IR/CFG.h"
- #else
- #include "llvm/Support/CallSite.h"
---- a/backend/src/llvm/llvm_sampler_fix.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp	2020-11-09 17:01:09.407774832 +0100
-@@ -45,8 +45,8 @@
-     bool visitCallInst(CallInst *I) {
-       if(!I)
-         return false;
--      Value *Callee = I->getCalledValue();
--      const std::string fnName = Callee->getName();
-+      Value *Callee = I->getCalledOperand();
-+      const std::string fnName = Callee->getName().str();
-       bool changed = false;
-       Type *boolTy = IntegerType::get(I->getContext(), 1);
-       Type *i32Ty = IntegerType::get(I->getContext(), 32);
-@@ -59,7 +59,7 @@
-         Value *needFixVal;
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-         CallInst *init = dyn_cast<CallInst>(I->getOperand(0));
--        if (init && init->getCalledValue()->getName().compare("__translate_sampler_initializer"))
-+        if (init && init->getCalledOperand()->getName().compare("__translate_sampler_initializer"))
-         {
-           const ConstantInt *ci = dyn_cast<ConstantInt>(init->getOperand(0));
-           uint32_t samplerInt = ci->getZExtValue();
-@@ -113,7 +113,7 @@
-         Value *needFixVal;
-  #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-         CallInst *init = dyn_cast<CallInst>(I->getOperand(0));
--        if (init && init->getCalledValue()->getName().compare("__translate_sampler_initializer"))
-+        if (init && init->getCalledOperand()->getName().compare("__translate_sampler_initializer"))
-         {
-           const ConstantInt *ci = dyn_cast<ConstantInt>(init->getOperand(0));
-           uint32_t samplerInt = ci->getZExtValue();
---- a/backend/src/llvm/llvm_scalarize.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_scalarize.cpp	2020-11-09 18:51:16.888990104 +0100
-@@ -178,7 +178,7 @@
-       if(!type)
-         return type;
-       switch(type->getTypeID()) {
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       case Type::ArrayTyID:
-         return GetBasicType(type->getContainedType(0));
-       default:
-@@ -188,7 +188,7 @@
-     }
-
-     int GetComponentCount(const Type* type)  {
--      if (type && type->getTypeID() == Type::VectorTyID)
-+      if (type && type->getTypeID() == Type::FixedVectorTyID)
-         return llvm::dyn_cast<VectorType>(type)->getNumElements();
-       else
-         return 1;
-@@ -652,13 +652,12 @@
-           break;
-         }
-       } else {
--        Value *Callee = call->getCalledValue();
--        const std::string fnName = Callee->getName();
-+        Value *Callee = call->getCalledOperand();
-+        const std::string fnName = Callee->getName().str();
-         auto genIntrinsicID = intrinsicMap.find(fnName);
-
-         // Get the function arguments
--        CallSite CS(call);
--        CallSite::arg_iterator CI = CS.arg_begin() + 1;
-+        User::op_iterator CI = call->arg_begin() + 1;
-
-         switch (genIntrinsicID) {
-           case GEN_OCL_NOT_FOUND:
-@@ -729,7 +728,7 @@
-             extractFromVector(call);
-             break;
-           case GEN_OCL_PRINTF:
--            for (; CI != CS.arg_end(); ++CI)
-+            for (; CI != call->arg_end(); ++CI)
-               if ((*CI)->getType()->isVectorTy())
-                 *CI = InsertToVector(call, *CI);
-             break;
diff --git a/srcpkgs/beignet/patches/llvm12.patch b/srcpkgs/beignet/patches/llvm12.patch
deleted file mode 100644
index 6f8ab005c148..000000000000
--- a/srcpkgs/beignet/patches/llvm12.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-diff --git backend/src/llvm/ExpandLargeIntegers.cpp backend/src/llvm/ExpandLargeIntegers.cpp
-index 8515dc13..27080380 100644
---- a/backend/src/llvm/ExpandLargeIntegers.cpp
-+++ b/backend/src/llvm/ExpandLargeIntegers.cpp
-@@ -328,7 +328,7 @@ static Value *buildVectorOrScalar(ConversionState &State, IRBuilder<> &IRB, Smal
-     // splited, that's why these temporary values should be erased.
-     bool KeepInsert = isLegalBitSize(ElemTy->getPrimitiveSizeInBits() * ElemNo);
-     for (unsigned i = 0; i < ElemNo; ++i) {
--      Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo));
-+      Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo, false));
-       Value *idx = ConstantInt::get(IntTy, i);
-       vec = IRB.CreateInsertElement(tmp, Elements[i], idx);
-       if (!KeepInsert && !isa<Constant>(vec)) {
-@@ -373,7 +373,7 @@ static void unifyElementType(IRBuilder<> &IRB, SmallVector<Value *, 16> &Src, Sm
-       assert((Size % MinWidth) == 0);
- 
-       if (Size > MinWidth) {
--        VectorType *VecTy = VectorType::get(ElemTy, Size/MinWidth);
-+        VectorType *VecTy = VectorType::get(ElemTy, Size/MinWidth, false);
-         Value *Casted = IRB.CreateBitCast(Src[i], VecTy);
-         for (unsigned j = 0; j < Size/MinWidth; j++)
-           Dst.push_back(IRB.CreateExtractElement(Casted, ConstantInt::get(IntTy, j)));
-@@ -462,7 +462,7 @@ static void convertInstruction(Instruction *Inst, ConversionState &State,
-       unsigned ElemNo = Unified.size();
-       Type *ElemTy = Unified[0]->getType();
-       for (unsigned i = 0; i < ElemNo; ++i) {
--        Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo));
-+        Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo, false));
-         Value *idx = ConstantInt::get(IntTy, i);
-         vec = IRB.CreateInsertElement(tmp, Unified[i], idx);
-       }
-diff --git backend/src/llvm/llvm_gen_backend.cpp backend/src/llvm/llvm_gen_backend.cpp
-index c93d89cc..64d5b0e5 100644
---- a/backend/src/llvm/llvm_gen_backend.cpp
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -304,7 +304,7 @@ namespace gbe
-       TYPESIZEVEC(long,8)
-       TYPESIZEVEC(unsigned long,8)
-       else{
--        StructType *StrTy = M->getTypeByName("struct."+name);
-+        StructType *StrTy = StructType::getTypeByName(M->getContext(), "struct."+name);
-         if(StrTy)
-           return getTypeByteSize(unit,StrTy);
-       }
-diff --git backend/src/llvm/llvm_loadstore_optimization.cpp backend/src/llvm/llvm_loadstore_optimization.cpp
-index 5aa38bef..6b5c1bad 100644
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
-@@ -152,7 +152,7 @@ namespace gbe {
-     unsigned addrSpace = ld->getPointerAddressSpace();
-     // insert before first load
-     Builder.SetInsertPoint(ld);
--    VectorType *vecTy = VectorType::get(ld->getType(), size);
-+    VectorType *vecTy = VectorType::get(ld->getType(), size, false);
-     Value *vecPtr = Builder.CreateBitCast(ld->getPointerOperand(),
-                                         PointerType::get(vecTy, addrSpace));
-     LoadInst *vecValue = Builder.CreateLoad(vecPtr);
-@@ -236,7 +236,7 @@ namespace gbe {
-     Builder.SetInsertPoint(merged[size-1]);
- 
-     Type *dataTy = st->getValueOperand()->getType();
--    VectorType *vecTy = VectorType::get(dataTy, size);
-+    VectorType *vecTy = VectorType::get(dataTy, size, false);
-     Value * parent = UndefValue::get(vecTy);
-     for(unsigned i = 0; i < size; i++) {
-       parent = Builder.CreateInsertElement(parent, values[i], ConstantInt::get(IntegerType::get(st->getContext(), 32), i));
-diff --git backend/src/llvm/llvm_printf_parser.cpp backend/src/llvm/llvm_printf_parser.cpp
-index 6bb7c52a..af459cd2 100644
---- a/backend/src/llvm/llvm_printf_parser.cpp
-+++ b/backend/src/llvm/llvm_printf_parser.cpp
-@@ -630,7 +630,7 @@ error:
-             if (elt_type != elt_dst_type) {
-               Value *II = NULL;
-               for (int i = 0; i < vec_num; i++) {
--                Value *vec = II ? II : UndefValue::get(VectorType::get(elt_dst_type, vec_num));
-+                Value *vec = II ? II : UndefValue::get(VectorType::get(elt_dst_type, vec_num, false));
-                 Value *cv = ConstantInt::get(Type::getInt32Ty(elt_type->getContext()), i);
-                 Value *org = builder->CreateExtractElement(arg, cv);
-                 Value *cvt = builder->CreateIntCast(org, elt_dst_type, sign);
-@@ -658,7 +658,7 @@ error:
-             if (elt_type->getTypeID() != Type::FloatTyID) {
-               Value *II = NULL;
-               for (int i = 0; i < vec_num; i++) {
--                Value *vec = II ? II : UndefValue::get(VectorType::get(Type::getFloatTy(elt_type->getContext()), vec_num));
-+                Value *vec = II ? II : UndefValue::get(VectorType::get(Type::getFloatTy(elt_type->getContext()), vec_num, false));
-                 Value *cv = ConstantInt::get(Type::getInt32Ty(elt_type->getContext()), i);
-                 Value *org = builder->CreateExtractElement(arg, cv);
-                 Value* cvt  = builder->CreateFPCast(org, Type::getFloatTy(module->getContext()));
-diff --git backend/src/llvm/llvm_to_gen.cpp backend/src/llvm/llvm_to_gen.cpp
-index 7f7deffe..9e8ccc67 100644
---- a/backend/src/llvm/llvm_to_gen.cpp
-+++ b/backend/src/llvm/llvm_to_gen.cpp
-@@ -358,7 +358,7 @@ namespace gbe
-     passes.add(createScalarReplAggregatesPass(64, true, -1, -1, 64));
- #endif
-     passes.add(createLoadStoreOptimizationPass());
--    passes.add(createConstantPropagationPass());
-+    //passes.add(createConstantPropagationPass());
-     passes.add(createPromoteMemoryToRegisterPass());
-     if(optLevel > 0)
-       passes.add(createGVNPass());                 // Remove redundancies
-@@ -367,11 +367,11 @@ namespace gbe
-     passes.add(createScalarizePass());             // Expand all vector ops
-     passes.add(createExpandLargeIntegersPass());   // legalize large integer operation
-     passes.add(createInstructionCombiningPass());  // legalize will generate some silly instructions
--    passes.add(createConstantPropagationPass());   // propagate constant after scalarize/legalize
-+    //passes.add(createConstantPropagationPass());   // propagate constant after scalarize/legalize
-     passes.add(createExpandConstantExprPass());    // constant prop may generate ConstantExpr
-     passes.add(createPromoteIntegersPass());       // align integer size to power of two
-     passes.add(createRemoveGEPPass(unit));         // Constant prop may generate gep
--    passes.add(createDeadInstEliminationPass());   // Remove simplified instructions
-+    //passes.add(createDeadInstEliminationPass());   // Remove simplified instructions
-     passes.add(createCFGSimplificationPass());     // Merge & remove BBs
-     passes.add(createLowerSwitchPass());           // simplify cfg will generate switch-case instruction
-     if (profiling) {
diff --git a/srcpkgs/beignet/patches/musl.patch b/srcpkgs/beignet/patches/musl.patch
deleted file mode 100644
index cefafbb65588..000000000000
--- a/srcpkgs/beignet/patches/musl.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/backend/src/backend/gen/gen_mesa_disasm.c
-+++ b/backend/src/backend/gen/gen_mesa_disasm.c
-@@ -1137,7 +1137,7 @@ static uint32_t __conv_half_to_float(uint16_t h)
-       // Adjust mantissa so it's normalized (and keep
-       // track of exponent adjustment)
-       int e = -1;
--      uint m = i.mantissa;
-+      unsigned int m = i.mantissa;
-       do {
-         e++;
-         m <<= 1;
diff --git a/srcpkgs/beignet/template b/srcpkgs/beignet/template
deleted file mode 100644
index dce6bbb7ae24..000000000000
--- a/srcpkgs/beignet/template
+++ /dev/null
@@ -1,22 +0,0 @@
-# Template file for 'beignet'
-pkgname=beignet
-version=1.3.2
-revision=10
-archs="i686* x86_64*"
-wrksrc="Beignet-${version}-Source"
-build_style=cmake
-hostmakedepends="clang llvm pkg-config"
-makedepends="MesaLib-devel libedit-devel libffi-devel ocl-icd-devel zlib-devel
- libXfixes-devel"
-depends="ocl-icd"
-short_desc="Beignet GPGPU System for Intel GPUs"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://www.freedesktop.org/wiki/Software/Beignet/"
-distfiles="https://01.org/sites/default/files/${pkgname}-${version}-source.tar.gz"
-checksum=c555edba149de23243965a703f39f79fa06f15bcff5a3762b5544b0925010b43
-
-post_install() {
-	# remove CL headers, we do use opencl-headers instead.
-	rm -r ${DESTDIR}/usr/include
-}
diff --git a/srcpkgs/beignet/update b/srcpkgs/beignet/update
deleted file mode 100644
index ca41e0afe60c..000000000000
--- a/srcpkgs/beignet/update
+++ /dev/null
@@ -1 +0,0 @@
-site="https://01.org/beignet/downloads"
diff --git a/srcpkgs/removed-packages/template b/srcpkgs/removed-packages/template
index 0923c53cfc05..d59bd20f820c 100644
--- a/srcpkgs/removed-packages/template
+++ b/srcpkgs/removed-packages/template
@@ -1,7 +1,7 @@
 # Template file for 'removed-packages'
 pkgname=removed-packages
 version=0.1
-revision=69
+revision=70
 build_style=meta
 short_desc="Uninstalls packages removed from repository"
 maintainer="Piotr Wójcik <chocimier@tlen.pl>"
@@ -25,6 +25,7 @@ replaces="
  atom<=1.44.0_1
  avogadro-devel<=1.2.0_8
  avogadro<=1.2.0_8
+ beignet<=1.3.2_10
  bokken<=1.8_3
  bomi<=0.9.11_17
  burp-client<=1.4.40_13

From 6964de5f67df9529467c8254ff1b592236d79fa1 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 20/26] ldc: rebuild for llvm14

---
 srcpkgs/ldc/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/ldc/template b/srcpkgs/ldc/template
index a27280dde3b8..e21bc6555e38 100644
--- a/srcpkgs/ldc/template
+++ b/srcpkgs/ldc/template
@@ -1,7 +1,7 @@
 # Template file for 'ldc'
 pkgname=ldc
 version=1.28.0
-revision=1
+revision=2
 wrksrc="ldc-${version}-src"
 build_style=cmake
 configure_args="

From 1c4e16241bbb666e1973a387e1daa62d582c09a3 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 22:31:25 +0200
Subject: [PATCH 21/26] ldc: update to 1.29.0.

---
 srcpkgs/ldc/template | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/srcpkgs/ldc/template b/srcpkgs/ldc/template
index e21bc6555e38..1d72a8805eb6 100644
--- a/srcpkgs/ldc/template
+++ b/srcpkgs/ldc/template
@@ -1,7 +1,7 @@
 # Template file for 'ldc'
 pkgname=ldc
-version=1.28.0
-revision=2
+version=1.29.0
+revision=1
 wrksrc="ldc-${version}-src"
 build_style=cmake
 configure_args="
@@ -11,7 +11,7 @@ configure_args="
  -DBASH_COMPLETION_COMPLETIONSDIR=/usr/share/bash-completion
  -DC_SYSTEM_LIBS='unwind;m;pthread;rt;dl'"
 conf_files="/etc/ldc2.conf"
-hostmakedepends="dmd llvm12 perl pkg-config"
+hostmakedepends="dmd llvm14 perl pkg-config"
 makedepends="libcurl-devel libffi-devel ncurses-devel zlib-devel
  llvm-libunwind-devel"
 depends="ldc-runtime llvm-libunwind-devel"
@@ -22,7 +22,7 @@ license="BSD-3-Clause, BSL-1.0"
 homepage="https://wiki.dlang.org/LDC"
 changelog="https://raw.githubusercontent.com/ldc-developers/ldc/master/CHANGELOG.md"
 distfiles="https://github.com/ldc-developers/ldc/releases/download/v${version}/ldc-${version}-src.tar.gz"
-checksum=17fee8bb535bcb8cda0a45947526555c46c045f302a7349cc8711b254e54cf09
+checksum=d0c066eb965467625d9c5e75c00c583451b9ffa363601f9e37275ca8a8aea140
 nopie=yes
 nocross="dmd compilation fails on cross"
 # tests timeout on musl; also require unpackaged python3-lit

From 45dcdc644cd4034cc2d2622da6af034f05d1eee2 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 22/26] include-what-you-use: update to 0.18.

---
 srcpkgs/include-what-you-use/template | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/include-what-you-use/template b/srcpkgs/include-what-you-use/template
index b13bb7ee56af..297669f60459 100644
--- a/srcpkgs/include-what-you-use/template
+++ b/srcpkgs/include-what-you-use/template
@@ -1,6 +1,6 @@
 # Template file for 'include-what-you-use'
 pkgname=include-what-you-use
-version=0.16
+version=0.18
 revision=1
 wrksrc="${pkgname}"
 build_style=cmake
@@ -12,7 +12,7 @@ maintainer="Leah Neukirchen <leah@vuxu.org>"
 license="NCSA"
 homepage="https://include-what-you-use.org/"
 distfiles="https://include-what-you-use.org/downloads/${pkgname}-${version}.src.tar.gz"
-checksum=8d6fc9b255343bc1e5ec459e39512df1d51c60e03562985e0076036119ff5a1c
+checksum=9102fc8419294757df86a89ce6ec305f8d90a818d1f2598a139d15eb1894b8f3
 python_version=3
 
 post_install() {

From 9db6784f5563490918c7b823d5db7322edb346f8 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:18:24 +0200
Subject: [PATCH 23/26] SPIRV-LLVM-Translator: update to 14.0.0.

---
 common/shlibs                          |  1 +
 srcpkgs/SPIRV-LLVM-Translator/template | 11 ++++++-----
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/common/shlibs b/common/shlibs
index 81acc39defb4..f13c3de2ab6b 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -981,6 +981,7 @@ libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
 libLLVM-14.so libllvm14-14.0.3_1
+libLLVMSPIRVLib.so.14 SPIRV-LLVM-Translator-14.0.0_1
 libisofs.so.6 libisofs-0.6.24_1
 libmpack.so.0 libmpack-1.0.5_1
 libGeoIP.so.1 libgeoip-1.4.8_1
diff --git a/srcpkgs/SPIRV-LLVM-Translator/template b/srcpkgs/SPIRV-LLVM-Translator/template
index 2504cabed367..2277d062d992 100644
--- a/srcpkgs/SPIRV-LLVM-Translator/template
+++ b/srcpkgs/SPIRV-LLVM-Translator/template
@@ -1,19 +1,20 @@
 # Template file for 'SPIRV-LLVM-Translator'
 pkgname=SPIRV-LLVM-Translator
-version=12.0.0
+version=14.0.0
 revision=1
 build_style=cmake
 make_build_args="llvm-spirv"
-configure_args="-Wno-dev -DLLVM_LINK_LLVM_DYLIB=ON -DCMAKE_SKIP_RPATH=ON
- -DLLVM_SPIRV_INCLUDE_TESTS=OFF -DBUILD_SHARED_LIBS=ON"
+configure_args="-DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release
+ -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_SKIP_RPATH=ON -DLLVM_INCLUDE_TESTS=OFF
+ -DLLVM_LINK_LLVM_DYLIB=ON -DLLVM_EXTERNAL_LIT=/usr/bin/lit -Wno-dev -DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=/usr/include/spirv/ "
 hostmakedepends="clang clang-tools-extra llvm"
-makedepends="llvm"
+makedepends="llvm SPIRV-Headers"
 short_desc="API and commands for processing SPIR-V modules"
 maintainer="Orphaned <orphan@voidlinux.org>"
 license="NCSA"
 homepage="https://github.com/KhronosGroup/SPIRV-LLVM-Translator"
 distfiles="https://github.com/KhronosGroup/${pkgname}/archive/refs/tags/v${version}.tar.gz"
-checksum=6e4fad04203f25fcde4c308c53e9f59bd05a390978992db3212d4b63aff62108
+checksum=1afc52bb4e39aeb9b5b69324a201c81bd986364f347b559995eff6fd6f013318
 make_check=no
 
 post_install() {

From d965e669c62c68add34496b8a7746e31d22c447a Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:17:29 +0200
Subject: [PATCH 24/26] SPIRV-Headers: update to 1.3.211.0.

---
 srcpkgs/SPIRV-Headers/template | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/SPIRV-Headers/template b/srcpkgs/SPIRV-Headers/template
index 5dcf457c04c7..ce8288174e48 100644
--- a/srcpkgs/SPIRV-Headers/template
+++ b/srcpkgs/SPIRV-Headers/template
@@ -1,11 +1,13 @@
 # Template file for 'SPIRV-Headers'
 pkgname=SPIRV-Headers
-version=1.5.4.raytracing.fixed
+version=1.3.211.0
 revision=1
+reverts="1.5.4.raytracing.fixed"
+wrksrc=${pkgname}-sdk-${version}
 build_style=cmake
 short_desc="Machine-readable files for the SPIR-V Registry"
 maintainer="Orphaned <orphan@voidlinux.org>"
 license="GPL-3.0-or-later"
 homepage="https://github.com/KhronosGroup/SPIRV-Headers"
-distfiles="https://github.com/KhronosGroup/SPIRV-Headers/archive/${version}.tar.gz"
-checksum=df2ad2520be4d95a479fa248921065885bbf435a658349a7fc164ad7b26b68c6
+distfiles="https://github.com/KhronosGroup/SPIRV-Headers/archive/sdk-${version}.tar.gz"
+checksum=30a78e61bd812c75e09fdc7a319af206b1044536326bc3e85fea818376a12568

From 6d98f9900b9a093d1187933679682f65a0258d69 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:35:43 +0200
Subject: [PATCH 25/26] ispc: update to 1.17.0.

---
 .../ispc/patches/cmake-build-type-none.patch  |   18 -
 srcpkgs/ispc/patches/llvm12-001.patch         |   57 -
 srcpkgs/ispc/patches/llvm12-002.patch         |  923 --------
 srcpkgs/ispc/patches/llvm12-003.patch         | 1504 ------------
 srcpkgs/ispc/patches/llvm12-004.patch         |   34 -
 srcpkgs/ispc/patches/llvm12-005.patch         |  372 ---
 srcpkgs/ispc/patches/llvm12-006.patch         |  126 -
 srcpkgs/ispc/patches/llvm12-007.patch         |  160 --
 srcpkgs/ispc/patches/llvm12-008.patch         |  149 --
 srcpkgs/ispc/patches/llvm12-009.patch         | 2109 -----------------
 srcpkgs/ispc/template                         |    6 +-
 11 files changed, 3 insertions(+), 5455 deletions(-)
 delete mode 100644 srcpkgs/ispc/patches/cmake-build-type-none.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-001.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-002.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-003.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-004.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-005.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-006.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-007.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-008.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-009.patch

diff --git a/srcpkgs/ispc/patches/cmake-build-type-none.patch b/srcpkgs/ispc/patches/cmake-build-type-none.patch
deleted file mode 100644
index 411e353c7314..000000000000
--- a/srcpkgs/ispc/patches/cmake-build-type-none.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Index: ispc-1.15.0/CMakeLists.txt
-===================================================================
---- ispc-1.15.0.orig/CMakeLists.txt
-+++ ispc-1.15.0/CMakeLists.txt
-@@ -157,13 +157,6 @@ set(OUTPUT_RELEASE Release/bin)
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin )
- 
- if(CMAKE_BUILD_TYPE)
--    # Validate build type
--    set(CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo")
--
--    string(FIND "${CONFIGURATION_TYPES}" "${CMAKE_BUILD_TYPE}" MATCHED_CONFIG)
--    if (${MATCHED_CONFIG} EQUAL -1)
--         message(FATAL_ERROR "CMAKE_BUILD_TYPE (${CMAKE_BUILD_TYPE}) allows only the following values: ${CONFIGURATION_TYPES}")
--    endif()
- else(NOT CMAKE_BUILD_TYPE)
-     set(CMAKE_BUILD_TYPE "Release")
-     message(STATUS "Build type not specified: Use Release by default.")
diff --git a/srcpkgs/ispc/patches/llvm12-001.patch b/srcpkgs/ispc/patches/llvm12-001.patch
deleted file mode 100644
index 5f2d3f5a409e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-001.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 1c0f89dccb774f216c7f6e76a99ee907a1e641cb Mon Sep 17 00:00:00 2001
-From: Dmitry Babokin <dmitry.y.babokin@intel.com>
-Date: Tue, 22 Dec 2020 17:03:59 -0800
-Subject: [PATCH] Fix to work with LLVM trunk after llvm/llvm-project@41c3b2713
-
----
- src/ctx.cpp | 18 ++++++++++++------
- 1 file changed, 12 insertions(+), 6 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 6fbb8b9cf..977e9d222 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1473,11 +1473,15 @@ void FunctionEmitContext::AddDebugPos(llvm::Value *value, const SourcePos *pos,
-     llvm::Instruction *inst = llvm::dyn_cast<llvm::Instruction>(value);
-     if (inst != NULL && m->diBuilder) {
-         SourcePos p = pos ? *pos : currentPos;
--        if (p.first_line != 0)
-+        if (p.first_line != 0) {
-             // If first_line == 0, then we're in the middle of setting up
-             // the standard library or the like; don't add debug positions
-             // for those functions
--            inst->setDebugLoc(llvm::DebugLoc::get(p.first_line, p.first_column, scope ? scope : GetDIScope()));
-+            scope = scope ? scope : GetDIScope();
-+            llvm::DebugLoc diLoc =
-+                llvm::DILocation::get(scope->getContext(), p.first_line, p.first_column, scope, nullptr, false);
-+            inst->setDebugLoc(diLoc);
-+        }
-     }
- }
- 
-@@ -1518,9 +1522,10 @@ void FunctionEmitContext::EmitVariableDebugInfo(Symbol *sym) {
-     llvm::DILocalVariable *var = m->diBuilder->createAutoVariable(
-         scope, sym->name, sym->pos.GetDIFile(), sym->pos.first_line, diType, true /* preserve through opts */);
- 
-+    llvm::DebugLoc diLoc =
-+        llvm::DILocation::get(scope->getContext(), sym->pos.first_line, sym->pos.first_column, scope, nullptr, false);
-     llvm::Instruction *declareInst =
--        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(),
--                                    llvm::DebugLoc::get(sym->pos.first_line, sym->pos.first_column, scope), bblock);
-+        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(), diLoc, bblock);
-     AddDebugPos(declareInst, &sym->pos, scope);
- }
- 
-@@ -1535,9 +1540,10 @@ void FunctionEmitContext::EmitFunctionParameterDebugInfo(Symbol *sym, int argNum
-         m->diBuilder->createParameterVariable(scope, sym->name, argNum + 1, sym->pos.GetDIFile(), sym->pos.first_line,
-                                               diType, true /* preserve through opts */, flags);
- 
-+    llvm::DebugLoc diLoc =
-+        llvm::DILocation::get(scope->getContext(), sym->pos.first_line, sym->pos.first_column, scope, nullptr, false);
-     llvm::Instruction *declareInst =
--        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(),
--                                    llvm::DebugLoc::get(sym->pos.first_line, sym->pos.first_column, scope), bblock);
-+        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(), diLoc, bblock);
-     AddDebugPos(declareInst, &sym->pos, scope);
- }
- 
diff --git a/srcpkgs/ispc/patches/llvm12-002.patch b/srcpkgs/ispc/patches/llvm12-002.patch
deleted file mode 100644
index 0903f30da10d..000000000000
--- a/srcpkgs/ispc/patches/llvm12-002.patch
+++ /dev/null
@@ -1,923 +0,0 @@
-From 0597a79d084c014780136da906afe21d15e982cb Mon Sep 17 00:00:00 2001
-From: DeepakRajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Tue, 5 Jan 2021 13:53:30 -0800
-Subject: [PATCH] Remove LLVM 8.0 and LLVM 9.0. (#1966)
-
----
- .appveyor.yml                        |  3 --
- .travis.yml                          |  7 ---
- CMakeLists.txt                       | 12 ++----
- src/ast.cpp                          |  4 --
- src/ctx.cpp                          | 30 -------------
- src/gen/GlobalsLocalization.cpp      |  4 --
- src/ispc.cpp                         | 20 ---------
- src/ispc.h                           |  3 +-
- src/ispc_version.h                   |  4 +-
- src/main.cpp                         | 13 ------
- src/module.cpp                       | 27 ------------
- src/module.h                         |  2 -
- src/opt.cpp                          | 64 ++--------------------------
- src/type.cpp                         | 10 ++---
- tests/lit-tests/1771.ispc            |  1 -
- tests/lit-tests/1844.ispc            |  3 --
- tests/lit-tests/1926.ispc            |  2 -
- tests/lit-tests/cpus_x86.ispc        |  2 +
- tests/lit-tests/cpus_x86_llvm10.ispc | 11 -----
- tests/lit-tests/lit.cfg              |  5 ---
- 20 files changed, 14 insertions(+), 213 deletions(-)
- delete mode 100644 tests/lit-tests/cpus_x86_llvm10.ispc
-
-diff --git a/.appveyor.yml b/.appveyor.yml
-index 451a7b3e0..7945cca2a 100644
---- a/.appveyor.yml
-+++ b/.appveyor.yml
-@@ -41,8 +41,6 @@ environment:
-       LLVM_VERSION: latest
-     - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
-       LLVM_VERSION: 10.0
--    - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
--      LLVM_VERSION: 9.0
- 
- for:
- -
-@@ -62,7 +60,6 @@ for:
-         if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2019" ( (set generator="Visual Studio 16") & (set vsversion=2019))
-         set LLVM_TAR=llvm-11.0.0-win.vs2019-Release+Asserts-x86.arm.wasm.7z
-         if "%LLVM_VERSION%"=="10.0" (set LLVM_TAR=llvm-10.0.1-win.vs2019-Release+Asserts-x86.arm.wasm.zip)
--        if "%LLVM_VERSION%"=="9.0" (set LLVM_TAR=llvm-9.0.1-win.vs2017-Release+Asserts-x86.arm.wasm.zip)
-   install:
-     - ps: choco install --no-progress winflexbison3 wget 7zip
-     - cmd: |-
-diff --git a/.travis.yml b/.travis.yml
-index 2e96017a6..3a6b85264 100644
---- a/.travis.yml
-+++ b/.travis.yml
-@@ -108,13 +108,6 @@ jobs:
-         - LLVM_TAR=llvm-10.0.1-ubuntu16.04-Release+Asserts-x86.arm.wasm.tar.xz
-         - LLVM_REPO=https://github.com/dbabokin/llvm-project
-         - ISPC_HOME=$TRAVIS_BUILD_DIR
--    # LLVM 9.0 + Ubuntu 16.04: build, lit tests, examples (build + run), benchmarks (build + trial run)
--    - <<: *my_tag
--      env:
--        - LLVM_VERSION=9.0 OS=Ubuntu16.04
--        - LLVM_TAR=llvm-9.0.1-ubuntu16.04-Release+Asserts-x86.arm.wasm.tar.xz
--        - LLVM_REPO=https://github.com/dbabokin/llvm-project
--        - ISPC_HOME=$TRAVIS_BUILD_DIR
-     # WASM enabled build
-     # LLVM 11.0 + Ubuntu 16.04: build, lit tests, examples (build), benchmarks (build + trial run)
-     - <<: *my_tag
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 5fa863fcf..a6b3ed251 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -241,10 +241,8 @@ if (X86_ENABLED)
-         avx2-i8x32 avx2-i16x16
-         avx2-i32x4 avx2-i32x8 avx2-i32x16 avx2-i64x4
-         avx512knl-i32x16
--        avx512skx-i32x16 avx512skx-i32x8)
--    if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "10.0.0")
--        list(APPEND ISPC_TARGETS avx512skx-i8x64 avx512skx-i16x32)
--    endif()
-+        avx512skx-i32x16 avx512skx-i32x8
-+        avx512skx-i8x64 avx512skx-i16x32)
- endif()
- if (ARM_ENABLED)
-     list(APPEND ISPC_TARGETS neon-i8x16 neon-i16x8 neon-i32x4 neon-i32x8)
-@@ -259,11 +257,7 @@ if (WASM_ENABLED)
- endif()
- 
- set(CLANG_LIBRARY_LIST clangFrontend clangDriver clangSerialization clangParse clangSema clangAnalysis clangAST clangBasic clangEdit clangLex)
--set(LLVM_COMPONENTS engine ipo bitreader bitwriter instrumentation linker option)
--
--if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "10.0.0")
--    list(APPEND LLVM_COMPONENTS frontendopenmp)
--endif()
-+set(LLVM_COMPONENTS engine ipo bitreader bitwriter instrumentation linker option frontendopenmp)
- 
- if (X86_ENABLED)
-     list(APPEND LLVM_COMPONENTS x86)
-diff --git a/src/ast.cpp b/src/ast.cpp
-index 20f75a29c..5a43c4854 100644
---- a/src/ast.cpp
-+++ b/src/ast.cpp
-@@ -44,9 +44,7 @@
- #include "sym.h"
- #include "util.h"
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/TimeProfiler.h>
--#endif
- ///////////////////////////////////////////////////////////////////////////
- // ASTNode
- 
-@@ -62,9 +60,7 @@ void AST::AddFunction(Symbol *sym, Stmt *code) {
- }
- 
- void AST::GenerateIR() {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope TimeScope("GenerateIR");
--#endif
-     for (unsigned int i = 0; i < functions.size(); ++i)
-         functions[i]->GenerateIR();
- }
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 977e9d222..42c4ea09d 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -309,21 +309,13 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym, llvm::F
-             char buf[256];
-             snprintf(buf, sizeof(buf), "__off_all_on_mask_%s", g->target->GetISAString());
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_8_0
--            llvm::Constant *offFunc = m->module->getOrInsertFunction(buf, LLVMTypes::VoidType);
--#else // LLVM 9.0+
-             llvm::FunctionCallee offFuncCallee = m->module->getOrInsertFunction(buf, LLVMTypes::VoidType);
-             llvm::Constant *offFunc = llvm::cast<llvm::Constant>(offFuncCallee.getCallee());
--#endif
-             AssertPos(currentPos, llvm::isa<llvm::Function>(offFunc));
-             llvm::BasicBlock *offBB = llvm::BasicBlock::Create(*g->ctx, "entry", (llvm::Function *)offFunc, 0);
-             llvm::StoreInst *inst = new llvm::StoreInst(LLVMMaskAllOff, globalAllOnMaskPtr, offBB);
-             if (g->opt.forceAlignedMemory) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-                 inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-             }
-             llvm::ReturnInst::Create(*g->ctx, offBB);
-         }
-@@ -2288,11 +2280,7 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
- #endif
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-     }
- 
-     AddDebugPos(inst);
-@@ -2431,11 +2419,7 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-                 // vs the proper alignment in practice.)
-                 int align = 1;
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                inst->setAlignment(align);
--#else // LLVM 10.0+
-                 inst->setAlignment(llvm::MaybeAlign(align).valueOrOne());
--#endif
-             }
- 
-             AddDebugPos(inst);
-@@ -2649,11 +2633,7 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-         align = g->target->getNativeVectorAlignment();
- 
-     if (align != 0) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(align);
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(align).valueOrOne());
--#endif
-     }
-     // Don't add debugging info to alloca instructions
-     return inst;
-@@ -2926,11 +2906,7 @@ void FunctionEmitContext::StoreInst(llvm::Value *value, llvm::Value *ptr, const
-     llvm::StoreInst *inst = new llvm::StoreInst(value, ptr, bblock);
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-     }
- 
- #ifdef ISPC_GENX_ENABLED
-@@ -3025,16 +3001,10 @@ void FunctionEmitContext::MemcpyInst(llvm::Value *dest, llvm::Value *src, llvm::
-     }
-     if (align == NULL)
-         align = LLVMInt32(1);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_8_0
--    llvm::Constant *mcFunc =
--        m->module->getOrInsertFunction("llvm.memcpy.p0i8.p0i8.i64", LLVMTypes::VoidType, LLVMTypes::VoidPointerType,
--                                       LLVMTypes::VoidPointerType, LLVMTypes::Int64Type, LLVMTypes::BoolType);
--#else // LLVM 9.0+
-     llvm::FunctionCallee mcFuncCallee =
-         m->module->getOrInsertFunction("llvm.memcpy.p0i8.p0i8.i64", LLVMTypes::VoidType, LLVMTypes::VoidPointerType,
-                                        LLVMTypes::VoidPointerType, LLVMTypes::Int64Type, LLVMTypes::BoolType);
-     llvm::Constant *mcFunc = llvm::cast<llvm::Constant>(mcFuncCallee.getCallee());
--#endif
-     AssertPos(currentPos, mcFunc != NULL);
-     AssertPos(currentPos, llvm::isa<llvm::Function>(mcFunc));
- 
-diff --git a/src/gen/GlobalsLocalization.cpp b/src/gen/GlobalsLocalization.cpp
-index 193a66289..a176e9462 100644
---- a/src/gen/GlobalsLocalization.cpp
-+++ b/src/gen/GlobalsLocalization.cpp
-@@ -470,11 +470,7 @@ void GlobalsLocalization::LocalizeGlobals(LocalizationInfo &LI) {
-         Instruction &FirstI = *Fn->getEntryBlock().begin();
-         Type *ElemTy = GV->getType()->getElementType();
-         AllocaInst *Alloca = new AllocaInst(ElemTy, 0, GV->getName() + ".local", &FirstI);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        Alloca->setAlignment(GV->getAlignment());
--#else // LLVM 10.0+
-         Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()));
--#endif
-         if (!isa<UndefValue>(GV->getInitializer()))
-             new StoreInst(GV->getInitializer(), Alloca, &FirstI);
- 
-diff --git a/src/ispc.cpp b/src/ispc.cpp
-index e2d0f206e..fac5233f7 100644
---- a/src/ispc.cpp
-+++ b/src/ispc.cpp
-@@ -272,9 +272,7 @@ typedef enum {
-     CPU_Silvermont,
- 
-     CPU_ICX,
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     CPU_TGL,
--#endif
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-     CPU_ADL,
-     CPU_SPR,
-@@ -365,10 +363,8 @@ class AllCPUs {
- 
-         names[CPU_ICX].push_back("icelake-server");
-         names[CPU_ICX].push_back("icx");
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         names[CPU_TGL].push_back("tigerlake");
-         names[CPU_TGL].push_back("tgl");
--#endif
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-         names[CPU_ADL].push_back("alderlake");
-         names[CPU_ADL].push_back("adl");
-@@ -411,11 +407,9 @@ class AllCPUs {
-         compat[CPU_ADL] = Set(CPU_ADL, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont,
-                               CPU_SandyBridge, CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_None);
- #endif
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         compat[CPU_TGL] =
-             Set(CPU_TGL, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont, CPU_SandyBridge,
-                 CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_SKX, CPU_ICL, CPU_ICX, CPU_None);
--#endif
-         compat[CPU_ICX] = Set(CPU_ICX, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont,
-                               CPU_SandyBridge, CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_SKX, CPU_ICL, CPU_None);
- 
-@@ -556,9 +550,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-         case CPU_SPR:
- #endif
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         case CPU_TGL:
--#endif
-         case CPU_ICX:
-         case CPU_ICL:
-         case CPU_SKX:
-@@ -916,7 +908,6 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         }
-         break;
-     case ISPCTarget::avx512skx_i8x64:
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0 // LLVM 10.0+
-         // This target is enabled only for LLVM 10.0 and later
-         // because LLVM requires a number of fixes, which are
-         // committed to LLVM 11.0 and can be applied to 10.0, but not
-@@ -937,12 +928,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         this->m_hasVecPrefetch = false;
-         CPUfromISA = CPU_SKX;
-         break;
--#else
--        unsupported_target = true;
--        break;
--#endif
-     case ISPCTarget::avx512skx_i16x32:
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0 // LLVM 10.0+
-         // This target is enabled only for LLVM 10.0 and later
-         // because LLVM requires a number of fixes, which are
-         // committed to LLVM 11.0 and can be applied to 10.0, but not
-@@ -963,10 +949,6 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         this->m_hasVecPrefetch = false;
-         CPUfromISA = CPU_SKX;
-         break;
--#else
--        unsupported_target = true;
--        break;
--#endif
- #ifdef ISPC_ARM_ENABLED
-     case ISPCTarget::neon_i8x16:
-         this->m_isa = Target::NEON;
-@@ -1662,11 +1644,9 @@ Globals::Globals() {
-     isMultiTargetCompilation = false;
-     errorLimit = -1;
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     enableTimeTrace = false;
-     // set default granularity to 500.
-     timeTraceGranularity = 500;
--#endif
-     target = NULL;
-     ctx = new llvm::LLVMContext;
- 
-diff --git a/src/ispc.h b/src/ispc.h
-index e25d8830e..de357a21c 100644
---- a/src/ispc.h
-+++ b/src/ispc.h
-@@ -695,13 +695,12 @@ struct Globals {
- 
-     /* Number of errors to show in ISPC. */
-     int errorLimit;
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-+
-     /* When true, enable compile time tracing. */
-     bool enableTimeTrace;
- 
-     /* When compile time tracing is enabled, set time granularity. */
-     int timeTraceGranularity;
--#endif
- };
- 
- enum {
-diff --git a/src/ispc_version.h b/src/ispc_version.h
-index d781347fd..434b2d678 100644
---- a/src/ispc_version.h
-+++ b/src/ispc_version.h
-@@ -44,13 +44,11 @@
- 
- #define ISPC_LLVM_VERSION (LLVM_VERSION_MAJOR * 10000 + LLVM_VERSION_MINOR * 100)
- 
--#define ISPC_LLVM_8_0 80000
--#define ISPC_LLVM_9_0 90000
- #define ISPC_LLVM_10_0 100000
- #define ISPC_LLVM_11_0 110000
- #define ISPC_LLVM_12_0 120000
- 
--#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_8_0
-+#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_10_0
- #define LATEST_SUPPORTED_LLVM ISPC_LLVM_12_0
- 
- #ifdef __ispc__xstr
-diff --git a/src/main.cpp b/src/main.cpp
-index 8f64330cc..5c920eabc 100644
---- a/src/main.cpp
-+++ b/src/main.cpp
-@@ -55,9 +55,7 @@
- #include <llvm/Support/Signals.h>
- #include <llvm/Support/TargetRegistry.h>
- #include <llvm/Support/TargetSelect.h>
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/ToolOutputFile.h>
--#endif
- 
- #ifdef ISPC_HOST_IS_WINDOWS
- #define strcasecmp stricmp
-@@ -181,11 +179,9 @@ static void lPrintVersion() {
-     snprintf(targetHelp, sizeof(targetHelp), "[--target-os=<os>]\t\t\tSelect target OS.  <os>={%s}",
-              g->target_registry->getSupportedOSes().c_str());
-     PrintWithWordBreaks(targetHelp, 24, TerminalWidth(), stdout);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     printf("    [--time-trace]\t\t\tTurn on time profiler. Generates JSON file based on output filename.\n");
-     printf("    [--time-trace-granularity=<value>\tMinimum time granularity (in microseconds) traced by time "
-            "profiler.\n");
--#endif
-     printf("    [--version]\t\t\t\tPrint ispc version\n");
- #ifdef ISPC_GENX_ENABLED
-     printf("    [--vc-options=<\"-option1 -option2...\">]\t\t\t\tPass additional options to Vector Compiler backend\n");
-@@ -462,7 +458,6 @@ static void setCallingConv(VectorCallStatus vectorCall, Arch arch) {
-     }
- }
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- static void writeCompileTimeFile(const char *outFileName) {
-     llvm::SmallString<128> jsonFileName(outFileName);
-     jsonFileName.append(".json");
-@@ -479,7 +474,6 @@ static void writeCompileTimeFile(const char *outFileName) {
-     of->keep();
-     return;
- }
--#endif
- 
- static std::set<int> ParsingPhases(char *stages, ArgErrors &errorHandler) {
-     constexpr int parsing_limit = 100;
-@@ -791,12 +785,10 @@ int main(int Argc, char *Argv[]) {
-             }
-         } else if (!strncmp(argv[i], "--force-alignment=", 18)) {
-             g->forceAlignment = atoi(argv[i] + 18);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         } else if (!strcmp(argv[i], "--time-trace")) {
-             g->enableTimeTrace = true;
-         } else if (!strncmp(argv[i], "--time-trace-granularity=", 25)) {
-             g->timeTraceGranularity = atoi(argv[i] + 25);
--#endif
-         } else if (!strcmp(argv[i], "--woff") || !strcmp(argv[i], "-woff")) {
-             g->disableWarnings = true;
-             g->emitPerfWarnings = false;
-@@ -1059,7 +1051,6 @@ int main(int Argc, char *Argv[]) {
- 
-     // This needs to happen after the TargetOS is decided.
-     setCallingConv(vectorCall, arch);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     if (g->enableTimeTrace) {
-         llvm::timeTraceProfilerInitialize(g->timeTraceGranularity, "ispc");
-     }
-@@ -1077,9 +1068,5 @@ int main(int Argc, char *Argv[]) {
-         }
-         llvm::timeTraceProfilerCleanup();
-     }
--#else
--    int ret = Module::CompileAndOutput(file, arch, cpu, targets, flags, ot, outFileName, headerFileName, depsFileName,
--                                       depsTargetName, hostStubFileName, devStubFileName);
--#endif
-     return ret;
- }
-diff --git a/src/module.cpp b/src/module.cpp
-index fe7452df1..a85fec77a 100644
---- a/src/module.cpp
-+++ b/src/module.cpp
-@@ -170,9 +170,7 @@ Module::Module(const char *fn) {
-     module->setDataLayout(g->target->getDataLayout()->getStringRepresentation());
- 
-     if (g->generateDebuggingSymbols) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Create Debug Data");
--#endif
-         // To enable debug information on Windows, we have to let llvm know, that
-         // debug information should be emitted in CodeView format.
-         if (g->target_os == TargetOS::windows) {
-@@ -226,10 +224,8 @@ extern YY_BUFFER_STATE yy_create_buffer(FILE *, int);
- extern void yy_delete_buffer(YY_BUFFER_STATE);
- 
- int Module::CompileFile() {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope CompileFileTimeScope(
-         "CompileFile", llvm::StringRef(filename + ("_" + std::string(g->target->GetISAString()))));
--#endif
-     extern void ParserInit();
-     ParserInit();
- 
-@@ -238,18 +234,14 @@ int Module::CompileFile() {
-     // variable 'm' to be initialized and available (which it isn't until
-     // the Module constructor returns...)
-     {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("DefineStdlib");
--#endif
-         DefineStdlib(symbolTable, g->ctx, module, g->includeStdlib);
-     }
- 
-     bool runPreprocessor = g->runCPP;
- 
-     if (runPreprocessor) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Frontend parser");
--#endif
-         if (!IsStdin(filename)) {
-             // Try to open the file first, since otherwise we crash in the
-             // preprocessor if the file doesn't exist.
-@@ -268,9 +260,7 @@ int Module::CompileFile() {
-         yyparse();
-         yy_delete_buffer(strbuf);
-     } else {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Frontend parser");
--#endif
-         // No preprocessor, just open up the file if it's not stdin..
-         FILE *f = NULL;
-         if (IsStdin(filename)) {
-@@ -297,9 +287,7 @@ int Module::CompileFile() {
- 
-     if (diBuilder)
-         diBuilder->finalize();
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope TimeScope("Optimize");
--#endif
-     if (errorCount == 0)
-         Optimize(module, g->opt.level);
- 
-@@ -1243,15 +1231,8 @@ bool Module::writeObjectFileOrAssembly(llvm::TargetMachine *targetMachine, llvm:
-                                        const char *outFileName) {
-     // Figure out if we're generating object file or assembly output, and
-     // set binary output for object files
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    Assert(!g->target->isGenXTarget());
--    llvm::TargetMachine::CodeGenFileType fileType =
--        (outputType == Object) ? llvm::TargetMachine::CGFT_ObjectFile : llvm::TargetMachine::CGFT_AssemblyFile;
--    bool binary = (fileType == llvm::TargetMachine::CGFT_ObjectFile);
--#else // LLVM 10.0+
-     llvm::CodeGenFileType fileType = (outputType == Object) ? llvm::CGFT_ObjectFile : llvm::CGFT_AssemblyFile;
-     bool binary = (fileType == llvm::CGFT_ObjectFile);
--#endif
- 
-     llvm::sys::fs::OpenFlags flags = binary ? llvm::sys::fs::F_None : llvm::sys::fs::F_Text;
- 
-@@ -2219,11 +2200,7 @@ void Module::execPreprocessor(const char *infilename, llvm::raw_string_ostream *
-     inst.setTarget(target);
-     inst.createSourceManager(inst.getFileManager());
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    clang::FrontendInputFile inputFile(infilename, clang::InputKind::Unknown);
--#else // LLVM 10.0+
-     clang::FrontendInputFile inputFile(infilename, clang::InputKind());
--#endif
- 
-     inst.InitializeSourceManager(inputFile);
- 
-@@ -2722,9 +2699,7 @@ int Module::CompileAndOutput(const char *srcFile, Arch arch, const char *cpu, st
- 
-         m = new Module(srcFile);
-         if (m->CompileFile() == 0) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-             llvm::TimeTraceScope TimeScope("Backend");
--#endif
- #ifdef ISPC_GENX_ENABLED
-             if (outputType == Asm || outputType == Object) {
-                 if (g->target->isGenXTarget()) {
-@@ -2855,9 +2830,7 @@ int Module::CompileAndOutput(const char *srcFile, Arch arch, const char *cpu, st
- 
-             m = new Module(srcFile);
-             int compileFileError = m->CompileFile();
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-             llvm::TimeTraceScope TimeScope("Backend");
--#endif
-             if (compileFileError == 0) {
-                 // Create the dispatch module, unless already created;
-                 // in the latter case, just do the checking
-diff --git a/src/module.h b/src/module.h
-index 61d3cfea0..603124d50 100644
---- a/src/module.h
-+++ b/src/module.h
-@@ -43,9 +43,7 @@
- 
- #include <llvm/IR/DebugInfo.h>
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/TimeProfiler.h>
--#endif
- 
- #ifdef ISPC_GENX_ENABLED
- #include "ocl_igc_interface/igc_ocl_device_ctx.h"
-diff --git a/src/opt.cpp b/src/opt.cpp
-index a655a8344..5b1ac7b63 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -66,6 +66,7 @@
- #include <llvm/IR/Instructions.h>
- #include <llvm/IR/IntrinsicInst.h>
- #include <llvm/IR/Intrinsics.h>
-+#include <llvm/IR/IntrinsicsX86.h>
- #include <llvm/IR/LegacyPassManager.h>
- #include <llvm/IR/Module.h>
- #include <llvm/IR/PatternMatch.h>
-@@ -85,9 +86,6 @@
- #include <llvm/Transforms/Scalar/InstSimplifyPass.h>
- #include <llvm/Transforms/Utils.h>
- #include <llvm/Transforms/Utils/BasicBlockUtils.h>
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
--#include <llvm/IR/IntrinsicsX86.h>
--#endif
- 
- #ifdef ISPC_HOST_IS_LINUX
- #include <alloca.h>
-@@ -1003,10 +1001,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
-                 name = LLVMGetName(callInst->getArgOperand(0), "_load");
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                llvm::Instruction *loadInst =
--                    new llvm::LoadInst(castPtr, name, false /* not volatile */, align, (llvm::Instruction *)NULL);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-                 llvm::Instruction *loadInst = new llvm::LoadInst(castPtr, name, false /* not volatile */,
-                                                                  llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
- #else
-@@ -1043,13 +1038,8 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedStore32 ? 4 : 8;
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                llvm::StoreInst *storeInst = new llvm::StoreInst(rvalue, castPtr, (llvm::Instruction *)NULL);
--                storeInst->setAlignment(align);
--#else
-                 llvm::StoreInst *storeInst = new llvm::StoreInst(rvalue, castPtr, (llvm::Instruction *)NULL,
-                                                                  llvm::MaybeAlign(align).valueOrOne());
--#endif
-                 lCopyMetadata(storeInst, callInst);
-                 llvm::ReplaceInstWithInst(callInst, storeInst);
- 
-@@ -1066,9 +1056,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool IntrinsicsOpt::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("IntrinsicsOpt::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -1239,9 +1227,7 @@ bool InstructionSimplifyPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool InstructionSimplifyPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("InstructionSimplifyPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -2974,16 +2960,10 @@ static bool lImproveMaskedStore(llvm::CallInst *callInst) {
- 
-             lvalue = new llvm::BitCastInst(lvalue, ptrType, "lvalue_to_ptr_type", callInst);
-             lCopyMetadata(lvalue, callInst);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--            store =
--                new llvm::StoreInst(rvalue, lvalue, false /* not volatile */,
--                                    g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align);
--#else
-             store = new llvm::StoreInst(
-                 rvalue, lvalue, false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-                     .valueOrOne());
--#endif
-         }
-         if (store != NULL) {
-             lCopyMetadata(store, callInst);
-@@ -3059,11 +3039,7 @@ static bool lImproveMaskedLoad(llvm::CallInst *callInst, llvm::BasicBlock::itera
-         {
-             llvm::Type *ptrType = llvm::PointerType::get(callInst->getType(), 0);
-             ptr = new llvm::BitCastInst(ptr, ptrType, "ptr_cast_for_load", callInst);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--            load = new llvm::LoadInst(ptr, callInst->getName(), false /* not volatile */,
--                                      g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align,
--                                      (llvm::Instruction *)NULL);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-             load = new llvm::LoadInst(
-                 ptr, callInst->getName(), false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-@@ -3129,9 +3105,7 @@ bool ImproveMemoryOpsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ImproveMemoryOpsPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ImproveMemoryOpsPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -3424,9 +3398,7 @@ llvm::Value *lGEPAndLoad(llvm::Value *basePtr, int64_t offset, int align, llvm::
-                          llvm::Type *type) {
-     llvm::Value *ptr = lGEPInst(basePtr, LLVMInt64(offset), "new_base", insertBefore);
-     ptr = new llvm::BitCastInst(ptr, llvm::PointerType::get(type, 0), "ptr_cast", insertBefore);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, align, insertBefore);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-     return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, llvm::MaybeAlign(align), insertBefore);
- #else // LLVM 11.0+
-     return new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-@@ -4135,9 +4107,7 @@ bool GatherCoalescePass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool GatherCoalescePass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("GatherCoalescePass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -4467,9 +4437,7 @@ bool ReplacePseudoMemoryOpsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplacePseudoMemoryOpsPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplacePseudoMemoryOpsPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -4573,9 +4541,7 @@ bool IsCompileTimeConstantPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool IsCompileTimeConstantPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("IsCompileTimeConstantPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5201,9 +5167,7 @@ bool PeepholePass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool PeepholePass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("PeepholePass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5299,9 +5263,7 @@ bool ReplaceStdlibShiftPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceStdlibShiftPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceStdlibShiftPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5399,9 +5361,7 @@ llvm::Instruction *FixBooleanSelectPass::fixSelect(llvm::SelectInst *sel, llvm::
- }
- 
- bool FixBooleanSelectPass::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("FixBooleanSelectPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
- 
-     return modifiedAny;
-@@ -5964,9 +5924,7 @@ bool GenXGatherCoalescing::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool GenXGatherCoalescing::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("GenXGatherCoalescing::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6113,9 +6071,7 @@ bool PromoteToPrivateMemoryPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool PromoteToPrivateMemoryPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("PromoteToPrivateMemoryPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6181,9 +6137,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceLLVMIntrinsics::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceLLVMIntrinsics::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6278,9 +6232,7 @@ bool ReplaceUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceUnsupportedInsts::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceUnsupportedInsts::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6369,9 +6321,7 @@ bool CheckUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool CheckUnsupportedInsts::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("CheckUnsupportedInsts::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6440,9 +6390,7 @@ bool MangleOpenCLBuiltins::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool MangleOpenCLBuiltins::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("MangleOpenCLBuiltins::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6828,9 +6776,7 @@ bool FixAddressSpace::runOnFunction(llvm::Function &F) {
-     // Transformations are correct when the function is not internal.
-     // This is due to address space calculation algorithm.
-     // TODO: problems can be met in case of Stack Calls
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("FixAddressSpace::runOnFunction", F.getName());
--#endif
-     if (F.getLinkage() == llvm::GlobalValue::LinkageTypes::InternalLinkage)
-         return false;
- 
-@@ -6854,9 +6800,7 @@ class DemotePHIs : public llvm::FunctionPass {
- char DemotePHIs::ID = 0;
- 
- bool DemotePHIs::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("DemotePHIs::runOnFunction", F.getName());
--#endif
-     if (F.isDeclaration() || skipFunction(F))
-         return false;
-     std::vector<llvm::Instruction *> WorkList;
-diff --git a/src/type.cpp b/src/type.cpp
-index 688a4e874..fa0cb04db 100644
---- a/src/type.cpp
-+++ b/src/type.cpp
-@@ -1822,14 +1822,10 @@ llvm::DIType *StructType::GetDIType(llvm::DIScope *scope) const {
-     llvm::DIFile *diFile = pos.GetDIFile();
-     llvm::DINamespace *diSpace = pos.GetDINamespace();
-     return m->diBuilder->createStructType(diSpace, GetString(), diFile,
--                                          pos.first_line,          // Line number
--                                          layout->getSizeInBits(), // Size in bits
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                                          layout->getAlignment() * 8, // Alignment in bits
--#else                                                                 // LLVM 10.0+
-+                                          pos.first_line,                     // Line number
-+                                          layout->getSizeInBits(),            // Size in bits
-                                           layout->getAlignment().value() * 8, // Alignment in bits
--#endif
--                                          llvm::DINode::FlagZero, // Flags
-+                                          llvm::DINode::FlagZero,             // Flags
-                                           NULL, elements);
- }
- 
-diff --git a/tests/lit-tests/1771.ispc b/tests/lit-tests/1771.ispc
-index 98064d84d..4feb73dd7 100644
---- a/tests/lit-tests/1771.ispc
-+++ b/tests/lit-tests/1771.ispc
-@@ -5,7 +5,6 @@
- // RUN: %{ispc} %s --target=sse4-i16x8 --emit-asm -o - | FileCheck %s -check-prefix=CHECKSSE4_I16X8
- // RUN: %{ispc} %s --target=sse4-i8x16 --emit-asm -o - | FileCheck %s -check-prefix=CHECKSSE4_I8X16
- 
--// REQUIRES: LLVM_10_0+
- // REQUIRES: X86_ENABLED
- 
- // CHECKAVX2_I32X8: {{[a-z]*xor[a-z]*}}  %xmm0, %xmm0, %xmm0
-diff --git a/tests/lit-tests/1844.ispc b/tests/lit-tests/1844.ispc
-index 793a8866c..189edf4c3 100644
---- a/tests/lit-tests/1844.ispc
-+++ b/tests/lit-tests/1844.ispc
-@@ -6,9 +6,6 @@
- 
- // REQUIRES: X86_ENABLED
- 
--// It doesn't work for anything earlier than 10.0, but it will not be fixed, so don't run.
--// REQUIRES: LLVM_10_0+
--
- extern uniform unsigned int64 var_6;
- extern uniform unsigned int16 var_11;
- extern uniform bool arr_201 [1] [15] [20];
-diff --git a/tests/lit-tests/1926.ispc b/tests/lit-tests/1926.ispc
-index 70f7cc3c2..7921c91a6 100644
---- a/tests/lit-tests/1926.ispc
-+++ b/tests/lit-tests/1926.ispc
-@@ -2,8 +2,6 @@
- // RUN: cat %T/1926.o.json \
- // RUN:   | FileCheck %s
- 
--// REQUIRES: LLVM_10_0+
--
- // CHECK: "traceEvents"
- // CHECK: "detail"
- export uniform int foo(uniform int a[], uniform int count) {
-diff --git a/tests/lit-tests/cpus_x86.ispc b/tests/lit-tests/cpus_x86.ispc
-index 516efdd4c..4d60186f6 100644
---- a/tests/lit-tests/cpus_x86.ispc
-+++ b/tests/lit-tests/cpus_x86.ispc
-@@ -24,6 +24,8 @@
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icl
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icelake-server
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icx
-+//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tigerlake
-+//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tgl
- 
- // REQUIRES: X86_ENABLED
- 
-diff --git a/tests/lit-tests/cpus_x86_llvm10.ispc b/tests/lit-tests/cpus_x86_llvm10.ispc
-deleted file mode 100644
-index ef00000e5..000000000
---- a/tests/lit-tests/cpus_x86_llvm10.ispc
-+++ /dev/null
-@@ -1,11 +0,0 @@
--// The test checks that cpu definitions (including all synonyms) are successfully consumed by compiler.
--
--//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tigerlake
--//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tgl
--
--// REQUIRES: X86_ENABLED
--// REQUIRES: LLVM_10_0+
--
--uniform int i;
--
--void foo() {}
-diff --git a/tests/lit-tests/lit.cfg b/tests/lit-tests/lit.cfg
-index 17016579d..045e69437 100644
---- a/tests/lit-tests/lit.cfg
-+++ b/tests/lit-tests/lit.cfg
-@@ -30,11 +30,6 @@ print("Config:")
- 
- # LLVM version
- llvm_version = LooseVersion(ispc_llvm_version_number)
--if llvm_version >= LooseVersion("10.0.0"):
--    print("LLVM_10_0+: YES")
--    config.available_features.add("LLVM_10_0+")
--else:
--    print("LLVM_10_0+: NO")
- 
- if llvm_version >= LooseVersion("12.0.0"):
-     print("LLVM_12_0+: YES")
diff --git a/srcpkgs/ispc/patches/llvm12-003.patch b/srcpkgs/ispc/patches/llvm12-003.patch
deleted file mode 100644
index 0423afc9e3f9..000000000000
--- a/srcpkgs/ispc/patches/llvm12-003.patch
+++ /dev/null
@@ -1,1504 +0,0 @@
-From 1851d18b213dbad169937076176b2d5509733c76 Mon Sep 17 00:00:00 2001
-From: Deepak Rajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Tue, 12 Jan 2021 22:15:12 -0800
-Subject: [PATCH] fixes #1821 - Removing LLVMGetName() and switching to
- LLVM::Twine.
-
----
- src/ctx.cpp      | 304 ++++++++++++++++++++++-------------------------
- src/ctx.h        |  72 +++++------
- src/expr.cpp     |  36 +++---
- src/llvmutil.cpp |  17 ---
- src/llvmutil.h   |   5 -
- src/opt.cpp      | 103 +++++++++-------
- 6 files changed, 255 insertions(+), 282 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 42c4ea09d..ded524b71 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1020,8 +1020,8 @@ void FunctionEmitContext::EmitCaseLabel(int value, bool checkMask, SourcePos pos
-     llvm::BasicBlock *bbCaseImpl = NULL;
-     if (emitGenXHardwareMask()) {
-         // Create basic block with actual case implementation
--        std::string bbName = bbCase->getName().str() + "_impl";
--        bbCaseImpl = CreateBasicBlock(bbName.c_str(), bbCase);
-+        llvm::Twine bbName = llvm::Twine(bbCase->getName()) + "_impl";
-+        bbCaseImpl = CreateBasicBlock(bbName, bbCase);
-     }
- #endif
- 
-@@ -1185,7 +1185,7 @@ bool FunctionEmitContext::initLabelBBlocks(ASTNode *node, void *data) {
-     if (ctx->labelMap.find(ls->name) != ctx->labelMap.end())
-         Error(ls->pos, "Multiple labels named \"%s\" in function.", ls->name.c_str());
-     else {
--        llvm::BasicBlock *bb = ctx->CreateBasicBlock(ls->name.c_str());
-+        llvm::BasicBlock *bb = ctx->CreateBasicBlock(ls->name);
-         ctx->labelMap[ls->name] = bb;
-     }
-     return true;
-@@ -1299,7 +1299,7 @@ llvm::Value *FunctionEmitContext::Any(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_any"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_any");
- }
- 
- llvm::Value *FunctionEmitContext::All(llvm::Value *mask) {
-@@ -1315,7 +1315,7 @@ llvm::Value *FunctionEmitContext::All(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_all"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_all");
- }
- 
- llvm::Value *FunctionEmitContext::None(llvm::Value *mask) {
-@@ -1331,7 +1331,7 @@ llvm::Value *FunctionEmitContext::None(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_none"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_none");
- }
- 
- llvm::Value *FunctionEmitContext::LaneMask(llvm::Value *v) {
-@@ -1349,7 +1349,7 @@ llvm::Value *FunctionEmitContext::LaneMask(llvm::Value *v) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, v, LLVMGetName(v, "_movmsk"));
-+    return CallInst(fmm, NULL, v, llvm::Twine(v->getName()) + "_movmsk");
- }
- 
- llvm::Value *FunctionEmitContext::MasksAllEqual(llvm::Value *v1, llvm::Value *v2) {
-@@ -1364,11 +1364,12 @@ llvm::Value *FunctionEmitContext::MasksAllEqual(llvm::Value *v1, llvm::Value *v2
- #else
-     if (g->target->getArch() == Arch::wasm32) {
-         llvm::Function *fmm = m->module->getFunction("__wasm_cmp_msk_eq");
--        return CallInst(fmm, NULL, {v1, v2}, LLVMGetName("wasm_cmp_msk_eq", v1, v2));
-+        return CallInst(fmm, NULL, {v1, v2}, ((llvm::Twine("wasm_cmp_msk_eq_") + v1->getName()) + "_") + v2->getName());
-     }
-     llvm::Value *mm1 = LaneMask(v1);
-     llvm::Value *mm2 = LaneMask(v2);
--    return CmpInst(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_EQ, mm1, mm2, LLVMGetName("equal", v1, v2));
-+    return CmpInst(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_EQ, mm1, mm2,
-+                   ((llvm::Twine("equal_") + v1->getName()) + "_") + v2->getName());
- #endif
- }
- 
-@@ -1392,7 +1393,7 @@ llvm::Value *FunctionEmitContext::GetStringPtr(const std::string &str) {
-     return new llvm::BitCastInst(lstrPtr, LLVMTypes::VoidPointerType, "str_void_ptr", bblock);
- }
- 
--llvm::BasicBlock *FunctionEmitContext::CreateBasicBlock(const char *name, llvm::BasicBlock *insertAfter) {
-+llvm::BasicBlock *FunctionEmitContext::CreateBasicBlock(const llvm::Twine &name, llvm::BasicBlock *insertAfter) {
-     llvm::BasicBlock *newBB = llvm::BasicBlock::Create(*g->ctx, name, llvmFunction);
-     if (insertAfter)
-         newBB->moveAfter(insertAfter);
-@@ -1416,14 +1417,15 @@ llvm::Value *FunctionEmitContext::I1VecToBoolVec(llvm::Value *b) {
- 
-         for (unsigned int i = 0; i < at->getNumElements(); ++i) {
-             llvm::Value *elt = ExtractInst(b, i);
--            llvm::Value *sext = SwitchBoolSize(elt, LLVMTypes::BoolVectorStorageType, LLVMGetName(elt, "_to_boolvec"));
-+            llvm::Value *sext =
-+                SwitchBoolSize(elt, LLVMTypes::BoolVectorStorageType, llvm::Twine(elt->getName()) + "_to_boolvec");
-             ret = InsertInst(ret, sext, i);
-         }
-         return ret;
-     } else {
-         // For non-array types, convert to 'LLVMTypes::BoolVectorType' if
-         // necessary.
--        return SwitchBoolSize(b, LLVMTypes::BoolVectorType, LLVMGetName(b, "_to_boolvec"));
-+        return SwitchBoolSize(b, LLVMTypes::BoolVectorType, llvm::Twine(b->getName()) + "_to_boolvec");
-     }
- }
- 
-@@ -1563,7 +1565,7 @@ static int lArrayVectorWidth(llvm::Type *t) {
- }
- 
- llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps inst, llvm::Value *v0, llvm::Value *v1,
--                                                 const char *name) {
-+                                                 const llvm::Twine &name) {
-     if (v0 == NULL || v1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1573,7 +1575,7 @@ llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps in
-     llvm::Type *type = v0->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *bop = llvm::BinaryOperator::Create(inst, v0, v1, name ? name : "", bblock);
-+        llvm::Instruction *bop = llvm::BinaryOperator::Create(inst, v0, v1, name, bblock);
-         AddDebugPos(bop);
-         return bop;
-     } else {
-@@ -1591,7 +1593,7 @@ llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps in
-     }
- }
- 
--llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const char *name) {
-+llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const llvm::Twine &name) {
-     if (v == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1603,14 +1605,14 @@ llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const char *name)
-     llvm::Type *type = v->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *binst = llvm::BinaryOperator::CreateNot(v, name ? name : "not", bblock);
-+        llvm::Instruction *binst = llvm::BinaryOperator::CreateNot(v, name.isTriviallyEmpty() ? "not" : name, bblock);
-         AddDebugPos(binst);
-         return binst;
-     } else {
-         llvm::Value *ret = llvm::UndefValue::get(type);
-         for (int i = 0; i < arraySize; ++i) {
-             llvm::Value *a = ExtractInst(v, i);
--            llvm::Value *op = llvm::BinaryOperator::CreateNot(a, name ? name : "not", bblock);
-+            llvm::Value *op = llvm::BinaryOperator::CreateNot(a, name.isTriviallyEmpty() ? "not" : name, bblock);
-             AddDebugPos(op);
-             ret = InsertInst(ret, op, i);
-         }
-@@ -1638,7 +1640,7 @@ static llvm::Type *lGetMatchingBoolVectorType(llvm::Type *type) {
- }
- 
- llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm::CmpInst::Predicate pred,
--                                          llvm::Value *v0, llvm::Value *v1, const char *name) {
-+                                          llvm::Value *v0, llvm::Value *v1, const llvm::Twine &name) {
-     if (v0 == NULL || v1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1648,7 +1650,8 @@ llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm
-     llvm::Type *type = v0->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *ci = llvm::CmpInst::Create(inst, pred, v0, v1, name ? name : "cmp", bblock);
-+        llvm::Instruction *ci =
-+            llvm::CmpInst::Create(inst, pred, v0, v1, name.isTriviallyEmpty() ? "cmp" : name, bblock);
-         AddDebugPos(ci);
-         return ci;
-     } else {
-@@ -1657,14 +1660,14 @@ llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm
-         for (int i = 0; i < arraySize; ++i) {
-             llvm::Value *a = ExtractInst(v0, i);
-             llvm::Value *b = ExtractInst(v1, i);
--            llvm::Value *op = CmpInst(inst, pred, a, b, name);
-+            llvm::Value *op = CmpInst(inst, pred, a, b, name.isTriviallyEmpty() ? "cmp" : name);
-             ret = InsertInst(ret, op, i);
-         }
-         return ret;
-     }
- }
- 
--llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const char *name) {
-+llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1704,21 +1707,19 @@ llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const char *n
-     return ret;
- }
- 
--llvm::Value *FunctionEmitContext::BitCastInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Value *FunctionEmitContext::BitCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_bitcast");
--
--    llvm::Instruction *inst = new llvm::BitCastInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::BitCastInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_bitcast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const char *name) {
-+llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1728,23 +1729,19 @@ llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const char *n
-         // no-op for varying pointers; they're already vectors of ints
-         return value;
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_ptr2int");
-     llvm::Type *type = LLVMTypes::PointerIntType;
--    llvm::Instruction *inst = new llvm::PtrToIntInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::PtrToIntInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_ptr2int");
--
-     llvm::Type *fromType = value->getType();
-     if (llvm::isa<llvm::VectorType>(fromType)) {
-         // varying pointer
-@@ -1752,27 +1749,26 @@ llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *t
-             // already the right type--done
-             return value;
-         else if (fromType->getScalarSizeInBits() > toType->getScalarSizeInBits())
--            return TruncInst(value, toType, name);
-+            return TruncInst(value, toType,
-+                             name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name);
-         else {
-             AssertPos(currentPos, fromType->getScalarSizeInBits() < toType->getScalarSizeInBits());
--            return ZExtInst(value, toType, name);
-+            return ZExtInst(value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name);
-         }
-     }
- 
--    llvm::Instruction *inst = new llvm::PtrToIntInst(value, toType, name, bblock);
-+    llvm::Instruction *inst = new llvm::PtrToIntInst(
-+        value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_int2ptr");
--
-     llvm::Type *fromType = value->getType();
-     if (llvm::isa<llvm::VectorType>(fromType)) {
-         // varying pointer
-@@ -1780,95 +1776,87 @@ llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *t
-             // done
-             return value;
-         else if (fromType->getScalarSizeInBits() > toType->getScalarSizeInBits())
--            return TruncInst(value, toType, name);
-+            return TruncInst(value, toType,
-+                             name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name);
-         else {
-             AssertPos(currentPos, fromType->getScalarSizeInBits() < toType->getScalarSizeInBits());
--            return ZExtInst(value, toType, name);
-+            return ZExtInst(value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name);
-         }
-     }
- 
--    llvm::Instruction *inst = new llvm::IntToPtrInst(value, toType, name, bblock);
-+    llvm::Instruction *inst = new llvm::IntToPtrInst(
-+        value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::TruncInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::TruncInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_trunc");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::TruncInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::TruncInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_trunc" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
- llvm::Instruction *FunctionEmitContext::CastInst(llvm::Instruction::CastOps op, llvm::Value *value, llvm::Type *type,
--                                                 const char *name) {
-+                                                 const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_cast");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = llvm::CastInst::Create(op, value, type, name, bblock);
-+    llvm::Instruction *inst = llvm::CastInst::Create(
-+        op, value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_cast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::FPCastInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::FPCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_cast");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = llvm::CastInst::CreateFPCast(value, type, name, bblock);
-+    llvm::Instruction *inst = llvm::CastInst::CreateFPCast(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_cast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::SExtInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::SExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_sext");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::SExtInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::SExtInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_sext" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::ZExtInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::ZExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_zext");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::ZExtInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::ZExtInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_zext" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
-@@ -1913,14 +1901,15 @@ llvm::Value *FunctionEmitContext::applyVaryingGEP(llvm::Value *basePtr, llvm::Va
-         scale = SmearUniform(scale);
-         Assert(index != NULL);
-         // offset = index * scale
--        offset = BinaryOperator(llvm::Instruction::Mul, scale, index, LLVMGetName("mul", scale, index));
-+        offset = BinaryOperator(llvm::Instruction::Mul, scale, index,
-+                                ((llvm::Twine("mul_") + scale->getName()) + "_") + index->getName());
-     }
- 
-     // For 64-bit targets, if we've been doing our offset calculations in
-     // 32 bits, we still have to convert to a 64-bit value before we
-     // actually add the offset to the pointer.
-     if (g->target->is32Bit() == false && g->opt.force32BitAddressing == true)
--        offset = SExtInst(offset, LLVMTypes::Int64VectorType, LLVMGetName(offset, "_to_64"));
-+        offset = SExtInst(offset, LLVMTypes::Int64VectorType, llvm::Twine(offset->getName()) + "_to_64");
- 
-     // Smear out the pointer to be varying; either the base pointer or the
-     // index must be varying for this method to be called.
-@@ -1929,7 +1918,7 @@ llvm::Value *FunctionEmitContext::applyVaryingGEP(llvm::Value *basePtr, llvm::Va
-     llvm::Value *varyingPtr = baseIsUniform ? SmearUniform(basePtr) : basePtr;
- 
-     // newPtr = ptr + offset
--    return BinaryOperator(llvm::Instruction::Add, varyingPtr, offset, LLVMGetName(basePtr, "_offset"));
-+    return BinaryOperator(llvm::Instruction::Add, varyingPtr, offset, llvm::Twine(basePtr->getName()) + "_offset");
- }
- 
- void FunctionEmitContext::MatchIntegerTypes(llvm::Value **v0, llvm::Value **v1) {
-@@ -2006,13 +1995,13 @@ llvm::Value *FunctionEmitContext::MakeSlicePointer(llvm::Value *ptr, llvm::Value
-     llvm::StructType *st = llvm::StructType::get(*g->ctx, eltTypes);
- 
-     llvm::Value *ret = llvm::UndefValue::get(st);
--    ret = InsertInst(ret, ptr, 0, LLVMGetName(ret, "_slice_ptr"));
--    ret = InsertInst(ret, offset, 1, LLVMGetName(ret, "_slice_offset"));
-+    ret = InsertInst(ret, ptr, 0, llvm::Twine(ret->getName()) + "_slice_ptr");
-+    ret = InsertInst(ret, offset, 1, llvm::Twine(ret->getName()) + "_slice_offset");
-     return ret;
- }
- 
- llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index, const Type *ptrRefType,
--                                                    const char *name) {
-+                                                    const llvm::Twine &name) {
-     if (basePtr == NULL || index == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2065,8 +2054,8 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
-         // uniform, so just emit the regular LLVM GEP instruction
-         llvm::Value *ind[1] = {index};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&ind[0], &ind[1]);
--        llvm::Instruction *inst =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "gep", bblock);
-+        llvm::Instruction *inst = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                                  name.isTriviallyEmpty() ? "gep" : name, bblock);
-         AddDebugPos(inst);
-         return inst;
-     } else
-@@ -2074,7 +2063,7 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
- }
- 
- llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0, llvm::Value *index1,
--                                                    const Type *ptrRefType, const char *name) {
-+                                                    const Type *ptrRefType, const llvm::Twine &name) {
-     if (basePtr == NULL || index0 == NULL || index1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2114,8 +2103,8 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
-         // uniform, so just emit the regular LLVM GEP instruction
-         llvm::Value *indices[2] = {index0, index1};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&indices[0], &indices[2]);
--        llvm::Instruction *inst =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "gep", bblock);
-+        llvm::Instruction *inst = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                                  name.isTriviallyEmpty() ? "gep" : name, bblock);
-         AddDebugPos(inst);
-         return inst;
-     } else {
-@@ -2138,7 +2127,7 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
- }
- 
- llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int elementNum, const Type *ptrRefType,
--                                                   const char *name, const PointerType **resultPtrType) {
-+                                                   const llvm::Twine &name, const PointerType **resultPtrType) {
-     if (resultPtrType != NULL)
-         AssertPos(currentPos, ptrRefType != NULL);
- 
-@@ -2195,8 +2184,8 @@ llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int
-         // If the pointer is uniform, we can use the regular LLVM GEP.
-         llvm::Value *offsets[2] = {LLVMInt32(0), LLVMInt32(elementNum)};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&offsets[0], &offsets[2]);
--        resultPtr =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "struct_offset", bblock);
-+        resultPtr = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                    name.isTriviallyEmpty() ? "struct_offset" : name, bblock);
-     } else {
-         // Otherwise do the math to find the offset and add it to the given
-         // varying pointers
-@@ -2237,7 +2226,7 @@ llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int
-         return resultPtr;
- }
- 
--llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if ((value == NULL) || (toType == NULL)) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2248,20 +2237,18 @@ llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type
-     llvm::Value *newBool = value;
-     if (g->target->getDataLayout()->getTypeSizeInBits(fromType) >
-         g->target->getDataLayout()->getTypeSizeInBits(toType)) {
--        if (name == NULL)
--            name = LLVMGetName(value, "_switchBool");
--        newBool = TruncInst(value, toType, name);
-+        newBool =
-+            TruncInst(value, toType, name.isTriviallyEmpty() ? (llvm::Twine(value->getName()) + "_switchBool") : name);
-     } else if (g->target->getDataLayout()->getTypeSizeInBits(fromType) <
-                g->target->getDataLayout()->getTypeSizeInBits(toType)) {
--        if (name == NULL)
--            name = LLVMGetName(value, "_switchBool");
--        newBool = SExtInst(value, toType, name);
-+        newBool =
-+            SExtInst(value, toType, name.isTriviallyEmpty() ? (llvm::Twine(value->getName()) + "_switchBool") : name);
-     }
- 
-     return newBool;
- }
- 
--llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, const char *name) {
-+llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, const llvm::Twine &name) {
-     if (ptr == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2270,13 +2257,13 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
-     llvm::PointerType *pt = llvm::dyn_cast<llvm::PointerType>(ptr->getType());
-     AssertPos(currentPos, pt != NULL);
- 
--    if (name == NULL)
--        name = LLVMGetName(ptr, "_load");
--
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    llvm::LoadInst *inst = new llvm::LoadInst(pt->getPointerElementType(), ptr, name, bblock);
-+    llvm::LoadInst *inst =
-+        new llvm::LoadInst(pt->getPointerElementType(), ptr,
-+                           name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name, bblock);
- #else
--    llvm::LoadInst *inst = new llvm::LoadInst(ptr, name, bblock);
-+    llvm::LoadInst *inst =
-+        new llvm::LoadInst(ptr, name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name, bblock);
- #endif
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
-@@ -2307,8 +2294,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
- static llvm::Value *lFinalSliceOffset(FunctionEmitContext *ctx, llvm::Value *ptr, const PointerType **ptrType) {
-     Assert(CastType<PointerType>(*ptrType) != NULL);
- 
--    llvm::Value *slicePtr = ctx->ExtractInst(ptr, 0, LLVMGetName(ptr, "_ptr"));
--    llvm::Value *sliceOffset = ctx->ExtractInst(ptr, 1, LLVMGetName(ptr, "_offset"));
-+    llvm::Value *slicePtr = ctx->ExtractInst(ptr, 0, llvm::Twine(ptr->getName()) + "_ptr");
-+    llvm::Value *sliceOffset = ctx->ExtractInst(ptr, 1, llvm::Twine(ptr->getName()) + "_offset");
- 
-     // slicePtr should be a pointer to an soa-width wide array of the
-     // final atomic/enum/pointer type
-@@ -2327,14 +2314,14 @@ static llvm::Value *lFinalSliceOffset(FunctionEmitContext *ctx, llvm::Value *ptr
-         slicePtr = ctx->BitCastInst(slicePtr, (*ptrType)->LLVMType(g->ctx));
- 
-     // And finally index based on the slice offset
--    return ctx->GetElementPtrInst(slicePtr, sliceOffset, *ptrType, LLVMGetName(slicePtr, "_final_gep"));
-+    return ctx->GetElementPtrInst(slicePtr, sliceOffset, *ptrType, llvm::Twine(slicePtr->getName()) + "_final_gep");
- }
- 
- /** Utility routine that loads from a uniform pointer to soa<> data,
-     returning a regular uniform (non-SOA result).
-  */
- llvm::Value *FunctionEmitContext::loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType,
--                                                     const char *name) {
-+                                                     const llvm::Twine &name) {
-     const Type *unifType = ptrType->GetBaseType()->GetAsUniformType();
- 
-     const CollectionType *ct = CastType<CollectionType>(ptrType->GetBaseType());
-@@ -2363,7 +2350,7 @@ llvm::Value *FunctionEmitContext::loadUniformFromSOA(llvm::Value *ptr, llvm::Val
- }
- 
- llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrRefType,
--                                           const char *name, bool one_elem) {
-+                                           const llvm::Twine &name, bool one_elem) {
-     if (ptr == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2371,9 +2358,6 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
- 
-     AssertPos(currentPos, ptrRefType != NULL && mask != NULL);
- 
--    if (name == NULL)
--        name = LLVMGetName(ptr, "_load");
--
-     const PointerType *ptrType;
-     const Type *elType;
-     if (CastType<ReferenceType>(ptrRefType) != NULL) {
-@@ -2393,7 +2377,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
- 
-     if (ptrType->IsUniformType()) {
-         if (ptrType->IsSlice()) {
--            return loadUniformFromSOA(ptr, mask, ptrType, name);
-+            return loadUniformFromSOA(ptr, mask, ptrType,
-+                                      name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name);
-         } else {
-             // FIXME: same issue as above load inst regarding alignment...
-             //
-@@ -2405,11 +2390,15 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-             const AtomicType *atomicType = CastType<AtomicType>(ptrType->GetBaseType());
- 
- #if ISPC_LLVM_VERSION <= ISPC_LLVM_10_0
--            llvm::LoadInst *inst = new llvm::LoadInst(ptr, name, false /* not volatile */, bblock);
-+            llvm::LoadInst *inst =
-+                new llvm::LoadInst(ptr, name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name,
-+                                   false /* not volatile */, bblock);
- #else // LLVM 11.0+
-             llvm::PointerType *ptr_type = llvm::dyn_cast<llvm::PointerType>(ptr->getType());
-             llvm::LoadInst *inst =
--                new llvm::LoadInst(ptr_type->getPointerElementType(), ptr, name, false /* not volatile */, bblock);
-+                new llvm::LoadInst(ptr_type->getPointerElementType(), ptr,
-+                                   name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name,
-+                                   false /* not volatile */, bblock);
- #endif
- 
-             if (atomicType != NULL && atomicType->IsVaryingType()) {
-@@ -2433,7 +2422,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-     } else {
-         // Otherwise we should have a varying ptr and it's time for a
-         // gather.
--        llvm::Value *gather_result = gather(ptr, ptrType, GetFullMask(), name);
-+        llvm::Value *gather_result = gather(ptr, ptrType, GetFullMask(),
-+                                            name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name);
-         if (!one_elem)
-             return gather_result;
- 
-@@ -2453,19 +2443,19 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-         // We can actually call either one, since both are i32s as far as
-         // LLVM's type system is concerned...
-         llvm::Function *fmm = mm[0]->function;
--        llvm::Value *int_mask = CallInst(fmm, NULL, mask, LLVMGetName(mask, "_movmsk"));
-+        llvm::Value *int_mask = CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_movmsk");
-         std::vector<Symbol *> lz;
-         m->symbolTable->LookupFunction("__count_trailing_zeros_i64", &lz);
-         llvm::Function *flz = lz[0]->function;
--        llvm::Value *elem_idx = CallInst(flz, NULL, int_mask, LLVMGetName(mask, "_clz"));
--        llvm::Value *elem = llvm::ExtractElementInst::Create(gather_result, elem_idx,
--                                                             LLVMGetName(gather_result, "_umasked_elem"), bblock);
-+        llvm::Value *elem_idx = CallInst(flz, NULL, int_mask, llvm::Twine(mask->getName()) + "_clz");
-+        llvm::Value *elem = llvm::ExtractElementInst::Create(
-+            gather_result, elem_idx, llvm::Twine(gather_result->getName()) + "_umasked_elem", bblock);
-         return elem;
-     }
- }
- 
- llvm::Value *FunctionEmitContext::gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask,
--                                         const char *name) {
-+                                         const llvm::Twine &name) {
-     // We should have a varying pointer if we get here...
-     AssertPos(currentPos, ptrType->IsVaryingType());
- 
-@@ -2602,7 +2592,8 @@ void FunctionEmitContext::addGSMetadata(llvm::Value *v, SourcePos pos) {
-     inst->setMetadata("last_column", md);
- }
- 
--llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *name, int align, bool atEntryBlock) {
-+llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const llvm::Twine &name, int align,
-+                                             bool atEntryBlock) {
-     if (llvmType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2615,12 +2606,12 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-         llvm::Instruction *retInst = allocaBlock->getTerminator();
-         AssertPos(currentPos, retInst);
-         unsigned AS = llvmFunction->getParent()->getDataLayout().getAllocaAddrSpace();
--        inst = new llvm::AllocaInst(llvmType, AS, name ? name : "", retInst);
-+        inst = new llvm::AllocaInst(llvmType, AS, name, retInst);
-     } else {
-         // Unless the caller overrode the default and wants it in the
-         // current basic block
-         unsigned AS = llvmFunction->getParent()->getDataLayout().getAllocaAddrSpace();
--        inst = new llvm::AllocaInst(llvmType, AS, name ? name : "", bblock);
-+        inst = new llvm::AllocaInst(llvmType, AS, name, bblock);
-     }
- 
-     // If no alignment was specified but we have an array of a uniform
-@@ -2639,7 +2630,8 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::AllocaInst(const Type *ptrType, const char *name, int align, bool atEntryBlock) {
-+llvm::Value *FunctionEmitContext::AllocaInst(const Type *ptrType, const llvm::Twine &name, int align,
-+                                             bool atEntryBlock) {
-     if (ptrType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3075,66 +3067,59 @@ llvm::Instruction *FunctionEmitContext::BranchInst(llvm::BasicBlock *trueBlock,
-     return b;
- }
- 
--llvm::Value *FunctionEmitContext::ExtractInst(llvm::Value *v, int elt, const char *name) {
-+llvm::Value *FunctionEmitContext::ExtractInst(llvm::Value *v, int elt, const llvm::Twine &name) {
-     if (v == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_extract_%d", elt);
--        name = LLVMGetName(v, buf);
--    }
-     llvm::Instruction *ei = NULL;
-     if (llvm::isa<llvm::VectorType>(v->getType()))
--        ei = llvm::ExtractElementInst::Create(v, LLVMInt32(elt), name, bblock);
-+        ei = llvm::ExtractElementInst::Create(
-+            v, LLVMInt32(elt),
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_extract_") + llvm::Twine(elt)) : name, bblock);
-     else
--        ei = llvm::ExtractValueInst::Create(v, elt, name, bblock);
-+        ei = llvm::ExtractValueInst::Create(
-+            v, elt, name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_extract_") + llvm::Twine(elt)) : name,
-+            bblock);
-     AddDebugPos(ei);
-     return ei;
- }
- 
--llvm::Value *FunctionEmitContext::InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const char *name) {
-+llvm::Value *FunctionEmitContext::InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const llvm::Twine &name) {
-     if (v == NULL || eltVal == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_insert_%d", elt);
--        name = LLVMGetName(v, buf);
--    }
--
-     llvm::Instruction *ii = NULL;
-     if (llvm::isa<llvm::VectorType>(v->getType()))
--        ii = llvm::InsertElementInst::Create(v, eltVal, LLVMInt32(elt), name, bblock);
-+        ii = llvm::InsertElementInst::Create(
-+            v, eltVal, LLVMInt32(elt),
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_insert_") + llvm::Twine(elt)) : name, bblock);
-     else
--        ii = llvm::InsertValueInst::Create(v, eltVal, elt, name, bblock);
-+        ii = llvm::InsertValueInst::Create(
-+            v, eltVal, elt,
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_insert_") + llvm::Twine(elt)) : name, bblock);
-     AddDebugPos(ii);
-     return ii;
- }
- 
--llvm::Value *FunctionEmitContext::ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const char *name) {
-+llvm::Value *FunctionEmitContext::ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask,
-+                                              const llvm::Twine &name) {
-     if (v1 == NULL || v2 == NULL || mask == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_shuffle");
--        name = LLVMGetName(v1, buf);
--    }
--
--    llvm::Instruction *ii = new llvm::ShuffleVectorInst(v1, v2, mask, name, bblock);
-+    llvm::Instruction *ii = new llvm::ShuffleVectorInst(
-+        v1, v2, mask, name.isTriviallyEmpty() ? (llvm::Twine(v1->getName()) + "_shuffle") : name, bblock);
- 
-     AddDebugPos(ii);
-     return ii;
- }
- 
--llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vecType, const char *name) {
-+llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vecType, const llvm::Twine &name) {
-     if (v == NULL || vecType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3148,12 +3133,6 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     Assert(ty && ty->getVectorElementType() == v->getType());
- #endif
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_broadcast");
--        name = LLVMGetName(v, buf);
--    }
--
-     // Generate the following sequence:
-     //   %name_init.i = insertelement <4 x i32> undef, i32 %val, i32 0
-     //   %name.i = shufflevector <4 x i32> %name_init.i, <4 x i32> undef,
-@@ -3163,7 +3142,7 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     llvm::Value *undef2 = llvm::UndefValue::get(vecType);
- 
-     // InsertElement
--    llvm::Twine tw = llvm::Twine(name) + llvm::Twine("_init");
-+    llvm::Twine tw = name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + llvm::Twine("_init");
-     llvm::Value *insert = InsertInst(undef1, v, 0, tw.str().c_str());
- 
-     // ShuffleVector
-@@ -3179,28 +3158,27 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-         llvm::ConstantVector::getSplat(llvm::ElementCount::get(static_cast<unsigned int>(ty->getNumElements()), false),
-                                        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
- #endif
--    llvm::Value *ret = ShuffleInst(insert, undef2, zeroVec, name);
-+    llvm::Value *ret = ShuffleInst(insert, undef2, zeroVec,
-+                                   name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name);
- 
-     return ret;
- }
- 
--llvm::PHINode *FunctionEmitContext::PhiNode(llvm::Type *type, int count, const char *name) {
--    llvm::PHINode *pn = llvm::PHINode::Create(type, count, name ? name : "phi", bblock);
-+llvm::PHINode *FunctionEmitContext::PhiNode(llvm::Type *type, int count, const llvm::Twine &name) {
-+    llvm::PHINode *pn = llvm::PHINode::Create(type, count, name.isTriviallyEmpty() ? "phi" : name, bblock);
-     AddDebugPos(pn);
-     return pn;
- }
- 
- llvm::Instruction *FunctionEmitContext::SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1,
--                                                   const char *name) {
-+                                                   const llvm::Twine &name) {
-     if (test == NULL || val0 == NULL || val1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(test, "_select");
--
--    llvm::Instruction *inst = llvm::SelectInst::Create(test, val0, val1, name, bblock);
-+    llvm::Instruction *inst = llvm::SelectInst::Create(
-+        test, val0, val1, name.isTriviallyEmpty() ? (llvm::Twine(test->getName()) + "_select") : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
-@@ -3226,7 +3204,7 @@ static unsigned int lCalleeArgCount(llvm::Value *callee, const FunctionType *fun
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType,
--                                           const std::vector<llvm::Value *> &args, const char *name) {
-+                                           const std::vector<llvm::Value *> &args, const llvm::Twine &name) {
-     if (func == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3258,9 +3236,9 @@ llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-         llvm::PointerType *func_ptr_type = llvm::dyn_cast<llvm::PointerType>(func->getType());
-         llvm::FunctionType *func_type = llvm::dyn_cast<llvm::FunctionType>(func_ptr_type->getPointerElementType());
--        llvm::CallInst *callinst = llvm::CallInst::Create(func_type, func, argVals, name ? name : "", bblock);
-+        llvm::CallInst *callinst = llvm::CallInst::Create(func_type, func, argVals, name, bblock);
- #else
--        llvm::CallInst *callinst = llvm::CallInst::Create(func, argVals, name ? name : "", bblock);
-+        llvm::CallInst *callinst = llvm::CallInst::Create(func, argVals, name, bblock);
- #endif
- 
-         // We could be dealing with a function pointer in which case this will not be a 'llvm::Function'.
-@@ -3464,14 +3442,14 @@ llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg,
--                                           const char *name) {
-+                                           const llvm::Twine &name) {
-     std::vector<llvm::Value *> args;
-     args.push_back(arg);
-     return CallInst(func, funcType, args, name);
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg0,
--                                           llvm::Value *arg1, const char *name) {
-+                                           llvm::Value *arg1, const llvm::Twine &name) {
-     std::vector<llvm::Value *> args;
-     args.push_back(arg0);
-     args.push_back(arg1);
-diff --git a/src/ctx.h b/src/ctx.h
-index 6e5ad74ba..48b3bb826 100644
---- a/src/ctx.h
-+++ b/src/ctx.h
-@@ -302,7 +302,7 @@ class FunctionEmitContext {
-     llvm::Value *GetStringPtr(const std::string &str);
- 
-     /** Create a new basic block with given name */
--    llvm::BasicBlock *CreateBasicBlock(const char *name, llvm::BasicBlock *insertAfter = NULL);
-+    llvm::BasicBlock *CreateBasicBlock(const llvm::Twine &name, llvm::BasicBlock *insertAfter = NULL);
- 
-     /** Given a vector with element type i1, return a vector of type
-         LLVMTypes::BoolVectorType.  This method handles the conversion for
-@@ -380,33 +380,33 @@ class FunctionEmitContext {
-         this also handles applying the given operation to the vector
-         elements. */
-     llvm::Value *BinaryOperator(llvm::Instruction::BinaryOps inst, llvm::Value *v0, llvm::Value *v1,
--                                const char *name = NULL);
-+                                const llvm::Twine &name = "");
- 
-     /** Emit the "not" operator.  Like BinaryOperator(), this also handles
-         a VectorType-based operand. */
--    llvm::Value *NotOperator(llvm::Value *v, const char *name = NULL);
-+    llvm::Value *NotOperator(llvm::Value *v, const llvm::Twine &name = "");
- 
-     /** Emit a comparison instruction.  If the operands are VectorTypes,
-         then a value for the corresponding boolean VectorType is
-         returned. */
-     llvm::Value *CmpInst(llvm::Instruction::OtherOps inst, llvm::CmpInst::Predicate pred, llvm::Value *v0,
--                         llvm::Value *v1, const char *name = NULL);
-+                         llvm::Value *v1, const llvm::Twine &name = "");
- 
-     /** Given a scalar value, return a vector of the same type (or an
-         array, for pointer types). */
--    llvm::Value *SmearUniform(llvm::Value *value, const char *name = NULL);
-+    llvm::Value *SmearUniform(llvm::Value *value, const llvm::Twine &name = "");
- 
--    llvm::Value *BitCastInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Value *PtrToIntInst(llvm::Value *value, const char *name = NULL);
--    llvm::Value *PtrToIntInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Value *IntToPtrInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+    llvm::Value *BitCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Value *PtrToIntInst(llvm::Value *value, const llvm::Twine &name = "");
-+    llvm::Value *PtrToIntInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Value *IntToPtrInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
- 
--    llvm::Instruction *TruncInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+    llvm::Instruction *TruncInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-     llvm::Instruction *CastInst(llvm::Instruction::CastOps op, llvm::Value *value, llvm::Type *type,
--                                const char *name = NULL);
--    llvm::Instruction *FPCastInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Instruction *SExtInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Instruction *ZExtInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+                                const llvm::Twine &name = "");
-+    llvm::Instruction *FPCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Instruction *SExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Instruction *ZExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
- 
-     /** Given two integer-typed values (but possibly one vector and the
-         other not, and or of possibly-different bit-widths), update their
-@@ -426,9 +426,9 @@ class FunctionEmitContext {
-         pointers.  The underlying type of the base pointer must be provided
-         via the ptrType parameter */
-     llvm::Value *GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index, const Type *ptrType,
--                                   const char *name = NULL);
-+                                   const llvm::Twine &name = "");
-     llvm::Value *GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0, llvm::Value *index1, const Type *ptrType,
--                                   const char *name = NULL);
-+                                   const llvm::Twine &name = "");
- 
-     /** This method returns a new pointer that represents offsetting the
-         given base pointer to point at the given element number of the
-@@ -436,26 +436,26 @@ class FunctionEmitContext {
-         pointer must be a pointer to a structure type.  The ptrType gives
-         the type of the pointer, though it may be NULL if the base pointer
-         is uniform. */
--    llvm::Value *AddElementOffset(llvm::Value *basePtr, int elementNum, const Type *ptrType, const char *name = NULL,
--                                  const PointerType **resultPtrType = NULL);
-+    llvm::Value *AddElementOffset(llvm::Value *basePtr, int elementNum, const Type *ptrType,
-+                                  const llvm::Twine &name = "", const PointerType **resultPtrType = NULL);
- 
-     /** Bool is stored as i8 and <WIDTH x i8> but represented in IR as i1 and
-      * <WIDTH x MASK>. This is a helper function to match bool size at storage
-      * interface. */
--    llvm::Value *SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const char *name = NULL);
-+    llvm::Value *SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name = "");
-     /** Load from the memory location(s) given by lvalue, using the given
-         mask.  The lvalue may be varying, in which case this corresponds to
-         a gather from the multiple memory locations given by the array of
-         pointer values given by the lvalue.  If the lvalue is not varying,
-         then both the mask pointer and the type pointer may be NULL. */
--    llvm::Value *LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrType, const char *name = NULL,
-+    llvm::Value *LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrType, const llvm::Twine &name = "",
-                           bool one_elem = false);
- 
-     /* Load from memory location(s) given.
-      * 'type' needs to be provided when storage type is different from IR type. For example,
-      * 'unform bool' is 'i1' in IR but stored as 'i8'.
-      * Otherwise leave this as NULL. */
--    llvm::Value *LoadInst(llvm::Value *ptr, const Type *type = NULL, const char *name = NULL);
-+    llvm::Value *LoadInst(llvm::Value *ptr, const Type *type = NULL, const llvm::Twine &name = "");
- 
-     /** Emits an alloca instruction to allocate stack storage for the given
-         type.  If a non-zero alignment is specified, the object is also
-@@ -463,7 +463,8 @@ class FunctionEmitContext {
-         instruction is added at the start of the function in the entry
-         basic block; if it should be added to the current basic block, then
-         the atEntryBlock parameter should be false. */
--    llvm::Value *AllocaInst(llvm::Type *llvmType, const char *name = NULL, int align = 0, bool atEntryBlock = true);
-+    llvm::Value *AllocaInst(llvm::Type *llvmType, const llvm::Twine &name = "", int align = 0,
-+                            bool atEntryBlock = true);
- 
-     /** Emits an alloca instruction to allocate stack storage for the given
-         type.  If a non-zero alignment is specified, the object is also
-@@ -474,7 +475,7 @@ class FunctionEmitContext {
-         This implementation is preferred when possible. It is needed when
-         storage type is different from IR type. For example,
-         'unform bool' is 'i1' in IR but stored as 'i8'. */
--    llvm::Value *AllocaInst(const Type *ptrType, const char *name = NULL, int align = 0, bool atEntryBlock = true);
-+    llvm::Value *AllocaInst(const Type *ptrType, const llvm::Twine &name = "", int align = 0, bool atEntryBlock = true);
- 
-     /** Standard store instruction; for this variant, the lvalue must be a
-         single pointer, not a varying lvalue.
-@@ -502,39 +503,41 @@ class FunctionEmitContext {
-     /** This convenience method maps to an llvm::ExtractElementInst if the
-         given value is a llvm::VectorType, and to an llvm::ExtractValueInst
-         otherwise. */
--    llvm::Value *ExtractInst(llvm::Value *v, int elt, const char *name = NULL);
-+    llvm::Value *ExtractInst(llvm::Value *v, int elt, const llvm::Twine &name = "");
- 
-     /** This convenience method maps to an llvm::InsertElementInst if the
-         given value is a llvm::VectorType, and to an llvm::InsertValueInst
-         otherwise. */
--    llvm::Value *InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const char *name = NULL);
-+    llvm::Value *InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const llvm::Twine &name = "");
- 
-     /** This convenience method maps to an llvm::ShuffleVectorInst. */
--    llvm::Value *ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const char *name = NULL);
-+    llvm::Value *ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const llvm::Twine &name = "");
- 
-     /** This convenience method to generate broadcast pattern. It takes a value
-         and a vector type. Type of the value must match element type of the
-         vector. */
--    llvm::Value *BroadcastValue(llvm::Value *v, llvm::Type *vecType, const char *name = NULL);
-+    llvm::Value *BroadcastValue(llvm::Value *v, llvm::Type *vecType, const llvm::Twine &name = "");
- 
--    llvm::PHINode *PhiNode(llvm::Type *type, int count, const char *name = NULL);
--    llvm::Instruction *SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1, const char *name = NULL);
-+    llvm::PHINode *PhiNode(llvm::Type *type, int count, const llvm::Twine &name = "");
-+    llvm::Instruction *SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1,
-+                                  const llvm::Twine &name = "");
- 
-     /** Emits IR to do a function call with the given arguments.  If the
-         function type is a varying function pointer type, its full type
-         must be provided in funcType.  funcType can be NULL if func is a
-         uniform function pointer. */
-     llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, const std::vector<llvm::Value *> &args,
--                          const char *name = NULL);
-+                          const llvm::Twine &name = "");
- 
-     /** This is a convenience method that issues a call instruction to a
-         function that takes just a single argument. */
--    llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg, const char *name = NULL);
-+    llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg,
-+                          const llvm::Twine &name = "");
- 
-     /** This is a convenience method that issues a call instruction to a
-         function that takes two arguments. */
-     llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg0, llvm::Value *arg1,
--                          const char *name = NULL);
-+                          const llvm::Twine &name = "");
- 
-     /** Launch an asynchronous task to run the given function, passing it
-         he given argument values. */
-@@ -756,9 +759,10 @@ class FunctionEmitContext {
-     void maskedStore(llvm::Value *value, llvm::Value *ptr, const Type *ptrType, llvm::Value *mask);
-     void storeUniformToSOA(llvm::Value *value, llvm::Value *ptr, llvm::Value *mask, const Type *valueType,
-                            const PointerType *ptrType);
--    llvm::Value *loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType, const char *name);
-+    llvm::Value *loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType,
-+                                    const llvm::Twine &name = "");
- 
--    llvm::Value *gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask, const char *name);
-+    llvm::Value *gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask, const llvm::Twine &name = "");
- 
-     llvm::Value *addVaryingOffsetsIfNeeded(llvm::Value *ptr, const Type *ptrType);
- };
-diff --git a/src/expr.cpp b/src/expr.cpp
-index 80cc3020a..6d38d1889 100644
---- a/src/expr.cpp
-+++ b/src/expr.cpp
-@@ -1021,11 +1021,11 @@ static llvm::Value *lEmitNegate(Expr *arg, SourcePos pos, FunctionEmitContext *c
-     ctx->SetDebugPos(pos);
-     if (type->IsFloatType()) {
-         llvm::Value *zero = llvm::ConstantFP::getZeroValueForNegation(type->LLVMType(g->ctx));
--        return ctx->BinaryOperator(llvm::Instruction::FSub, zero, argVal, LLVMGetName(argVal, "_negate"));
-+        return ctx->BinaryOperator(llvm::Instruction::FSub, zero, argVal, llvm::Twine(argVal->getName()) + "_negate");
-     } else {
-         llvm::Value *zero = lLLVMConstantValue(type, g->ctx, 0.);
-         AssertPos(pos, type->IsIntType());
--        return ctx->BinaryOperator(llvm::Instruction::Sub, zero, argVal, LLVMGetName(argVal, "_negate"));
-+        return ctx->BinaryOperator(llvm::Instruction::Sub, zero, argVal, llvm::Twine(argVal->getName()) + "_negate");
-     }
- }
- 
-@@ -1047,11 +1047,11 @@ llvm::Value *UnaryExpr::GetValue(FunctionEmitContext *ctx) const {
-         return lEmitNegate(expr, pos, ctx);
-     case LogicalNot: {
-         llvm::Value *argVal = expr->GetValue(ctx);
--        return ctx->NotOperator(argVal, LLVMGetName(argVal, "_logicalnot"));
-+        return ctx->NotOperator(argVal, llvm::Twine(argVal->getName()) + "_logicalnot");
-     }
-     case BitNot: {
-         llvm::Value *argVal = expr->GetValue(ctx);
--        return ctx->NotOperator(argVal, LLVMGetName(argVal, "_bitnot"));
-+        return ctx->NotOperator(argVal, llvm::Twine(argVal->getName()) + "_bitnot");
-     }
-     default:
-         FATAL("logic error");
-@@ -1518,7 +1518,8 @@ static llvm::Value *lEmitBinaryArith(BinaryExpr::Op op, llvm::Value *value0, llv
-             return NULL;
-         }
- 
--        return ctx->BinaryOperator(inst, value0, value1, LLVMGetName(opName, value0, value1));
-+        return ctx->BinaryOperator(inst, value0, value1,
-+                                   (((llvm::Twine(opName) + "_") + value0->getName()) + "_") + value1->getName());
-     }
- }
- 
-@@ -1563,7 +1564,7 @@ static llvm::Value *lEmitBinaryCmp(BinaryExpr::Op op, llvm::Value *e0Val, llvm::
-     }
- 
-     llvm::Value *cmp = ctx->CmpInst(isFloatOp ? llvm::Instruction::FCmp : llvm::Instruction::ICmp, pred, e0Val, e1Val,
--                                    LLVMGetName(opName, e0Val, e1Val));
-+                                    (((llvm::Twine(opName) + "_") + e0Val->getName()) + "_") + e1Val->getName());
-     // This is a little ugly: CmpInst returns i1 values, but we use vectors
-     // of i32s for varying bool values; type convert the result here if
-     // needed.
-@@ -4177,7 +4178,7 @@ static llvm::Value *lConvertToSlicePointer(FunctionEmitContext *ctx, llvm::Value
-     // offsets
-     llvm::Value *result = llvm::Constant::getNullValue(sliceStructType);
-     // And replace the pointer in the struct with the given pointer
--    return ctx->InsertInst(result, ptr, 0, LLVMGetName(ptr, "_slice"));
-+    return ctx->InsertInst(result, ptr, 0, llvm::Twine(ptr->getName()) + "_slice");
- }
- 
- /** If the given array index is a compile time constant, check to see if it
-@@ -4258,8 +4259,8 @@ llvm::Value *IndexExpr::GetLValue(FunctionEmitContext *ctx) const {
-         // Convert to a slice pointer if we're indexing into SOA data
-         basePtrValue = lConvertPtrToSliceIfNeeded(ctx, basePtrValue, &baseExprType);
- 
--        llvm::Value *ptr =
--            ctx->GetElementPtrInst(basePtrValue, indexValue, baseExprType, LLVMGetName(basePtrValue, "_offset"));
-+        llvm::Value *ptr = ctx->GetElementPtrInst(basePtrValue, indexValue, baseExprType,
-+                                                  llvm::Twine(basePtrValue->getName()) + "_offset");
-         return lAddVaryingOffsetsIfNeeded(ctx, ptr, GetLValueType());
-     }
- 
-@@ -4290,8 +4291,8 @@ llvm::Value *IndexExpr::GetLValue(FunctionEmitContext *ctx) const {
-     ctx->SetDebugPos(pos);
- 
-     // And do the actual indexing calculation..
--    llvm::Value *ptr =
--        ctx->GetElementPtrInst(basePtr, LLVMInt32(0), indexValue, basePtrType, LLVMGetName(basePtr, "_offset"));
-+    llvm::Value *ptr = ctx->GetElementPtrInst(basePtr, LLVMInt32(0), indexValue, basePtrType,
-+                                              llvm::Twine(basePtr->getName()) + "_offset");
-     return lAddVaryingOffsetsIfNeeded(ctx, ptr, GetLValueType());
- }
- 
-@@ -4788,15 +4789,14 @@ llvm::Value *VectorMemberExpr::GetValue(FunctionEmitContext *ctx) const {
-         for (size_t i = 0; i < identifier.size(); ++i) {
-             char idStr[2] = {identifier[i], '\0'};
-             llvm::Value *elementPtr =
--                ctx->AddElementOffset(basePtr, indices[i], basePtrType, LLVMGetName(basePtr, idStr));
-+                ctx->AddElementOffset(basePtr, indices[i], basePtrType, llvm::Twine(basePtr->getName()) + idStr);
-             llvm::Value *elementValue = ctx->LoadInst(elementPtr, elementMask, elementPtrType);
- 
--            const char *resultName = LLVMGetName(resultPtr, idStr);
--            llvm::Value *ptmp = ctx->AddElementOffset(resultPtr, i, NULL, resultName);
-+            llvm::Value *ptmp = ctx->AddElementOffset(resultPtr, i, NULL, llvm::Twine(resultPtr->getName()) + idStr);
-             ctx->StoreInst(elementValue, ptmp, elementPtrType, expr->GetType()->IsUniformType());
-         }
- 
--        return ctx->LoadInst(resultPtr, memberType, LLVMGetName(basePtr, "_swizzle"));
-+        return ctx->LoadInst(resultPtr, memberType, llvm::Twine(basePtr->getName()) + "_swizzle");
-     }
- }
- 
-@@ -4932,7 +4932,7 @@ llvm::Value *MemberExpr::GetValue(FunctionEmitContext *ctx) const {
- 
-     ctx->SetDebugPos(pos);
-     std::string suffix = std::string("_") + identifier;
--    return ctx->LoadInst(lvalue, mask, lvalueType, LLVMGetName(lvalue, suffix.c_str()));
-+    return ctx->LoadInst(lvalue, mask, lvalueType, llvm::Twine(lvalue->getName()) + suffix);
- }
- 
- const Type *MemberExpr::GetType() const { return NULL; }
-@@ -6502,7 +6502,7 @@ static llvm::Value *lTypeConvAtomic(FunctionEmitContext *ctx, llvm::Value *exprV
-                 // does for everyone else...
-                 Assert(cast);
-                 cast = ctx->SwitchBoolSize(cast, LLVMTypes::BoolVectorType->getElementType(),
--                                           LLVMGetName(cast, "to_i_bool"));
-+                                           llvm::Twine(cast->getName()) + "to_i_bool");
-             }
-         } else {
-             // fromType->IsVaryingType())
-@@ -8246,7 +8246,7 @@ llvm::Value *NewExpr::GetValue(FunctionEmitContext *ctx) const {
-         // pointer of the return type and to run the code for initializers,
-         // if present.
-         llvm::Type *ptrType = retType->LLVMType(g->ctx);
--        ptrValue = ctx->BitCastInst(ptrValue, ptrType, LLVMGetName(ptrValue, "_cast_ptr"));
-+        ptrValue = ctx->BitCastInst(ptrValue, ptrType, llvm::Twine(ptrValue->getName()) + "_cast_ptr");
- 
-         if (initExpr != NULL)
-             InitSymbol(ptrValue, allocType, initExpr, ctx, pos);
-diff --git a/src/llvmutil.cpp b/src/llvmutil.cpp
-index 970175dbf..d0becb9f5 100644
---- a/src/llvmutil.cpp
-+++ b/src/llvmutil.cpp
-@@ -1605,23 +1605,6 @@ llvm::Value *LLVMShuffleVectors(llvm::Value *v1, llvm::Value *v2, int32_t shuf[]
-     return new llvm::ShuffleVectorInst(v1, v2, vec, "shuffle", insertBefore);
- }
- 
--const char *LLVMGetName(llvm::Value *v, const char *s) {
--    if (v == NULL)
--        return s;
--    std::string ret = std::string(v->getName());
--    ret += s;
--    return strdup(ret.c_str());
--}
--
--const char *LLVMGetName(const char *op, llvm::Value *v1, llvm::Value *v2) {
--    std::string r = op;
--    r += "_";
--    r += v1->getName().str();
--    r += "_";
--    r += v2->getName().str();
--    return strdup(r.c_str());
--}
--
- #ifdef ISPC_GENX_ENABLED
- bool lIsSVMLoad(llvm::Instruction *inst) {
-     Assert(inst);
-diff --git a/src/llvmutil.h b/src/llvmutil.h
-index 42cce4d83..07d089bb4 100644
---- a/src/llvmutil.h
-+++ b/src/llvmutil.h
-@@ -328,11 +328,6 @@ extern llvm::Value *LLVMConcatVectors(llvm::Value *v1, llvm::Value *v2, llvm::In
- extern llvm::Value *LLVMShuffleVectors(llvm::Value *v1, llvm::Value *v2, int32_t shuf[], int shufSize,
-                                        llvm::Instruction *insertBefore);
- 
--/** Utility routines to concat strings with the names of existing values to
--    create meaningful new names for instruction values.
--*/
--extern const char *LLVMGetName(llvm::Value *v, const char *);
--extern const char *LLVMGetName(const char *op, llvm::Value *v1, llvm::Value *v2);
- #ifdef ISPC_GENX_ENABLED
- enum AddressSpace { Local, Global, External };
- 
-diff --git a/src/opt.cpp b/src/opt.cpp
-index 5b1ac7b63..9d6cae058 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -257,7 +257,7 @@ static bool lGetSourcePosFromMetadata(const llvm::Instruction *inst, SourcePos *
-     return true;
- }
- 
--static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, const char *name,
-+static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[2] = {arg0, arg1};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[2]);
-@@ -265,21 +265,22 @@ static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llv
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    const char *name, llvm::Instruction *insertBefore = NULL) {
-+                                    const llvm::Twine &name, llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[3] = {arg0, arg1, arg2};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[3]);
-     return llvm::CallInst::Create(func, newArgArray, name, insertBefore);
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, const char *name, llvm::Instruction *insertBefore = NULL) {
-+                                    llvm::Value *arg3, const llvm::Twine &name,
-+                                    llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[4] = {arg0, arg1, arg2, arg3};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[4]);
-     return llvm::CallInst::Create(func, newArgArray, name, insertBefore);
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, llvm::Value *arg4, const char *name,
-+                                    llvm::Value *arg3, llvm::Value *arg4, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[5] = {arg0, arg1, arg2, arg3, arg4};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[5]);
-@@ -287,7 +288,7 @@ static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llv
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, llvm::Value *arg4, llvm::Value *arg5, const char *name,
-+                                    llvm::Value *arg3, llvm::Value *arg4, llvm::Value *arg5, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[6] = {arg0, arg1, arg2, arg3, arg4, arg5};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[6]);
-@@ -991,23 +992,24 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 llvm::Type *returnType = callInst->getType();
-                 Assert(llvm::isa<llvm::VectorType>(returnType));
-                 // cast the i8 * to the appropriate type
--                const char *name = LLVMGetName(callInst->getArgOperand(0), "_cast");
--                llvm::Value *castPtr = new llvm::BitCastInst(callInst->getArgOperand(0),
--                                                             llvm::PointerType::get(returnType, 0), name, callInst);
-+                llvm::Value *castPtr =
-+                    new llvm::BitCastInst(callInst->getArgOperand(0), llvm::PointerType::get(returnType, 0),
-+                                          llvm::Twine(callInst->getArgOperand(0)->getName()) + "_cast", callInst);
-                 lCopyMetadata(castPtr, callInst);
-                 int align;
-                 if (g->opt.forceAlignedMemory)
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
--                name = LLVMGetName(callInst->getArgOperand(0), "_load");
- #if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
--                llvm::Instruction *loadInst = new llvm::LoadInst(castPtr, name, false /* not volatile */,
--                                                                 llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
-+                llvm::Instruction *loadInst =
-+                    new llvm::LoadInst(castPtr, llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load",
-+                                       false /* not volatile */, llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
- #else
-                 llvm::Instruction *loadInst = new llvm::LoadInst(
--                    llvm::dyn_cast<llvm::PointerType>(castPtr->getType())->getPointerElementType(), castPtr, name,
--                    false /* not volatile */, llvm::MaybeAlign(align).valueOrOne(), (llvm::Instruction *)NULL);
-+                    llvm::dyn_cast<llvm::PointerType>(castPtr->getType())->getPointerElementType(), castPtr,
-+                    llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load", false /* not volatile */,
-+                    llvm::MaybeAlign(align).valueOrOne(), (llvm::Instruction *)NULL);
- #endif
-                 lCopyMetadata(loadInst, callInst);
-                 llvm::ReplaceInstWithInst(callInst, loadInst);
-@@ -1028,9 +1030,9 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 // all lanes storing, so replace with a regular store
-                 llvm::Value *rvalue = callInst->getArgOperand(2);
-                 llvm::Type *storeType = rvalue->getType();
--                const char *name = LLVMGetName(callInst->getArgOperand(0), "_ptrcast");
--                llvm::Value *castPtr = new llvm::BitCastInst(callInst->getArgOperand(0),
--                                                             llvm::PointerType::get(storeType, 0), name, callInst);
-+                llvm::Value *castPtr =
-+                    new llvm::BitCastInst(callInst->getArgOperand(0), llvm::PointerType::get(storeType, 0),
-+                                          llvm::Twine(callInst->getArgOperand(0)->getName()) + "_ptrcast", callInst);
-                 lCopyMetadata(castPtr, callInst);
- 
-                 int align;
-@@ -1339,8 +1341,8 @@ static llvm::Value *lGetBasePointer(llvm::Value *v, llvm::Instruction *insertBef
-         if (t == NULL) {
-             return NULL;
-         } else {
--            return llvm::CastInst::Create(ci->getOpcode(), t, ci->getType()->getScalarType(), LLVMGetName(t, "_cast"),
--                                          insertBefore);
-+            return llvm::CastInst::Create(ci->getOpcode(), t, ci->getType()->getScalarType(),
-+                                          llvm::Twine(t->getName()) + "_cast", insertBefore);
-         }
-     }
- 
-@@ -1583,13 +1585,13 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-         if (co == NULL)
-             *constOffset = NULL;
-         else
--            *constOffset =
--                llvm::CastInst::Create(cast->getOpcode(), co, cast->getType(), LLVMGetName(co, "_cast"), insertBefore);
-+            *constOffset = llvm::CastInst::Create(cast->getOpcode(), co, cast->getType(),
-+                                                  llvm::Twine(co->getName()) + "_cast", insertBefore);
-         if (vo == NULL)
-             *variableOffset = NULL;
-         else
--            *variableOffset =
--                llvm::CastInst::Create(cast->getOpcode(), vo, cast->getType(), LLVMGetName(vo, "_cast"), insertBefore);
-+            *variableOffset = llvm::CastInst::Create(cast->getOpcode(), vo, cast->getType(),
-+                                                     llvm::Twine(vo->getName()) + "_cast", insertBefore);
-         return;
-     }
- 
-@@ -1608,16 +1610,18 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-             else if (c1 == NULL || llvm::isa<llvm::ConstantAggregateZero>(c1))
-                 *constOffset = c0;
-             else
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, c0, c1, LLVMGetName("add", c0, c1),
--                                                            insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, c0, c1, ((llvm::Twine("add_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
- 
-             if (v0 == NULL || llvm::isa<llvm::ConstantAggregateZero>(v0))
-                 *variableOffset = v1;
-             else if (v1 == NULL || llvm::isa<llvm::ConstantAggregateZero>(v1))
-                 *variableOffset = v0;
-             else
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, v0, v1,
--                                                               LLVMGetName("add", v0, v1), insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, v0, v1, ((llvm::Twine("add_") + v0->getName()) + "_") + v1->getName(),
-+                    insertBefore);
-             return;
-         } else if (bop->getOpcode() == llvm::Instruction::Shl) {
-             lExtractConstantOffset(op0, &c0, &v0, insertBefore);
-@@ -1633,10 +1637,12 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-                 *constOffset = vec;
-                 *variableOffset = NULL;
-             } else {
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Shl, c0, c1, LLVMGetName("shl", c0, c1),
--                                                            insertBefore);
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Shl, v0, c1,
--                                                               LLVMGetName("shl", v0, c1), insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Shl, c0, c1, ((llvm::Twine("shl_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Shl, v0, c1, ((llvm::Twine("shl_") + v0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-             }
-             return;
-         } else if (bop->getOpcode() == llvm::Instruction::Mul) {
-@@ -1648,25 +1654,30 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-             // Note that the first term is a constant and the last three are
-             // variable.
-             if (c0 != NULL && c1 != NULL)
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, c1, LLVMGetName("mul", c0, c1),
--                                                            insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Mul, c0, c1, ((llvm::Twine("mul_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-             else
-                 *constOffset = NULL;
- 
-             llvm::Value *va = NULL, *vb = NULL, *vc = NULL;
-             if (v0 != NULL && c1 != NULL)
--                va = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, c1, LLVMGetName("mul", v0, c1),
-+                va = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, c1,
-+                                                  ((llvm::Twine("mul_") + v0->getName()) + "_") + c1->getName(),
-                                                   insertBefore);
-             if (c0 != NULL && v1 != NULL)
--                vb = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, v1, LLVMGetName("mul", c0, v1),
-+                vb = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, v1,
-+                                                  ((llvm::Twine("mul_") + c0->getName()) + "_") + v1->getName(),
-                                                   insertBefore);
-             if (v0 != NULL && v1 != NULL)
--                vc = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, v1, LLVMGetName("mul", v0, v1),
-+                vc = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, v1,
-+                                                  ((llvm::Twine("mul_") + v0->getName()) + "_") + v1->getName(),
-                                                   insertBefore);
- 
-             llvm::Value *vab = NULL;
-             if (va != NULL && vb != NULL)
--                vab = llvm::BinaryOperator::Create(llvm::Instruction::Add, va, vb, LLVMGetName("add", va, vb),
-+                vab = llvm::BinaryOperator::Create(llvm::Instruction::Add, va, vb,
-+                                                   ((llvm::Twine("add_") + va->getName()) + "_") + vb->getName(),
-                                                    insertBefore);
-             else if (va != NULL)
-                 vab = va;
-@@ -1674,8 +1685,9 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-                 vab = vb;
- 
-             if (vab != NULL && vc != NULL)
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, vab, vc,
--                                                               LLVMGetName("add", vab, vc), insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, vab, vc, ((llvm::Twine("add_") + vab->getName()) + "_") + vc->getName(),
-+                    insertBefore);
-             else if (vab != NULL)
-                 *variableOffset = vab;
-             else
-@@ -1943,7 +1955,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-             // all zeros (i.e. a ConstantAggregateZero, but just in case,
-             // do the more general check with lVectorIs32BitInts().
-             variableOffset = new llvm::TruncInst(variableOffset, LLVMTypes::Int32VectorType,
--                                                 LLVMGetName(variableOffset, "_trunc"), insertBefore);
-+                                                 llvm::Twine(variableOffset->getName()) + "_trunc", insertBefore);
-         else
-             return false;
-     }
-@@ -1952,7 +1964,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-         if (lVectorIs32BitInts(constOffset)) {
-             // Truncate them so we have a 32-bit vector type for them.
-             constOffset = new llvm::TruncInst(constOffset, LLVMTypes::Int32VectorType,
--                                              LLVMGetName(constOffset, "_trunc"), insertBefore);
-+                                              llvm::Twine(constOffset->getName()) + "_trunc", insertBefore);
-         } else {
-             // FIXME: otherwise we just assume that all constant offsets
-             // can actually always fit into 32-bits...  (This could be
-@@ -1963,7 +1975,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-             // llvm::ConstantFoldInstruction() doesn't seem to be doing
-             // enough for us in some cases if we call it from here.
-             constOffset = new llvm::TruncInst(constOffset, LLVMTypes::Int32VectorType,
--                                              LLVMGetName(constOffset, "_trunc"), insertBefore);
-+                                              llvm::Twine(constOffset->getName()) + "_trunc", insertBefore);
-         }
-     }
- 
-@@ -2012,8 +2024,8 @@ static bool lOffsets32BitSafe(llvm::Value **offsetPtr, llvm::Instruction *insert
- 
-         // Alternatively, offset could be a sequence of adds terminating
-         // in safe constant vectors or a SExt.
--        *offsetPtr =
--            new llvm::TruncInst(offset, LLVMTypes::Int32VectorType, LLVMGetName(offset, "_trunc"), insertBefore);
-+        *offsetPtr = new llvm::TruncInst(offset, LLVMTypes::Int32VectorType, llvm::Twine(offset->getName()) + "_trunc",
-+                                         insertBefore);
-         return true;
-     } else
-         return false;
-@@ -2229,7 +2241,8 @@ static bool lGSToGSBaseOffsets(llvm::CallInst *callInst) {
-     }
-     // Cast the base pointer to a void *, since that's what the
-     // __pseudo_*_base_offsets_* functions want.
--    basePtr = new llvm::IntToPtrInst(basePtr, LLVMTypes::VoidPointerType, LLVMGetName(basePtr, "_2void"), callInst);
-+    basePtr = new llvm::IntToPtrInst(basePtr, LLVMTypes::VoidPointerType, llvm::Twine(basePtr->getName()) + "_2void",
-+                                     callInst);
-     lCopyMetadata(basePtr, callInst);
-     llvm::Function *gatherScatterFunc = info->baseOffsetsFunc;
- 
-@@ -2803,7 +2816,7 @@ static bool lGSToLoadStore(llvm::CallInst *callInst) {
-                 lCopyMetadata(ptr, callInst);
-                 Debug(pos, "Transformed gather to unaligned vector load!");
-                 llvm::Instruction *newCall =
--                    lCallInst(gatherInfo->loadMaskedFunc, ptr, mask, LLVMGetName(ptr, "_masked_load"));
-+                    lCallInst(gatherInfo->loadMaskedFunc, ptr, mask, llvm::Twine(ptr->getName()) + "_masked_load");
-                 lCopyMetadata(newCall, callInst);
-                 llvm::ReplaceInstWithInst(callInst, newCall);
-                 return true;
diff --git a/srcpkgs/ispc/patches/llvm12-004.patch b/srcpkgs/ispc/patches/llvm12-004.patch
deleted file mode 100644
index 3a94d8443a5e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-004.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From c03a5142444476a1caa5c2ba7fa2d92d7793d6f1 Mon Sep 17 00:00:00 2001
-From: Deepak Rajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Mon, 25 Jan 2021 09:22:49 -0800
-Subject: [PATCH] Fixing build on llvm trunk.
-
----
- src/ctx.cpp | 7 +++----
- 1 file changed, 3 insertions(+), 4 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index ded524b71..b60e6fe84 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1020,8 +1020,7 @@ void FunctionEmitContext::EmitCaseLabel(int value, bool checkMask, SourcePos pos
-     llvm::BasicBlock *bbCaseImpl = NULL;
-     if (emitGenXHardwareMask()) {
-         // Create basic block with actual case implementation
--        llvm::Twine bbName = llvm::Twine(bbCase->getName()) + "_impl";
--        bbCaseImpl = CreateBasicBlock(bbName, bbCase);
-+        bbCaseImpl = CreateBasicBlock(llvm::Twine(bbCase->getName()) + "_impl", bbCase);
-     }
- #endif
- 
-@@ -3142,8 +3141,8 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     llvm::Value *undef2 = llvm::UndefValue::get(vecType);
- 
-     // InsertElement
--    llvm::Twine tw = name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + llvm::Twine("_init");
--    llvm::Value *insert = InsertInst(undef1, v, 0, tw.str().c_str());
-+    llvm::Value *insert =
-+        InsertInst(undef1, v, 0, name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + "_init");
- 
-     // ShuffleVector
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
diff --git a/srcpkgs/ispc/patches/llvm12-005.patch b/srcpkgs/ispc/patches/llvm12-005.patch
deleted file mode 100644
index e3e96b00abfa..000000000000
--- a/srcpkgs/ispc/patches/llvm12-005.patch
+++ /dev/null
@@ -1,372 +0,0 @@
-From c1d0a51bf8416d42144de9e2bdd59825eaeff1ac Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Fri, 8 Jan 2021 14:13:49 -0800
-Subject: [PATCH] LLVM 11 support for gen code
-
----
- src/ctx.cpp                     |  13 ++-
- src/gen/GlobalsLocalization.cpp |   9 +-
- src/opt.cpp                     | 143 ++++++++++++++++++++++++--------
- 3 files changed, 124 insertions(+), 41 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index b60e6fe84..2a72e6837 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1,5 +1,5 @@
- /*
--  Copyright (c) 2010-2020, Intel Corporation
-+  Copyright (c) 2010-2021, Intel Corporation
-   All rights reserved.
- 
-   Redistribution and use in source and binary forms, with or without
-@@ -3685,8 +3685,17 @@ llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::
-     AssertPos(currentPos, llvm::isa<llvm::VectorType>(value->getType()));
-     llvm::VectorType *vt = llvm::dyn_cast<llvm::VectorType>(value->getType());
-     if (defaults == NULL) {
--        defaults = llvm::ConstantVector::getSplat(value->getType()->getVectorNumElements(),
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+        defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-+                                                  llvm::Constant::getNullValue(vt->getElementType()));
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+        defaults = llvm::ConstantVector::getSplat({static_cast<unsigned int>(vt->getNumElements()), false},
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
-+#else
-+        defaults = llvm::ConstantVector::getSplat(
-+            llvm::ElementCount::get(static_cast<unsigned int>(vt->getNumElements()), false),
-+            llvm::Constant::getNullValue(vt->getElementType()));
-+#endif
-     }
- 
-     auto Fn = llvm::GenXIntrinsic::getGenXDeclaration(m->module, llvm::GenXIntrinsic::genx_simdcf_predicate,
-diff --git a/src/gen/GlobalsLocalization.cpp b/src/gen/GlobalsLocalization.cpp
-index a176e9462..41f3b00e2 100644
---- a/src/gen/GlobalsLocalization.cpp
-+++ b/src/gen/GlobalsLocalization.cpp
-@@ -1,5 +1,5 @@
- /*
--  Copyright (c) 2014, 2016-2020, Intel Corporation
-+  Copyright (c) 2014, 2016-2021, Intel Corporation
-   All rights reserved.
- 
-   Redistribution and use in source and binary forms, with or without
-@@ -53,8 +53,10 @@
- #include <llvm/GenXIntrinsics/GenXIntrOpts.h>
- #include <llvm/GenXIntrinsics/GenXIntrinsics.h>
- #include <llvm/GenXIntrinsics/GenXMetadata.h>
--#include <llvm/IR/CFG.h>
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
- #include <llvm/IR/CallSite.h>
-+#endif
-+#include <llvm/IR/CFG.h>
- #include <llvm/IR/DebugInfo.h>
- #include <llvm/IR/Dominators.h>
- #include <llvm/IR/Function.h>
-@@ -470,7 +472,8 @@ void GlobalsLocalization::LocalizeGlobals(LocalizationInfo &LI) {
-         Instruction &FirstI = *Fn->getEntryBlock().begin();
-         Type *ElemTy = GV->getType()->getElementType();
-         AllocaInst *Alloca = new AllocaInst(ElemTy, 0, GV->getName() + ".local", &FirstI);
--        Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()));
-+        Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()).valueOrOne());
-+
-         if (!isa<UndefValue>(GV->getInitializer()))
-             new StoreInst(GV->getInitializer(), Alloca, &FirstI);
- 
-diff --git a/src/opt.cpp b/src/opt.cpp
-index d58d77f73..1789b8476 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -2899,15 +2899,17 @@ static llvm::Function *lGenXMaskedInt8Inst(llvm::Instruction *inst, bool isStore
- static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::Instruction *inst) {
-     Assert(g->target->isGenXTarget());
-     Assert(llvm::isa<llvm::VectorType>(val->getType()));
--    Assert(llvm::isPowerOf2_32(val->getType()->getVectorNumElements()));
--    Assert(val->getType()->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-+
-+    llvm::VectorType *valVecType = llvm::dyn_cast<llvm::VectorType>(val->getType());
-+    Assert(llvm::isPowerOf2_32(valVecType->getNumElements()));
-+    Assert(valVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
- 
-     // The data write of svm store must have a size that is a power of two from 16 to 128
-     // bytes. However for int8 type and simd width = 8, the data write size is 8.
-     // So we use masked store function here instead of svm store which process int8 type
-     // correctly.
--    if (val->getType()->getPrimitiveSizeInBits() / 8 < 16) {
--        Assert(val->getType()->getScalarType() == LLVMTypes::Int8Type);
-+    if (valVecType->getPrimitiveSizeInBits() / 8 < 16) {
-+        Assert(valVecType->getScalarType() == LLVMTypes::Int8Type);
-         if (llvm::Function *maskedFunc = lGenXMaskedInt8Inst(inst, true))
-             return llvm::dyn_cast<llvm::CallInst>(lCallInst(maskedFunc, ptr, val, LLVMMaskAllOn, ""));
-         else {
-@@ -2923,15 +2925,17 @@ static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::
- 
- static llvm::CallInst *lGenXLoadInst(llvm::Value *ptr, llvm::Type *retType, llvm::Instruction *inst) {
-     Assert(llvm::isa<llvm::VectorType>(retType));
--    Assert(llvm::isPowerOf2_32(retType->getVectorNumElements()));
--    Assert(retType->getPrimitiveSizeInBits());
--    Assert(retType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-+
-+    llvm::VectorType *retVecType = llvm::dyn_cast<llvm::VectorType>(retType);
-+    Assert(llvm::isPowerOf2_32(retVecType->getNumElements()));
-+    Assert(retVecType->getPrimitiveSizeInBits());
-+    Assert(retVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-     // The data read of svm load must have a size that is a power of two from 16 to 128
-     // bytes. However for int8 type and simd width = 8, the data read size is 8.
-     // So we use masked load function here instead of svm load which process int8 type
-     // correctly.
--    if (retType->getPrimitiveSizeInBits() / 8 < 16) {
--        Assert(retType->getScalarType() == LLVMTypes::Int8Type);
-+    if (retVecType->getPrimitiveSizeInBits() / 8 < 16) {
-+        Assert(retVecType->getScalarType() == LLVMTypes::Int8Type);
-         if (llvm::Function *maskedFunc = lGenXMaskedInt8Inst(inst, false))
-             return llvm::dyn_cast<llvm::CallInst>(lCallInst(maskedFunc, ptr, LLVMMaskAllOn, ""));
-         else {
-@@ -5622,15 +5626,24 @@ static bool lVectorizeGEPs(llvm::Value *ptr, std::vector<PtrUse> &ptrUses, std::
-         llvm::PtrToIntInst *ptrToInt =
-             new llvm::PtrToIntInst(ptr, LLVMTypes::Int64Type, "vectorized_ptrtoint", insertBefore);
-         llvm::Instruction *addr = llvm::BinaryOperator::CreateAdd(ptrToInt, offset, "vectorized_address", insertBefore);
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        llvm::Type *retType = llvm::FixedVectorType::get(scalar_type, reqSize / t_size);
-+#else
-         llvm::Type *retType = llvm::VectorType::get(scalar_type, reqSize / t_size);
-+#endif
-         llvm::Function *fn = llvm::GenXIntrinsic::getGenXDeclaration(
-             m->module, llvm::GenXIntrinsic::genx_svm_block_ld_unaligned, {retType, addr->getType()});
-         llvm::Instruction *ld = llvm::CallInst::Create(fn, {addr}, "vectorized_ld", insertBefore);
- 
-         if (loadingPtr) {
-             // Cast int to ptr via inttoptr
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            ld = new llvm::IntToPtrInst(ld, llvm::FixedVectorType::get(originalType, reqSize / t_size),
-+                                        "vectorized_inttoptr", insertBefore);
-+#else
-             ld = new llvm::IntToPtrInst(ld, llvm::VectorType::get(originalType, reqSize / t_size),
-                                         "vectorized_inttoptr", insertBefore);
-+#endif
-         }
- 
-         // Scalar extracts for all loaded elements
-@@ -6160,19 +6173,34 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-         llvm::Instruction *inst = &*I;
-         if (llvm::CallInst *ci = llvm::dyn_cast<llvm::CallInst>(inst)) {
-             llvm::Function *func = ci->getCalledFunction();
--            if (func && func->getName() == "llvm.trap") {
-+            if (func && func->getName().equals("llvm.trap")) {
-                 llvm::Type *argTypes[] = {LLVMTypes::Int1VectorType, LLVMTypes::Int16VectorType};
-                 // Description of parameters for genx_raw_send_noresult can be found in target-genx.ll
-                 auto Fn = +llvm::GenXIntrinsic::getGenXDeclaration(
-                     m->module, llvm::GenXIntrinsic::genx_raw_send_noresult, argTypes);
-                 llvm::SmallVector<llvm::Value *, 8> Args;
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 0));
--                Args.push_back(llvm::ConstantVector::getSplat(g->target->getNativeVectorWidth(),
--                                                              llvm::ConstantInt::getTrue(*g->ctx)));
-+                Args.push_back(llvm::ConstantVector::getSplat(
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+                    g->target->getNativeVectorWidth(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+                    {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
-+#else // LLVM 12.0+
-+                    llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-+#endif
-+                    llvm::ConstantInt::getTrue(*g->ctx)));
-+
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 39));
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 33554448));
-                 llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
--                    g->target->getNativeVectorWidth(), llvm::Constant::getNullValue(llvm::Type::getInt16Ty(*g->ctx)));
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+                    g->target->getNativeVectorWidth(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+                    {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
-+#else // LLVM 12.0+
-+                    llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-+#endif
-+                    llvm::Constant::getNullValue(llvm::Type::getInt16Ty(*g->ctx)));
-                 Args.push_back(zeroMask);
- 
-                 llvm::Instruction *newInst = llvm::CallInst::Create(Fn, Args, ci->getName());
-@@ -6181,7 +6209,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     modifiedAny = true;
-                     goto restart;
-                 }
--            } else if (func && func->getName() == "llvm.assume") {
-+            } else if (func && func->getName().equals("llvm.assume")) {
-                 ci->eraseFromParent();
-                 modifiedAny = true;
-                 goto restart;
-@@ -6335,7 +6363,7 @@ bool CheckUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 continue;
-             for (int i = 0; i < unsupportedFuncs.size(); i++) {
-                 std::smatch match;
--                std::string funcName = func->getName();
-+                std::string funcName = func->getName().str();
-                 if (std::regex_match(funcName, match, unsupportedFuncs[i])) {
-                     // We found unsupported function. Generate error and stop compilation.
-                     SourcePos pos;
-@@ -6418,12 +6446,14 @@ bool MangleOpenCLBuiltins::runOnBasicBlock(llvm::BasicBlock &bb) {
-             if (func->getName().startswith("__spirv_ocl")) {
-                 std::string mangledName;
-                 llvm::Type *retType = func->getReturnType();
--                std::string funcName = func->getName();
-+                std::string funcName = func->getName().str();
-                 std::vector<llvm::Type *> ArgTy;
-                 // spirv OpenCL builtins are used for double types only
--                Assert(retType->isVectorTy() && retType->getVectorElementType()->isDoubleTy() ||
-+                Assert(retType->isVectorTy() &&
-+                           llvm::dyn_cast<llvm::VectorType>(retType)->getElementType()->isDoubleTy() ||
-                        retType->isSingleValueType() && retType->isDoubleTy());
--                if (retType->isVectorTy() && retType->getVectorElementType()->isDoubleTy()) {
-+                if (retType->isVectorTy() &&
-+                    llvm::dyn_cast<llvm::VectorType>(retType)->getElementType()->isDoubleTy()) {
-                     ArgTy.push_back(LLVMTypes::DoubleVectorType);
-                     // _DvWIDTH suffix is used in target file to differentiate scalar
-                     // and vector versions of intrinsics. Here we remove this
-@@ -6511,8 +6541,15 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- 
-     // Cast offsets to int64
-     Offsets = new llvm::ZExtInst(
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        Offsets,
-+        llvm::FixedVectorType::get(LLVMTypes::Int64Type,
-+                                   llvm::dyn_cast<llvm::VectorType>(Offsets->getType())->getNumElements()),
-+        "svm_offset_zext", InsertBefore);
-+#else
-         Offsets, llvm::VectorType::get(LLVMTypes::Int64Type, Offsets->getType()->getVectorNumElements()),
-         "svm_offset_zext", InsertBefore);
-+#endif
- 
-     if (!llvm::isa<llvm::ConstantPointerNull>(Ptr)) {
-         // Cast ptr to int64
-@@ -6520,13 +6557,31 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- 
-         // Vectorize ptr
-         llvm::Value *undefInsertValue =
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            llvm::UndefValue::get(llvm::FixedVectorType::get(
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+#else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
-+#endif
-         address = llvm::InsertElementInst::Create(undefInsertValue, address, LLVMInt32(0), "svm_ptr_iei", InsertBefore);
-         llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+            {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
-+#else
-+        llvm::ElementCount::get(
-+                                llvm::dyn_cast<llvm::FixedVectorType>(addressType->getNumElements(), false),
-+#endif
-             llvm::Constant::getNullValue(llvm::Type::getInt32Ty(InsertBefore->getContext())));
-+
-         llvm::Value *undefShuffleValue =
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            llvm::UndefValue::get(llvm::FixedVectorType::get(
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+#else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
-+#endif
-         address = new llvm::ShuffleVectorInst(address, undefShuffleValue, zeroVec, "svm_ptr_svi", InsertBefore);
- 
-         // Calculate address
-@@ -6553,9 +6608,12 @@ llvm::Instruction *FixAddressSpace::processVectorLoad(llvm::LoadInst *LI) {
-     if (retType->getScalarType()->isPointerTy()) {
-         isPtrLoad = true;
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        retType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(retType)->getNumElements());
-+#else
-         retType = llvm::VectorType::get(scalarType, retType->getVectorNumElements());
-+#endif
-     }
--
-     llvm::Instruction *res = lGenXLoadInst(ptr, retType, llvm::dyn_cast<llvm::Instruction>(LI));
-     Assert(res);
- 
-@@ -6580,11 +6638,16 @@ llvm::Instruction *FixAddressSpace::processSVMVectorLoad(llvm::Instruction *CI)
-     ptr = new llvm::IntToPtrInst(ptr, llvm::PointerType::get(retType, 0), CI->getName() + "_inttoptr", CI);
-     llvm::Instruction *loadInst = NULL;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    loadInst = new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), loadInst,
--                                  CI->getName(), (llvm::Instruction *)NULL);
-+    loadInst = new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-+                                  CI->getName(), false /* not volatile */,
-+                                  llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne(),
-+                                  (llvm::Instruction *)NULL);
- #else
--    loadInst = new llvm::LoadInst(ptr, CI->getName(), (llvm::Instruction *)NULL);
-+    loadInst = new llvm::LoadInst(ptr, CI->getName(), false,
-+                                  llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne(),
-+                                  (llvm::Instruction *)NULL);
- #endif
-+
-     Assert(loadInst);
-     return loadInst;
- }
-@@ -6606,7 +6669,11 @@ llvm::Instruction *FixAddressSpace::processVectorStore(llvm::StoreInst *SI) {
-     // Note: it doesn't look like a normal case for GenX target
-     if (valType->getScalarType()->isPointerTy()) {
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        valType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(valType)->getNumElements());
-+#else
-         valType = llvm::VectorType::get(scalarType, valType->getVectorNumElements());
-+#endif
-         val = new llvm::PtrToIntInst(val, valType, "svm_st_val_ptrtoint", SI);
-     }
- 
-@@ -6631,12 +6698,8 @@ llvm::Instruction *FixAddressSpace::processSVMVectorStore(llvm::Instruction *CI)
-     ptr = new llvm::IntToPtrInst(ptr, llvm::PointerType::get(valType, 0), CI->getName() + "_inttoptr", CI);
- 
-     llvm::Instruction *storeInst = NULL;
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    loadInst = new llvm::StoreInst(val, llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(),
--                                   storeInst, CI->getName(), (llvm::Instruction *)NULL);
--#else
--    storeInst = new llvm::StoreInst(val, ptr, (llvm::Instruction *)NULL);
--#endif
-+    storeInst = new llvm::StoreInst(val, ptr, (llvm::Instruction *)NULL,
-+                                    llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
-     Assert(storeInst);
-     return storeInst;
- }
-@@ -6645,15 +6708,18 @@ llvm::Instruction *FixAddressSpace::createInt8WrRegion(llvm::Value *Val, llvm::V
-     int width = g->target->getVectorWidth();
- 
-     llvm::Value *Args[8];
--
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Args[0] = llvm::UndefValue::get(llvm::FixedVectorType::get(LLVMTypes::Int8Type, width * 4)); // old value
-+#else
-     Args[0] = llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int8Type, width * 4)); // old value
--    Args[1] = Val;                                                                          // value to store
--    Args[2] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);                              // vstride
--    Args[3] = llvm::ConstantInt::get(LLVMTypes::Int32Type, width);                          // width
--    Args[4] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 4);                              // stride
--    Args[5] = llvm::ConstantInt::get(LLVMTypes::Int16Type, 0);                              // offsets
--    Args[6] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);                              // parent width (ignored)
--    Args[7] = Mask;                                                                         // mask
-+#endif
-+    Args[1] = Val;                                                 // value to store
-+    Args[2] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);     // vstride
-+    Args[3] = llvm::ConstantInt::get(LLVMTypes::Int32Type, width); // width
-+    Args[4] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 4);     // stride
-+    Args[5] = llvm::ConstantInt::get(LLVMTypes::Int16Type, 0);     // offsets
-+    Args[6] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);     // parent width (ignored)
-+    Args[7] = Mask;                                                // mask
- 
-     llvm::Type *Tys[4];
- 
-@@ -6708,7 +6774,12 @@ llvm::Instruction *FixAddressSpace::processGatherScatterPrivate(llvm::CallInst *
-         return NULL;
- 
-     llvm::Value *address = calculateGatherScatterAddress(ptr, offsets, CI);
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    llvm::Type *i8VecType = llvm::FixedVectorType::get(LLVMTypes::Int8Type, width * 4);
-+#else
-     llvm::Type *i8VecType = llvm::VectorType::get(LLVMTypes::Int8Type, width * 4);
-+#endif
-+
-     bool isInt8 = (value->getType()->getScalarType() == LLVMTypes::Int8Type);
- 
-     Assert(address && "Bad gather/scatter address!");
diff --git a/srcpkgs/ispc/patches/llvm12-006.patch b/srcpkgs/ispc/patches/llvm12-006.patch
deleted file mode 100644
index a829ea48391e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-006.patch
+++ /dev/null
@@ -1,126 +0,0 @@
-From bb3f493d1fbd45c79e1d9dee67a0430ba313eaad Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 19 Jan 2021 11:07:33 -0800
-Subject: [PATCH] Fixed ifdefs for LLVM_11
-
----
- src/ctx.cpp |  6 +++---
- src/opt.cpp | 18 +++++++++---------
- 2 files changed, 12 insertions(+), 12 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 2a72e6837..527a02f30 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1691,7 +1691,7 @@ llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const llvm::T
-     if (llvm::Constant *const_val = llvm::dyn_cast<llvm::Constant>(value)) {
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         ret = llvm::ConstantVector::getSplat(g->target->getVectorWidth(), const_val);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-         ret =
-             llvm::ConstantVector::getSplat({static_cast<unsigned int>(g->target->getVectorWidth()), false}, const_val);
- #else // LLVM 12.0+
-@@ -3148,7 +3148,7 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-     llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
-         vecType->getVectorNumElements(), llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-     llvm::Constant *zeroVec =
-         llvm::ConstantVector::getSplat({static_cast<unsigned int>(ty->getNumElements()), false},
-                                        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
-@@ -3688,7 +3688,7 @@ llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-         defaults = llvm::ConstantVector::getSplat({static_cast<unsigned int>(vt->getNumElements()), false},
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
- #else
-diff --git a/src/opt.cpp b/src/opt.cpp
-index 1789b8476..3ff191a0a 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -1045,7 +1045,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                 llvm::Instruction *loadInst =
-                     new llvm::LoadInst(castPtr, llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load",
-                                        false /* not volatile */, llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
-@@ -1472,7 +1472,7 @@ static llvm::Value *lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offse
-                     llvm::Value *zeroMask =
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                         llvm::ConstantVector::getSplat(cv->getType()->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                         llvm::ConstantVector::getSplat(
-                             {llvm::dyn_cast<llvm::VectorType>(cv->getType())->getNumElements(), false},
- #else // LLVM 12.0+
-@@ -1495,7 +1495,7 @@ static llvm::Value *lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offse
-                         llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                             bop_var_type->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                             {llvm::dyn_cast<llvm::VectorType>(bop_var_type)->getNumElements(), false},
- #else // LLVM 12.0+
-                             llvm::ElementCount::get(
-@@ -2803,7 +2803,7 @@ static bool lGSToLoadStore(llvm::CallInst *callInst) {
-             llvm::Value *zeroMask =
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                 llvm::ConstantVector::getSplat(callInst->getType()->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                 llvm::ConstantVector::getSplat(
-                     {llvm::dyn_cast<llvm::VectorType>(callInst->getType())->getNumElements(), false},
- 
-@@ -3100,7 +3100,7 @@ static bool lImproveMaskedLoad(llvm::CallInst *callInst, llvm::BasicBlock::itera
-         {
-             llvm::Type *ptrType = llvm::PointerType::get(callInst->getType(), 0);
-             ptr = new llvm::BitCastInst(ptr, ptrType, "ptr_cast_for_load", callInst);
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             load = new llvm::LoadInst(
-                 ptr, callInst->getName(), false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-@@ -3459,7 +3459,7 @@ llvm::Value *lGEPAndLoad(llvm::Value *basePtr, int64_t offset, int align, llvm::
-                          llvm::Type *type) {
-     llvm::Value *ptr = lGEPInst(basePtr, LLVMInt64(offset), "new_base", insertBefore);
-     ptr = new llvm::BitCastInst(ptr, llvm::PointerType::get(type, 0), "ptr_cast", insertBefore);
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-     return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, llvm::MaybeAlign(align), insertBefore);
- #else // LLVM 11.0+
-     return new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-@@ -6183,7 +6183,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 Args.push_back(llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                     g->target->getNativeVectorWidth(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                     {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
- #else // LLVM 12.0+
-                     llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-@@ -6195,7 +6195,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                     g->target->getNativeVectorWidth(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                     {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
- #else // LLVM 12.0+
-                     llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-@@ -6567,7 +6567,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
-         llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-             {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
- #else
-         llvm::ElementCount::get(
diff --git a/srcpkgs/ispc/patches/llvm12-007.patch b/srcpkgs/ispc/patches/llvm12-007.patch
deleted file mode 100644
index 1b975f896c7e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-007.patch
+++ /dev/null
@@ -1,160 +0,0 @@
-From 62f5a6c37bf26fc25a7cf81868052d3472874610 Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 23 Mar 2021 23:07:30 -0700
-Subject: [PATCH] Do not generate function mask when it is not required
-
----
- src/ctx.cpp                    | 39 ++++++++++++++-------
- tests/lit-tests/full_mask.ispc | 63 ++++++++++++++++++++++++++++++++++
- 2 files changed, 90 insertions(+), 12 deletions(-)
- create mode 100644 tests/lit-tests/full_mask.ispc
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 527a02f30..9e775fc5c 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -231,10 +231,18 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym, llvm::F
-     internalMaskPointer = AllocaInst(LLVMTypes::MaskType, "internal_mask_memory");
-     StoreInst(LLVMMaskAllOn, internalMaskPointer);
- 
--    functionMaskValue = LLVMMaskAllOn;
--
--    fullMaskPointer = AllocaInst(LLVMTypes::MaskType, "full_mask_memory");
--    StoreInst(LLVMMaskAllOn, fullMaskPointer);
-+    // If the function doesn't have __mask in parameters, there is no need to
-+    // have function mask
-+    if ((func->GetType()->isExported &&
-+         (lf->getFunctionType()->getNumParams() == func->GetType()->GetNumParameters())) ||
-+        (func->GetType()->isUnmasked) || (func->GetType()->isTask)) {
-+        functionMaskValue = NULL;
-+        fullMaskPointer = NULL;
-+    } else {
-+        functionMaskValue = LLVMMaskAllOn;
-+        fullMaskPointer = AllocaInst(LLVMTypes::MaskType, "full_mask_memory");
-+        StoreInst(LLVMMaskAllOn, fullMaskPointer);
-+    }
- 
-     blockEntryMask = NULL;
-     breakLanesPtr = continueLanesPtr = NULL;
-@@ -389,20 +397,26 @@ llvm::BasicBlock *FunctionEmitContext::GetCurrentBasicBlock() { return bblock; }
- 
- void FunctionEmitContext::SetCurrentBasicBlock(llvm::BasicBlock *bb) { bblock = bb; }
- 
--llvm::Value *FunctionEmitContext::GetFunctionMask() { return functionMaskValue; }
-+llvm::Value *FunctionEmitContext::GetFunctionMask() { return fullMaskPointer ? functionMaskValue : LLVMMaskAllOn; }
- 
- llvm::Value *FunctionEmitContext::GetInternalMask() { return LoadInst(internalMaskPointer, NULL, "load_mask"); }
- 
- llvm::Value *FunctionEmitContext::GetFullMask() {
--    return BinaryOperator(llvm::Instruction::And, GetInternalMask(), functionMaskValue, "internal_mask&function_mask");
-+    return fullMaskPointer ? BinaryOperator(llvm::Instruction::And, GetInternalMask(), functionMaskValue,
-+                                            "internal_mask&function_mask")
-+                           : GetInternalMask();
- }
- 
--llvm::Value *FunctionEmitContext::GetFullMaskPointer() { return fullMaskPointer; }
-+llvm::Value *FunctionEmitContext::GetFullMaskPointer() {
-+    return fullMaskPointer ? fullMaskPointer : internalMaskPointer;
-+}
- 
- void FunctionEmitContext::SetFunctionMask(llvm::Value *value) {
--    functionMaskValue = value;
--    if (bblock != NULL)
--        StoreInst(GetFullMask(), fullMaskPointer);
-+    if (fullMaskPointer != NULL) {
-+        functionMaskValue = value;
-+        if (bblock != NULL)
-+            StoreInst(GetFullMask(), fullMaskPointer);
-+    }
- }
- 
- void FunctionEmitContext::SetBlockEntryMask(llvm::Value *value) { blockEntryMask = value; }
-@@ -410,7 +424,8 @@ void FunctionEmitContext::SetBlockEntryMask(llvm::Value *value) { blockEntryMask
- void FunctionEmitContext::SetInternalMask(llvm::Value *value) {
-     StoreInst(value, internalMaskPointer);
-     // kludge so that __mask returns the right value in ispc code.
--    StoreInst(GetFullMask(), fullMaskPointer);
-+    if (fullMaskPointer)
-+        StoreInst(GetFullMask(), fullMaskPointer);
- }
- 
- void FunctionEmitContext::SetInternalMaskAnd(llvm::Value *oldMask, llvm::Value *test) {
-@@ -1265,7 +1280,7 @@ void FunctionEmitContext::CurrentLanesReturned(Expr *expr, bool doCoherenceCheck
-         // lanes have returned
-         if (doCoherenceCheck) {
-             // if newReturnedLanes == functionMaskValue, get out of here!
--            llvm::Value *cmp = MasksAllEqual(functionMaskValue, newReturnedLanes);
-+            llvm::Value *cmp = MasksAllEqual(GetFunctionMask(), newReturnedLanes);
-             llvm::BasicBlock *bDoReturn = CreateBasicBlock("do_return");
-             llvm::BasicBlock *bNoReturn = CreateBasicBlock("no_return");
-             BranchInst(bDoReturn, bNoReturn, cmp);
-diff --git a/tests/lit-tests/full_mask.ispc b/tests/lit-tests/full_mask.ispc
-new file mode 100644
-index 000000000..ac0b0bca3
---- /dev/null
-+++ b/tests/lit-tests/full_mask.ispc
-@@ -0,0 +1,63 @@
-+// RUN: %{ispc} %s -DISPC_EXPORT --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_EXPORT %s
-+
-+// RUN: %{ispc} %s -DISPC_UNMASKED --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_UNMASKED %s
-+
-+// RUN: %{ispc} %s -DISPC_NOQUALIF --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_NOQUALIF %s
-+
-+// RUN: %{ispc} %s -DISPC_TASK --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_TASK %s
-+
-+struct Parameters {
-+    float *vout;
-+    int param;
-+};
-+
-+#ifdef ISPC_EXPORT
-+// CHECK_ISPC_EXPORT: define void @simple_export___
-+// CHECK_ISPC_EXPORT: %full_mask_memory = alloca
-+// CHECK_ISPC_EXPORT: define void @simple_export(
-+// CHECK_ISPC_EXPORT-NOT: %full_mask_memory = alloca
-+export void simple_export(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_UNMASKED
-+// CHECK_ISPC_UNMASKED: define void @simple_unmasked
-+// CHECK_ISPC_UNMASKED-NOT: %full_mask_memory = alloca
-+unmasked void simple_unmasked(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_NOQUALIF
-+// CHECK_ISPC_NOQUALIF: define void @simple
-+// CHECK_ISPC_NOQUALIF: %full_mask_memory = alloca
-+void simple(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_TASK
-+
-+// CHECK_ISPC_TASK: define void @simple_task
-+// CHECK_ISPC_TASK-NOT: %full_mask_memory = alloca
-+// CHECK_ISPC_TASK: define void @simple_entry_point__
-+// CHECK_ISPC_TASK: %full_mask_memory = alloca
-+// CHECK_ISPC_TASK: define void @simple_entry_point(
-+// CHECK_ISPC_TASK-NOT: %full_mask_memory = alloca
-+task void simple_task(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+export void simple_entry_point(void *uniform parameters, uniform int dim0, uniform int dim1, uniform int dim2) {
-+    launch[dim0, dim1, dim2] simple_task(parameters);
-+}
-+#endif
-\ No newline at end of file
diff --git a/srcpkgs/ispc/patches/llvm12-008.patch b/srcpkgs/ispc/patches/llvm12-008.patch
deleted file mode 100644
index c8413d8b7887..000000000000
--- a/srcpkgs/ispc/patches/llvm12-008.patch
+++ /dev/null
@@ -1,149 +0,0 @@
-From afad14227d9204a3c8a626ca608f5b43c3218fe9 Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 4 May 2021 11:43:52 -0700
-Subject: [PATCH] Fixed ISPC gen build for LLVM12
-
----
- src/ctx.cpp |  4 ++++
- src/opt.cpp | 43 +++++++++++++++++++++++++++++--------------
- 2 files changed, 33 insertions(+), 14 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 0c7050591..f7dc06939 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -3738,7 +3738,11 @@ llvm::Value *FunctionEmitContext::GenXSimdCFAny(llvm::Value *value) {
- 
- llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::Value *defaults) {
-     AssertPos(currentPos, llvm::isa<llvm::VectorType>(value->getType()));
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    llvm::FixedVectorType *vt = llvm::dyn_cast<llvm::FixedVectorType>(value->getType());
-+#else
-     llvm::VectorType *vt = llvm::dyn_cast<llvm::VectorType>(value->getType());
-+#endif
-     if (defaults == NULL) {
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-diff --git a/src/opt.cpp b/src/opt.cpp
-index cea4afa23..4e33d6b1a 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -2916,9 +2916,13 @@ static llvm::Function *lGenXMaskedInt8Inst(llvm::Instruction *inst, bool isStore
- 
- static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::Instruction *inst) {
-     Assert(g->target->isGenXTarget());
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Assert(llvm::isa<llvm::FixedVectorType>(val->getType()));
-+    llvm::FixedVectorType *valVecType = llvm::dyn_cast<llvm::FixedVectorType>(val->getType());
-+#else
-     Assert(llvm::isa<llvm::VectorType>(val->getType()));
--
-     llvm::VectorType *valVecType = llvm::dyn_cast<llvm::VectorType>(val->getType());
-+#endif
-     Assert(llvm::isPowerOf2_32(valVecType->getNumElements()));
-     Assert(valVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
- 
-@@ -2942,9 +2946,13 @@ static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::
- }
- 
- static llvm::CallInst *lGenXLoadInst(llvm::Value *ptr, llvm::Type *retType, llvm::Instruction *inst) {
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Assert(llvm::isa<llvm::FixedVectorType>(retType));
-+    llvm::FixedVectorType *retVecType = llvm::dyn_cast<llvm::FixedVectorType>(retType);
-+#else
-     Assert(llvm::isa<llvm::VectorType>(retType));
--
-     llvm::VectorType *retVecType = llvm::dyn_cast<llvm::VectorType>(retType);
-+#endif
-     Assert(llvm::isPowerOf2_32(retVecType->getNumElements()));
-     Assert(retVecType->getPrimitiveSizeInBits());
-     Assert(retVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-@@ -5485,8 +5493,13 @@ static void lCreateBlockLDUse(llvm::Instruction *currInst, std::vector<llvm::Ext
-         } else if (auto gather = lGetPseudoGather(llvm::dyn_cast<llvm::Instruction>(ui->getUser()))) {
-             // Collect idxs from gather and fix users
-             llvm::Value *res = llvm::UndefValue::get(gather->getType());
--            for (unsigned i = 0, end = llvm::dyn_cast<llvm::VectorType>(res->getType())->getNumElements(); i < end;
--                 ++i) {
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            for (unsigned i = 0, end = llvm::dyn_cast<llvm::FixedVectorType>(res->getType())->getNumElements(); i < end;
-+                 ++i)
-+#else
-+            for (unsigned i = 0, end = llvm::dyn_cast<llvm::VectorType>(res->getType())->getNumElements(); i < end; ++i)
-+#endif
-+            {
-                 // Get element via IEI
-                 res = llvm::InsertElementInst::Create(res, EEIs[ptrUse.idxs[curr_idx++]],
-                                                       llvm::ConstantInt::get(LLVMTypes::Int32Type, i),
-@@ -5522,10 +5535,11 @@ static bool lVectorizeGEPs(llvm::Value *ptr, std::vector<PtrUse> &ptrUses, std::
- 
-     // Adjust values for vector load
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    if (auto vecTy = llvm::dyn_cast<llvm::FixedVectorType>(type)) {
-+    if (auto vecTy = llvm::dyn_cast<llvm::FixedVectorType>(type))
- #else
--    if (auto vecTy = llvm::dyn_cast<llvm::VectorType>(type)) {
-+    if (auto vecTy = llvm::dyn_cast<llvm::VectorType>(type))
- #endif
-+    {
-         // Get single element size
-         t_size /= vecTy->getNumElements();
-         // Get single element type
-@@ -6477,7 +6491,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-         Offsets,
-         llvm::FixedVectorType::get(LLVMTypes::Int64Type,
--                                   llvm::dyn_cast<llvm::VectorType>(Offsets->getType())->getNumElements()),
-+                                   llvm::dyn_cast<llvm::FixedVectorType>(Offsets->getType())->getNumElements()),
-         "svm_offset_zext", InsertBefore);
- #else
-         Offsets, llvm::VectorType::get(LLVMTypes::Int64Type, Offsets->getType()->getVectorNumElements()),
-@@ -6492,7 +6506,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
-         llvm::Value *undefInsertValue =
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-             llvm::UndefValue::get(llvm::FixedVectorType::get(
--                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements()));
- #else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
- #endif
-@@ -6501,17 +6515,16 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
- #elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
--            {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
-+            {llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements(), false},
- #else
--        llvm::ElementCount::get(
--                                llvm::dyn_cast<llvm::FixedVectorType>(addressType->getNumElements(), false),
-+            llvm::ElementCount::get(llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements(), false),
- #endif
-             llvm::Constant::getNullValue(llvm::Type::getInt32Ty(InsertBefore->getContext())));
- 
-         llvm::Value *undefShuffleValue =
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-             llvm::UndefValue::get(llvm::FixedVectorType::get(
--                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements()));
- #else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
- #endif
-@@ -6542,7 +6555,8 @@ llvm::Instruction *FixAddressSpace::processVectorLoad(llvm::LoadInst *LI) {
-         isPtrLoad = true;
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--        retType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(retType)->getNumElements());
-+        retType =
-+            llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::FixedVectorType>(retType)->getNumElements());
- #else
-         retType = llvm::VectorType::get(scalarType, retType->getVectorNumElements());
- #endif
-@@ -6604,7 +6618,8 @@ llvm::Instruction *FixAddressSpace::processVectorStore(llvm::StoreInst *SI) {
-     if (valType->getScalarType()->isPointerTy()) {
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--        valType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(valType)->getNumElements());
-+        valType =
-+            llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::FixedVectorType>(valType)->getNumElements());
- #else
-         valType = llvm::VectorType::get(scalarType, valType->getVectorNumElements());
- #endif
diff --git a/srcpkgs/ispc/patches/llvm12-009.patch b/srcpkgs/ispc/patches/llvm12-009.patch
deleted file mode 100644
index d3ea67828582..000000000000
--- a/srcpkgs/ispc/patches/llvm12-009.patch
+++ /dev/null
@@ -1,2109 +0,0 @@
-From 97b13c32132e2704a5e3e7b2eae49d854d087e3e Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 4 May 2021 11:31:55 -0700
-Subject: [PATCH] Updated builtins-cm* for switch to LLVM12
-
----
- builtins/builtins-cm-32.ll | 234 ++++++++++++++++++-------------------
- builtins/builtins-cm-64.ll | 232 ++++++++++++++++++------------------
- 2 files changed, 233 insertions(+), 233 deletions(-)
-
-diff --git a/builtins/builtins-cm-32.ll b/builtins/builtins-cm-32.ll
-index 32debf32e..481bbdc48 100644
---- a/builtins/builtins-cm-32.ll
-+++ b/builtins/builtins-cm-32.ll
-@@ -557,7 +557,7 @@ $_ZN13VaryingWriter12WriteVecElemIPvEEvv = comdat any
- @.str.10 = private unnamed_addr constant [5 x i8] c"%08X\00", align 1
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -618,7 +618,7 @@ define internal <1 x i8> @_ZN7details13__impl_divremILi1EEEu2CMvbT__cS1_S1_u2CMv
- declare <1 x i8> @llvm.genx.rdregioni.v1i8.v1i8.i16(<1 x i8>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -634,7 +634,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -680,7 +680,7 @@ define internal <2 x i8> @_ZN7details13__impl_divremILi2EEEu2CMvbT__cS1_S1_u2CMv
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -818,7 +818,7 @@ define internal <16 x i8> @_ZN7details13__impl_divremILi16EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -864,7 +864,7 @@ define internal <32 x i8> @_ZN7details13__impl_divremILi32EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -890,7 +890,7 @@ define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -904,7 +904,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -918,7 +918,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -932,7 +932,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -946,7 +946,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -960,7 +960,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -974,7 +974,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1058,7 +1058,7 @@ define internal <1 x i16> @_ZN7details13__impl_divremILi1EEEu2CMvbT__sS1_S1_u2CM
- declare <1 x i16> @llvm.genx.rdregioni.v1i16.v1i16.i16(<1 x i16>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1074,7 +1074,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1143,7 +1143,7 @@ define internal <2 x i16> @_ZN7details13__impl_divremILi2EEEu2CMvbT__sS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1350,7 +1350,7 @@ define internal <16 x i16> @_ZN7details13__impl_divremILi16EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1419,7 +1419,7 @@ define internal <32 x i16> @_ZN7details13__impl_divremILi32EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1445,7 +1445,7 @@ define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 si
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1459,7 +1459,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1473,7 +1473,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1487,7 +1487,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -1501,7 +1501,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -1515,7 +1515,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1529,7 +1529,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1730,7 +1730,7 @@ define internal <1 x i32> @_ZN7details13__impl_divremILi1EEEu2CMvbT__iS1_S1_u2CM
- declare <1 x i32> @llvm.genx.rdregioni.v1i32.v1i32.i16(<1 x i32>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1746,7 +1746,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -1932,7 +1932,7 @@ define internal <2 x i32> @_ZN7details13__impl_divremILi2EEEu2CMvbT__iS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2490,7 +2490,7 @@ define internal <16 x i32> @_ZN7details13__impl_divremILi16EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2676,7 +2676,7 @@ define internal <32 x i32> @_ZN7details13__impl_divremILi32EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2702,7 +2702,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2716,7 +2716,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -2730,7 +2730,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2744,7 +2744,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -2758,7 +2758,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -2772,7 +2772,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2786,7 +2786,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2844,7 +2844,7 @@ define internal <1 x i8> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2860,7 +2860,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -2906,7 +2906,7 @@ define internal <2 x i8> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3044,7 +3044,7 @@ define internal <16 x i8> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3090,7 +3090,7 @@ define internal <32 x i8> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3116,7 +3116,7 @@ define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3130,7 +3130,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -3144,7 +3144,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3158,7 +3158,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -3172,7 +3172,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -3186,7 +3186,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3200,7 +3200,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3278,7 +3278,7 @@ define internal <1 x i16> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3294,7 +3294,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3360,7 +3360,7 @@ define internal <2 x i16> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3558,7 +3558,7 @@ define internal <16 x i16> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3624,7 +3624,7 @@ define internal <32 x i16> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3650,7 +3650,7 @@ define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 ze
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3664,7 +3664,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3678,7 +3678,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3692,7 +3692,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -3706,7 +3706,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -3720,7 +3720,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3734,7 +3734,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3892,7 +3892,7 @@ define internal <1 x i32> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3908,7 +3908,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4054,7 +4054,7 @@ define internal <2 x i32> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4492,7 +4492,7 @@ define internal <16 x i32> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4638,7 +4638,7 @@ define internal <32 x i32> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4664,7 +4664,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4678,7 +4678,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4692,7 +4692,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4706,7 +4706,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -4720,7 +4720,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -4734,7 +4734,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4748,7 +4748,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-+define internal void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-   %8 = alloca i8*, align 4
-   %9 = alloca i8*, align 4
-   %10 = alloca i32, align 4
-@@ -4988,7 +4988,7 @@ define internal void @_ZN7details16_cm_print_formatILi128EEEv15cm_surfaceindexju
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i32) #26 !dbg !117 {
-+define internal void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i32) #26 !dbg !117 {
-   %10 = alloca i32, align 4
-   %11 = alloca i8*, align 4
-   %12 = alloca i32, align 4
-@@ -5069,7 +5069,7 @@ define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i3
-   %67 = load i64, i64* %13, align 8, !dbg !159, !tbaa !19
-   %68 = load <5 x i32>, <5 x i32>* %21, align 32, !dbg !160, !tbaa !7
-   call void @_ZN13VaryingWriterC2ERjRPKjiyu2CMvb5_i(%class.VaryingWriter* %23, i32* dereferenceable(4) %19, i32** dereferenceable(4) %14, i32 %66, i64 %67, <5 x i32> %68), !dbg !161
--  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval align 32 %22, %class.VaryingWriter* byval align 32 %23), !dbg !162
-+  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval(%class.UniformWriter) align 32 %22, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %23), !dbg !162
-   br label %70, !dbg !163
- 
- ; <label>:70:                                     ; preds = %60
-@@ -5187,7 +5187,7 @@ define internal <5 x i32> @_Z17get_auxiliary_strv() #28 comdat !dbg !178 {
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %class.VaryingWriter* byval align 32) #25 comdat !dbg !191 {
-+define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !191 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %class.VaryingWriter, align 32
-@@ -5196,7 +5196,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %8 = bitcast %class.UniformWriter* %5 to i8*, !dbg !196
-   %9 = bitcast %class.UniformWriter* %1 to i8*, !dbg !196
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %8, i8* align 32 %9, i32 64, i1 false), !dbg !196, !tbaa.struct !197
--  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval align 32 %5), !dbg !198
-+  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5), !dbg !198
-   br i1 %10, label %16, label %11, !dbg !199
- 
- ; <label>:11:                                     ; preds = %3
-@@ -5204,7 +5204,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %13 = bitcast %class.VaryingWriter* %6 to i8*, !dbg !201
-   %14 = bitcast %class.VaryingWriter* %2 to i8*, !dbg !201
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %13, i8* align 32 %14, i32 64, i1 false), !dbg !201, !tbaa.struct !197
--  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval align 32 %6), !dbg !202
-+  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %6), !dbg !202
-   br label %16, !dbg !199
- 
- ; <label>:16:                                     ; preds = %11, %3
-@@ -5279,7 +5279,7 @@ define internal void @_ZN13VaryingWriterC2ERjRPKjiyu2CMvb5_i(%class.VaryingWrite
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @__num_cores() #29 !dbg !236 {
-+define internal i32 @__num_cores() #29 !dbg !236 {
-   ret i32 -1, !dbg !237
- }
- 
-@@ -8860,7 +8860,7 @@ declare dso_local void @_ZN7details37__cm_intrinsic_impl_svm_scatter_writeIiLi1E
- declare void @llvm.genx.svm.scatter.v1i1.v1i64.v1i32(<1 x i1>, i32, <1 x i64>, <1 x i32>) #27
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval align 32) #25 comdat !dbg !1645 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32) #25 comdat !dbg !1645 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.UniformWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8869,7 +8869,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
-   %7 = bitcast %class.UniformWriter* %4 to i8*, !dbg !1647
-   %8 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1647
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %7, i8* align 32 %8, i32 64, i1 false), !dbg !1647, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %5), !dbg !1648
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval(%class.UniformWriter) align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %5), !dbg !1648
-   ret i1 %9, !dbg !1649
- }
- 
-@@ -8877,7 +8877,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
- declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture readonly, i32, i1) #32
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval align 32) #25 comdat !dbg !1650 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !1650 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.VaryingWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -8886,12 +8886,12 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWrite
-   %7 = bitcast %class.VaryingWriter* %4 to i8*, !dbg !1652
-   %8 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !1652
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %7, i8* align 32 %8, i32 64, i1 false), !dbg !1652, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %5), !dbg !1653
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %5), !dbg !1653
-   ret i1 %9, !dbg !1654
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1655 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1655 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8914,7 +8914,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %22 = bitcast %class.UniformWriter* %5 to i8*, !dbg !1657
-   %23 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1657
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %22, i8* align 32 %23, i32 64, i1 false), !dbg !1657, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %6), !dbg !1658
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %6), !dbg !1658
-   br i1 %24, label %60, label %25, !dbg !1659
- 
- ; <label>:25:                                     ; preds = %3
-@@ -8922,7 +8922,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %27 = bitcast %class.UniformWriter* %7 to i8*, !dbg !1661
-   %28 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1661
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %27, i8* align 32 %28, i32 64, i1 false), !dbg !1661, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %8), !dbg !1662
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval(%class.UniformWriter) align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %8), !dbg !1662
-   br i1 %29, label %60, label %30, !dbg !1663
- 
- ; <label>:30:                                     ; preds = %25
-@@ -8930,7 +8930,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %32 = bitcast %class.UniformWriter* %9 to i8*, !dbg !1665
-   %33 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1665
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %32, i8* align 32 %33, i32 64, i1 false), !dbg !1665, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %10), !dbg !1666
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval(%class.UniformWriter) align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %10), !dbg !1666
-   br i1 %34, label %60, label %35, !dbg !1667
- 
- ; <label>:35:                                     ; preds = %30
-@@ -8938,7 +8938,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %37 = bitcast %class.UniformWriter* %11 to i8*, !dbg !1669
-   %38 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1669
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %37, i8* align 32 %38, i32 64, i1 false), !dbg !1669, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %12), !dbg !1670
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval(%class.UniformWriter) align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %12), !dbg !1670
-   br i1 %39, label %60, label %40, !dbg !1671
- 
- ; <label>:40:                                     ; preds = %35
-@@ -8946,7 +8946,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %42 = bitcast %class.UniformWriter* %13 to i8*, !dbg !1673
-   %43 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1673
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %42, i8* align 32 %43, i32 64, i1 false), !dbg !1673, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %14), !dbg !1674
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval(%class.UniformWriter) align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %14), !dbg !1674
-   br i1 %44, label %60, label %45, !dbg !1675
- 
- ; <label>:45:                                     ; preds = %40
-@@ -8954,7 +8954,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %47 = bitcast %class.UniformWriter* %15 to i8*, !dbg !1677
-   %48 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1677
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %47, i8* align 32 %48, i32 64, i1 false), !dbg !1677, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %16), !dbg !1678
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval(%class.UniformWriter) align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %16), !dbg !1678
-   br i1 %49, label %60, label %50, !dbg !1679
- 
- ; <label>:50:                                     ; preds = %45
-@@ -8962,7 +8962,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %52 = bitcast %class.UniformWriter* %17 to i8*, !dbg !1681
-   %53 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1681
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %52, i8* align 32 %53, i32 64, i1 false), !dbg !1681, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %18), !dbg !1682
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval(%class.UniformWriter) align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %18), !dbg !1682
-   br i1 %54, label %60, label %55, !dbg !1683
- 
- ; <label>:55:                                     ; preds = %50
-@@ -8970,7 +8970,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %57 = bitcast %class.UniformWriter* %19 to i8*, !dbg !1685
-   %58 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1685
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %57, i8* align 32 %58, i32 64, i1 false), !dbg !1685, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %20), !dbg !1686
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval(%class.UniformWriter) align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %20), !dbg !1686
-   br label %60, !dbg !1683
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -8979,7 +8979,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1688 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1688 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9005,7 +9005,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1697 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1697 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9031,7 +9031,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1706 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1706 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9057,7 +9057,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1715 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1715 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9083,7 +9083,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1724 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1724 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9109,7 +9109,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1733 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1733 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9135,7 +9135,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1742 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1742 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9161,7 +9161,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1751 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1751 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9984,7 +9984,7 @@ define internal i32 @_ZN7details18_cm_print_type_oclIPvEENS_18SHADER_PRINTF_TYPE
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2055 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2055 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.VaryingWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -10007,7 +10007,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %22 = bitcast %class.VaryingWriter* %5 to i8*, !dbg !2057
-   %23 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2057
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %22, i8* align 32 %23, i32 64, i1 false), !dbg !2057, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %6), !dbg !2058
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %6), !dbg !2058
-   br i1 %24, label %60, label %25, !dbg !2059
- 
- ; <label>:25:                                     ; preds = %3
-@@ -10015,7 +10015,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %27 = bitcast %class.VaryingWriter* %7 to i8*, !dbg !2061
-   %28 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2061
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %27, i8* align 32 %28, i32 64, i1 false), !dbg !2061, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %8), !dbg !2062
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %8), !dbg !2062
-   br i1 %29, label %60, label %30, !dbg !2063
- 
- ; <label>:30:                                     ; preds = %25
-@@ -10023,7 +10023,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %32 = bitcast %class.VaryingWriter* %9 to i8*, !dbg !2065
-   %33 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2065
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %32, i8* align 32 %33, i32 64, i1 false), !dbg !2065, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %10), !dbg !2066
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %10), !dbg !2066
-   br i1 %34, label %60, label %35, !dbg !2067
- 
- ; <label>:35:                                     ; preds = %30
-@@ -10031,7 +10031,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %37 = bitcast %class.VaryingWriter* %11 to i8*, !dbg !2069
-   %38 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2069
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %37, i8* align 32 %38, i32 64, i1 false), !dbg !2069, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %12), !dbg !2070
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %12), !dbg !2070
-   br i1 %39, label %60, label %40, !dbg !2071
- 
- ; <label>:40:                                     ; preds = %35
-@@ -10039,7 +10039,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %42 = bitcast %class.VaryingWriter* %13 to i8*, !dbg !2073
-   %43 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2073
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %42, i8* align 32 %43, i32 64, i1 false), !dbg !2073, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %14), !dbg !2074
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %14), !dbg !2074
-   br i1 %44, label %60, label %45, !dbg !2075
- 
- ; <label>:45:                                     ; preds = %40
-@@ -10047,7 +10047,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %47 = bitcast %class.VaryingWriter* %15 to i8*, !dbg !2077
-   %48 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2077
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %47, i8* align 32 %48, i32 64, i1 false), !dbg !2077, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %16), !dbg !2078
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %16), !dbg !2078
-   br i1 %49, label %60, label %50, !dbg !2079
- 
- ; <label>:50:                                     ; preds = %45
-@@ -10055,7 +10055,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %52 = bitcast %class.VaryingWriter* %17 to i8*, !dbg !2081
-   %53 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2081
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %52, i8* align 32 %53, i32 64, i1 false), !dbg !2081, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %18), !dbg !2082
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %18), !dbg !2082
-   br i1 %54, label %60, label %55, !dbg !2083
- 
- ; <label>:55:                                     ; preds = %50
-@@ -10063,7 +10063,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %57 = bitcast %class.VaryingWriter* %19 to i8*, !dbg !2085
-   %58 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2085
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %57, i8* align 32 %58, i32 64, i1 false), !dbg !2085, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %20), !dbg !2086
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %20), !dbg !2086
-   br label %60, !dbg !2083
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -10072,7 +10072,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2088 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2088 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10098,7 +10098,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2097 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2097 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10124,7 +10124,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2106 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2106 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10150,7 +10150,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2115 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2115 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10176,7 +10176,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2124 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2124 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10202,7 +10202,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2133 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2133 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10228,7 +10228,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2142 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2142 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10254,7 +10254,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2151 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2151 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-diff --git a/builtins/builtins-cm-64.ll b/builtins/builtins-cm-64.ll
-index 39a2dd8be..375d01bed 100644
---- a/builtins/builtins-cm-64.ll
-+++ b/builtins/builtins-cm-64.ll
-@@ -557,7 +557,7 @@ $_ZN13VaryingWriter12WriteVecElemIPvEEvv = comdat any
- @.str.10 = private unnamed_addr constant [8 x i8] c"%016llX\00", align 1
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -618,7 +618,7 @@ define internal <1 x i8> @_ZN7details13__impl_divremILi1EEEu2CMvbT__cS1_S1_u2CMv
- declare <1 x i8> @llvm.genx.rdregioni.v1i8.v1i8.i16(<1 x i8>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -634,7 +634,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -680,7 +680,7 @@ define internal <2 x i8> @_ZN7details13__impl_divremILi2EEEu2CMvbT__cS1_S1_u2CMv
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -818,7 +818,7 @@ define internal <16 x i8> @_ZN7details13__impl_divremILi16EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -864,7 +864,7 @@ define internal <32 x i8> @_ZN7details13__impl_divremILi32EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -890,7 +890,7 @@ define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -904,7 +904,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -918,7 +918,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -932,7 +932,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -946,7 +946,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -960,7 +960,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -974,7 +974,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1058,7 +1058,7 @@ define internal <1 x i16> @_ZN7details13__impl_divremILi1EEEu2CMvbT__sS1_S1_u2CM
- declare <1 x i16> @llvm.genx.rdregioni.v1i16.v1i16.i16(<1 x i16>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1074,7 +1074,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1143,7 +1143,7 @@ define internal <2 x i16> @_ZN7details13__impl_divremILi2EEEu2CMvbT__sS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1350,7 +1350,7 @@ define internal <16 x i16> @_ZN7details13__impl_divremILi16EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1419,7 +1419,7 @@ define internal <32 x i16> @_ZN7details13__impl_divremILi32EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1445,7 +1445,7 @@ define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 si
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1459,7 +1459,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1473,7 +1473,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1487,7 +1487,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -1501,7 +1501,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -1515,7 +1515,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1529,7 +1529,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1730,7 +1730,7 @@ define internal <1 x i32> @_ZN7details13__impl_divremILi1EEEu2CMvbT__iS1_S1_u2CM
- declare <1 x i32> @llvm.genx.rdregioni.v1i32.v1i32.i16(<1 x i32>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1746,7 +1746,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -1932,7 +1932,7 @@ define internal <2 x i32> @_ZN7details13__impl_divremILi2EEEu2CMvbT__iS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2490,7 +2490,7 @@ define internal <16 x i32> @_ZN7details13__impl_divremILi16EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2676,7 +2676,7 @@ define internal <32 x i32> @_ZN7details13__impl_divremILi32EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2702,7 +2702,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2716,7 +2716,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -2730,7 +2730,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2744,7 +2744,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -2758,7 +2758,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -2772,7 +2772,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2786,7 +2786,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2844,7 +2844,7 @@ define internal <1 x i8> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2860,7 +2860,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -2906,7 +2906,7 @@ define internal <2 x i8> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3044,7 +3044,7 @@ define internal <16 x i8> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3090,7 +3090,7 @@ define internal <32 x i8> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3116,7 +3116,7 @@ define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3130,7 +3130,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -3144,7 +3144,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3158,7 +3158,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -3172,7 +3172,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -3186,7 +3186,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3200,7 +3200,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3278,7 +3278,7 @@ define internal <1 x i16> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3294,7 +3294,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3360,7 +3360,7 @@ define internal <2 x i16> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3558,7 +3558,7 @@ define internal <16 x i16> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3624,7 +3624,7 @@ define internal <32 x i16> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3650,7 +3650,7 @@ define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 ze
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3664,7 +3664,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3678,7 +3678,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3692,7 +3692,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -3706,7 +3706,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -3720,7 +3720,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3734,7 +3734,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3892,7 +3892,7 @@ define internal <1 x i32> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3908,7 +3908,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4054,7 +4054,7 @@ define internal <2 x i32> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4492,7 +4492,7 @@ define internal <16 x i32> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4638,7 +4638,7 @@ define internal <32 x i32> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4664,7 +4664,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4678,7 +4678,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4692,7 +4692,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4706,7 +4706,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -4720,7 +4720,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -4734,7 +4734,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4748,7 +4748,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-+define internal void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-   %8 = alloca i8*, align 8
-   %9 = alloca i8*, align 8
-   %10 = alloca i32, align 4
-@@ -5070,7 +5070,7 @@ define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i3
-   %67 = load i64, i64* %13, align 8, !dbg !159, !tbaa !19
-   %68 = load <5 x i32>, <5 x i32>* %21, align 32, !dbg !160, !tbaa !7
-   call void @_ZN13VaryingWriterC2ERyRPKjiyu2CMvb5_i(%class.VaryingWriter* %23, i64* dereferenceable(8) %19, i32** dereferenceable(8) %14, i32 %66, i64 %67, <5 x i32> %68), !dbg !161
--  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval align 32 %22, %class.VaryingWriter* byval align 32 %23), !dbg !162
-+  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval(%class.UniformWriter) align 32 %22, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %23), !dbg !162
-   br label %70, !dbg !163
- 
- ; <label>:70:                                     ; preds = %60
-@@ -5188,7 +5188,7 @@ define internal <5 x i32> @_Z17get_auxiliary_strv() #28 comdat !dbg !178 {
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %class.VaryingWriter* byval align 32) #25 comdat !dbg !191 {
-+define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !191 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %class.VaryingWriter, align 32
-@@ -5197,7 +5197,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %8 = bitcast %class.UniformWriter* %5 to i8*, !dbg !196
-   %9 = bitcast %class.UniformWriter* %1 to i8*, !dbg !196
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %8, i8* align 32 %9, i64 64, i1 false), !dbg !196, !tbaa.struct !197
--  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval align 32 %5), !dbg !198
-+  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5), !dbg !198
-   br i1 %10, label %16, label %11, !dbg !199
- 
- ; <label>:11:                                     ; preds = %3
-@@ -5205,7 +5205,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %13 = bitcast %class.VaryingWriter* %6 to i8*, !dbg !201
-   %14 = bitcast %class.VaryingWriter* %2 to i8*, !dbg !201
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %13, i8* align 32 %14, i64 64, i1 false), !dbg !201, !tbaa.struct !197
--  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval align 32 %6), !dbg !202
-+  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %6), !dbg !202
-   br label %16, !dbg !199
- 
- ; <label>:16:                                     ; preds = %11, %3
-@@ -5280,7 +5280,7 @@ define internal void @_ZN13VaryingWriterC2ERyRPKjiyu2CMvb5_i(%class.VaryingWrite
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @__num_cores() #29 !dbg !236 {
-+define internal i32 @__num_cores() #29 !dbg !236 {
-   ret i32 -1, !dbg !237
- }
- 
-@@ -8870,7 +8870,7 @@ declare dso_local void @_ZN7details37__cm_intrinsic_impl_svm_scatter_writeIiLi1E
- declare void @llvm.genx.svm.scatter.v1i1.v1i64.v1i32(<1 x i1>, i32, <1 x i64>, <1 x i32>) #27
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval align 32) #25 comdat !dbg !1645 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32) #25 comdat !dbg !1645 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.UniformWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8879,7 +8879,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
-   %7 = bitcast %class.UniformWriter* %4 to i8*, !dbg !1647
-   %8 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1647
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %7, i8* align 32 %8, i64 64, i1 false), !dbg !1647, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %5), !dbg !1648
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval(%class.UniformWriter) align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %5), !dbg !1648
-   ret i1 %9, !dbg !1649
- }
- 
-@@ -8887,7 +8887,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
- declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1) #32
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval align 32) #25 comdat !dbg !1650 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !1650 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.VaryingWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -8896,12 +8896,12 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWrite
-   %7 = bitcast %class.VaryingWriter* %4 to i8*, !dbg !1652
-   %8 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !1652
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %7, i8* align 32 %8, i64 64, i1 false), !dbg !1652, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %5), !dbg !1653
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %5), !dbg !1653
-   ret i1 %9, !dbg !1654
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1655 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1655 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8924,7 +8924,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %22 = bitcast %class.UniformWriter* %5 to i8*, !dbg !1657
-   %23 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1657
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %22, i8* align 32 %23, i64 64, i1 false), !dbg !1657, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %6), !dbg !1658
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %6), !dbg !1658
-   br i1 %24, label %60, label %25, !dbg !1659
- 
- ; <label>:25:                                     ; preds = %3
-@@ -8932,7 +8932,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %27 = bitcast %class.UniformWriter* %7 to i8*, !dbg !1661
-   %28 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1661
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %27, i8* align 32 %28, i64 64, i1 false), !dbg !1661, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %8), !dbg !1662
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval(%class.UniformWriter) align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %8), !dbg !1662
-   br i1 %29, label %60, label %30, !dbg !1663
- 
- ; <label>:30:                                     ; preds = %25
-@@ -8940,7 +8940,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %32 = bitcast %class.UniformWriter* %9 to i8*, !dbg !1665
-   %33 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1665
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %32, i8* align 32 %33, i64 64, i1 false), !dbg !1665, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %10), !dbg !1666
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval(%class.UniformWriter) align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %10), !dbg !1666
-   br i1 %34, label %60, label %35, !dbg !1667
- 
- ; <label>:35:                                     ; preds = %30
-@@ -8948,7 +8948,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %37 = bitcast %class.UniformWriter* %11 to i8*, !dbg !1669
-   %38 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1669
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %37, i8* align 32 %38, i64 64, i1 false), !dbg !1669, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %12), !dbg !1670
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval(%class.UniformWriter) align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %12), !dbg !1670
-   br i1 %39, label %60, label %40, !dbg !1671
- 
- ; <label>:40:                                     ; preds = %35
-@@ -8956,7 +8956,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %42 = bitcast %class.UniformWriter* %13 to i8*, !dbg !1673
-   %43 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1673
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %42, i8* align 32 %43, i64 64, i1 false), !dbg !1673, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %14), !dbg !1674
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval(%class.UniformWriter) align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %14), !dbg !1674
-   br i1 %44, label %60, label %45, !dbg !1675
- 
- ; <label>:45:                                     ; preds = %40
-@@ -8964,7 +8964,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %47 = bitcast %class.UniformWriter* %15 to i8*, !dbg !1677
-   %48 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1677
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %47, i8* align 32 %48, i64 64, i1 false), !dbg !1677, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %16), !dbg !1678
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval(%class.UniformWriter) align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %16), !dbg !1678
-   br i1 %49, label %60, label %50, !dbg !1679
- 
- ; <label>:50:                                     ; preds = %45
-@@ -8972,7 +8972,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %52 = bitcast %class.UniformWriter* %17 to i8*, !dbg !1681
-   %53 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1681
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %52, i8* align 32 %53, i64 64, i1 false), !dbg !1681, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %18), !dbg !1682
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval(%class.UniformWriter) align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %18), !dbg !1682
-   br i1 %54, label %60, label %55, !dbg !1683
- 
- ; <label>:55:                                     ; preds = %50
-@@ -8980,7 +8980,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %57 = bitcast %class.UniformWriter* %19 to i8*, !dbg !1685
-   %58 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1685
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %57, i8* align 32 %58, i64 64, i1 false), !dbg !1685, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %20), !dbg !1686
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval(%class.UniformWriter) align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %20), !dbg !1686
-   br label %60, !dbg !1683
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -8989,7 +8989,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1688 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1688 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9015,7 +9015,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1697 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1697 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9041,7 +9041,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1706 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1706 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9067,7 +9067,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1715 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1715 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9093,7 +9093,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1724 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1724 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9119,7 +9119,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1733 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1733 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9145,7 +9145,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1742 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1742 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9171,7 +9171,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1751 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1751 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10013,7 +10013,7 @@ define internal i32 @_ZN7details18_cm_print_type_oclIPvEENS_18SHADER_PRINTF_TYPE
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2061 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2061 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.VaryingWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -10036,7 +10036,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %22 = bitcast %class.VaryingWriter* %5 to i8*, !dbg !2063
-   %23 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2063
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %22, i8* align 32 %23, i64 64, i1 false), !dbg !2063, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %6), !dbg !2064
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %6), !dbg !2064
-   br i1 %24, label %60, label %25, !dbg !2065
- 
- ; <label>:25:                                     ; preds = %3
-@@ -10044,7 +10044,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %27 = bitcast %class.VaryingWriter* %7 to i8*, !dbg !2067
-   %28 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2067
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %27, i8* align 32 %28, i64 64, i1 false), !dbg !2067, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %8), !dbg !2068
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %8), !dbg !2068
-   br i1 %29, label %60, label %30, !dbg !2069
- 
- ; <label>:30:                                     ; preds = %25
-@@ -10052,7 +10052,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %32 = bitcast %class.VaryingWriter* %9 to i8*, !dbg !2071
-   %33 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2071
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %32, i8* align 32 %33, i64 64, i1 false), !dbg !2071, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %10), !dbg !2072
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %10), !dbg !2072
-   br i1 %34, label %60, label %35, !dbg !2073
- 
- ; <label>:35:                                     ; preds = %30
-@@ -10060,7 +10060,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %37 = bitcast %class.VaryingWriter* %11 to i8*, !dbg !2075
-   %38 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2075
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %37, i8* align 32 %38, i64 64, i1 false), !dbg !2075, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %12), !dbg !2076
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %12), !dbg !2076
-   br i1 %39, label %60, label %40, !dbg !2077
- 
- ; <label>:40:                                     ; preds = %35
-@@ -10068,7 +10068,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %42 = bitcast %class.VaryingWriter* %13 to i8*, !dbg !2079
-   %43 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2079
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %42, i8* align 32 %43, i64 64, i1 false), !dbg !2079, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %14), !dbg !2080
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %14), !dbg !2080
-   br i1 %44, label %60, label %45, !dbg !2081
- 
- ; <label>:45:                                     ; preds = %40
-@@ -10076,7 +10076,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %47 = bitcast %class.VaryingWriter* %15 to i8*, !dbg !2083
-   %48 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2083
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %47, i8* align 32 %48, i64 64, i1 false), !dbg !2083, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %16), !dbg !2084
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %16), !dbg !2084
-   br i1 %49, label %60, label %50, !dbg !2085
- 
- ; <label>:50:                                     ; preds = %45
-@@ -10084,7 +10084,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %52 = bitcast %class.VaryingWriter* %17 to i8*, !dbg !2087
-   %53 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2087
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %52, i8* align 32 %53, i64 64, i1 false), !dbg !2087, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %18), !dbg !2088
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %18), !dbg !2088
-   br i1 %54, label %60, label %55, !dbg !2089
- 
- ; <label>:55:                                     ; preds = %50
-@@ -10092,7 +10092,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %57 = bitcast %class.VaryingWriter* %19 to i8*, !dbg !2091
-   %58 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2091
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %57, i8* align 32 %58, i64 64, i1 false), !dbg !2091, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %20), !dbg !2092
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %20), !dbg !2092
-   br label %60, !dbg !2089
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -10101,7 +10101,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2094 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2094 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10127,7 +10127,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2103 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2103 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10153,7 +10153,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2112 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2112 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10179,7 +10179,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2121 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2121 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10205,7 +10205,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2130 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2130 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10231,7 +10231,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2139 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2139 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10257,7 +10257,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2148 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2148 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10283,7 +10283,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2157 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2157 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
diff --git a/srcpkgs/ispc/template b/srcpkgs/ispc/template
index 9c3acb42a9cf..3a85ff2605af 100644
--- a/srcpkgs/ispc/template
+++ b/srcpkgs/ispc/template
@@ -1,7 +1,7 @@
 # Template file for 'ispc'
 pkgname=ispc
-version=1.15.0
-revision=2
+version=1.17.0
+revision=1
 archs="x86_64*"
 build_style=cmake
 configure_args="-DISPC_NO_DUMPS=ON -DARM_ENABLED=OFF"
@@ -12,7 +12,7 @@ maintainer="Andrea Brancaleoni <abc@pompel.me>"
 license="BSD-3-Clause"
 homepage="https://ispc.github.io"
 distfiles="https://github.com/ispc/ispc/archive/v${version}.tar.gz"
-checksum=2658ff00dc045ac9fcefbf6bd26dffaf723b059a942a27df91bbb61bc503a285
+checksum=37fb1055d6c6b232e112d8d50145d726824ed4d8da93a7396315dceba6c76e62
 nocross=yes
 nopie=yes
 

From 269f013606f0d4eff305ab182d754a0254939689 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Tue, 3 May 2022 01:20:03 +0200
Subject: [PATCH 26/26] llvm14: switch to runtimes build.

https://reviews.llvm.org/rGac7031b2b2fa
https://reviews.llvm.org/D110338#3022952
---
 srcpkgs/llvm14/template | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
index 3e7e6ab2c00b..e731aa76130a 100644
--- a/srcpkgs/llvm14/template
+++ b/srcpkgs/llvm14/template
@@ -51,7 +51,8 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
-_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
+_enabled_projects="clang;clang-tools-extra;lld"
+_enabled_runtimes="compiler-rt;libcxx;libcxxabi;libunwind"
 
 _lldb_enable=yes
 _libomp_enable=no
@@ -67,9 +68,8 @@ esac
 
 subpackages="clang-tools-extra"
 
-# must go before clang
 if [ "$_libomp_enable" = "yes" ]; then
-	_enabled_projects+=";openmp"
+	_enabled_runtimes+=";openmp"
 	subpackages+=" libomp libomp-devel"
 	# because of cmake nonsense referencing libomptarget.so.*
 	depends+=" libomp>=${version}_${revision}"
@@ -88,6 +88,7 @@ fi
 subpackages+=" lld lld-devel"
 
 configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+configure_args+=" -DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}"
 
 post_patch() {
 	if [ "$_lldb_enable" = "yes" ]; then
@@ -156,7 +157,8 @@ pre_configure() {
 		CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
 			CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
-			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
+			-DLLVM_ENABLE_PROJECTS=${_enabled_projects} \
+			-DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}
 		make ${makejobs} -C utils/TableGen
 		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
  2022-05-02 23:21 ` [PR PATCH] [Updated] Llvm14 prez
@ 2022-05-03  9:03 ` ifreund
  2022-05-04 12:17 ` [PR PATCH] [Updated] Llvm14 prez
                   ` (67 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: ifreund @ 2022-05-03  9:03 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 316 bytes --]

New comment by ifreund on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1115880640

Comment:
zig links against both ldd and clang libraries, so ldd12-devel and clang12 (the headers are in the clang package for whatever reason) would be required in addition to llvm12.

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: [PR PATCH] [Updated] Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
  2022-05-02 23:21 ` [PR PATCH] [Updated] Llvm14 prez
  2022-05-03  9:03 ` Llvm14 ifreund
@ 2022-05-04 12:17 ` prez
  2022-05-04 17:10 ` prez
                   ` (66 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-05-04 12:17 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 667 bytes --]

There is an updated pull request by prez against master on the void-packages repository

https://github.com/prez/void-packages llvm
https://github.com/void-linux/void-packages/pull/36962

Llvm14
Supersedes https://github.com/void-linux/void-packages/pull/36229, https://github.com/void-linux/void-packages/pull/34800 - thank you @motorto and @DBLouis.

Updated patches, ping @q66 .

@ifreund todo: zig. Since it depends on `lld-devel`, I guess we need to split out `lld12`? Would appreciate your help with this, I don't want to wait for the next zig version.

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/36962.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-llvm-36962.patch --]
[-- Type: text/x-diff, Size: 536940 bytes --]

From af3214d006e7bc77ca1201c220be4ce4b8bebd34 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:15:06 +0200
Subject: [PATCH 01/29] New package: llvm14-14.0.3

---
 common/shlibs                                 |  16 +-
 srcpkgs/clang                                 |   2 +-
 srcpkgs/clang-analyzer                        |   2 +-
 srcpkgs/clang-tools-extra                     |   2 +-
 srcpkgs/libclang                              |   2 +-
 srcpkgs/libclang-cpp                          |   2 +-
 srcpkgs/libcxx                                |   2 +-
 srcpkgs/libcxx-devel                          |   2 +-
 srcpkgs/libcxxabi                             |   2 +-
 srcpkgs/libcxxabi-devel                       |   2 +-
 srcpkgs/libllvm14                             |   1 +
 srcpkgs/libomp                                |   2 +-
 srcpkgs/libomp-devel                          |   2 +-
 srcpkgs/lld                                   |   2 +-
 srcpkgs/lld-devel                             |   2 +-
 srcpkgs/lldb                                  |   2 +-
 srcpkgs/lldb-devel                            |   2 +-
 srcpkgs/llvm-libunwind                        |   2 +-
 srcpkgs/llvm-libunwind-devel                  |   2 +-
 .../patches/clang-002-add-musl-triples.patch  | 110 +++++
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 +
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ++
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 ++
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 +++
 srcpkgs/llvm14/patches/libcxx-musl.patch      |  26 ++
 srcpkgs/llvm14/patches/libcxx-ppc.patch       |  22 +
 .../llvm14/patches/libcxx-ssp-nonshared.patch |  11 +
 srcpkgs/llvm14/patches/libcxxabi-dl.patch     |  25 ++
 srcpkgs/llvm14/patches/lldb-musl.patch        |  31 ++
 srcpkgs/llvm14/patches/llvm-001-musl.patch    |  57 +++
 .../patches/llvm-002-musl-ppc64-elfv2.patch   |  30 ++
 .../patches/llvm-003-ppc-secureplt.patch      |  11 +
 .../patches/llvm-004-override-opt.patch       |  18 +
 .../llvm14/patches/llvm-005-ppc-bigpic.patch  |  36 ++
 .../patches/llvm-006-aarch64-mf_exec.patch    |  25 ++
 srcpkgs/llvm14/template                       | 424 ++++++++++++++++++
 srcpkgs/llvm14/update                         |   3 +
 37 files changed, 1018 insertions(+), 20 deletions(-)
 create mode 120000 srcpkgs/libllvm14
 create mode 100644 srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
 create mode 100644 srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
 create mode 100644 srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
 create mode 100644 srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-ppc.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxxabi-dl.patch
 create mode 100644 srcpkgs/llvm14/patches/lldb-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-001-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-004-override-opt.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
 create mode 100644 srcpkgs/llvm14/template
 create mode 100644 srcpkgs/llvm14/update

diff --git a/common/shlibs b/common/shlibs
index 4114151662fb..81acc39defb4 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -975,11 +975,12 @@ libuchardet.so.0 uchardet-0.0.6_1
 libgtksourceviewmm-3.0.so.0 gtksourceviewmm-3.2.0_1
 libyajl.so.2 yajl-2.0.1_1
 libconfuse.so.2 confuse-3.2.1_1
-liblldb.so.12 lldb-12.0.0_1
-libclang.so.12 libclang-12.0.0_1
-libclang-cpp.so.12 libclang-cpp-12.0.0_1
+liblldb.so.14 lldb-14.0.3_1
+libclang.so.14 libclang-14.0.3_1
+libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
+libLLVM-14.so libllvm14-14.0.3_1
 libisofs.so.6 libisofs-0.6.24_1
 libmpack.so.0 libmpack-1.0.5_1
 libGeoIP.so.1 libgeoip-1.4.8_1
@@ -4152,3 +4153,12 @@ librz_bin.so.0.3.4 rizin-0.3.4_1
 libaravis-0.8.so.0 libaravis-0.8.21_1
 libLimeSuite.so.20.10-1 LimeSuite-20.10.0_1
 libnvme.so.1 libnvme-1.0_1
+libomp.so libomp-14.0.3_1
+libomptarget.rtl.amdgpu.so libomp-14.0.3_1
+libomptarget.rtl.cuda.so libomp-14.0.3_1
+libomptarget.rtl.x86_64.so libomp-14.0.3_1
+libarcher.so libomp-14.0.3_1
+libomptarget.so libomp-14.0.3_1
+liblldbIntelFeatures.so.14 lldb-14.0.3_1
+libLTO.so.14 llvm14-14.0.3_1
+libRemarks.so.14 llvm14-14.0.3_1
diff --git a/srcpkgs/clang b/srcpkgs/clang
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang
+++ b/srcpkgs/clang
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/clang-analyzer b/srcpkgs/clang-analyzer
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang-analyzer
+++ b/srcpkgs/clang-analyzer
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/clang-tools-extra b/srcpkgs/clang-tools-extra
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang-tools-extra
+++ b/srcpkgs/clang-tools-extra
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libclang b/srcpkgs/libclang
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libclang
+++ b/srcpkgs/libclang
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libclang-cpp b/srcpkgs/libclang-cpp
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libclang-cpp
+++ b/srcpkgs/libclang-cpp
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxx b/srcpkgs/libcxx
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxx
+++ b/srcpkgs/libcxx
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxx-devel b/srcpkgs/libcxx-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxx-devel
+++ b/srcpkgs/libcxx-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxxabi b/srcpkgs/libcxxabi
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxxabi
+++ b/srcpkgs/libcxxabi
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxxabi-devel b/srcpkgs/libcxxabi-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxxabi-devel
+++ b/srcpkgs/libcxxabi-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libllvm14 b/srcpkgs/libllvm14
new file mode 120000
index 000000000000..1d42ed7632a6
--- /dev/null
+++ b/srcpkgs/libllvm14
@@ -0,0 +1 @@
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libomp b/srcpkgs/libomp
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libomp
+++ b/srcpkgs/libomp
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libomp-devel b/srcpkgs/libomp-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libomp-devel
+++ b/srcpkgs/libomp-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lld b/srcpkgs/lld
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lld
+++ b/srcpkgs/lld
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lld-devel b/srcpkgs/lld-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lld-devel
+++ b/srcpkgs/lld-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lldb b/srcpkgs/lldb
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lldb
+++ b/srcpkgs/lldb
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lldb-devel b/srcpkgs/lldb-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lldb-devel
+++ b/srcpkgs/lldb-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm-libunwind b/srcpkgs/llvm-libunwind
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/llvm-libunwind
+++ b/srcpkgs/llvm-libunwind
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm-libunwind-devel b/srcpkgs/llvm-libunwind-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/llvm-libunwind-devel
+++ b/srcpkgs/llvm-libunwind-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
new file mode 100644
index 000000000000..7b640e102bed
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
@@ -0,0 +1,110 @@
+--- a/clang/lib/Driver/ToolChains/Gnu.cpp
++++ b/clang/lib/Driver/ToolChains/Gnu.cpp
+@@ -2083,7 +2083,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
+                                              "armv7hl-redhat-linux-gnueabi",
+                                              "armv6hl-suse-linux-gnueabi",
+-                                             "armv7hl-suse-linux-gnueabi"};
++                                             "armv7hl-suse-linux-gnueabi",
++                                             "armv7l-linux-gnueabihf"};
+   static const char *const ARMebLibDirs[] = {"/lib"};
+   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi"};
+   static const char *const ARMebHFTriples[] = {
+@@ -2151,8 +2152,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
+   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
+   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
+-                                             "powerpcle-unknown-linux-gnu",
+-                                             "powerpcle-linux-musl"};
++                                             "powerpcle-unknown-linux-gnu"};
+
+   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
+   static const char *const PPC64Triples[] = {
+@@ -2231,6 +2231,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+     return;
+   }
+
++  if (TargetTriple.isMusl()) {
++    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
++    static const char *const ARMHFMuslTriples[] = {
++        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
++    };
++    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
++    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
++    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
++    static const char *const MIPSMuslTriples[] = {
++        "mips-linux-musl", "mipsel-linux-musl",
++        "mipsel-linux-muslhf", "mips-linux-muslhf"
++    };
++    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
++    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
++    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
++    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
++
++    switch (TargetTriple.getArch()) {
++    case llvm::Triple::aarch64:
++      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      break;
++    case llvm::Triple::arm:
++      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
++      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
++        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
++      } else {
++        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
++      }
++      break;
++    case llvm::Triple::x86_64:
++      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      break;
++    case llvm::Triple::x86:
++      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      break;
++    case llvm::Triple::mips:
++      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
++      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
++      break;
++    case llvm::Triple::ppc:
++      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      break;
++    case llvm::Triple::ppcle:
++      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      break;
++    case llvm::Triple::ppc64:
++      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      break;
++    case llvm::Triple::ppc64le:
++      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      break;
++    default:
++      break;
++    }
++    TripleAliases.push_back(TargetTriple.str());
++    if (TargetTriple.str() != BiarchTriple.str())
++      BiarchTripleAliases.push_back(BiarchTriple.str());
++    return;
++  }
++
+   // Android targets should not use GNU/Linux tools or libraries.
+   if (TargetTriple.isAndroid()) {
+     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
new file mode 100644
index 000000000000..47128af79b7f
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
@@ -0,0 +1,13 @@
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -490,10 +490,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+     Loader = "ld.so.1";
+     break;
+   case llvm::Triple::ppc64:
+-    LibDir = "lib64";
+-    Loader =
+-        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
+-    break;
+   case llvm::Triple::ppc64le:
+     LibDir = "lib64";
+     Loader =
diff --git a/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
new file mode 100644
index 000000000000..21fc8003c5f1
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
@@ -0,0 +1,48 @@
+--- a/clang/lib/Basic/Targets/PPC.h
++++ b/clang/lib/Basic/Targets/PPC.h
+@@ -415,11 +415,10 @@ public:
+       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
+     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
+       DataLayout = "e-m:e-i64:64-n32:64";
+-      ABI = "elfv2";
+     } else {
+       DataLayout = "E-m:e-i64:64-n32:64";
+-      ABI = "elfv1";
+     }
++    ABI = "elfv2";
+ 
+     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
+       LongDoubleWidth = LongDoubleAlign = 64;
+--- a/clang/lib/CodeGen/TargetInfo.cpp
++++ b/clang/lib/CodeGen/TargetInfo.cpp
+@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
+       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
+ 
+     if (Triple.isOSBinFormatELF()) {
+-      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
+-      if (getTarget().getABI() == "elfv2")
+-        Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      if (getTarget().getABI() == "elfv1")
++        Kind = PPC64_SVR4_ABIInfo::ELFv1;
+       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
+ 
+       return SetCGInfo(
+--- a/clang/lib/Driver/ToolChains/Clang.cpp
++++ b/clang/lib/Driver/ToolChains/Clang.cpp
+@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
+   const llvm::Triple &T = getToolChain().getTriple();
+   if (T.isOSBinFormatELF()) {
+     switch (getToolChain().getArch()) {
+-    case llvm::Triple::ppc64: {
+-      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
+-          T.isOSOpenBSD() || T.isMusl())
+-        ABIName = "elfv2";
+-      else
+-        ABIName = "elfv1";
+-      break;
+-    }
++    case llvm::Triple::ppc64:
+     case llvm::Triple::ppc64le:
+       ABIName = "elfv2";
+       break;
diff --git a/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch b/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
new file mode 100644
index 000000000000..4135bfd4486a
--- /dev/null
+++ b/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
@@ -0,0 +1,35 @@
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
+@@ -74,6 +74,10 @@
+ #include <sys/utsname.h>
+ #endif
+
++#if SANITIZER_LINUX && defined(__powerpc__)
++#include <asm/ptrace.h>
++#endif
++
+ #if SANITIZER_LINUX && !SANITIZER_ANDROID
+ #include <sys/personality.h>
+ #endif
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
+@@ -92,7 +92,7 @@
+ # include <utime.h>
+ # include <sys/ptrace.h>
+ #    if defined(__mips64) || defined(__aarch64__) || defined(__arm__) || \
+-        defined(__hexagon__) || SANITIZER_RISCV64
++        defined(__hexagon__) || defined(__powerpc__) || SANITIZER_RISCV64
+ #      include <asm/ptrace.h>
+ #      ifdef __arm__
+ typedef struct user_fpregs elf_fpregset_t;
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
+@@ -31,7 +31,7 @@
+ #include <sys/types.h> // for pid_t
+ #include <sys/uio.h> // for iovec
+ #include <elf.h> // for NT_PRSTATUS
+-#if (defined(__aarch64__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
++#if (defined(__aarch64__) || defined(__powerpc__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
+ // GLIBC 2.20+ sys/user does not include asm/ptrace.h
+ # include <asm/ptrace.h>
+ #endif
diff --git a/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch b/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
new file mode 100644
index 000000000000..d0b61c80c897
--- /dev/null
+++ b/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
@@ -0,0 +1,62 @@
+--- a/compiler-rt/lib/xray/xray_powerpc64.inc
++++ b/compiler-rt/lib/xray/xray_powerpc64.inc
+@@ -12,7 +12,13 @@
+ 
+ #include <cstdint>
+ #include <mutex>
++#ifdef __GLIBC__
+ #include <sys/platform/ppc.h>
++#else
++#include <cctype>
++#include <cstring>
++#include <cstdlib>
++#endif
+ 
+ #include "xray_defs.h"
+ 
+@@ -20,13 +26,45 @@ namespace __xray {
+ 
+ ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
+   CPU = 0;
++#ifdef __GLIBC__
+   return __ppc_get_timebase();
++#else
++  return __builtin_ppc_get_timebase();
++#endif
+ }
+ 
+ inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
+   static std::mutex M;
+   std::lock_guard<std::mutex> Guard(M);
++#ifdef __GLIBC__
+   return __ppc_get_timebase_freq();
++#else
++  /* FIXME: a less dirty implementation? */
++  static uint64_t base;
++  if (!base) {
++    FILE *f = fopen("/proc/cpuinfo", "rb");
++    if (f) {
++      ssize_t nr;
++      /* virtually always big enough to hold the line */
++      char buf[512];
++      while (fgets(buf, sizeof(buf), f)) {
++        char *ret = strstr(buf, "timebase");
++        if (!ret) {
++          continue;
++        }
++        ret += sizeof("timebase") - 1;
++        ret = strchr(ret, ':');
++        if (!ret) {
++          continue;
++        }
++        base = strtoul(ret + 1, nullptr, 10);
++        break;
++      }
++      fclose(f);
++    }
++  }
++  return base;
++#endif
+ }
+ 
+ inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
diff --git a/srcpkgs/llvm14/patches/libcxx-musl.patch b/srcpkgs/llvm14/patches/libcxx-musl.patch
new file mode 100644
index 000000000000..bbd31ffc2cb1
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-musl.patch
@@ -0,0 +1,26 @@
+--- a/libcxx/include/locale
++++ b/libcxx/include/locale
+@@ -742,7 +742,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
+         typename remove_reference<decltype(errno)>::type __save_errno = errno;
+         errno = 0;
+         char *__p2;
++#if defined(__linux__) && !defined(__GLIBC__)
++        long long __ll = strtoll(__a, &__p2, __base);
++#else
+         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
++#endif
+         typename remove_reference<decltype(errno)>::type __current_errno = errno;
+         if (__current_errno == 0)
+             errno = __save_errno;
+@@ -782,7 +786,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
+         typename remove_reference<decltype(errno)>::type __save_errno = errno;
+         errno = 0;
+         char *__p2;
++#if defined(__linux__) && !defined(__GLIBC__)
++        unsigned long long __ll = strtoull(__a, &__p2, __base);
++#else
+         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
++#endif
+         typename remove_reference<decltype(errno)>::type __current_errno = errno;
+         if (__current_errno == 0)
+             errno = __save_errno;
diff --git a/srcpkgs/llvm14/patches/libcxx-ppc.patch b/srcpkgs/llvm14/patches/libcxx-ppc.patch
new file mode 100644
index 000000000000..7a92f8004e1c
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-ppc.patch
@@ -0,0 +1,22 @@
+This ensures `is_iec559` is defined correctly under all long double ABIs,
+including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__`
+is not defined on gcc.
+
+--- a/libcxx/include/limits
++++ b/libcxx/include/limits
+@@ -426,8 +426,14 @@ protected:
+     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
+     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
+ 
+-#if (defined(__ppc__) || defined(__ppc64__))
++#if defined(__powerpc__) || defined(__powerpc64__)
++#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__)
++    /* IEEE 754 quadruple or double precision */
++    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
++#else
++    /* 128-bit IBM double-double */
+     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
++#endif
+ #else
+     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
+ #endif
diff --git a/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch b/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
new file mode 100644
index 000000000000..70292beb2fcd
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
@@ -0,0 +1,11 @@
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -769,6 +769,8 @@ function(cxx_link_system_libraries target)
+     target_link_libraries(${target} PRIVATE atomic)
+   endif()
+ 
++#ssp  target_link_libraries(${target} PRIVATE ssp_nonshared)
++
+   if (MINGW)
+     target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
+   endif()
diff --git a/srcpkgs/llvm14/patches/libcxxabi-dl.patch b/srcpkgs/llvm14/patches/libcxxabi-dl.patch
new file mode 100644
index 000000000000..3a15f9db8c98
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxxabi-dl.patch
@@ -0,0 +1,25 @@
+Also link to -ldl to prevent undefined references.
+
+--- a/libcxxabi/src/CMakeLists.txt
++++ b/libcxxabi/src/CMakeLists.txt
+@@ -73,6 +73,7 @@
+   endif()
+ 
+   add_library_flags_if(LIBCXXABI_HAS_C_LIB c)
++  add_library_flags_if(LIBCXXABI_HAS_C_LIB dl)
+ endif()
+ 
+ if (LIBCXXABI_USE_LLVM_UNWINDER)
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -745,6 +745,10 @@
+     target_link_libraries(${target} PRIVATE m)
+   endif()
+ 
++  if (LIBCXX_HAS_C_LIB)
++    target_link_libraries(${target} PRIVATE dl)
++  endif()
++
+   if (LIBCXX_HAS_RT_LIB)
+     target_link_libraries(${target} PRIVATE rt)
+   endif()
diff --git a/srcpkgs/llvm14/patches/lldb-musl.patch b/srcpkgs/llvm14/patches/lldb-musl.patch
new file mode 100644
index 000000000000..601c0d138523
--- /dev/null
+++ b/srcpkgs/llvm14/patches/lldb-musl.patch
@@ -0,0 +1,31 @@
+--- a/lldb/source/Plugins/Process/Linux/Procfs.h
++++ b/lldb/source/Plugins/Process/Linux/Procfs.h
+@@ -10,21 +10,12 @@
+ // sys/procfs.h on Android/Linux for all supported architectures.
+ 
+ #include <sys/ptrace.h>
++#include <asm/ptrace.h>
+ 
+-#ifdef __ANDROID__
+-#if defined(__arm64__) || defined(__aarch64__)
+-typedef unsigned long elf_greg_t;
+-typedef elf_greg_t
+-    elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
+-typedef struct user_fpsimd_state elf_fpregset_t;
+-#ifndef NT_FPREGSET
+-#define NT_FPREGSET NT_PRFPREG
+-#endif // NT_FPREGSET
+-#elif defined(__mips__)
+-#ifndef NT_FPREGSET
+-#define NT_FPREGSET NT_PRFPREG
+-#endif // NT_FPREGSET
+-#endif
+-#else // __ANDROID__
++#if !defined(__GLIBC__) && defined(__powerpc__)
++#define pt_regs musl_pt_regs
++#include <sys/procfs.h>
++#undef pt_regs
++#else
+ #include <sys/procfs.h>
+-#endif // __ANDROID__
++#endif
diff --git a/srcpkgs/llvm14/patches/llvm-001-musl.patch b/srcpkgs/llvm14/patches/llvm-001-musl.patch
new file mode 100644
index 000000000000..f2a3f8d62813
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-001-musl.patch
@@ -0,0 +1,57 @@
+From faca3fbd15d0c3108493c3c54cd93138e049ac43 Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe@gmail.com>
+Date: Tue, 8 Sep 2015 22:03:02 +0200
+Subject: [PATCH 3/3] musl
+
+---
+ include/llvm/Analysis/TargetLibraryInfo.h | 9 +++++++++
+ lib/Support/DynamicLibrary.cpp            | 2 +-
+ lib/Support/Unix/Signals.inc              | 6 +++---
+ utils/unittest/googletest/src/gtest.cc    | 1 +
+ 5 files changed, 17 insertions(+), 6 deletions(-)
+
+diff --git a/include/llvm/Analysis/TargetLibraryInfo.h b/include/llvm/Analysis/TargetLibraryInfo.h
+index 34a8a1e3..1214ece5 100644
+--- a/llvm/include/llvm/Analysis/TargetLibraryInfo.h
++++ b/llvm/include/llvm/Analysis/TargetLibraryInfo.h
+@@ -18,6 +18,15 @@
+ #include "llvm/IR/PassManager.h"
+ #include "llvm/Pass.h"
+ 
++#undef fopen64
++#undef fseeko64
++#undef fstat64
++#undef fstatvfs64
++#undef ftello64
++#undef lstat64
++#undef stat64
++#undef tmpfile64
++
+ namespace llvm {
+ template <typename T> class ArrayRef;
+ class Triple;
+diff --git a/lib/Support/Unix/DynamicLibrary.inc b/lib/Support/Unix/DynamicLibrary.inc
+index a2a37996..2f86c470 100644
+--- a/llvm/lib/Support/Unix/DynamicLibrary.inc
++++ b/llvm/lib/Support/Unix/DynamicLibrary.inc
+@@ -102,7 +102,7 @@ static void *DoSearch(const char* SymbolName) {
+ 
+ // This macro returns the address of a well-known, explicit symbol
+ #define EXPLICIT_SYMBOL(SYM) \
+-   if (!strcmp(SymbolName, #SYM)) return &SYM
++   if (!strcmp(SymbolName, #SYM)) return (void *)&SYM
+ 
+ // Under glibc we have a weird situation. The stderr/out/in symbols are both
+ // macros and global variables because of standards requirements. So, we
+diff --git a/utils/unittest/googletest/src/gtest.cc b/utils/unittest/googletest/src/gtest.cc
+index d882ab2e..f1fb12d0 100644
+--- a/llvm/utils/unittest/googletest/src/gtest.cc
++++ b/llvm/utils/unittest/googletest/src/gtest.cc
+@@ -128,6 +128,7 @@
+ 
+ #if GTEST_CAN_STREAM_RESULTS_
+ # include <arpa/inet.h>  // NOLINT
++# include <sys/socket.h>  // NOLINT
+ # include <netdb.h>  // NOLINT
+ # include <sys/socket.h>  // NOLINT
+ # include <sys/types.h>  // NOLINT
diff --git a/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch b/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
new file mode 100644
index 000000000000..0071d964bd37
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
@@ -0,0 +1,30 @@
+This patches LLVM to use ELFv2 on ppc64 unconditionally unless overridden. We
+need this because unlike most distros we use ELFv2 for both glibc and musl
+on big endian ppc64.
+
+diff --git a/lib/Target/PowerPC/PPCTargetMachine.cpp b/lib/Target/PowerPC/PPCTargetMachine.cpp
+index 0634833e..b7cbc2e7 100644
+--- a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
++++ b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
+@@ -222,9 +222,8 @@ static PPCTargetMachine::PPCABI computeTargetABI(const Triple &TT,
+ 
+   switch (TT.getArch()) {
+   case Triple::ppc64le:
+-    return PPCTargetMachine::PPC_ABI_ELFv2;
+   case Triple::ppc64:
+-    return PPCTargetMachine::PPC_ABI_ELFv1;
++    return PPCTargetMachine::PPC_ABI_ELFv2;
+   default:
+     return PPCTargetMachine::PPC_ABI_UNKNOWN;
+   }
+diff --git a/test/CodeGen/PowerPC/ppc64-elf-abi.ll b/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+index 8b1cf6b5..296a2afa 100644
+--- a/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
++++ b/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+@@ -1,4 +1,5 @@
+-; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv1
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-musl < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv1 < %s | FileCheck %s -check-prefix=CHECK-ELFv1
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv2 < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
diff --git a/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch b/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
new file mode 100644
index 000000000000..b5d15974375d
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
@@ -0,0 +1,11 @@
+--- a/llvm/lib/Target/PowerPC/PPCSubtarget.cpp
++++ b/llvm/lib/Target/PowerPC/PPCSubtarget.cpp
+@@ -165,7 +165,7 @@ void PPCSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) {
+ 
+   if ((TargetTriple.isOSFreeBSD() && TargetTriple.getOSMajorVersion() >= 13) ||
+       TargetTriple.isOSNetBSD() || TargetTriple.isOSOpenBSD() ||
+-      TargetTriple.isMusl())
++      isTargetLinux())
+     SecurePlt = true;
+ 
+   if (HasSPE && IsPPC64)
diff --git a/srcpkgs/llvm14/patches/llvm-004-override-opt.patch b/srcpkgs/llvm14/patches/llvm-004-override-opt.patch
new file mode 100644
index 000000000000..51d0e4b31b32
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-004-override-opt.patch
@@ -0,0 +1,18 @@
+This allows us to override the optimization level as not all platforms can
+deal with -O3.
+
+--- a/llvm/CMakeLists.txt
++++ b/llvm/CMakeLists.txt
+@@ -918,6 +918,12 @@ if( MINGW AND NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" )
+   llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "-O2")
+ endif()
+ 
++set(VOID_CXX_OPT_FLAGS "" CACHE STRING "Optimization level to use")
++
++if (NOT VOID_CXX_OPT_FLAGS STREQUAL "")
++    llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "${VOID_CXX_OPT_FLAGS}")
++endif()
++
+ # Put this before tblgen. Else we have a circular dependence.
+ add_subdirectory(lib/Demangle)
+ add_subdirectory(lib/Support)
diff --git a/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch b/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
new file mode 100644
index 000000000000..d332687b9d92
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
@@ -0,0 +1,36 @@
+From f3dbdd49c06bfafc1d6138094cf42889c14d38b6 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Sun, 3 Nov 2019 10:57:27 -0600
+Subject: [PATCH] [LLVM][PowerPC] Assume BigPIC if no PIC level is specified
+
+---
+ llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp  | 2 +-
+ llvm/lib/Target/PowerPC/PPCMCInstLower.cpp | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/Target/PowerPC/PPCAsmPrinter.cpp b/lib/Target/PowerPC/PPCAsmPrinter.cpp
+index cce21f32..87ca5f9b 100644
+--- a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
++++ b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
+@@ -520,7 +520,7 @@ void PPCAsmPrinter::EmitTlsCall(const MachineInstr *MI,
+ 
+   // Add 32768 offset to the symbol so we follow up the latest GOT/PLT ABI.
+   if (Kind == MCSymbolRefExpr::VK_PLT && Subtarget->isSecurePlt() &&
+-      M->getPICLevel() == PICLevel::BigPIC)
++      M->getPICLevel() != PICLevel::SmallPIC)
+     TlsRef = MCBinaryExpr::createAdd(
+         TlsRef, MCConstantExpr::create(32768, OutContext), OutContext);
+   const MachineOperand &MO = MI->getOperand(2);
+diff --git a/lib/Target/PowerPC/PPCMCInstLower.cpp b/lib/Target/PowerPC/PPCMCInstLower.cpp
+index 5cc180d7..a5b02565 100644
+--- a/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
++++ b/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
+@@ -117,7 +117,7 @@ static MCOperand GetSymbolRef(const MachineOperand &MO, const MCSymbol *Symbol,
+   const MCExpr *Expr = MCSymbolRefExpr::create(Symbol, RefKind, Ctx);
+   // If -msecure-plt -fPIC, add 32768 to symbol.
+   if (Subtarget->isSecurePlt() && TM.isPositionIndependent() &&
+-      M->getPICLevel() == PICLevel::BigPIC &&
++      M->getPICLevel() != PICLevel::SmallPIC &&
+       MO.getTargetFlags() == PPCII::MO_PLT)
+     Expr =
+         MCBinaryExpr::createAdd(Expr, MCConstantExpr::create(32768, Ctx), Ctx);
diff --git a/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch b/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
new file mode 100644
index 000000000000..a00abd216665
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
@@ -0,0 +1,25 @@
+Fix failures in AllocationTests/MappedMemoryTest.* on aarch64:
+
+    Failing Tests (8):
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.AllocAndRelease/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.DuplicateNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.EnabledWrite/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.MultipleAllocAndRelease/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.SuccessiveNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.UnalignedNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.ZeroNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.ZeroSizeNear/3
+
+Upstream-Issue: https://bugs.llvm.org/show_bug.cgi?id=14278#c10
+
+--- a/llvm/lib/Support/Unix/Memory.inc
++++ b/llvm/lib/Support/Unix/Memory.inc
+@@ -58,7 +58,7 @@ static int getPosixProtectionFlags(unsigned Flags) {
+     return PROT_READ | PROT_WRITE | PROT_EXEC;
+   case llvm::sys::Memory::MF_EXEC:
+ #if (defined(__FreeBSD__) || defined(__POWERPC__) || defined (__ppc__) || \
+-     defined(_POWER) || defined(_ARCH_PPC))
++     defined(_POWER) || defined(_ARCH_PPC) || (defined(__linux__) && defined(__aarch64__)))
+     // On PowerPC, having an executable page that has no read permission
+     // can have unintended consequences.  The function InvalidateInstruction-
+     // Cache uses instructions dcbf and icbi, both of which are treated by
diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
new file mode 100644
index 000000000000..3e7e6ab2c00b
--- /dev/null
+++ b/srcpkgs/llvm14/template
@@ -0,0 +1,424 @@
+# Template file for 'llvm14'
+pkgname=llvm14
+version=14.0.3
+revision=1
+wrksrc="llvm-project-${version}.src"
+build_wrksrc=llvm
+build_style=cmake
+configure_args="
+ -DCMAKE_BUILD_TYPE=Release -Wno-dev
+ -DENABLE_LINKER_BUILD_ID=YES
+ -DLLDB_USE_SYSTEM_SIX=YES
+ -DLIBCXX_CXX_ABI=libcxxabi
+ -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
+ -DLIBCXXABI_USE_LLVM_UNWINDER=YES
+ -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
+ -DLIBOMP_ENABLE_SHARED=YES
+ -DLIBOMP_INSTALL_ALIASES=NO
+ -DLLVM_INCLUDE_DOCS=YES
+ -DLLVM_BUILD_DOCS=YES
+ -DLLVM_ENABLE_SPHINX=YES
+ -DSPHINX_WARNINGS_AS_ERRORS=NO
+ -DLLVM_INSTALL_UTILS=YES
+ -DLLVM_BUILD_LLVM_DYLIB=YES
+ -DLLVM_LINK_LLVM_DYLIB=YES
+ -DLLVM_ENABLE_RTTI=YES
+ -DLLVM_ENABLE_FFI=YES
+ -DLLVM_BINUTILS_INCDIR=/usr/include"
+hostmakedepends="perl python3 zlib-devel libffi-devel swig python3-Sphinx
+ python3-recommonmark python3-sphinx-automodapi"
+makedepends="python3-devel zlib-devel elfutils-devel libffi-devel libedit-devel
+ libxml2-devel binutils-devel libatomic-devel"
+depends="libllvm14>=${version}_${revision}"
+short_desc="Low Level Virtual Machine"
+maintainer="q66 <daniel@octaforge.org>"
+license="Apache-2.0"
+homepage="https://www.llvm.org"
+distfiles="https://github.com/llvm/llvm-project/releases/download/llvmorg-${version}/llvm-project-${version}.src.tar.xz"
+checksum=44d3e7a784d5cf805e72853bb03f218bd1058d448c03ca883dabbebc99204e0c
+lib32disabled=yes
+python_version=3
+
+if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+	configure_args+=" -DLIBCXX_HAS_MUSL_LIBC=YES"
+	makedepends+=" libexecinfo-devel"
+	depends+=" libexecinfo-devel"
+fi
+
+# "operand out of range" assembler failures
+case "$XBPS_TARGET_MACHINE" in
+	ppc64*) ;;
+	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
+esac
+
+_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
+
+_lldb_enable=yes
+_libomp_enable=no
+
+case "$XBPS_TARGET_MACHINE" in
+	ppc64le*) ;;
+	ppc*|i686*) _lldb_enable=no ;;
+esac
+
+case "$XBPS_TARGET_MACHINE" in
+	x86_64*|aarch64*|ppc64*) _libomp_enable=yes;;
+esac
+
+subpackages="clang-tools-extra"
+
+# must go before clang
+if [ "$_libomp_enable" = "yes" ]; then
+	_enabled_projects+=";openmp"
+	subpackages+=" libomp libomp-devel"
+	# because of cmake nonsense referencing libomptarget.so.*
+	depends+=" libomp>=${version}_${revision}"
+fi
+
+subpackages+=" clang clang-analyzer libclang libclang-cpp
+ llvm-libunwind llvm-libunwind-devel libcxx libcxx-devel
+ libcxxabi libcxxabi-devel libllvm14"
+
+if [ "$_lldb_enable" = "yes" ]; then
+	# XXX fails to cross compile due to python
+	_enabled_projects+=";lldb"
+	subpackages+=" lldb lldb-devel"
+fi
+
+subpackages+=" lld lld-devel"
+
+configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+
+post_patch() {
+	if [ "$_lldb_enable" = "yes" ]; then
+		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+			vsed -i 's|__ptrace_request|int|g' \
+				${wrksrc}/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
+		fi
+		# disable docs for lldb as they fail to generate
+		vsed -i '/add_subdirectory(docs)/d' \
+			${wrksrc}/lldb/CMakeLists.txt
+	fi
+
+	# update config.guess for better platform detection
+	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
+		${wrksrc}/llvm/cmake
+
+	# fix linker failures on some archs
+	vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
+		${wrksrc}/libcxxabi/cmake/config-ix.cmake
+	vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
+		${wrksrc}/libcxxabi/cmake/config-ix.cmake
+
+	# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*) ;;
+		ppc*-musl|i686-musl|mips*-musl)
+			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
+				${wrksrc}/libunwind/src/CMakeLists.txt
+			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
+				${wrksrc}/libcxxabi/src/CMakeLists.txt
+			vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
+			;;
+	esac
+
+	case "$XBPS_TARGET_MACHINE" in
+		x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
+			vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
+				${wrksrc}/compiler-rt/CMakeLists.txt
+			;;
+		arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
+			vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
+				${wrksrc}/compiler-rt/cmake/config-ix.cmake
+			;;
+	esac
+}
+
+pre_configure() {
+	local triplet
+
+	# Vastly reduce size of debugging symbols:
+	CFLAGS=${CFLAGS/ -g/ -g1}
+	CXXFLAGS=${CXXFLAGS/ -g/ -g1}
+
+	# since gcc9, the build likes to blow up for ppc32 apparently because
+	# of clang being too large for a 24-bit relative call to the PLT, so
+	# optimize for size instead
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*) ;;
+		mips*-musl|ppc*) configure_args+=" -DVOID_CXX_OPT_FLAGS=-Os" ;;
+	esac
+
+	if [ "$CROSS_BUILD" ]; then
+		msg_normal "Building host tblgen\n"
+		mkdir -p build/HOST
+		cd build/HOST
+		CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
+			CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
+			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
+			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
+		make ${makejobs} -C utils/TableGen
+		make ${makejobs} -C tools/clang/utils/TableGen
+		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
+		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
+		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
+		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
+		cd ../..
+	fi
+
+	case "$XBPS_TARGET_MACHINE" in
+		i686*) _arch="X86";;
+		x86_64*) _arch="X86";;
+		armv5*) _arch="Armv5te";;
+		armv6*) _arch="Armv6";;
+		armv7*) _arch="Armv7";;
+		aarch64*) _arch="AArch64";;
+		mips*) _arch="Mips";;
+		ppc*) _arch="PowerPC";;
+		riscv64*) _arch="RISCV64";;
+	esac
+
+	triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
+
+	configure_args+=" -DLLVM_TARGET_ARCH=${_arch}"
+	configure_args+=" -DLLVM_HOST_TRIPLE=${triplet}"
+	configure_args+=" -DLLVM_DEFAULT_TARGET_TRIPLE=${triplet}"
+}
+
+do_install() {
+	cd build
+	cmake -DCMAKE_INSTALL_PREFIX=${DESTDIR}/usr -P cmake_install.cmake
+
+	# Required for multilib.
+	if [ "$XBPS_TARGET_MACHINE" = "x86_64" ]; then
+		for _header in llvm-config; do
+			mv ${DESTDIR}/usr/include/llvm/Config/${_header}{,-64}.h
+			vinstall ${FILESDIR}/llvm-Config-${_header}.h 644 \
+				usr/include/llvm/Config ${_header}.h
+		done
+	fi
+
+	# Remove llvm-config-host in cross builds.
+	if [ "$CROSS_BUILD" ]; then
+		rm -f ${DESTDIR}/usr/bin/llvm-config-host
+	fi
+
+	# Install libcxxabi headers
+	vinstall ${wrksrc}/libcxxabi/include/__cxxabi_config.h 644 usr/include
+	vinstall ${wrksrc}/libcxxabi/include/cxxabi.h 644 usr/include
+
+	# Install libunwind headers
+	vinstall ${wrksrc}/libunwind/include/__libunwind_config.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/libunwind.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/unwind.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/mach-o/compact_unwind_encoding.h \
+		644 usr/include/mach-o
+}
+
+clang-analyzer_package() {
+	pycompile_dirs="usr/share/scan-view"
+	depends="clang-${version}_${revision} python3 perl"
+	short_desc+=" - A source code analysis framework"
+	homepage="https://clang-analyzer.llvm.org/"
+	pkg_install() {
+		vmove usr/share/man/man1/scan-build.1
+		vmove "/usr/bin/scan-*"
+		vmove "/usr/share/scan-*"
+		vmove "/usr/libexec/*analyzer"
+	}
+}
+
+clang-tools-extra_package() {
+	lib32disabled=yes
+	depends="clang-${version}_${revision} python3"
+	short_desc+=" - Extra Clang tools"
+	homepage="https://clang.llvm.org/extra/"
+	pkg_install() {
+		vmove usr/include/clang-tidy
+		vmove usr/bin/clang-apply-replacements
+		vmove usr/bin/clang-query
+		vmove usr/bin/clang-rename
+		vmove usr/bin/clang-tidy
+		vmove usr/bin/diagtool
+		vmove usr/bin/find-all-symbols
+		vmove usr/bin/hmaptool
+		vmove usr/bin/modularize
+		vmove usr/bin/pp-trace
+		vmove usr/bin/sancov
+		vmove "usr/lib/libclangApplyReplacements*"
+		vmove "usr/lib/libclangQuery*"
+		vmove "usr/lib/libclangTidy*"
+		vmove "usr/share/clang/*tidy*"
+		vmove usr/share/doc/clang-tools
+		vmove usr/share/man/man1/extraclangtools.1
+		vmove usr/share/man/man1/diagtool.1
+	}
+}
+
+clang_package() {
+	lib32disabled=yes
+	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
+	 libclang-${version}_${revision}"
+	short_desc+=" - C language family frontend"
+	homepage="https://clang.llvm.org/"
+	pkg_install() {
+		vmove usr/include/clang
+		vmove usr/include/clang-c
+		vmove "usr/bin/*clang*"
+		vmove usr/bin/c-index-test
+		vmove usr/lib/clang
+		vmove usr/lib/cmake/clang
+		vmove "usr/lib/libclang*.a"
+		vmove "usr/lib/libclang*.so"
+		vmove usr/share/clang
+		vmove usr/share/doc/clang
+		vmove usr/share/man/man1/clang.1
+	}
+}
+
+libclang_package() {
+	short_desc+=" - C frontend runtime library"
+	pkg_install() {
+		vmove "usr/lib/libclang.so.*"
+	}
+}
+
+libclang-cpp_package() {
+	short_desc+=" - C frontend runtime library (C++ interface)"
+	pkg_install() {
+		vmove "usr/lib/libclang-cpp.so.*"
+	}
+}
+
+lld_package() {
+	lib32disabled=yes
+	short_desc+=" - linker"
+	homepage="https://lld.llvm.org"
+	pkg_install() {
+		vmove usr/bin/lld*
+		vmove usr/bin/wasm-ld
+		vmove usr/bin/ld.lld*
+		vmove usr/bin/ld64.lld*
+		vmove usr/share/doc/lld
+	}
+}
+
+lld-devel_package() {
+	lib32disabled=yes
+	short_desc+=" - linker - development files"
+	homepage="https://lld.llvm.org"
+	depends="lld>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include/lld
+		vmove usr/lib/cmake/lld
+		vmove "usr/lib/liblld*a"
+	}
+}
+
+lldb_package() {
+	lib32disabled=yes
+	depends+=" python3-six"
+	short_desc+=" - LLDB debugger"
+	homepage="https://lldb.llvm.org/"
+	pkg_install() {
+		vmove usr/bin/*lldb*
+		vmove usr/lib/liblldb*so.*
+		vmove /usr/lib/python*
+	}
+}
+
+lldb-devel_package() {
+	lib32disabled=yes
+	depends="lldb>=${version}_${revision}"
+	short_desc+=" - LLDB debugger - development files"
+	pkg_install() {
+		vmove usr/include/lldb
+		vmove "usr/lib/liblldb*.so"
+	}
+}
+
+llvm-libunwind_package() {
+	short_desc+=" - libunwind"
+	pkg_install() {
+		vmove "usr/lib/libunwind.so.*"
+	}
+}
+
+llvm-libunwind-devel_package() {
+	short_desc+=" - libunwind - development files"
+	depends="llvm-libunwind>=${version}_${revision}"
+	conflicts="libunwind-devel>=0"
+	pkg_install() {
+		vmove usr/lib/libunwind.so
+		vmove usr/lib/libunwind.a
+		vmove "usr/include/*unwind*"
+		vmove usr/include/mach-o
+		vmove usr/share/doc/libunwind
+	}
+}
+
+libcxxabi_package() {
+	short_desc+=" - low level support for libc++"
+	pkg_install() {
+		vmove "usr/lib/libc++abi.so.*"
+	}
+}
+
+libcxxabi-devel_package() {
+	short_desc+=" - low level support for libc++ - development files"
+	depends="libcxxabi>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/lib/libc++abi.so
+		vmove usr/lib/libc++abi.a
+		vmove "usr/include/*cxxabi*"
+	}
+}
+
+libcxx_package() {
+	short_desc+=" - C++ standard library"
+	pkg_install() {
+		vmove "usr/lib/libc++.so.*"
+	}
+}
+
+libcxx-devel_package() {
+	short_desc+=" - C++ standard library - development files"
+	depends="libcxx>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/lib/libc++.so
+		vmove usr/lib/libc++.a
+		vmove usr/lib/libc++experimental.a
+		vmove usr/include/c++
+		vmove usr/share/doc/libcxx
+	}
+}
+
+libomp_package() {
+	short_desc+=" - Clang OpenMP support library"
+	pkg_install() {
+		vmove usr/lib/libomp.so
+		vmove "usr/lib/libomptarget.rtl.*.so"
+		vmove usr/lib/libarcher.so
+		vmove "usr/lib/libomp*.so.*"
+	}
+}
+
+libomp-devel_package() {
+	short_desc+=" - Clang OpenMP support library - development files"
+	depends="libomp>=${version}_${revision}"
+	pkg_install() {
+		vmove "usr/lib/libomp*.so"
+		vmove "usr/lib/libarcher*"
+		vmove "usr/include/omp*.h"
+		vmove "usr/lib/clang/${version}/include/omp*.h"
+		vmove usr/share/man/man1/llvmopenmp.1
+		vmove usr/share/doc/openmp
+	}
+}
+
+libllvm14_package() {
+	short_desc+=" - runtime library"
+	pkg_install() {
+		vmove "usr/lib/libLLVM-*.so*"
+	}
+}
diff --git a/srcpkgs/llvm14/update b/srcpkgs/llvm14/update
new file mode 100644
index 000000000000..e95cf26b3586
--- /dev/null
+++ b/srcpkgs/llvm14/update
@@ -0,0 +1,3 @@
+site="https://github.com/llvm/llvm-project/releases"
+pattern="llvmorg-\K(\d+.){2}\d+(-rc\d+)?"
+ignore="*-rc*"

From 8438d62e818f41e2c2663bb6ed0e30d730118cad Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:16:07 +0200
Subject: [PATCH 02/29] llvm: update to 14.0.3.

---
 srcpkgs/llvm/template | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/llvm/template b/srcpkgs/llvm/template
index a92db6f94f9f..d226c61c734e 100644
--- a/srcpkgs/llvm/template
+++ b/srcpkgs/llvm/template
@@ -1,10 +1,10 @@
 # Template file for 'llvm'
 pkgname=llvm
-version=12.0.0
+version=14.0.3
 revision=1
 build_style=meta
-depends="llvm12"
-replaces="llvm11>=0 llvm10>=0 llvm9>=0 llvm8>=0 llvm7>=0 llvm6.0>=0 llvm3.9>=0"
+depends="llvm14"
+replaces="llvm13>=0 llvm12>=0 llvm11>=0 llvm10>=0 llvm9>=0 llvm8>=0 llvm7>=0 llvm6.0>=0 llvm3.9>=0"
 short_desc="LLVM meta package"
 maintainer="Enno Boland <gottox@voidlinux.org>"
 license="Public Domain"

From 92edaa1759b7b52e98fd6a3adf5a761334849304 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:36:32 +0200
Subject: [PATCH 03/29] llvm12: drop non-llvm components

---
 ...clang-001-fix-unwind-chain-inclusion.patch |  44 ---
 .../patches/clang-002-add-musl-triples.patch  | 110 -------
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 -
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ---
 .../compiler-rt-aarch64-ucontext.patch        |  11 -
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 --
 .../llvm12/patches/compiler-rt-size_t.patch   |  10 -
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 ----
 srcpkgs/llvm12/patches/libcxx-musl.patch      |  26 --
 srcpkgs/llvm12/patches/libcxx-ppc.patch       |  22 --
 .../llvm12/patches/libcxx-ssp-nonshared.patch |  11 -
 srcpkgs/llvm12/patches/libcxxabi-dl.patch     |  25 --
 srcpkgs/llvm12/patches/libunwind-ppc32.patch  |  63 ----
 srcpkgs/llvm12/patches/lldb-musl.patch        |  31 --
 .../llvm12/patches/ppc32-compiler-rt.patch    |  21 --
 srcpkgs/llvm12/template                       | 301 +-----------------
 16 files changed, 1 insertion(+), 832 deletions(-)
 delete mode 100644 srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-size_t.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-ppc.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxxabi-dl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libunwind-ppc32.patch
 delete mode 100644 srcpkgs/llvm12/patches/lldb-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/ppc32-compiler-rt.patch

diff --git a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
deleted file mode 100644
index e4eaa7783e7a..000000000000
--- a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 352974169f0d2b5da3d5321f588f5e3b5941330e Mon Sep 17 00:00:00 2001
-From: Andrea Brancaleoni <miwaxe@gmail.com>
-Date: Tue, 8 Sep 2015 22:14:57 +0200
-Subject: [PATCH 2/7] fix unwind chain inclusion
-
----
- lib/Headers/unwind.h | 9 +++++----
- 1 file changed, 5 insertions(+), 4 deletions(-)
-
-diff --git a/lib/Headers/unwind.h b/lib/Headers/unwind.h
-index 303d792..44e10cc 100644
---- a/clang/lib/Headers/unwind.h
-+++ b/clang/lib/Headers/unwind.h
-@@ -9,9 +9,6 @@
- 
- /* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/
- 
--#ifndef __CLANG_UNWIND_H
--#define __CLANG_UNWIND_H
--
- #if defined(__APPLE__) && __has_include_next(<unwind.h>)
- /* Darwin (from 11.x on) provide an unwind.h. If that's available,
-  * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE,
-@@ -39,6 +36,9 @@
- # endif
- #else
- 
-+#ifndef __CLANG_UNWIND_H
-+#define __CLANG_UNWIND_H
-+
- #include <stdint.h>
- 
- #ifdef __cplusplus
-@@ -322,6 +322,7 @@ _Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *);
- }
- #endif
- 
-+#endif /* __CLANG_UNWIND_H */
-+
- #endif
- 
--#endif /* __CLANG_UNWIND_H */
--- 
-2.5.1
diff --git a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
deleted file mode 100644
index 25688d40dbc2..000000000000
--- a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
+++ /dev/null
@@ -1,110 +0,0 @@
---- a/clang/lib/Driver/ToolChains/Gnu.cpp
-+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
-@@ -2086,7 +2086,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
-                                              "armv7hl-redhat-linux-gnueabi",
-                                              "armv6hl-suse-linux-gnueabi",
--                                             "armv7hl-suse-linux-gnueabi"};
-+                                             "armv7hl-suse-linux-gnueabi",
-+                                             "armv7l-linux-gnueabihf"};
-   static const char *const ARMebLibDirs[] = {"/lib"};
-   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
-                                              "armeb-linux-androideabi"};
-@@ -2153,8 +2154,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
-   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
-   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
--                                             "powerpcle-unknown-linux-gnu",
--                                             "powerpcle-linux-musl"};
-+                                             "powerpcle-unknown-linux-gnu"};
- 
-   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
-   static const char *const PPC64Triples[] = {
-@@ -2235,6 +2235,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-     return;
-   }
- 
-+  if (TargetTriple.isMusl()) {
-+    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
-+    static const char *const ARMHFMuslTriples[] = {
-+        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
-+    };
-+    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
-+    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
-+    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
-+    static const char *const MIPSMuslTriples[] = {
-+        "mips-linux-musl", "mipsel-linux-musl",
-+        "mipsel-linux-muslhf", "mips-linux-muslhf"
-+    };
-+    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
-+    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
-+    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
-+    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
-+
-+    switch (TargetTriple.getArch()) {
-+    case llvm::Triple::aarch64:
-+      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
-+      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
-+      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
-+      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
-+      break;
-+    case llvm::Triple::arm:
-+      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
-+      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
-+        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
-+      } else {
-+        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
-+      }
-+      break;
-+    case llvm::Triple::x86_64:
-+      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-+      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
-+      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-+      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
-+      break;
-+    case llvm::Triple::x86:
-+      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-+      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
-+      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-+      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
-+      break;
-+    case llvm::Triple::mips:
-+      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
-+      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
-+      break;
-+    case llvm::Triple::ppc:
-+      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
-+      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
-+      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
-+      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
-+      break;
-+    case llvm::Triple::ppcle:
-+      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
-+      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
-+      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
-+      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
-+      break;
-+    case llvm::Triple::ppc64:
-+      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
-+      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
-+      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
-+      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
-+      break;
-+    case llvm::Triple::ppc64le:
-+      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
-+      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
-+      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
-+      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
-+      break;
-+    default:
-+      break;
-+    }
-+    TripleAliases.push_back(TargetTriple.str());
-+    if (TargetTriple.str() != BiarchTriple.str())
-+      BiarchTripleAliases.push_back(BiarchTriple.str());
-+    return;
-+  }
-+
-   // Android targets should not use GNU/Linux tools or libraries.
-   if (TargetTriple.isAndroid()) {
-     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
deleted file mode 100644
index 4ad6412d1e6c..000000000000
--- a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/clang/lib/Driver/ToolChains/Linux.cpp
-+++ b/clang/lib/Driver/ToolChains/Linux.cpp
-@@ -504,10 +504,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
-     Loader = "ld.so.1";
-     break;
-   case llvm::Triple::ppc64:
--    LibDir = "lib64";
--    Loader =
--        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
--    break;
-   case llvm::Triple::ppc64le:
-     LibDir = "lib64";
-     Loader =
diff --git a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
deleted file mode 100644
index 21fc8003c5f1..000000000000
--- a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
+++ /dev/null
@@ -1,48 +0,0 @@
---- a/clang/lib/Basic/Targets/PPC.h
-+++ b/clang/lib/Basic/Targets/PPC.h
-@@ -415,11 +415,10 @@ public:
-       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
-     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
-       DataLayout = "e-m:e-i64:64-n32:64";
--      ABI = "elfv2";
-     } else {
-       DataLayout = "E-m:e-i64:64-n32:64";
--      ABI = "elfv1";
-     }
-+    ABI = "elfv2";
- 
-     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
-       LongDoubleWidth = LongDoubleAlign = 64;
---- a/clang/lib/CodeGen/TargetInfo.cpp
-+++ b/clang/lib/CodeGen/TargetInfo.cpp
-@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
-       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
- 
-     if (Triple.isOSBinFormatELF()) {
--      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
--      if (getTarget().getABI() == "elfv2")
--        Kind = PPC64_SVR4_ABIInfo::ELFv2;
-+      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
-+      if (getTarget().getABI() == "elfv1")
-+        Kind = PPC64_SVR4_ABIInfo::ELFv1;
-       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
- 
-       return SetCGInfo(
---- a/clang/lib/Driver/ToolChains/Clang.cpp
-+++ b/clang/lib/Driver/ToolChains/Clang.cpp
-@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
-   const llvm::Triple &T = getToolChain().getTriple();
-   if (T.isOSBinFormatELF()) {
-     switch (getToolChain().getArch()) {
--    case llvm::Triple::ppc64: {
--      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
--          T.isOSOpenBSD() || T.isMusl())
--        ABIName = "elfv2";
--      else
--        ABIName = "elfv1";
--      break;
--    }
-+    case llvm::Triple::ppc64:
-     case llvm::Triple::ppc64le:
-       ABIName = "elfv2";
-       break;
diff --git a/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch b/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
deleted file mode 100644
index 893c059d7b8d..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp.orig
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-@@ -1799,7 +1799,7 @@
- 
- static bool Aarch64GetESR(ucontext_t *ucontext, u64 *esr) {
-   static const u32 kEsrMagic = 0x45535201;
--  u8 *aux = ucontext->uc_mcontext.__reserved;
-+  u8 *aux = reinterpret_cast<u8 *>(ucontext->uc_mcontext.__reserved);
-   while (true) {
-     _aarch64_ctx *ctx = (_aarch64_ctx *)aux;
-     if (ctx->size == 0) break;
diff --git a/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch b/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
deleted file mode 100644
index 35f16d24f340..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
+++ /dev/null
@@ -1,35 +0,0 @@
---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-@@ -74,6 +74,10 @@
- #include <sys/utsname.h>
- #endif
- 
-+#if SANITIZER_LINUX && defined(__powerpc__)
-+#include <asm/ptrace.h>
-+#endif
-+
- #if SANITIZER_LINUX && !SANITIZER_ANDROID
- #include <sys/personality.h>
- #endif
---- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
-@@ -92,7 +92,7 @@
- # include <utime.h>
- # include <sys/ptrace.h>
- #if defined(__mips64) || defined(__aarch64__) || defined(__arm__) || \
--    SANITIZER_RISCV64
-+    defined(__powerpc__) || SANITIZER_RISCV64
- #  include <asm/ptrace.h>
- #  ifdef __arm__
- typedef struct user_fpregs elf_fpregset_t;
---- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
-@@ -31,7 +31,7 @@
- #include <sys/types.h> // for pid_t
- #include <sys/uio.h> // for iovec
- #include <elf.h> // for NT_PRSTATUS
--#if (defined(__aarch64__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
-+#if (defined(__aarch64__) || defined(__powerpc__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
- // GLIBC 2.20+ sys/user does not include asm/ptrace.h
- # include <asm/ptrace.h>
- #endif
diff --git a/srcpkgs/llvm12/patches/compiler-rt-size_t.patch b/srcpkgs/llvm12/patches/compiler-rt-size_t.patch
deleted file mode 100644
index 2c63063a5e9e..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-size_t.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/compiler-rt/lib/fuzzer/FuzzerInterceptors.cpp.orig
-+++ b/compiler-rt/lib/fuzzer/FuzzerInterceptors.cpp
-@@ -25,6 +25,7 @@
-   }
- 
- #include <cassert>
-+#include <cstddef>
- #include <cstdint>
- #include <dlfcn.h> // for dlsym()
- 
diff --git a/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch b/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
deleted file mode 100644
index d0b61c80c897..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
+++ /dev/null
@@ -1,62 +0,0 @@
---- a/compiler-rt/lib/xray/xray_powerpc64.inc
-+++ b/compiler-rt/lib/xray/xray_powerpc64.inc
-@@ -12,7 +12,13 @@
- 
- #include <cstdint>
- #include <mutex>
-+#ifdef __GLIBC__
- #include <sys/platform/ppc.h>
-+#else
-+#include <cctype>
-+#include <cstring>
-+#include <cstdlib>
-+#endif
- 
- #include "xray_defs.h"
- 
-@@ -20,13 +26,45 @@ namespace __xray {
- 
- ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
-   CPU = 0;
-+#ifdef __GLIBC__
-   return __ppc_get_timebase();
-+#else
-+  return __builtin_ppc_get_timebase();
-+#endif
- }
- 
- inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
-   static std::mutex M;
-   std::lock_guard<std::mutex> Guard(M);
-+#ifdef __GLIBC__
-   return __ppc_get_timebase_freq();
-+#else
-+  /* FIXME: a less dirty implementation? */
-+  static uint64_t base;
-+  if (!base) {
-+    FILE *f = fopen("/proc/cpuinfo", "rb");
-+    if (f) {
-+      ssize_t nr;
-+      /* virtually always big enough to hold the line */
-+      char buf[512];
-+      while (fgets(buf, sizeof(buf), f)) {
-+        char *ret = strstr(buf, "timebase");
-+        if (!ret) {
-+          continue;
-+        }
-+        ret += sizeof("timebase") - 1;
-+        ret = strchr(ret, ':');
-+        if (!ret) {
-+          continue;
-+        }
-+        base = strtoul(ret + 1, nullptr, 10);
-+        break;
-+      }
-+      fclose(f);
-+    }
-+  }
-+  return base;
-+#endif
- }
- 
- inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
diff --git a/srcpkgs/llvm12/patches/libcxx-musl.patch b/srcpkgs/llvm12/patches/libcxx-musl.patch
deleted file mode 100644
index bbd31ffc2cb1..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-musl.patch
+++ /dev/null
@@ -1,26 +0,0 @@
---- a/libcxx/include/locale
-+++ b/libcxx/include/locale
-@@ -742,7 +742,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
-         typename remove_reference<decltype(errno)>::type __save_errno = errno;
-         errno = 0;
-         char *__p2;
-+#if defined(__linux__) && !defined(__GLIBC__)
-+        long long __ll = strtoll(__a, &__p2, __base);
-+#else
-         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
-+#endif
-         typename remove_reference<decltype(errno)>::type __current_errno = errno;
-         if (__current_errno == 0)
-             errno = __save_errno;
-@@ -782,7 +786,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
-         typename remove_reference<decltype(errno)>::type __save_errno = errno;
-         errno = 0;
-         char *__p2;
-+#if defined(__linux__) && !defined(__GLIBC__)
-+        unsigned long long __ll = strtoull(__a, &__p2, __base);
-+#else
-         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
-+#endif
-         typename remove_reference<decltype(errno)>::type __current_errno = errno;
-         if (__current_errno == 0)
-             errno = __save_errno;
diff --git a/srcpkgs/llvm12/patches/libcxx-ppc.patch b/srcpkgs/llvm12/patches/libcxx-ppc.patch
deleted file mode 100644
index 7a92f8004e1c..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-ppc.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-This ensures `is_iec559` is defined correctly under all long double ABIs,
-including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__`
-is not defined on gcc.
-
---- a/libcxx/include/limits
-+++ b/libcxx/include/limits
-@@ -426,8 +426,14 @@ protected:
-     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
-     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
- 
--#if (defined(__ppc__) || defined(__ppc64__))
-+#if defined(__powerpc__) || defined(__powerpc64__)
-+#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__)
-+    /* IEEE 754 quadruple or double precision */
-+    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
-+#else
-+    /* 128-bit IBM double-double */
-     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
-+#endif
- #else
-     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
- #endif
diff --git a/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch b/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
deleted file mode 100644
index 70292beb2fcd..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/libcxx/CMakeLists.txt
-+++ b/libcxx/CMakeLists.txt
-@@ -769,6 +769,8 @@ function(cxx_link_system_libraries target)
-     target_link_libraries(${target} PRIVATE atomic)
-   endif()
- 
-+#ssp  target_link_libraries(${target} PRIVATE ssp_nonshared)
-+
-   if (MINGW)
-     target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
-   endif()
diff --git a/srcpkgs/llvm12/patches/libcxxabi-dl.patch b/srcpkgs/llvm12/patches/libcxxabi-dl.patch
deleted file mode 100644
index 3a15f9db8c98..000000000000
--- a/srcpkgs/llvm12/patches/libcxxabi-dl.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-Also link to -ldl to prevent undefined references.
-
---- a/libcxxabi/src/CMakeLists.txt
-+++ b/libcxxabi/src/CMakeLists.txt
-@@ -73,6 +73,7 @@
-   endif()
- 
-   add_library_flags_if(LIBCXXABI_HAS_C_LIB c)
-+  add_library_flags_if(LIBCXXABI_HAS_C_LIB dl)
- endif()
- 
- if (LIBCXXABI_USE_LLVM_UNWINDER)
---- a/libcxx/CMakeLists.txt
-+++ b/libcxx/CMakeLists.txt
-@@ -745,6 +745,10 @@
-     target_link_libraries(${target} PRIVATE m)
-   endif()
- 
-+  if (LIBCXX_HAS_C_LIB)
-+    target_link_libraries(${target} PRIVATE dl)
-+  endif()
-+
-   if (LIBCXX_HAS_RT_LIB)
-     target_link_libraries(${target} PRIVATE rt)
-   endif()
diff --git a/srcpkgs/llvm12/patches/libunwind-ppc32.patch b/srcpkgs/llvm12/patches/libunwind-ppc32.patch
deleted file mode 100644
index 74aa7576ecf9..000000000000
--- a/srcpkgs/llvm12/patches/libunwind-ppc32.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-This fixes build at least with gcc9 which does not define `__ppc__`.
-
---- a/libunwind/include/__libunwind_config.h
-+++ b/libunwind/include/__libunwind_config.h
-@@ -49,7 +49,7 @@
- #  define _LIBUNWIND_CONTEXT_SIZE 167
- #  define _LIBUNWIND_CURSOR_SIZE 179
- #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64
--# elif defined(__ppc__)
-+# elif defined(__powerpc__)
- #  define _LIBUNWIND_TARGET_PPC 1
- #  define _LIBUNWIND_CONTEXT_SIZE 117
- #  define _LIBUNWIND_CURSOR_SIZE 124
---- a/libunwind/src/UnwindRegistersRestore.S
-+++ b/libunwind/src/UnwindRegistersRestore.S
-@@ -392,7 +392,7 @@ Lnovec:
-   PPC64_LR(3)
-   bctr
- 
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- 
- DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind13Registers_ppc6jumptoEv)
- //
---- a/libunwind/src/UnwindRegistersSave.S
-+++ b/libunwind/src/UnwindRegistersSave.S
-@@ -554,7 +554,7 @@ DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext)
-   blr
- 
- 
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- 
- //
- // extern int unw_getcontext(unw_context_t* thread_state)
---- a/libunwind/src/config.h
-+++ b/libunwind/src/config.h
-@@ -95,12 +95,12 @@
- #define _LIBUNWIND_BUILD_SJLJ_APIS
- #endif
- 
--#if defined(__i386__) || defined(__x86_64__) || defined(__ppc__) || defined(__ppc64__) || defined(__powerpc64__)
-+#if defined(__i386__) || defined(__x86_64__) || defined(__powerpc__) || defined(__powerpc64__)
- #define _LIBUNWIND_SUPPORT_FRAME_APIS
- #endif
- 
- #if defined(__i386__) || defined(__x86_64__) ||                                \
--    defined(__ppc__) || defined(__ppc64__) || defined(__powerpc64__) ||        \
-+    defined(__powerpc__) || defined(__powerpc64__) ||                          \
-     (!defined(__APPLE__) && defined(__arm__)) ||                               \
-     (defined(__arm64__) || defined(__aarch64__)) ||                            \
-     defined(__mips__)
---- a/libunwind/src/libunwind.cpp
-+++ b/libunwind/src/libunwind.cpp
-@@ -42,7 +42,7 @@ _LIBUNWIND_HIDDEN int __unw_init_local(unw_cursor_t *cursor,
- # define REGISTER_KIND Registers_x86_64
- #elif defined(__powerpc64__)
- # define REGISTER_KIND Registers_ppc64
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- # define REGISTER_KIND Registers_ppc
- #elif defined(__aarch64__)
- # define REGISTER_KIND Registers_arm64
diff --git a/srcpkgs/llvm12/patches/lldb-musl.patch b/srcpkgs/llvm12/patches/lldb-musl.patch
deleted file mode 100644
index 601c0d138523..000000000000
--- a/srcpkgs/llvm12/patches/lldb-musl.patch
+++ /dev/null
@@ -1,31 +0,0 @@
---- a/lldb/source/Plugins/Process/Linux/Procfs.h
-+++ b/lldb/source/Plugins/Process/Linux/Procfs.h
-@@ -10,21 +10,12 @@
- // sys/procfs.h on Android/Linux for all supported architectures.
- 
- #include <sys/ptrace.h>
-+#include <asm/ptrace.h>
- 
--#ifdef __ANDROID__
--#if defined(__arm64__) || defined(__aarch64__)
--typedef unsigned long elf_greg_t;
--typedef elf_greg_t
--    elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
--typedef struct user_fpsimd_state elf_fpregset_t;
--#ifndef NT_FPREGSET
--#define NT_FPREGSET NT_PRFPREG
--#endif // NT_FPREGSET
--#elif defined(__mips__)
--#ifndef NT_FPREGSET
--#define NT_FPREGSET NT_PRFPREG
--#endif // NT_FPREGSET
--#endif
--#else // __ANDROID__
-+#if !defined(__GLIBC__) && defined(__powerpc__)
-+#define pt_regs musl_pt_regs
-+#include <sys/procfs.h>
-+#undef pt_regs
-+#else
- #include <sys/procfs.h>
--#endif // __ANDROID__
-+#endif
diff --git a/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch b/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch
deleted file mode 100644
index 8e0a9a779d1b..000000000000
--- a/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-commit ba4ede595ff9599232f5dd2b4384c243137b53fc
-Author: Daniel Kolesa <daniel@octaforge.org>
-Date:   Tue Jun 22 23:40:54 2021 +0200
-
-    enable compiler-rt support for ppc32
-
-diff --git a/compiler-rt/cmake/base-config-ix.cmake b/compiler-rt/cmake/base-config-ix.cmake
-index 1edab43..5c0c8a2 100644
---- a/compiler-rt/cmake/base-config-ix.cmake
-+++ b/compiler-rt/cmake/base-config-ix.cmake
-@@ -182,9 +182,7 @@ macro(test_targets)
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc64le")
-       test_target_arch(powerpc64le "" "-m64")
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc")
--      if(CMAKE_SYSTEM_NAME MATCHES "AIX")
--        test_target_arch(powerpc "" "-m32")
--      endif()
-+      test_target_arch(powerpc "" "-m32")
-       test_target_arch(powerpc64 "" "-m64")
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "s390x")
-       test_target_arch(s390x "" "")
diff --git a/srcpkgs/llvm12/template b/srcpkgs/llvm12/template
index 7ce18028e4a3..7b361bbbf5bc 100644
--- a/srcpkgs/llvm12/template
+++ b/srcpkgs/llvm12/template
@@ -1,25 +1,17 @@
 # Template file for 'llvm12'
 pkgname=llvm12
 version=12.0.1
-revision=2
+revision=3
 wrksrc="llvm-project-${version}.src"
 build_wrksrc=llvm
 build_style=cmake
 configure_args="
  -DCMAKE_BUILD_TYPE=Release -Wno-dev
  -DENABLE_LINKER_BUILD_ID=YES
- -DLLDB_USE_SYSTEM_SIX=YES
- -DLIBCXX_CXX_ABI=libcxxabi
- -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
- -DLIBCXXABI_USE_LLVM_UNWINDER=YES
- -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
- -DLIBOMP_ENABLE_SHARED=YES
- -DLIBOMP_INSTALL_ALIASES=NO
  -DLLVM_INCLUDE_DOCS=YES
  -DLLVM_BUILD_DOCS=YES
  -DLLVM_ENABLE_SPHINX=YES
  -DSPHINX_WARNINGS_AS_ERRORS=NO
- -DLLVM_INSTALL_UTILS=YES
  -DLLVM_BUILD_LLVM_DYLIB=YES
  -DLLVM_LINK_LLVM_DYLIB=YES
  -DLLVM_ENABLE_RTTI=YES
@@ -51,87 +43,10 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
-_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
-
-_lldb_enable=yes
-_libomp_enable=no
-
-case "$XBPS_TARGET_MACHINE" in
-	ppc64le*) ;;
-	ppc*|i686*) _lldb_enable=no ;;
-esac
-
-case "$XBPS_TARGET_MACHINE" in
-	x86_64*|aarch64*|ppc64*) _libomp_enable=yes;;
-esac
-
-subpackages="clang-tools-extra"
-
-# must go before clang
-if [ "$_libomp_enable" = "yes" ]; then
-	_enabled_projects+=";openmp"
-	subpackages+=" libomp libomp-devel"
-	# because of cmake nonsense referencing libomptarget.so.*
-	depends+=" libomp>=${version}_${revision}"
-fi
-
-subpackages+=" clang clang-analyzer libclang libclang-cpp
- llvm-libunwind llvm-libunwind-devel libcxx libcxx-devel
- libcxxabi libcxxabi-devel libllvm12"
-
-if [ "$_lldb_enable" = "yes" ]; then
-	# XXX fails to cross compile due to python
-	_enabled_projects+=";lldb"
-	subpackages+=" lldb lldb-devel"
-fi
-
-subpackages+=" lld lld-devel"
-
-configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
-
 post_patch() {
-	if [ "$_lldb_enable" = "yes" ]; then
-		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
-			vsed -i 's|__ptrace_request|int|g' \
-				${wrksrc}/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
-		fi
-		# disable docs for lldb as they fail to generate
-		vsed -i '/add_subdirectory(docs)/d' \
-			${wrksrc}/lldb/CMakeLists.txt
-	fi
-
 	# update config.guess for better platform detection
 	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
 		${wrksrc}/llvm/cmake
-
-	# fix linker failures on some archs
-	vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
-		${wrksrc}/libcxxabi/cmake/config-ix.cmake
-	vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
-		${wrksrc}/libcxxabi/cmake/config-ix.cmake
-
-	# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
-	case "$XBPS_TARGET_MACHINE" in
-		ppc64*) ;;
-		ppc*-musl|i686-musl|mips*-musl)
-			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
-				${wrksrc}/libunwind/src/CMakeLists.txt
-			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
-				${wrksrc}/libcxxabi/src/CMakeLists.txt
-			vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
-			;;
-	esac
-
-	case "$XBPS_TARGET_MACHINE" in
-		x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
-			vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
-				${wrksrc}/compiler-rt/CMakeLists.txt
-			;;
-		arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
-			vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
-				${wrksrc}/compiler-rt/cmake/config-ix.cmake
-			;;
-	esac
 }
 
 pre_configure() {
@@ -158,10 +73,8 @@ pre_configure() {
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
 			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
 		make ${makejobs} -C utils/TableGen
-		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
 		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
-		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
 		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
 		cd ../..
 	fi
@@ -202,218 +115,6 @@ do_install() {
 	if [ "$CROSS_BUILD" ]; then
 		rm -f ${DESTDIR}/usr/bin/llvm-config-host
 	fi
-
-	# Install libcxxabi headers
-	vinstall ${wrksrc}/libcxxabi/include/__cxxabi_config.h 644 usr/include
-	vinstall ${wrksrc}/libcxxabi/include/cxxabi.h 644 usr/include
-
-	# Install libunwind headers
-	vinstall ${wrksrc}/libunwind/include/__libunwind_config.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/libunwind.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/unwind.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/mach-o/compact_unwind_encoding.h \
-		644 usr/include/mach-o
-}
-
-clang-analyzer_package() {
-	pycompile_dirs="usr/share/scan-view"
-	depends="clang-${version}_${revision} python3 perl"
-	short_desc+=" - A source code analysis framework"
-	homepage="https://clang-analyzer.llvm.org/"
-	pkg_install() {
-		vmove usr/share/man/man1/scan-build.1
-		vmove "/usr/bin/scan-*"
-		vmove "/usr/share/scan-*"
-		vmove "/usr/libexec/*analyzer"
-	}
-}
-
-clang-tools-extra_package() {
-	lib32disabled=yes
-	depends="clang-${version}_${revision} python3"
-	short_desc+=" - Extra Clang tools"
-	homepage="https://clang.llvm.org/extra/"
-	pkg_install() {
-		vmove usr/include/clang-tidy
-		vmove usr/bin/clang-apply-replacements
-		vmove usr/bin/clang-query
-		vmove usr/bin/clang-rename
-		vmove usr/bin/clang-tidy
-		vmove usr/bin/diagtool
-		vmove usr/bin/find-all-symbols
-		vmove usr/bin/hmaptool
-		vmove usr/bin/modularize
-		vmove usr/bin/pp-trace
-		vmove usr/bin/sancov
-		vmove "usr/lib/libclangApplyReplacements*"
-		vmove "usr/lib/libclangQuery*"
-		vmove "usr/lib/libclangTidy*"
-		vmove "usr/share/clang/*tidy*"
-		vmove usr/share/doc/clang-tools
-		vmove usr/share/man/man1/extraclangtools.1
-		vmove usr/share/man/man1/diagtool.1
-	}
-}
-
-clang_package() {
-	lib32disabled=yes
-	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
-	 libclang-${version}_${revision}"
-	short_desc+=" - C language family frontend"
-	homepage="https://clang.llvm.org/"
-	pkg_install() {
-		vmove usr/include/clang
-		vmove usr/include/clang-c
-		vmove "usr/bin/*clang*"
-		vmove usr/bin/c-index-test
-		vmove usr/lib/clang
-		vmove usr/lib/cmake/clang
-		vmove "usr/lib/libclang*.a"
-		vmove "usr/lib/libclang*.so"
-		vmove usr/share/clang
-		vmove usr/share/doc/clang
-		vmove usr/share/man/man1/clang.1
-	}
-}
-
-libclang_package() {
-	short_desc+=" - C frontend runtime library"
-	pkg_install() {
-		vmove "usr/lib/libclang.so.*"
-	}
-}
-
-libclang-cpp_package() {
-	short_desc+=" - C frontend runtime library (C++ interface)"
-	pkg_install() {
-		vmove "usr/lib/libclang-cpp.so.*"
-	}
-}
-
-lld_package() {
-	lib32disabled=yes
-	short_desc+=" - linker"
-	homepage="https://lld.llvm.org"
-	pkg_install() {
-		vmove usr/bin/lld*
-		vmove usr/bin/wasm-ld
-		vmove usr/bin/ld.lld*
-		vmove usr/bin/ld64.lld*
-		vmove usr/share/doc/lld
-	}
-}
-
-lld-devel_package() {
-	lib32disabled=yes
-	short_desc+=" - linker - development files"
-	homepage="https://lld.llvm.org"
-	depends="lld>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/include/lld
-		vmove usr/lib/cmake/lld
-		vmove "usr/lib/liblld*a"
-	}
-}
-
-lldb_package() {
-	lib32disabled=yes
-	depends+=" python3-six"
-	short_desc+=" - LLDB debugger"
-	homepage="https://lldb.llvm.org/"
-	pkg_install() {
-		vmove usr/bin/*lldb*
-		vmove usr/lib/liblldb*so.*
-		vmove /usr/lib/python*
-	}
-}
-
-lldb-devel_package() {
-	lib32disabled=yes
-	depends="lldb>=${version}_${revision}"
-	short_desc+=" - LLDB debugger - development files"
-	pkg_install() {
-		vmove usr/include/lldb
-		vmove "usr/lib/liblldb*.so"
-	}
-}
-
-llvm-libunwind_package() {
-	short_desc+=" - libunwind"
-	pkg_install() {
-		vmove "usr/lib/libunwind.so.*"
-	}
-}
-
-llvm-libunwind-devel_package() {
-	short_desc+=" - libunwind - development files"
-	depends="llvm-libunwind>=${version}_${revision}"
-	conflicts="libunwind-devel>=0"
-	pkg_install() {
-		vmove usr/lib/libunwind.so
-		vmove usr/lib/libunwind.a
-		vmove "usr/include/*unwind*"
-		vmove usr/include/mach-o
-		vmove usr/share/doc/libunwind
-	}
-}
-
-libcxxabi_package() {
-	short_desc+=" - low level support for libc++"
-	pkg_install() {
-		vmove "usr/lib/libc++abi.so.*"
-	}
-}
-
-libcxxabi-devel_package() {
-	short_desc+=" - low level support for libc++ - development files"
-	depends="libcxxabi>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/lib/libc++abi.so
-		vmove usr/lib/libc++abi.a
-		vmove "usr/include/*cxxabi*"
-	}
-}
-
-libcxx_package() {
-	short_desc+=" - C++ standard library"
-	pkg_install() {
-		vmove "usr/lib/libc++.so.*"
-	}
-}
-
-libcxx-devel_package() {
-	short_desc+=" - C++ standard library - development files"
-	depends="libcxx>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/lib/libc++.so
-		vmove usr/lib/libc++.a
-		vmove usr/lib/libc++experimental.a
-		vmove usr/include/c++
-		vmove usr/share/doc/libcxx
-	}
-}
-
-libomp_package() {
-	short_desc+=" - Clang OpenMP support library"
-	pkg_install() {
-		vmove usr/lib/libomp.so
-		vmove "usr/lib/libomptarget.rtl.*.so"
-		vmove usr/lib/libarcher.so
-		vmove "usr/lib/libomp*.so.*"
-	}
-}
-
-libomp-devel_package() {
-	short_desc+=" - Clang OpenMP support library - development files"
-	depends="libomp>=${version}_${revision}"
-	pkg_install() {
-		vmove "usr/lib/libomp*.so"
-		vmove "usr/lib/libarcher*"
-		vmove "usr/include/omp*.h"
-		vmove "usr/lib/clang/${version}/include/omp*.h"
-		vmove usr/share/man/man1/llvmopenmp.1
-		vmove usr/share/doc/openmp
-	}
 }
 
 libllvm12_package() {

From 1cb324977377e0598600608431e6f48e95589829 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 14:00:28 +0200
Subject: [PATCH 04/29] New packages: clang12, libclang12, libclang12-cpp,
 lld12, lld12-devel.

---
 common/shlibs                                 |   3 +
 srcpkgs/clang12                               |   1 +
 srcpkgs/libclang12                            |   1 +
 srcpkgs/libclang12-cpp                        |   1 +
 srcpkgs/lld12                                 |   1 +
 srcpkgs/lld12-devel                           |   1 +
 ...clang-001-fix-unwind-chain-inclusion.patch |  44 +++++++
 .../patches/clang-002-add-musl-triples.patch  | 110 ++++++++++++++++++
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 +++
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ++++++++
 srcpkgs/llvm12/template                       |  71 +++++++++++
 11 files changed, 294 insertions(+)
 create mode 120000 srcpkgs/clang12
 create mode 120000 srcpkgs/libclang12
 create mode 120000 srcpkgs/libclang12-cpp
 create mode 120000 srcpkgs/lld12
 create mode 120000 srcpkgs/lld12-devel
 create mode 100644 srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch

diff --git a/common/shlibs b/common/shlibs
index 81acc39defb4..4b37a9f7cb44 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -975,6 +975,9 @@ libuchardet.so.0 uchardet-0.0.6_1
 libgtksourceviewmm-3.0.so.0 gtksourceviewmm-3.2.0_1
 libyajl.so.2 yajl-2.0.1_1
 libconfuse.so.2 confuse-3.2.1_1
+liblldb.so.12 lldb-12.0.0_1
+libclang.so.12 libclang-12.0.0_1
+libclang-cpp.so.12 libclang-cpp-12.0.0_1
 liblldb.so.14 lldb-14.0.3_1
 libclang.so.14 libclang-14.0.3_1
 libclang-cpp.so.14 libclang-cpp-14.0.3_1
diff --git a/srcpkgs/clang12 b/srcpkgs/clang12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/clang12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/libclang12 b/srcpkgs/libclang12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/libclang12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/libclang12-cpp b/srcpkgs/libclang12-cpp
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/libclang12-cpp
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/lld12 b/srcpkgs/lld12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/lld12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/lld12-devel b/srcpkgs/lld12-devel
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/lld12-devel
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
new file mode 100644
index 000000000000..e4eaa7783e7a
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
@@ -0,0 +1,44 @@
+From 352974169f0d2b5da3d5321f588f5e3b5941330e Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe@gmail.com>
+Date: Tue, 8 Sep 2015 22:14:57 +0200
+Subject: [PATCH 2/7] fix unwind chain inclusion
+
+---
+ lib/Headers/unwind.h | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/lib/Headers/unwind.h b/lib/Headers/unwind.h
+index 303d792..44e10cc 100644
+--- a/clang/lib/Headers/unwind.h
++++ b/clang/lib/Headers/unwind.h
+@@ -9,9 +9,6 @@
+ 
+ /* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/
+ 
+-#ifndef __CLANG_UNWIND_H
+-#define __CLANG_UNWIND_H
+-
+ #if defined(__APPLE__) && __has_include_next(<unwind.h>)
+ /* Darwin (from 11.x on) provide an unwind.h. If that's available,
+  * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE,
+@@ -39,6 +36,9 @@
+ # endif
+ #else
+ 
++#ifndef __CLANG_UNWIND_H
++#define __CLANG_UNWIND_H
++
+ #include <stdint.h>
+ 
+ #ifdef __cplusplus
+@@ -322,6 +322,7 @@ _Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *);
+ }
+ #endif
+ 
++#endif /* __CLANG_UNWIND_H */
++
+ #endif
+ 
+-#endif /* __CLANG_UNWIND_H */
+-- 
+2.5.1
diff --git a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
new file mode 100644
index 000000000000..25688d40dbc2
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
@@ -0,0 +1,110 @@
+--- a/clang/lib/Driver/ToolChains/Gnu.cpp
++++ b/clang/lib/Driver/ToolChains/Gnu.cpp
+@@ -2086,7 +2086,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
+                                              "armv7hl-redhat-linux-gnueabi",
+                                              "armv6hl-suse-linux-gnueabi",
+-                                             "armv7hl-suse-linux-gnueabi"};
++                                             "armv7hl-suse-linux-gnueabi",
++                                             "armv7l-linux-gnueabihf"};
+   static const char *const ARMebLibDirs[] = {"/lib"};
+   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
+                                              "armeb-linux-androideabi"};
+@@ -2153,8 +2154,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
+   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
+   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
+-                                             "powerpcle-unknown-linux-gnu",
+-                                             "powerpcle-linux-musl"};
++                                             "powerpcle-unknown-linux-gnu"};
+ 
+   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
+   static const char *const PPC64Triples[] = {
+@@ -2235,6 +2235,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+     return;
+   }
+ 
++  if (TargetTriple.isMusl()) {
++    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
++    static const char *const ARMHFMuslTriples[] = {
++        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
++    };
++    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
++    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
++    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
++    static const char *const MIPSMuslTriples[] = {
++        "mips-linux-musl", "mipsel-linux-musl",
++        "mipsel-linux-muslhf", "mips-linux-muslhf"
++    };
++    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
++    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
++    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
++    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
++
++    switch (TargetTriple.getArch()) {
++    case llvm::Triple::aarch64:
++      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      break;
++    case llvm::Triple::arm:
++      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
++      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
++        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
++      } else {
++        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
++      }
++      break;
++    case llvm::Triple::x86_64:
++      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      break;
++    case llvm::Triple::x86:
++      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      break;
++    case llvm::Triple::mips:
++      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
++      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
++      break;
++    case llvm::Triple::ppc:
++      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      break;
++    case llvm::Triple::ppcle:
++      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      break;
++    case llvm::Triple::ppc64:
++      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      break;
++    case llvm::Triple::ppc64le:
++      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      break;
++    default:
++      break;
++    }
++    TripleAliases.push_back(TargetTriple.str());
++    if (TargetTriple.str() != BiarchTriple.str())
++      BiarchTripleAliases.push_back(BiarchTriple.str());
++    return;
++  }
++
+   // Android targets should not use GNU/Linux tools or libraries.
+   if (TargetTriple.isAndroid()) {
+     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
new file mode 100644
index 000000000000..4ad6412d1e6c
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
@@ -0,0 +1,13 @@
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -504,10 +504,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+     Loader = "ld.so.1";
+     break;
+   case llvm::Triple::ppc64:
+-    LibDir = "lib64";
+-    Loader =
+-        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
+-    break;
+   case llvm::Triple::ppc64le:
+     LibDir = "lib64";
+     Loader =
diff --git a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
new file mode 100644
index 000000000000..21fc8003c5f1
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
@@ -0,0 +1,48 @@
+--- a/clang/lib/Basic/Targets/PPC.h
++++ b/clang/lib/Basic/Targets/PPC.h
+@@ -415,11 +415,10 @@ public:
+       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
+     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
+       DataLayout = "e-m:e-i64:64-n32:64";
+-      ABI = "elfv2";
+     } else {
+       DataLayout = "E-m:e-i64:64-n32:64";
+-      ABI = "elfv1";
+     }
++    ABI = "elfv2";
+ 
+     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
+       LongDoubleWidth = LongDoubleAlign = 64;
+--- a/clang/lib/CodeGen/TargetInfo.cpp
++++ b/clang/lib/CodeGen/TargetInfo.cpp
+@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
+       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
+ 
+     if (Triple.isOSBinFormatELF()) {
+-      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
+-      if (getTarget().getABI() == "elfv2")
+-        Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      if (getTarget().getABI() == "elfv1")
++        Kind = PPC64_SVR4_ABIInfo::ELFv1;
+       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
+ 
+       return SetCGInfo(
+--- a/clang/lib/Driver/ToolChains/Clang.cpp
++++ b/clang/lib/Driver/ToolChains/Clang.cpp
+@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
+   const llvm::Triple &T = getToolChain().getTriple();
+   if (T.isOSBinFormatELF()) {
+     switch (getToolChain().getArch()) {
+-    case llvm::Triple::ppc64: {
+-      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
+-          T.isOSOpenBSD() || T.isMusl())
+-        ABIName = "elfv2";
+-      else
+-        ABIName = "elfv1";
+-      break;
+-    }
++    case llvm::Triple::ppc64:
+     case llvm::Triple::ppc64le:
+       ABIName = "elfv2";
+       break;
diff --git a/srcpkgs/llvm12/template b/srcpkgs/llvm12/template
index 7b361bbbf5bc..274b57183654 100644
--- a/srcpkgs/llvm12/template
+++ b/srcpkgs/llvm12/template
@@ -43,6 +43,12 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
+_enabled_projects="clang;lld"
+
+subpackages+=" clang12 libclang12 libclang12-cpp libllvm12 lld12 lld12-devel"
+
+configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+
 post_patch() {
 	# update config.guess for better platform detection
 	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
@@ -73,8 +79,10 @@ pre_configure() {
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
 			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
 		make ${makejobs} -C utils/TableGen
+		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
 		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
+		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
 		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
 		cd ../..
 	fi
@@ -117,6 +125,69 @@ do_install() {
 	fi
 }
 
+clang12_package() {
+	conflicts="clang"
+	lib32disabled=yes
+	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
+	 libclang12-${version}_${revision}"
+	short_desc+=" - C language family frontend"
+	homepage="https://clang.llvm.org/"
+	pkg_install() {
+		vmove usr/include/clang
+		vmove usr/include/clang-c
+		vmove "usr/bin/*clang*"
+		vmove usr/bin/c-index-test
+		vmove usr/lib/clang
+		vmove usr/lib/cmake/clang
+		vmove "usr/lib/libclang*.a"
+		vmove "usr/lib/libclang*.so"
+		vmove usr/share/clang
+		vmove usr/share/doc/clang
+		vmove usr/share/man/man1/clang.1
+	}
+}
+
+libclang12_package() {
+	short_desc+=" - C frontend runtime library"
+	pkg_install() {
+		vmove "usr/lib/libclang.so.*"
+	}
+}
+
+libclang12-cpp_package() {
+	short_desc+=" - C frontend runtime library (C++ interface)"
+	pkg_install() {
+		vmove "usr/lib/libclang-cpp.so.*"
+	}
+}
+
+lld12_package() {
+	conflicts="lld"
+	lib32disabled=yes
+	short_desc+=" - linker"
+	homepage="https://lld.llvm.org"
+	pkg_install() {
+		vmove usr/bin/lld*
+		vmove usr/bin/wasm-ld
+		vmove usr/bin/ld.lld*
+		vmove usr/bin/ld64.lld*
+		vmove usr/share/doc/lld
+	}
+}
+
+lld12-devel_package() {
+	conflicts="lld-devel"
+	lib32disabled=yes
+	short_desc+=" - linker - development files"
+	homepage="https://lld.llvm.org"
+	depends="lld12>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include/lld
+		vmove usr/lib/cmake/lld
+		vmove "usr/lib/liblld*a"
+	}
+}
+
 libllvm12_package() {
 	short_desc+=" - runtime library"
 	pkg_install() {

From 274935ae088e6b3fb680f49cf75d391973ab5391 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 05/29] chromium: update for llvm14

---
 srcpkgs/chromium/template | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/srcpkgs/chromium/template b/srcpkgs/chromium/template
index 0dce8772fdb8..8b604a349229 100644
--- a/srcpkgs/chromium/template
+++ b/srcpkgs/chromium/template
@@ -2,7 +2,7 @@
 pkgname=chromium
 # See https://chromiumdash.appspot.com/releases?platform=Linux for the latest version
 version=101.0.4951.41
-revision=1
+revision=2
 archs="i686* x86_64* aarch64* armv7l* ppc64le*"
 short_desc="Google's attempt at creating a safer, faster, and more stable browser"
 maintainer="Duncaen <duncaen@voidlinux.org>"
@@ -20,7 +20,7 @@ desc_option_debug="Build with debug symbols"
 desc_option_js_optimize="Optimize the JS used for Chromium's UI"
 desc_option_pipewire="Enable support for screen sharing for WebRTC via PipeWire"
 
-hostmakedepends="$(vopt_if clang "clang lld llvm12") python python3 pkgconf perl gperf bison ninja nodejs hwids
+hostmakedepends="$(vopt_if clang "clang lld llvm14") python python3 pkgconf perl gperf bison ninja nodejs hwids
  libatomic-devel libevent-devel libglib-devel $(vopt_if js_optimize openjdk) wayland-devel libepoxy-devel"
 makedepends="libpng-devel gtk+-devel gtk+3-devel nss-devel pciutils-devel
  libXi-devel libgcrypt-devel libgnome-keyring-devel cups-devel elfutils-devel
@@ -266,12 +266,6 @@ do_configure() {
 		'disable_fieldtrial_testing_config=true'
 
 		'is_official_build=true'
-
-		# segfaults with llvm-12.0.1
-		'is_cfi=false'
-		'use_thin_lto=false'
-		'use_cfi_icall=false'
-		'chrome_pgo_phase=0'
 	)
 
 	if [ "$CROSS_BUILD" ]; then

From c186b39274f867d87bc5d97db3c30e249b025be8 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 06/29] ghdl: update for llvm14

---
 srcpkgs/ghdl/patches/{llvm12.patch => llvm.patch} | 2 ++
 srcpkgs/ghdl/template                             | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)
 rename srcpkgs/ghdl/patches/{llvm12.patch => llvm.patch} (82%)

diff --git a/srcpkgs/ghdl/patches/llvm12.patch b/srcpkgs/ghdl/patches/llvm.patch
similarity index 82%
rename from srcpkgs/ghdl/patches/llvm12.patch
rename to srcpkgs/ghdl/patches/llvm.patch
index 8d2f76bfda06..9201816ae053 100644
--- a/srcpkgs/ghdl/patches/llvm12.patch
+++ b/srcpkgs/ghdl/patches/llvm.patch
@@ -7,6 +7,8 @@ index c1c1a6d..dad7c38 100755
         check_version 10.0 $llvm_version ||
         check_version 11.0 $llvm_version ||
 +       check_version 12.0 $llvm_version ||
++       check_version 13.0 $llvm_version ||
++       check_version 14.0 $llvm_version ||
         false; then
      echo "Debugging is enabled with llvm $llvm_version"
    else
diff --git a/srcpkgs/ghdl/template b/srcpkgs/ghdl/template
index e756d8c3cd87..9ca1169b22bd 100644
--- a/srcpkgs/ghdl/template
+++ b/srcpkgs/ghdl/template
@@ -7,7 +7,7 @@
 pkgname=ghdl
 reverts="20181129_1"
 version=1.0.0
-revision=1
+revision=2
 build_style=configure
 configure_args="--prefix=/usr --srcdir=.. --incdir=lib/ghdl/include"
 makedepends="zlib-devel"

From a0f1df26d347f65137aedc769df805d2a73b628d Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 07/29] qt5: rebuild for llvm14

---
 srcpkgs/qt5/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index ee788fad2019..25f15583a42d 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -3,7 +3,7 @@ pkgname=qt5
 version=5.15.3+20220222
 # commit fcca82ca40a5d8a02a4ddd90846d070f2c58cfad
 # base repo: https://invent.kde.org/qt/qt/qt5
-revision=3
+revision=4
 build_style=meta
 hostmakedepends="cmake clang flex perl glib-devel pkg-config
  python re2c ruby which"

From 7502e640ce5b575ca46e7cb1406a9f5d913a121b Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 08/29] tilix: rebuild for llvm14

---
 srcpkgs/tilix/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/tilix/template b/srcpkgs/tilix/template
index d8f014bc78c5..ac1bf7dd3bdd 100644
--- a/srcpkgs/tilix/template
+++ b/srcpkgs/tilix/template
@@ -1,7 +1,7 @@
 # Template file for 'tilix'
 pkgname=tilix
 version=1.9.4
-revision=3
+revision=4
 build_style=meson
 configure_args="-Db_lto=false"
 hostmakedepends="automake gettext-devel gdk-pixbuf glib-devel ldc po4a pkg-config

From 59b1a6cf90a68c67b08046f7b20f99cfd9f3d629 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 09/29] shiboken2: rebuild for llvm14

---
 srcpkgs/shiboken2/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/shiboken2/template b/srcpkgs/shiboken2/template
index b56613229c13..ab9d2c4cb8f9 100644
--- a/srcpkgs/shiboken2/template
+++ b/srcpkgs/shiboken2/template
@@ -1,7 +1,7 @@
 # Template file for 'shiboken2'
 pkgname=shiboken2
 version=5.15.2
-revision=4
+revision=5
 _pkgname="pyside-setup-opensource-src-${version}"
 wrksrc="${_pkgname/%5.14.2.1/5.14.2}"
 build_wrksrc="sources/shiboken2"

From 3f103551eb908ec36771c92b9a409a6c995a9552 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 10/29] gnome-builder: rebuild for llvm14

---
 srcpkgs/gnome-builder/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/gnome-builder/template b/srcpkgs/gnome-builder/template
index 93559b21774f..5a5a51893ae8 100644
--- a/srcpkgs/gnome-builder/template
+++ b/srcpkgs/gnome-builder/template
@@ -1,7 +1,7 @@
 # Template file for 'gnome-builder'
 pkgname=gnome-builder
 version=41.3
-revision=1
+revision=2
 build_style=meson
 build_helper=qemu
 configure_args="-Dhelp=true -Dnetwork_tests=false"

From df2fed81e0f615a736641d89ed6b9dff3822187a Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 11/29] bcc: rebuild for llvm14

---
 srcpkgs/bcc/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/bcc/template b/srcpkgs/bcc/template
index 54509b63d5a7..2cfa0a2977d0 100644
--- a/srcpkgs/bcc/template
+++ b/srcpkgs/bcc/template
@@ -1,7 +1,7 @@
 # Template file for 'bcc'
 pkgname=bcc
 version=0.24.0
-revision=1
+revision=2
 wrksrc="bcc"
 build_style=cmake
 configure_args="-DREVISION=${version} -DENABLE_LLVM_SHARED=1"

From 0c85a8e2f3b3b52fcd6f3398d94efc97b8411676 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 12/29] mesa: rebuild for llvm14

---
 srcpkgs/mesa/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/mesa/template b/srcpkgs/mesa/template
index c90500de7416..8f08262fb135 100644
--- a/srcpkgs/mesa/template
+++ b/srcpkgs/mesa/template
@@ -1,7 +1,7 @@
 # Template file for 'mesa'
 pkgname=mesa
 version=21.3.7
-revision=1
+revision=2
 build_style=meson
 configure_args="-Dglvnd=true -Dshared-glapi=enabled -Dgbm=enabled -Degl=enabled
  -Dosmesa=true -Dgles1=enabled -Dgles2=enabled -Dglx=dri -Ddri3=enabled

From 8f21580782e08fe70ee3775a050487e8b5f4917f Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 13/29] juCi++: rebuild for llvm14

---
 srcpkgs/juCi++/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/juCi++/template b/srcpkgs/juCi++/template
index 1a7604b44a00..5103324dec20 100644
--- a/srcpkgs/juCi++/template
+++ b/srcpkgs/juCi++/template
@@ -1,7 +1,7 @@
 # Template file for 'juCi++'
 pkgname=juCi++
 version=1.6.2
-revision=2
+revision=3
 _libclangmm_commit="b342f4dd6de4fe509a692a4b4fcfc7e24aae9590"
 _tiny_commit="c9c8bf810ddad8cd17882b9a9ee628a690e779f5"
 wrksrc="jucipp-v${version}"

From ba267e2a8545597e0fb8e643fcf616897c3fa6e7 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 14/29] kdevelop: rebuild for llvm14

---
 srcpkgs/kdevelop/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/kdevelop/template b/srcpkgs/kdevelop/template
index 010185849d80..abf08c313071 100644
--- a/srcpkgs/kdevelop/template
+++ b/srcpkgs/kdevelop/template
@@ -1,7 +1,7 @@
 # Template file for 'kdevelop'
 pkgname=kdevelop
 version=21.12.3
-revision=1
+revision=2
 build_style=cmake
 configure_args="-DBUILD_TESTING=OFF"
 hostmakedepends="extra-cmake-modules qt5-qmake qt5-host-tools qt5-tools

From 40cc38e52ead51bedf851d3cb0950998350ccde7 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 15/29] codelite: rebuild for llvm14

---
 srcpkgs/codelite/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/codelite/template b/srcpkgs/codelite/template
index 3a993a2c0cfb..24e2c879dd45 100644
--- a/srcpkgs/codelite/template
+++ b/srcpkgs/codelite/template
@@ -1,7 +1,7 @@
 # Template file for 'codelite'
 pkgname=codelite
 version=15.0.6
-revision=1
+revision=2
 build_style=cmake
 build_helper=cmake-wxWidgets-gtk3
 configure_args="-DWITH_PCH=0 -DWITH_WX_CONFIG=wx-config-gtk3

From b7ef65b7e5086409e81815da8fa19851dece8c86 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 16/29] ccls: rebuild for llvm14

---
 srcpkgs/ccls/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/ccls/template b/srcpkgs/ccls/template
index fbb7c6847bc1..40aba3b55bfe 100644
--- a/srcpkgs/ccls/template
+++ b/srcpkgs/ccls/template
@@ -1,7 +1,7 @@
 # Template file for 'ccls'
 pkgname=ccls
 version=0.20210330
-revision=2
+revision=3
 build_style=cmake
 hostmakedepends="clang-tools-extra"
 makedepends="llvm ncurses-devel rapidjson zlib-devel clang-tools-extra"

From b8adbce63a7b726422f2f104e6d7a0dc42ae7283 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 17/29] clazy: rebuild for llvm14

---
 srcpkgs/clazy/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/clazy/template b/srcpkgs/clazy/template
index 11f3bab55aef..f81de08ab836 100644
--- a/srcpkgs/clazy/template
+++ b/srcpkgs/clazy/template
@@ -1,7 +1,7 @@
 # Template file for 'clazy'
 pkgname=clazy
 version=1.11
-revision=1
+revision=2
 build_style=cmake
 build_helper=qemu
 hostmakedepends="llvm"

From 89dcff6ac9ab1e477b1029ff5963a8af533d5575 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 18/29] bpftrace: rebuild for llvm14

---
 srcpkgs/bpftrace/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/bpftrace/template b/srcpkgs/bpftrace/template
index 28ab3c626399..eb2480d2230e 100644
--- a/srcpkgs/bpftrace/template
+++ b/srcpkgs/bpftrace/template
@@ -1,7 +1,7 @@
 # Template file for 'bpftrace'
 pkgname=bpftrace
 version=0.14.1
-revision=1
+revision=2
 archs="x86_64* aarch64* ppc64*"
 build_style=cmake
 configure_args="-DBUILD_TESTING=OFF"  # needs root to run

From a386371d0878b5a99e9321103fc19cb2246650f7 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 19/29] rtags: rebuild for llvm14

---
 srcpkgs/rtags/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/rtags/template b/srcpkgs/rtags/template
index b496a1b0e721..9b161e690d76 100644
--- a/srcpkgs/rtags/template
+++ b/srcpkgs/rtags/template
@@ -1,7 +1,7 @@
 # Template file for 'rtags'
 pkgname=rtags
 version=2.38
-revision=5
+revision=6
 build_style=cmake
 # Don't run tests in do_install, please.
 configure_args="-DSKIP_CTEST=TRUE"

From 23f545d0c1f6894054e7c72da88654ecad400479 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:07:19 +0200
Subject: [PATCH 20/29] beignet: remove package

---
 srcpkgs/beignet/patches/cl_uint.patch         |  22 -
 ...419a0008e38ef2d9d255d9e9c74e9fba084b.patch | 134 ---
 srcpkgs/beignet/patches/llvm06.patch          |  33 -
 srcpkgs/beignet/patches/llvm08.patch          |  56 --
 srcpkgs/beignet/patches/llvm09.patch          | 111 ---
 srcpkgs/beignet/patches/llvm10.patch          | 347 -------
 srcpkgs/beignet/patches/llvm11.patch          | 937 ------------------
 srcpkgs/beignet/patches/llvm12.patch          | 115 ---
 srcpkgs/beignet/patches/musl.patch            |  11 -
 srcpkgs/beignet/template                      |  22 -
 srcpkgs/beignet/update                        |   1 -
 srcpkgs/removed-packages/template             |   3 +-
 12 files changed, 2 insertions(+), 1790 deletions(-)
 delete mode 100644 srcpkgs/beignet/patches/cl_uint.patch
 delete mode 100644 srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm06.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm08.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm09.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm10.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm11.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm12.patch
 delete mode 100644 srcpkgs/beignet/patches/musl.patch
 delete mode 100644 srcpkgs/beignet/template
 delete mode 100644 srcpkgs/beignet/update

diff --git a/srcpkgs/beignet/patches/cl_uint.patch b/srcpkgs/beignet/patches/cl_uint.patch
deleted file mode 100644
index 86ba00f04e95..000000000000
--- a/srcpkgs/beignet/patches/cl_uint.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/src/cl_api_kernel.c	2017-09-22 10:05:22.000000000 +0200
-+++ b/src/cl_api_kernel.c	2020-03-24 18:27:40.186485887 +0100
-@@ -151,7 +151,7 @@
-         fixed_local_sz[0] = 16;
-         fixed_local_sz[1] = 1;
-       } else {
--        uint j, maxDimSize = 64 /* from 64? */, maxGroupSize = 256; //MAX_WORK_GROUP_SIZE may too large
-+        cl_uint j, maxDimSize = 64 /* from 64? */, maxGroupSize = 256; //MAX_WORK_GROUP_SIZE may too large
-         size_t realGroupSize = 1;
-         for (i = 0; i < work_dim; i++) {
-           for (j = maxDimSize; j > 1; j--) {
---- a/src/cl_enqueue.c	2017-09-22 10:05:22.000000000 +0200
-+++ b/src/cl_enqueue.c	2020-03-24 18:30:12.031479833 +0100
-@@ -494,7 +494,7 @@
- cl_int cl_enqueue_svm_free(enqueue_data *data, cl_int status) {
-   int i;
-   void **pointers = data->pointers;
--  uint num_svm_ptrs = data->size;
-+  cl_uint num_svm_ptrs = data->size;
-   cl_int err = CL_SUCCESS;
- 
-   if (status != CL_COMPLETE)
diff --git a/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch b/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
deleted file mode 100644
index 8de9e6e2f093..000000000000
--- a/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
+++ /dev/null
@@ -1,134 +0,0 @@
-From e1b2419a0008e38ef2d9d255d9e9c74e9fba084b Mon Sep 17 00:00:00 2001
-From: "Rebecca N. Palmer" <rebecca_palmer@zoho.com>
-Date: Sat, 21 Jul 2018 20:05:54 +0100
-Subject: Add preliminary LLVM 7 support
-
-This is preliminary because LLVM 7 has not been released yet:
-it was tested with the snapshot from Debian experimental (svn336894).
-
-1.Change linking order, as clangCodeGen now links to clangFrontend
-2.Pass references not pointers to WriteBitcodeToFile and CloneModule
-3.Add the headers that LoopSimplifyID, LCSSAID and
-some create*Pass have moved to
-4.Define our DEBUG whether or not we just undefined LLVM's
-(theirs is now LLVM_DEBUG, but we never actually use it)
-
-Signed-off-by: Rebecca N. Palmer <rebecca_palmer@zoho.com>
-Reviewed-by: Yang Rong <rong.r.yang@intel.com>
----
- CMake/FindLLVM.cmake                     | 2 +-
- backend/src/backend/gen_program.cpp      | 8 ++++++++
- backend/src/backend/program.cpp          | 4 ++++
- backend/src/llvm/ExpandLargeIntegers.cpp | 2 +-
- backend/src/llvm/llvm_bitcode_link.cpp   | 4 ++++
- backend/src/llvm/llvm_includes.hpp       | 4 ++++
- 6 files changed, 22 insertions(+), 2 deletions(-)
-
-diff --git a/CMake/FindLLVM.cmake b/CMake/FindLLVM.cmake
-index 5457f24..f882589 100644
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -113,10 +113,10 @@ macro(add_one_lib name)
- endmacro()
- 
- #Assume clang lib path same as llvm lib path
-+add_one_lib("clangCodeGen")
- add_one_lib("clangFrontend")
- add_one_lib("clangSerialization")
- add_one_lib("clangDriver")
--add_one_lib("clangCodeGen")
- add_one_lib("clangSema")
- add_one_lib("clangStaticAnalyzerFrontend")
- add_one_lib("clangStaticAnalyzerCheckers")
-diff --git a/backend/src/backend/gen_program.cpp b/backend/src/backend/gen_program.cpp
-index 274c99c..4159234 100644
---- a/backend/src/backend/gen_program.cpp
-+++ b/backend/src/backend/gen_program.cpp
-@@ -454,7 +454,11 @@ namespace gbe {
- #ifdef GBE_COMPILER_AVAILABLE
-       std::string str;
-       llvm::raw_string_ostream OS(str);
-+#if LLVM_VERSION_MAJOR >= 7
-+      llvm::WriteBitcodeToFile(*((llvm::Module*)prog->module), OS);
-+#else
-       llvm::WriteBitcodeToFile((llvm::Module*)prog->module, OS);
-+#endif
-       std::string& bin_str = OS.str();
-       int llsz = bin_str.size();
-       *binary = (char *)malloc(sizeof(char) * (llsz+1) );
-@@ -545,7 +549,11 @@ namespace gbe {
-                                     &modRef);
-         src = llvm::unwrap(modRef);
-       }
-+#if LLVM_VERSION_MAJOR >= 7
-+      llvm::Module* clone = llvm::CloneModule(*src).release();
-+#else
-       llvm::Module* clone = llvm::CloneModule(src).release();
-+#endif
-       if (LLVMLinkModules2(wrap(dst), wrap(clone))) {
- #elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-       if (LLVMLinkModules(wrap(dst), wrap(src), LLVMLinkerPreserveSource_Removed, &errMsg)) {
-diff --git a/backend/src/backend/program.cpp b/backend/src/backend/program.cpp
-index c37c595..b36f7b4 100644
---- a/backend/src/backend/program.cpp
-+++ b/backend/src/backend/program.cpp
-@@ -794,7 +794,11 @@ namespace gbe {
-       llvm::raw_fd_ostream ostream (dumpSPIRBinaryName.c_str(),
-                                     err, llvm::sys::fs::F_None);
-       if (!err)
-+#if LLVM_VERSION_MAJOR<7
-         llvm::WriteBitcodeToFile(*out_module, ostream);
-+#else
-+        llvm::WriteBitcodeToFile(**out_module, ostream);
-+#endif
-     }
- #endif
-     return true;
-diff --git a/backend/src/llvm/ExpandLargeIntegers.cpp b/backend/src/llvm/ExpandLargeIntegers.cpp
-index 8515dc1..4aec44e 100644
---- a/backend/src/llvm/ExpandLargeIntegers.cpp
-+++ b/backend/src/llvm/ExpandLargeIntegers.cpp
-@@ -99,8 +99,8 @@ using namespace llvm;
- 
- #ifdef DEBUG
-   #undef DEBUG
--  #define DEBUG(...)
- #endif
-+#define DEBUG(...)
- // Break instructions up into no larger than 64-bit chunks.
- static const unsigned kChunkBits = 64;
- static const unsigned kChunkBytes = kChunkBits / CHAR_BIT;
-diff --git a/backend/src/llvm/llvm_bitcode_link.cpp b/backend/src/llvm/llvm_bitcode_link.cpp
-index ef56e4c..4c3e20e 100644
---- a/backend/src/llvm/llvm_bitcode_link.cpp
-+++ b/backend/src/llvm/llvm_bitcode_link.cpp
-@@ -340,7 +340,11 @@ namespace gbe
-     /* We use beignet's bitcode as dst because it will have a lot of
-        lazy functions which will not be loaded. */
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 39
-+#if LLVM_VERSION_MAJOR >= 7
-+    llvm::Module * linked_module = llvm::CloneModule(*(llvm::Module*)mod).release();
-+#else
-     llvm::Module * linked_module = llvm::CloneModule((llvm::Module*)mod).release();
-+#endif
-     if(LLVMLinkModules2(wrap(clonedLib), wrap(linked_module))) {
- #else
-     char* errorMsg;
-diff --git a/backend/src/llvm/llvm_includes.hpp b/backend/src/llvm/llvm_includes.hpp
-index 184553a..ffccf02 100644
---- a/backend/src/llvm/llvm_includes.hpp
-+++ b/backend/src/llvm/llvm_includes.hpp
-@@ -89,6 +89,10 @@
- #include "llvm/CodeGen/IntrinsicLowering.h"
- 
- #include "llvm/Transforms/Scalar.h"
-+#if LLVM_VERSION_MAJOR >= 7
-+#include "llvm/Transforms/Utils.h"
-+#include "llvm/Transforms/InstCombine/InstCombine.h"
-+#endif
- #include "llvm/MC/MCAsmInfo.h"
- #include "llvm/MC/MCContext.h"
- #include "llvm/MC/MCInstrInfo.h"
--- 
-cgit v1.1
-
diff --git a/srcpkgs/beignet/patches/llvm06.patch b/srcpkgs/beignet/patches/llvm06.patch
deleted file mode 100644
index 3389e66c82df..000000000000
--- a/srcpkgs/beignet/patches/llvm06.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-Source: Arch Linux
-Upstream: unknown
-Reason: fixes llvm6 compilation
-
---- a/backend/src/llvm/llvm_to_gen.cpp	2017-10-24 09:04:48.000000000 +0300
-+++ b/backend/src/llvm/llvm_to_gen.cpp	2018-03-16 16:08:54.669963824 +0200
-@@ -322,7 +322,11 @@ namespace gbe
-     DataLayout DL(&mod);
-     
-     gbeDiagnosticContext dc;
-+#if LLVM_VERSION_MAJOR >= 6
-+    mod.getContext().setDiagnosticHandlerCallBack(&gbeDiagnosticHandler,&dc);
-+#else
-     mod.getContext().setDiagnosticHandler(&gbeDiagnosticHandler,&dc);
-+#endif
- 
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-     mod.setDataLayout(DL);
---- a/backend/src/llvm/llvm_unroll.cpp	2017-10-24 09:04:48.000000000 +0300
-+++ b/backend/src/llvm/llvm_unroll.cpp	2018-03-16 16:09:47.736403557 +0200
-@@ -205,7 +205,9 @@ namespace gbe {
-           if (parentTripCount != 0 && currTripCount * parentTripCount > 32) {
-             //Don't change the unrollID if doesn't force unroll.
-             //setUnrollID(parentL, false);
--#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-+#if LLVM_VERSION_MAJOR >= 6
-+            loopInfo.erase(parentL);
-+#elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-             loopInfo.markAsRemoved(parentL);
- #else
-             LPM.deleteLoopFromQueue(parentL);
-Only in Beignet-1.3.2-Source: build
-
diff --git a/srcpkgs/beignet/patches/llvm08.patch b/srcpkgs/beignet/patches/llvm08.patch
deleted file mode 100644
index a0c5e7a7c4f7..000000000000
--- a/srcpkgs/beignet/patches/llvm08.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 75c152599a7c1739e6dadcdb9b377acf7e44d9cf Mon Sep 17 00:00:00 2001
-From: Jan Beich <jbeich@FreeBSD.org>
-Date: Wed, 30 Jan 2019 12:42:34 +0000
-Subject: [PATCH] lang/beignet: unbreak with llvm80
-
-Regressed by https://github.com/llvm/llvm-project/commit/721d95713a9e
-
-unable to load /usr/local/lib/beignet//libgbeinterp.so which is part of the driver, please check!
-ld-elf.so.1: /usr/local/lib/beignet//libgbeinterp.so: Undefined symbol "_ZN4llvm24DisableABIBreakingChecksE"
-
-Regressed by https://github.com/llvm/llvm-project/commit/4a2d58e16acc
-
-backend/src/llvm/llvm_gen_backend.cpp:3076:5: error:
-      unknown type name 'TerminatorInst'
-    TerminatorInst *term = bb->getTerminator();
-    ^
-backend/src/llvm/llvm_gen_backend.cpp:3083:5: error:
-      unknown type name 'TerminatorInst'
-    TerminatorInst *term = bb->getTerminator();
-    ^
-
---- a/backend/src/CMakeLists.txt	2017-09-22 08:05:22 UTC
-+++ b/backend/src/CMakeLists.txt
-@@ -168,6 +168,7 @@ add_dependencies(gbe beignet_bitcode)
- endif (NOT (USE_STANDALONE_GBE_COMPILER STREQUAL "true"))
- 
- add_library(gbeinterp SHARED gbe_bin_interpreter.cpp)
-+target_link_libraries(gbeinterp ${LLVM_MODULE_LIBS})
- 
- if (LLVM_VERSION_NODOT VERSION_EQUAL 34)
-   find_library(TERMINFO NAMES tinfo ncurses)
---- a/backend/src/llvm/llvm_gen_backend.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -3073,14 +3073,22 @@ namespace gbe
- 
- 
-   static unsigned getChildNo(BasicBlock *bb) {
-+#if LLVM_VERSION_MAJOR < 8
-     TerminatorInst *term = bb->getTerminator();
-+#else
-+    Instruction *term = bb->getTerminator();
-+#endif
-     return term->getNumSuccessors();
-   }
- 
-   // return NULL if index out-range of children number
-   static BasicBlock *getChildPossible(BasicBlock *bb, unsigned index) {
- 
-+#if LLVM_VERSION_MAJOR < 8
-     TerminatorInst *term = bb->getTerminator();
-+#else
-+    Instruction *term = bb->getTerminator();
-+#endif
-     unsigned childNo = term->getNumSuccessors();
-     BasicBlock *child = NULL;
-     if(index < childNo) {
diff --git a/srcpkgs/beignet/patches/llvm09.patch b/srcpkgs/beignet/patches/llvm09.patch
deleted file mode 100644
index acaeceabb6dd..000000000000
--- a/srcpkgs/beignet/patches/llvm09.patch
+++ /dev/null
@@ -1,111 +0,0 @@
-Source: FreeBSD + q66
-
-Mostly FreeBSD other than FindLLVM.cmake changes.
-Linking against clang-cpp does not work for us.
-
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -140,6 +140,7 @@ add_one_lib("clangStaticAnalyzerCore")
- add_one_lib("clangAnalysis")
- add_one_lib("clangEdit")
- add_one_lib("clangAST")
-+add_one_lib("clangASTMatchers")
- add_one_lib("clangParse")
- add_one_lib("clangSema")
- add_one_lib("clangLex")
---- a/backend/src/llvm/llvm_intrinsic_lowering.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_intrinsic_lowering.cpp
-@@ -77,7 +77,11 @@ namespace gbe {
-         std::vector<Type *> ParamTys;
-         for (Value** I = ArgBegin; I != ArgEnd; ++I)
-           ParamTys.push_back((*I)->getType());
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+        FunctionCallee FCache = M->getOrInsertFunction(NewFn,
-+#else
-         Constant* FCache = M->getOrInsertFunction(NewFn,
-+#endif
-                                         FunctionType::get(RetTy, ParamTys, false));
- 
-         IRBuilder<> Builder(CI->getParent(), BasicBlock::iterator(CI));
---- a/backend/src/llvm/llvm_sampler_fix.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp
-@@ -82,7 +82,11 @@ namespace gbe {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-           Module *M = I->getParent()->getParent()->getParent();
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+          FunctionCallee samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#endif
- #else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType(), nullptr);
- #endif
-@@ -124,7 +128,11 @@ namespace gbe {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-           Module *M = I->getParent()->getParent()->getParent();
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+          FunctionCallee samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#endif
- #else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType(), nullptr);
- #endif
---- a/backend/src/llvm/llvm_profiling.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_profiling.cpp
-@@ -163,10 +163,18 @@ namespace gbe
-       // __gen_ocl_store_timestamp(int nth, int type);
-       Value *Args[2] = {ConstantInt::get(intTy, pointNum++), ConstantInt::get(intTy, profilingType)};
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+      builder->CreateCall(module->getOrInsertFunction(
-+#else
-       builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-+#endif
-               "__gen_ocl_calc_timestamp", Type::getVoidTy(module->getContext()),
-               IntegerType::getInt32Ty(module->getContext()),
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+              IntegerType::getInt32Ty(module->getContext())),
-+#else
-               IntegerType::getInt32Ty(module->getContext()))),
-+#endif
-               ArrayRef<Value*>(Args));
- #else
-       builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-@@ -185,10 +193,18 @@ namespace gbe
-     Value *Args2[2] = {profilingBuf, ConstantInt::get(intTy, profilingType)};
- 
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+    builder->CreateCall(module->getOrInsertFunction(
-+#else
-     builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-+#endif
-             "__gen_ocl_store_profiling", Type::getVoidTy(module->getContext()),
-             ptrTy,
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+            IntegerType::getInt32Ty(module->getContext())),
-+#else
-             IntegerType::getInt32Ty(module->getContext()))),
-+#endif
-             ArrayRef<Value*>(Args2));
- #else
-     builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
---- a/backend/src/llvm/llvm_device_enqueue.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_device_enqueue.cpp
-@@ -398,8 +398,13 @@ namespace gbe {
-               std::vector<Type *> ParamTys;
-               for (Value** iter = args.begin(); iter != args.end(); ++iter)
-                 ParamTys.push_back((*iter)->getType());
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+              CallInst* newCI = builder.CreateCall(mod->getOrInsertFunction(
-+                              "__gen_enqueue_kernel_slm", FunctionType::get(intTy, ParamTys, false)), args);
-+#else
-               CallInst* newCI = builder.CreateCall(cast<llvm::Function>(mod->getOrInsertFunction(
-                               "__gen_enqueue_kernel_slm", FunctionType::get(intTy, ParamTys, false))), args);
-+#endif
-               CI->replaceAllUsesWith(newCI);
-               deadInsnSet.insert(CI);
-             }
diff --git a/srcpkgs/beignet/patches/llvm10.patch b/srcpkgs/beignet/patches/llvm10.patch
deleted file mode 100644
index 8aafe48a240d..000000000000
--- a/srcpkgs/beignet/patches/llvm10.patch
+++ /dev/null
@@ -1,347 +0,0 @@
-diff --git CMake/FindLLVM.cmake CMake/FindLLVM.cmake
-index 0a59e47..6e90923 100644
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -104,28 +104,16 @@ string(REGEX REPLACE " *\n" "" LLVM_SYSTEM_LIBS ${LLVM_SYSTEM_LIBS_ORIG})
- endif (LLVM_SYSTEM_LIBS_ORIG)
- endif (LLVM_VERSION_NODOT VERSION_GREATER 34)
- 
-+#something harmless because whitespace at start is an error
-+set(CLANG_LIBRARIES "-ldl")
- macro(add_one_lib name)
-   FIND_LIBRARY(CLANG_LIB
-     NAMES ${name}
-     PATHS ${LLVM_LIBRARY_DIR} NO_DEFAULT_PATH)
--  set(CLANG_LIBRARIES ${CLANG_LIBRARIES} ${CLANG_LIB})
-+  set(CLANG_LIBRARIES "${CLANG_LIBRARIES} ${CLANG_LIB}")
-+  message(STATUS "clanglibs name ${name} this ${CLANG_LIB} all ${CLANG_LIBRARIES} ")
- 	unset(CLANG_LIB CACHE)
- endmacro()
- 
- #Assume clang lib path same as llvm lib path
--add_one_lib("clangCodeGen")
--add_one_lib("clangFrontend")
--add_one_lib("clangSerialization")
--add_one_lib("clangDriver")
--add_one_lib("clangSema")
--add_one_lib("clangStaticAnalyzerFrontend")
--add_one_lib("clangStaticAnalyzerCheckers")
--add_one_lib("clangStaticAnalyzerCore")
--add_one_lib("clangAnalysis")
--add_one_lib("clangEdit")
--add_one_lib("clangAST")
--add_one_lib("clangASTMatchers")
--add_one_lib("clangParse")
--add_one_lib("clangSema")
--add_one_lib("clangLex")
--add_one_lib("clangBasic")
-+add_one_lib("clang-cpp")
-diff --git CMakeLists.txt CMakeLists.txt
-index c11acbb..08f427d 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -79,7 +79,7 @@ elseif (COMPILER STREQUAL "CLANG")
- elseif (COMPILER STREQUAL "ICC")
-   set (CMAKE_C_CXX_FLAGS "${CMAKE_C_CXX_FLAGS}  -wd2928 -Wall -fPIC -fstrict-aliasing -fp-model fast -msse4.1 -Wl,-E")
- endif ()
--set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
-+set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof")
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
- set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
- set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
-diff --git backend/src/backend/program.cpp backend/src/backend/program.cpp
-index b36f7b4..e666031 100644
---- a/backend/src/backend/program.cpp
-+++ b/backend/src/backend/program.cpp
-@@ -694,9 +694,9 @@ namespace gbe {
- #endif
-                 );
- 
-+    llvm::cl::ResetAllOptionOccurrences();
-     clang::CompilerInvocation::CreateFromArgs(*CI,
--                                              &args[0],
--                                              &args[0] + args.size(),
-+                                              clang::ArrayRef<const char*>(args),
-                                               Diags);
-     // Create the compiler instance
-     clang::CompilerInstance Clang;
-@@ -1242,8 +1242,7 @@ EXTEND_QUOTE:
-       // Create the compiler invocation
-       std::unique_ptr<clang::CompilerInvocation> CI(new clang::CompilerInvocation);
-       return clang::CompilerInvocation::CreateFromArgs(*CI,
--                                                       &args[0],
--                                                       &args[0] + args.size(),
-+                                                       clang::ArrayRef<const char*>(args),
-                                                        Diags);
-     }
- #endif
-diff --git backend/src/llvm/llvm_gen_backend.cpp backend/src/llvm/llvm_gen_backend.cpp
-index c6fc30d..82441d8 100644
---- a/backend/src/llvm/llvm_gen_backend.cpp
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -575,10 +575,12 @@ namespace gbe
-         has_errors(false),
-         legacyMode(true)
-     {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-       initializeLoopInfoWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeLoopInfoPass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-       pass = PASS_EMIT_REGISTERS;
-     }
-diff --git backend/src/llvm/llvm_gen_backend.hpp backend/src/llvm/llvm_gen_backend.hpp
-index b4715b1..8e74f7a 100644
---- a/backend/src/llvm/llvm_gen_backend.hpp
-+++ b/backend/src/llvm/llvm_gen_backend.hpp
-@@ -130,10 +130,10 @@ namespace gbe
-   llvm::FunctionPass *createGenPass(ir::Unit &unit);
- 
-   /*! Remove the GEP instructions */
--  llvm::BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit);
-+  llvm::FunctionPass *createRemoveGEPPass(const ir::Unit &unit);
- 
-   /*! Merge load/store if possible */
--  llvm::BasicBlockPass *createLoadStoreOptimizationPass();
-+  llvm::FunctionPass *createLoadStoreOptimizationPass();
- 
-   /*! Scalarize all vector op instructions */
-   llvm::FunctionPass* createScalarizePass();
-@@ -141,7 +141,7 @@ namespace gbe
-   llvm::ModulePass* createBarrierNodupPass(bool);
- 
-   /*! Convert the Intrinsic call to gen function */
--  llvm::BasicBlockPass *createIntrinsicLoweringPass();
-+  llvm::FunctionPass *createIntrinsicLoweringPass();
- 
-   /*! Passer the printf function call. */
-   llvm::FunctionPass* createPrintfParserPass(ir::Unit &unit);
-diff --git backend/src/llvm/llvm_intrinsic_lowering.cpp backend/src/llvm/llvm_intrinsic_lowering.cpp
-index 94f0ce6..b5539e9 100644
---- a/backend/src/llvm/llvm_intrinsic_lowering.cpp
-+++ b/backend/src/llvm/llvm_intrinsic_lowering.cpp
-@@ -29,12 +29,12 @@
- using namespace llvm;
- 
- namespace gbe {
--    class InstrinsicLowering : public BasicBlockPass
-+    class InstrinsicLowering : public FunctionPass
-     {
-     public:
-       static char ID;
-       InstrinsicLowering() :
--        BasicBlockPass(ID) {}
-+        FunctionPass(ID) {}
- 
-       void getAnalysisUsage(AnalysisUsage &AU) const {
- 
-@@ -93,9 +93,9 @@ namespace gbe {
-         CI->eraseFromParent();
-         return NewCI;
-       }
--      virtual bool runOnBasicBlock(BasicBlock &BB)
-+      virtual bool runOnFunction(Function &F)
-       {
--        bool changedBlock = false;
-+        for (BasicBlock &BB : F) {
-         Module *M = BB.getParent()->getParent();
- 
-         DataLayout TD(M);
-@@ -159,13 +159,14 @@ namespace gbe {
-             }
-           }
-         }
--        return changedBlock;
-+        }
-+        return true;
-       }
-     };
- 
-     char InstrinsicLowering::ID = 0;
- 
--    BasicBlockPass *createIntrinsicLoweringPass() {
-+    FunctionPass *createIntrinsicLoweringPass() {
-       return new InstrinsicLowering();
-     }
- } // end namespace
-diff --git backend/src/llvm/llvm_loadstore_optimization.cpp backend/src/llvm/llvm_loadstore_optimization.cpp
-index 5aa38be..e314302 100644
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
-@@ -26,13 +26,13 @@
- 
- using namespace llvm;
- namespace gbe {
--  class GenLoadStoreOptimization : public BasicBlockPass {
-+  class GenLoadStoreOptimization : public FunctionPass {
- 
-   public:
-     static char ID;
-     ScalarEvolution *SE;
-     const DataLayout *TD;
--    GenLoadStoreOptimization() : BasicBlockPass(ID) {}
-+    GenLoadStoreOptimization() : FunctionPass(ID) {}
- 
-     void getAnalysisUsage(AnalysisUsage &AU) const {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-@@ -45,7 +45,9 @@ namespace gbe {
-       AU.setPreservesCFG();
-     }
- 
--    virtual bool runOnBasicBlock(BasicBlock &BB) {
-+    virtual bool runOnFunction(Function &F) {
-+        bool changedAnyBlock = false;
-+        for (BasicBlock &BB : F) {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-       SE = &getAnalysis<ScalarEvolutionWrapperPass>().getSE();
- #else
-@@ -59,7 +61,9 @@ namespace gbe {
-       #else
-         TD = getAnalysisIfAvailable<DataLayout>();
-       #endif
--      return optimizeLoadStore(BB);
-+           changedAnyBlock = optimizeLoadStore(BB) | changedAnyBlock;
-+        }
-+        return changedAnyBlock;
-     }
-     Type    *getValueType(Value *insn);
-     Value   *getPointerOperand(Value *I);
-@@ -148,7 +152,7 @@ namespace gbe {
-       values.push_back(merged[i]);
-     }
-     LoadInst *ld = cast<LoadInst>(merged[0]);
--    unsigned align = ld->getAlignment();
-+    MaybeAlign align = ld->getAlign();
-     unsigned addrSpace = ld->getPointerAddressSpace();
-     // insert before first load
-     Builder.SetInsertPoint(ld);
-@@ -231,7 +235,7 @@ namespace gbe {
- 
-     unsigned addrSpace = st->getPointerAddressSpace();
- 
--    unsigned align = st->getAlignment();
-+    MaybeAlign align = st->getAlign();
-     // insert before the last store
-     Builder.SetInsertPoint(merged[size-1]);
- 
-@@ -325,7 +329,7 @@ namespace gbe {
-     return changed;
-   }
- 
--  BasicBlockPass *createLoadStoreOptimizationPass() {
-+  FunctionPass *createLoadStoreOptimizationPass() {
-     return new GenLoadStoreOptimization();
-   }
- };
-diff --git backend/src/llvm/llvm_passes.cpp backend/src/llvm/llvm_passes.cpp
-index 10752a3..b8f2282 100644
---- a/backend/src/llvm/llvm_passes.cpp
-+++ b/backend/src/llvm/llvm_passes.cpp
-@@ -37,7 +37,7 @@
- #include "sys/map.hpp"
- 
- using namespace llvm;
--
-+template class cfg::Update<BasicBlock *>;
- namespace gbe
- {
-   bool isKernelFunction(const llvm::Function &F) {
-@@ -219,13 +219,13 @@ namespace gbe
-     return offset;
-   }
- 
--  class GenRemoveGEPPasss : public BasicBlockPass
-+  class GenRemoveGEPPasss : public FunctionPass
-   {
- 
-    public:
-     static char ID;
-     GenRemoveGEPPasss(const ir::Unit &unit) :
--      BasicBlockPass(ID),
-+      FunctionPass(ID),
-       unit(unit) {}
-     const ir::Unit &unit;
-     void getAnalysisUsage(AnalysisUsage &AU) const {
-@@ -242,16 +242,18 @@ namespace gbe
- 
-     bool simplifyGEPInstructions(GetElementPtrInst* GEPInst);
- 
--    virtual bool runOnBasicBlock(BasicBlock &BB)
-+    virtual bool runOnFunction(Function &F)
-     {
--      bool changedBlock = false;
-+      bool changedAnyBlock = false;
-+        for (BasicBlock &BB : F) {
-       iplist<Instruction>::iterator I = BB.getInstList().begin();
-       for (auto nextI = I, E = --BB.getInstList().end(); I != E; I = nextI) {
-         iplist<Instruction>::iterator I = nextI++;
-         if(GetElementPtrInst* gep = dyn_cast<GetElementPtrInst>(&*I))
--          changedBlock = (simplifyGEPInstructions(gep) || changedBlock);
-+          changedAnyBlock = (simplifyGEPInstructions(gep) | changedAnyBlock);
-       }
--      return changedBlock;
-+        }
-+      return changedAnyBlock;
-     }
-   };
- 
-@@ -367,7 +369,7 @@ namespace gbe
-     return true;
-   }
- 
--  BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit) {
-+  FunctionPass *createRemoveGEPPass(const ir::Unit &unit) {
-     return new GenRemoveGEPPasss(unit);
-   }
- } /* namespace gbe */
-diff --git backend/src/llvm/llvm_sampler_fix.cpp backend/src/llvm/llvm_sampler_fix.cpp
-index 2a097c8..863be6d 100644
---- a/backend/src/llvm/llvm_sampler_fix.cpp
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp
-@@ -33,10 +33,12 @@ namespace gbe {
-   class SamplerFix : public FunctionPass {
-   public:
-     SamplerFix() : FunctionPass(ID) {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
-       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-     }
- 
-diff --git backend/src/llvm/llvm_scalarize.cpp backend/src/llvm/llvm_scalarize.cpp
-index e9a2a66..e9d2ee4 100644
---- a/backend/src/llvm/llvm_scalarize.cpp
-+++ b/backend/src/llvm/llvm_scalarize.cpp
-@@ -96,10 +96,12 @@ namespace gbe {
- 
-     Scalarize() : FunctionPass(ID)
-     {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
-       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-     }
- 
-diff --git utests/CMakeLists.txt utests/CMakeLists.txt
-index 300d87a..64179c7 100644
---- a/utests/CMakeLists.txt
-+++ b/utests/CMakeLists.txt
-@@ -26,8 +26,8 @@ if (NOT NOT_BUILD_STAND_ALONE_UTEST)
-   # Threads
-   Find_Package(Threads)
- 
--  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
--  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
-+  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof -ffloat-store -fno-strict-aliasing")
-+  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS} -ffloat-store -fno-strict-aliasing") #compiler_{degrees,radians,function_argument2} use equality comparison of floats, compiler_long_bitcast uses aliasing
-   set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
-   set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
-   set (CMAKE_CXX_FLAGS_MINSIZEREL     "-Os -DNDEBUG -DGBE_DEBUG=0")
diff --git a/srcpkgs/beignet/patches/llvm11.patch b/srcpkgs/beignet/patches/llvm11.patch
deleted file mode 100644
index 2c3a4278943c..000000000000
--- a/srcpkgs/beignet/patches/llvm11.patch
+++ /dev/null
@@ -1,937 +0,0 @@
-Source: Snektron
-
-There were a few changes required for LLVM 11:
-* llvm::StringRef requires .str(), implicit conversion was removed
-* llvm::CallSite was removed, but the required methods are available on llvm::CallInst
-* VectorTyID was split into FixedVectorTyID and ScalableVectorTyID, FixedVectorTyID was used
-* CallInst::getCalledValue() was renamed to CallInst::getCalledOperand()
-* Implicit conversion from MaybeAlign to Align was removed, so MaybeAlign::valueOrOne was used instead.
-
---- a/backend/src/llvm/StripAttributes.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/StripAttributes.cpp	2020-11-09 19:04:19.641897141 +0100
-@@ -107,9 +107,8 @@
-        BB != E; ++BB) {
-     for (BasicBlock::iterator Inst = BB->begin(), E = BB->end();
-          Inst != E; ++Inst) {
--      CallSite Call(&*Inst);
--      if (Call)
--        Call.setCallingConv(CallingConv::C);
-+      if (CallInst* callInst = dyn_cast<CallInst>(&*Inst))
-+        callInst->setCallingConv(CallingConv::C);
-     }
-   }
-
---- a/backend/src/llvm/llvm_bitcode_link.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_bitcode_link.cpp	2020-11-09 17:04:09.633753428 +0100
-@@ -98,7 +98,7 @@
-         if (callFunc && callFunc->getIntrinsicID() != 0)
-           continue;
-
--        std::string fnName = call->getCalledValue()->stripPointerCasts()->getName();
-+        std::string fnName = call->getCalledOperand()->stripPointerCasts()->getName().str();
-
-         if (!MFS.insert(fnName).second) {
-           continue;
---- a/backend/src/llvm/llvm_device_enqueue.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_device_enqueue.cpp	2020-11-09 19:01:49.201915008 +0100
-@@ -45,7 +45,7 @@
-       return NULL;
-
-     /* This is a fake, to check the function bitcast is for block or not */
--    std::string fnName = Fn->getName();
-+    std::string fnName = Fn->getName().str();
-     if(fnName.find("_invoke") == std::string::npos)
-       return NULL;
-
-@@ -119,18 +119,18 @@
-       ParamTys.push_back(ty);
-     }
-     FunctionType* NewFT = FunctionType::get(Fn->getReturnType(), ParamTys, false);
--    Function* NewFn = Function::Create(NewFT, Function::ExternalLinkage, Fn->getName());
-+    Function* NewFn = Function::Create(NewFT, Function::ExternalLinkage, Fn->getName().str());
-     SmallVector<ReturnInst*, 8> Returns;
-
-     Function::arg_iterator NewFnArgIt = NewFn->arg_begin();
-     for (Function::arg_iterator I = Fn->arg_begin(), E = Fn->arg_end(); I != E; ++I) {
--      std::string ArgName = I->getName();
-+      std::string ArgName = I->getName().str();
-       NewFnArgIt->setName(ArgName);
-       VMap[&*I] = &(*NewFnArgIt++);
-     }
-     CloneFunctionInto(NewFn, Fn, VMap, /*ModuleLevelChanges=*/true, Returns);
-
--    Fn->setName("__d" + Fn->getName());
-+    Fn->setName("__d" + Fn->getName().str());
-     mod->getFunctionList().push_back(NewFn);
-     //mod->getOrInsertFunction(NewFn->getName(), NewFn->getFunctionType(),
-     //                         NewFn->getAttributes());
-@@ -147,7 +147,7 @@
-       argTypeNames.push_back(llvm::MDString::get(Context, "char*"));
-       argBaseTypeNames.push_back(llvm::MDString::get(Context, "char*"));
-       argTypeQuals.push_back(llvm::MDString::get(Context, ""));
--      argNames.push_back(llvm::MDString::get(Context, I->getName()));
-+      argNames.push_back(llvm::MDString::get(Context, I->getName().str()));
-     }
-
-     //If run to here, llvm version always > 3.9, add the version check just for build.
-@@ -198,7 +198,7 @@
-            * invoke pointer to store the index in the unit's block functions index.*/
-           Function *Fn = dyn_cast<Function>(bt->getOperand(0));
-
--          std::string fnName = Fn->getName();
-+          std::string fnName = Fn->getName().str();
-           int index = -1;
-           for(size_t i=0; i<unit.blockFuncs.size(); i++) {
-             if(unit.blockFuncs[i] == fnName) {
-@@ -241,7 +241,7 @@
-             //unnamed call function, parse the use to find the define of called function
-             SmallVector<Value*, 16> args(CI->op_begin(), CI->op_end()-1);
-
--            Value *v = CI->getCalledValue();
-+            Value *v = CI->getCalledOperand();
-             BitCastInst* bt = dyn_cast<BitCastInst>(v);
-             if(bt == NULL)
-               continue;
-@@ -316,7 +316,7 @@
-                   ConstantExpr *expr = dyn_cast<ConstantExpr>(c->getOperand(3));
-                   BitCastInst *bt = dyn_cast<BitCastInst>(expr->getAsInstruction());
-                   Function* f = dyn_cast<Function>(bt->getOperand(0));
--                  blocks[v] = f->getName();
-+                  blocks[v] = f->getName().str();
-                 }
-               }
-
-@@ -332,7 +332,7 @@
-           } else {
-             //handle enqueue_kernel function call
-             Function *fn = CI->getCalledFunction();
--            if (fn->getName().find("enqueue_kernel") == std::string::npos)
-+            if (fn->getName().str().find("enqueue_kernel") == std::string::npos)
-               continue;
-
-             //block parameter's index, 3 or 6
-@@ -361,7 +361,7 @@
-                   ConstantExpr *expr = dyn_cast<ConstantExpr>(c->getOperand(3));
-                   BitCastInst *bt = dyn_cast<BitCastInst>(expr->getAsInstruction());
-                   Function* f = dyn_cast<Function>(bt->getOperand(0));
--                  blocks[v] = f->getName();
-+                  blocks[v] = f->getName().str();
-                 }
-               }
-             } else if(isa<AllocaInst>(block)) {
---- a/backend/src/llvm/llvm_gen_backend.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_gen_backend.cpp	2020-11-09 18:33:50.919114327 +0100
-@@ -376,7 +376,7 @@
-           GBE_ASSERT(index == 0);
-           return this->_newScalar(value, key, type, index, uniform);
-           break;
--        case Type::VectorTyID:
-+        case Type::FixedVectorTyID:
-         {
-           auto vectorType = cast<VectorType>(type);
-           auto elementType = vectorType->getElementType();
-@@ -743,20 +743,20 @@
- #undef DECL_VISIT_FN
-
-     // Emit rounding instructions from gen native function
--    void emitRoundingCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode);
-+    void emitRoundingCallInst(CallInst &I, ir::Opcode opcode);
-     // Emit unary instructions from gen native function
--    void emitUnaryCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode, ir::Type = ir::TYPE_FLOAT);
-+    void emitUnaryCallInst(CallInst &I, ir::Opcode opcode, ir::Type = ir::TYPE_FLOAT);
-     // Emit unary instructions from gen native function
--    void emitAtomicInst(CallInst &I, CallSite &CS, ir::AtomicOps opcode);
-+    void emitAtomicInst(CallInst &I, ir::AtomicOps opcode);
-     // Emit workgroup instructions
--    void emitWorkGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode);
-+    void emitWorkGroupInst(CallInst &I, ir::WorkGroupOps opcode);
-     // Emit subgroup instructions
--    void emitSubGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode);
-+    void emitSubGroupInst(CallInst &I, ir::WorkGroupOps opcode);
-     // Emit subgroup instructions
--    void emitBlockReadWriteMemInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
--    void emitBlockReadWriteImageInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-+    void emitBlockReadWriteMemInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-+    void emitBlockReadWriteImageInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-
--    uint8_t appendSampler(CallSite::arg_iterator AI);
-+    uint8_t appendSampler(User::op_iterator AI);
-     uint8_t getImageID(CallInst &I);
-
-     // These instructions are not supported at all
-@@ -1320,13 +1320,13 @@
- #endif
-
-       if(typeNameNode) {
--        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
-+        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-       }
-       if(typeBaseNameNode) {
--        llvmInfo.typeBaseName= (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString();
-+        llvmInfo.typeBaseName= (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString().str();
-       }
--      llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
--      llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString();
-+      llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-+      llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString().str();
-       bool isImage = llvmInfo.isImageType();
-       bool isPipe = llvmInfo.isPipeType();
-       if (I->getType()->isPointerTy() || isImage || isPipe) {
-@@ -1531,7 +1531,7 @@
-             EltTy = getEltType(EltTy, TypeIndex);
-         }
-
--        ir::Constant cc = unit.getConstantSet().getConstant(pointer->getName());
-+        ir::Constant cc = unit.getConstantSet().getConstant(pointer->getName().str());
-         unsigned int defOffset = cc.getOffset();
-         relocs.push_back(ir::RelocEntry(offset, defOffset + constantOffset));
-
-@@ -1546,7 +1546,7 @@
-       return;
-     }
-     if (isa<GlobalVariable>(c)) {
--      ir::Constant cc = unit.getConstantSet().getConstant(c->getName());
-+      ir::Constant cc = unit.getConstantSet().getConstant(c->getName().str());
-       unsigned int defOffset = cc.getOffset();
-
-       relocs.push_back(ir::RelocEntry(offset, defOffset));
-@@ -1609,7 +1609,7 @@
-           }
-           break;
-         }
--      case Type::TypeID::VectorTyID:
-+      case Type::TypeID::FixedVectorTyID:
-         {
-           const ConstantDataSequential *cds = dyn_cast<ConstantDataSequential>(c);
-           const VectorType *vecTy = cast<VectorType>(type);
-@@ -1936,7 +1936,7 @@
-       case Type::PointerTyID:
-         regTranslator.newScalar(value, key, 0, uniform);
-         break;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         auto vectorType = cast<VectorType>(type);
-         const uint32_t elemNum = vectorType->getNumElements();
-@@ -2395,7 +2395,7 @@
- #endif
-         }
-         if(typeNameNode) {
--          llvmInfo.typeName = (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
-+          llvmInfo.typeName = (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-           //LLVM 3.9 image's type name include access qual, don't match OpenCL spec, erase them.
-           std::vector<std::string> filters = {"__read_only ", "__write_only "};
-           for (uint32_t i = 0; i < filters.size(); i++) {
-@@ -2406,16 +2406,16 @@
-           }
-         }
-         if(typeBaseNameNode){
--          llvmInfo.typeBaseName = (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString();
-+          llvmInfo.typeBaseName = (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString().str();
-         }
-         if(accessQualNode) {
--          llvmInfo.accessQual = (cast<MDString>(accessQualNode->getOperand(opID)))->getString();
-+          llvmInfo.accessQual = (cast<MDString>(accessQualNode->getOperand(opID)))->getString().str();
-         }
-         if(typeQualNode) {
--          llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString();
-+          llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString().str();
-         }
-         if(argNameNode){
--          llvmInfo.argName = (cast<MDString>(argNameNode->getOperand(opID)))->getString();
-+          llvmInfo.argName = (cast<MDString>(argNameNode->getOperand(opID)))->getString().str();
-         }
-
-         // function arguments are uniform values.
-@@ -3010,7 +3010,7 @@
-         } else {
-           this->newRegister(const_cast<GlobalVariable*>(&v));
-           ir::Register reg = regTranslator.getScalar(const_cast<GlobalVariable*>(&v), 0);
--          ir::Constant &con = unit.getConstantSet().getConstant(v.getName());
-+          ir::Constant &con = unit.getConstantSet().getConstant(v.getName().str());
-           if (!legacyMode) {
-             ir::Register regload = ctx.reg(getFamily(getType(ctx, v.getType())));
-             ctx.LOADI(getType(ctx, v.getType()), regload, ctx.newIntegerImmediate(con.getOffset(), getType(ctx, v.getType())));
-@@ -3212,7 +3212,7 @@
-         GBE_ASSERTM(false, "Unsupported calling convention");
-     }
-
--    ctx.startFunction(F.getName());
-+    ctx.startFunction(F.getName().str());
-
-     ir::Function &fn = ctx.getFunction();
-     this->regTranslator.clear();
-@@ -3810,9 +3810,9 @@
-
-   void GenWriter::regAllocateCallInst(CallInst &I) {
-     Value *dst = &I;
--    Value *Callee = I.getCalledValue();
-+    Value *Callee = I.getCalledOperand();
-     GBE_ASSERT(ctx.getFunction().getProfile() == ir::PROFILE_OCL);
--    GBE_ASSERT(isa<InlineAsm>(I.getCalledValue()) == false);
-+    GBE_ASSERT(isa<InlineAsm>(I.getCalledOperand()) == false);
-     if(I.getNumArgOperands()) GBE_ASSERT(I.hasStructRetAttr() == false);
-
-     // We only support a small number of intrinsics right now
-@@ -3870,7 +3870,7 @@
-       }
-     }
-     // Get the name of the called function and handle it
--    const std::string fnName = Callee->stripPointerCasts()->getName();
-+    const std::string fnName = Callee->stripPointerCasts()->getName().str();
-     auto genIntrinsicID = intrinsicMap.find(fnName);
-     switch (genIntrinsicID) {
-       case GEN_OCL_GET_GROUP_ID0:
-@@ -4166,7 +4166,7 @@
-     };
-   }
-
--  void GenWriter::emitRoundingCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode) {
-+  void GenWriter::emitRoundingCallInst(CallInst &I, ir::Opcode opcode) {
-     if (I.getType()->isHalfTy()) {
-       const ir::Register src = this->getRegister(I.getOperand(0));
-       const ir::Register srcFloat = ctx.reg(ir::FAMILY_DWORD);
-@@ -4177,14 +4177,14 @@
-       ctx.F32TO16(ir::TYPE_U16, ir::TYPE_FLOAT, dst, dstFloat);
-     } else {
-       GBE_ASSERT(I.getType()->isFloatTy());
--      this->emitUnaryCallInst(I,CS,opcode);
-+      this->emitUnaryCallInst(I,opcode);
-     }
-   }
-
--  void GenWriter::emitUnaryCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
-+  void GenWriter::emitUnaryCallInst(CallInst &I, ir::Opcode opcode, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--    CallSite::arg_iterator AE = CS.arg_end();
-+    User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-     GBE_ASSERT(AI != AE);
-     const ir::Register src = this->getRegister(*AI);
-@@ -4293,9 +4293,9 @@
-     this->emitAtomicInstHelper(opcode, type, dst, llvmPtr, payloadTuple);
-   }
-
--  void GenWriter::emitAtomicInst(CallInst &I, CallSite &CS, ir::AtomicOps opcode) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitAtomicInst(CallInst &I, ir::AtomicOps opcode) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-     Value *llvmPtr = *AI;
-     ir::AddressSpace addrSpace = addressSpaceLLVMToGen(llvmPtr->getType()->getPointerAddressSpace());
-@@ -4348,7 +4348,7 @@
-     }
-   }
-
--  void GenWriter::emitWorkGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode) {
-+  void GenWriter::emitWorkGroupInst(CallInst &I, ir::WorkGroupOps opcode) {
-     ir::Function &f = ctx.getFunction();
-
-     if (f.getwgBroadcastSLM() < 0 && opcode == ir::WORKGROUP_OP_BROADCAST) {
-@@ -4378,8 +4378,8 @@
-       GBE_ASSERT(f.gettidMapSLM() >= 0);
-     }
-
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     if (opcode == ir::WORKGROUP_OP_ALL || opcode == ir::WORKGROUP_OP_ANY) {
-@@ -4391,14 +4391,14 @@
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], 3);
-       ctx.WORKGROUP(opcode, (uint32_t)f.gettidMapSLM(), getRegister(&I), srcTuple, 3, ir::TYPE_S32);
-     } else if (opcode == ir::WORKGROUP_OP_BROADCAST) {
--      int argNum = CS.arg_size();
-+      int argNum = I.arg_size();
-       std::vector<ir::Register> src(argNum);
-       for (int i = 0; i < argNum; i++) {
-         src[i] = this->getRegister(*(AI++));
-       }
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], argNum);
-       ctx.WORKGROUP(ir::WORKGROUP_OP_BROADCAST, (uint32_t)f.getwgBroadcastSLM(), getRegister(&I), srcTuple, argNum,
--          getType(ctx, (*CS.arg_begin())->getType()));
-+          getType(ctx, (*I.arg_begin())->getType()));
-     } else {
-       ConstantInt *sign = dyn_cast<ConstantInt>(AI);
-       GBE_ASSERT(sign);
-@@ -4423,9 +4423,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitSubGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitSubGroupInst(CallInst &I, ir::WorkGroupOps opcode) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     if (opcode == ir::WORKGROUP_OP_ALL || opcode == ir::WORKGROUP_OP_ANY) {
-@@ -4435,7 +4435,7 @@
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], 1);
-       ctx.SUBGROUP(opcode, getRegister(&I), srcTuple, 1, ir::TYPE_S32);
-     } else if (opcode == ir::WORKGROUP_OP_BROADCAST) {
--      int argNum = CS.arg_size();
-+      int argNum = I.arg_size();
-       GBE_ASSERT(argNum == 2);
-       std::vector<ir::Register> src(argNum);
-       for (int i = 0; i < argNum; i++) {
-@@ -4443,7 +4443,7 @@
-       }
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], argNum);
-       ctx.SUBGROUP(ir::WORKGROUP_OP_BROADCAST, getRegister(&I), srcTuple, argNum,
--          getType(ctx, (*CS.arg_begin())->getType()));
-+          getType(ctx, (*I.arg_begin())->getType()));
-     } else {
-       ConstantInt *sign = dyn_cast<ConstantInt>(AI);
-       GBE_ASSERT(sign);
-@@ -4466,9 +4466,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitBlockReadWriteMemInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitBlockReadWriteMemInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     Value *llvmPtr = *(AI++);
-@@ -4522,9 +4522,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitBlockReadWriteImageInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitBlockReadWriteImageInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     const uint8_t imageID = getImageID(I);
-@@ -4557,7 +4557,7 @@
-
-   /* append a new sampler. should be called before any reference to
-    * a sampler_t value. */
--  uint8_t GenWriter::appendSampler(CallSite::arg_iterator AI) {
-+  uint8_t GenWriter::appendSampler(User::op_iterator AI) {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-     CallInst *TC = dyn_cast<CallInst>(*AI);
-     Constant *CPV = TC ? dyn_cast<Constant>(TC->getOperand(0)) : NULL;
-@@ -4595,10 +4595,9 @@
-         const ir::Function &fn = ctx.getFunction();
-
-         // Get the function arguments
--        CallSite CS(&I);
--        CallSite::arg_iterator AI = CS.arg_begin();
-+        User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--        CallSite::arg_iterator AE = CS.arg_end();
-+        User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-         switch (F->getIntrinsicID()) {
-           case Intrinsic::stacksave:
-@@ -4764,17 +4763,17 @@
-             ctx.MAD(srcType, dst, src0, src1, src2);
-           }
-           break;
--          case Intrinsic::sqrt: this->emitUnaryCallInst(I,CS,ir::OP_SQR); break;
--          case Intrinsic::ceil: this->emitRoundingCallInst(I,CS,ir::OP_RNDU); break;
--          case Intrinsic::trunc: this->emitRoundingCallInst(I,CS,ir::OP_RNDZ); break;
--          case Intrinsic::rint: this->emitRoundingCallInst(I,CS,ir::OP_RNDE); break;
--          case Intrinsic::floor: this->emitRoundingCallInst(I,CS,ir::OP_RNDD); break;
--          case Intrinsic::sin: this->emitUnaryCallInst(I,CS,ir::OP_SIN); break;
--          case Intrinsic::cos: this->emitUnaryCallInst(I,CS,ir::OP_COS); break;
--          case Intrinsic::log2: this->emitUnaryCallInst(I,CS,ir::OP_LOG); break;
--          case Intrinsic::exp2: this->emitUnaryCallInst(I,CS,ir::OP_EXP); break;
-+          case Intrinsic::sqrt: this->emitUnaryCallInst(I,ir::OP_SQR); break;
-+          case Intrinsic::ceil: this->emitRoundingCallInst(I,ir::OP_RNDU); break;
-+          case Intrinsic::trunc: this->emitRoundingCallInst(I,ir::OP_RNDZ); break;
-+          case Intrinsic::rint: this->emitRoundingCallInst(I,ir::OP_RNDE); break;
-+          case Intrinsic::floor: this->emitRoundingCallInst(I,ir::OP_RNDD); break;
-+          case Intrinsic::sin: this->emitUnaryCallInst(I,ir::OP_SIN); break;
-+          case Intrinsic::cos: this->emitUnaryCallInst(I,ir::OP_COS); break;
-+          case Intrinsic::log2: this->emitUnaryCallInst(I,ir::OP_LOG); break;
-+          case Intrinsic::exp2: this->emitUnaryCallInst(I,ir::OP_EXP); break;
-           case Intrinsic::bswap:
--            this->emitUnaryCallInst(I,CS,ir::OP_BSWAP, getUnsignedType(ctx, I.getType())); break;
-+            this->emitUnaryCallInst(I,ir::OP_BSWAP, getUnsignedType(ctx, I.getType())); break;
-           case Intrinsic::pow:
-           {
-             const ir::Register src0 = this->getRegister(*AI); ++AI;
-@@ -4794,21 +4793,20 @@
-         }
-       } else {
-         // Get the name of the called function and handle it
--        Value *Callee = I.getCalledValue();
--        const std::string fnName = Callee->stripPointerCasts()->getName();
-+        Value *Callee = I.getCalledOperand();
-+        const std::string fnName = Callee->stripPointerCasts()->getName().str();
-         auto genIntrinsicID = intrinsicMap.find(fnName);
-
-         // Get the function arguments
--        CallSite CS(&I);
--        CallSite::arg_iterator AI = CS.arg_begin();
-+        User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--        CallSite::arg_iterator AE = CS.arg_end();
-+        User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-
-         switch (genIntrinsicID) {
--          case GEN_OCL_FBH: this->emitUnaryCallInst(I,CS,ir::OP_FBH, ir::TYPE_U32); break;
--          case GEN_OCL_FBL: this->emitUnaryCallInst(I,CS,ir::OP_FBL, ir::TYPE_U32); break;
--          case GEN_OCL_CBIT: this->emitUnaryCallInst(I,CS,ir::OP_CBIT, getUnsignedType(ctx, (*AI)->getType())); break;
-+          case GEN_OCL_FBH: this->emitUnaryCallInst(I,ir::OP_FBH, ir::TYPE_U32); break;
-+          case GEN_OCL_FBL: this->emitUnaryCallInst(I,ir::OP_FBL, ir::TYPE_U32); break;
-+          case GEN_OCL_CBIT: this->emitUnaryCallInst(I,ir::OP_CBIT, getUnsignedType(ctx, (*AI)->getType())); break;
-           case GEN_OCL_ABS:
-           {
-             const ir::Register src = this->getRegister(*AI);
-@@ -4915,8 +4913,8 @@
-             ctx.REGION(dst, src, x.getIntegerValue());
-             break;
-           }
--          case GEN_OCL_RSQ: this->emitUnaryCallInst(I,CS,ir::OP_RSQ); break;
--          case GEN_OCL_RCP: this->emitUnaryCallInst(I,CS,ir::OP_RCP); break;
-+          case GEN_OCL_RSQ: this->emitUnaryCallInst(I,ir::OP_RSQ); break;
-+          case GEN_OCL_RCP: this->emitUnaryCallInst(I,ir::OP_RCP); break;
-           case GEN_OCL_FORCE_SIMD8: ctx.setSimdWidth(8); break;
-           case GEN_OCL_FORCE_SIMD16: ctx.setSimdWidth(16); break;
-           case GEN_OCL_LBARRIER: ctx.SYNC(ir::syncLocalBarrier); break;
-@@ -4947,31 +4945,31 @@
-             break;
-           }
-           case GEN_OCL_ATOMIC_ADD0:
--          case GEN_OCL_ATOMIC_ADD1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_ADD); break;
-+          case GEN_OCL_ATOMIC_ADD1: this->emitAtomicInst(I,ir::ATOMIC_OP_ADD); break;
-           case GEN_OCL_ATOMIC_SUB0:
--          case GEN_OCL_ATOMIC_SUB1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_SUB); break;
-+          case GEN_OCL_ATOMIC_SUB1: this->emitAtomicInst(I,ir::ATOMIC_OP_SUB); break;
-           case GEN_OCL_ATOMIC_AND0:
--          case GEN_OCL_ATOMIC_AND1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_AND); break;
-+          case GEN_OCL_ATOMIC_AND1: this->emitAtomicInst(I,ir::ATOMIC_OP_AND); break;
-           case GEN_OCL_ATOMIC_OR0:
--          case GEN_OCL_ATOMIC_OR1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_OR); break;
-+          case GEN_OCL_ATOMIC_OR1: this->emitAtomicInst(I,ir::ATOMIC_OP_OR); break;
-           case GEN_OCL_ATOMIC_XOR0:
--          case GEN_OCL_ATOMIC_XOR1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_XOR); break;
-+          case GEN_OCL_ATOMIC_XOR1: this->emitAtomicInst(I,ir::ATOMIC_OP_XOR); break;
-           case GEN_OCL_ATOMIC_XCHG0:
--          case GEN_OCL_ATOMIC_XCHG1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_XCHG); break;
-+          case GEN_OCL_ATOMIC_XCHG1: this->emitAtomicInst(I,ir::ATOMIC_OP_XCHG); break;
-           case GEN_OCL_ATOMIC_INC0:
--          case GEN_OCL_ATOMIC_INC1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_INC); break;
-+          case GEN_OCL_ATOMIC_INC1: this->emitAtomicInst(I,ir::ATOMIC_OP_INC); break;
-           case GEN_OCL_ATOMIC_DEC0:
--          case GEN_OCL_ATOMIC_DEC1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_DEC); break;
-+          case GEN_OCL_ATOMIC_DEC1: this->emitAtomicInst(I,ir::ATOMIC_OP_DEC); break;
-           case GEN_OCL_ATOMIC_UMIN0:
--          case GEN_OCL_ATOMIC_UMIN1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_UMIN); break;
-+          case GEN_OCL_ATOMIC_UMIN1: this->emitAtomicInst(I,ir::ATOMIC_OP_UMIN); break;
-           case GEN_OCL_ATOMIC_UMAX0:
--          case GEN_OCL_ATOMIC_UMAX1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_UMAX); break;
-+          case GEN_OCL_ATOMIC_UMAX1: this->emitAtomicInst(I,ir::ATOMIC_OP_UMAX); break;
-           case GEN_OCL_ATOMIC_IMIN0:
--          case GEN_OCL_ATOMIC_IMIN1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_IMIN); break;
-+          case GEN_OCL_ATOMIC_IMIN1: this->emitAtomicInst(I,ir::ATOMIC_OP_IMIN); break;
-           case GEN_OCL_ATOMIC_IMAX0:
--          case GEN_OCL_ATOMIC_IMAX1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_IMAX); break;
-+          case GEN_OCL_ATOMIC_IMAX1: this->emitAtomicInst(I,ir::ATOMIC_OP_IMAX); break;
-           case GEN_OCL_ATOMIC_CMPXCHG0:
--          case GEN_OCL_ATOMIC_CMPXCHG1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_CMPXCHG); break;
-+          case GEN_OCL_ATOMIC_CMPXCHG1: this->emitAtomicInst(I,ir::ATOMIC_OP_CMPXCHG); break;
-           case GEN_OCL_GET_IMAGE_WIDTH:
-           case GEN_OCL_GET_IMAGE_HEIGHT:
-           case GEN_OCL_GET_IMAGE_DEPTH:
-@@ -5429,48 +5427,48 @@
-             ctx.WAIT();
-             break;
-           }
--          case GEN_OCL_WORK_GROUP_ALL: this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_ALL); break;
--          case GEN_OCL_WORK_GROUP_ANY: this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_ANY); break;
-+          case GEN_OCL_WORK_GROUP_ALL: this->emitWorkGroupInst(I, ir::WORKGROUP_OP_ALL); break;
-+          case GEN_OCL_WORK_GROUP_ANY: this->emitWorkGroupInst(I, ir::WORKGROUP_OP_ANY); break;
-           case GEN_OCL_WORK_GROUP_BROADCAST:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_BROADCAST); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_BROADCAST); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_ADD); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_MAX); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_MIN); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-           case GEN_OCL_SUB_GROUP_BROADCAST:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_BROADCAST); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_BROADCAST); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_ADD); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_MAX); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_MIN); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-           case GEN_OCL_LRP:
-           {
-             const ir::Register dst  = this->getRegister(&I);
-@@ -5484,69 +5482,69 @@
-             break;
-           }
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, false, 1); break;
-+            this->emitBlockReadWriteMemInst(I, false, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, false, 2); break;
-+            this->emitBlockReadWriteMemInst(I, false, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, false, 4); break;
-+            this->emitBlockReadWriteMemInst(I, false, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, false, 8); break;
-+            this->emitBlockReadWriteMemInst(I, false, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, true, 1); break;
-+            this->emitBlockReadWriteMemInst(I, true, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, true, 2); break;
-+            this->emitBlockReadWriteMemInst(I, true, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, true, 4); break;
-+            this->emitBlockReadWriteMemInst(I, true, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, true, 8); break;
-+            this->emitBlockReadWriteMemInst(I, true, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, false, 1); break;
-+            this->emitBlockReadWriteImageInst(I, false, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, false, 2); break;
-+            this->emitBlockReadWriteImageInst(I, false, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, false, 4); break;
-+            this->emitBlockReadWriteImageInst(I, false, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, false, 8); break;
-+            this->emitBlockReadWriteImageInst(I, false, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, true, 1); break;
-+            this->emitBlockReadWriteImageInst(I, true, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, true, 2); break;
-+            this->emitBlockReadWriteImageInst(I, true, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, true, 4); break;
-+            this->emitBlockReadWriteImageInst(I, true, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, true, 8); break;
-+            this->emitBlockReadWriteImageInst(I, true, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, false, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, false, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, false, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, false, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, true, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, true, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, true, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, true, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, false, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, false, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, false, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, false, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, true, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, true, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, true, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, true, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 8, ir::TYPE_U16); break;
-           case GEN_OCL_GET_PIPE:
-           case GEN_OCL_MAKE_RID:
-           case GEN_OCL_GET_RID:
---- a/backend/src/llvm/llvm_includes.hpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_includes.hpp	2020-11-09 19:00:09.955926795 +0100
-@@ -103,7 +103,6 @@
-
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
- #include "llvm/IR/Mangler.h"
--#include "llvm/IR/CallSite.h"
- #include "llvm/IR/CFG.h"
- #include "llvm/IR/InstVisitor.h"
- #include "llvm/IR/IRPrintingPasses.h"
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-11-09 19:10:37.141852308 +0100
-@@ -160,7 +160,7 @@
-     Value *vecPtr = Builder.CreateBitCast(ld->getPointerOperand(),
-                                         PointerType::get(vecTy, addrSpace));
-     LoadInst *vecValue = Builder.CreateLoad(vecPtr);
--    vecValue->setAlignment(align);
-+    vecValue->setAlignment(align.valueOrOne());
-
-     for (unsigned i = 0; i < size; ++i) {
-       Value *S = Builder.CreateExtractElement(vecValue, Builder.getInt32(i));
-@@ -251,7 +251,7 @@
-       return;
-     Value *newPtr = Builder.CreateBitCast(stPointer, PointerType::get(vecTy, addrSpace));
-     StoreInst *newST = Builder.CreateStore(parent, newPtr);
--    newST->setAlignment(align);
-+    newST->setAlignment(align.valueOrOne());
-   }
-
-   // Find the safe iterator we can point to. If reorder happens, we need to
---- a/backend/src/llvm/llvm_passes.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_passes.cpp	2020-11-09 18:48:55.997006837 +0100
-@@ -95,7 +95,7 @@
-   {
-     switch (Ty->getTypeID()) {
-       case Type::VoidTyID: NOT_SUPPORTED;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         const VectorType* VecTy = cast<VectorType>(Ty);
-         uint32_t elemNum = VecTy->getNumElements();
-@@ -138,7 +138,7 @@
-       case Type::HalfTyID:    return 16;
-       case Type::FloatTyID:   return 32;
-       case Type::DoubleTyID:  return 64;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         const VectorType* VecTy = cast<VectorType>(Ty);
-         uint32_t numElem = VecTy->getNumElements();
-@@ -184,10 +184,12 @@
-     Type *elementType = NULL;
-     if (PointerType* ptrType = dyn_cast<PointerType>(eltTy))
-       elementType = ptrType->getElementType();
--    else if(SequentialType * seqType = dyn_cast<SequentialType>(eltTy))
--      elementType = seqType->getElementType();
--    else if(CompositeType * compTy= dyn_cast<CompositeType>(eltTy))
--      elementType = compTy->getTypeAtIndex(index);
-+    else if (ArrayType * arrType = dyn_cast<ArrayType>(eltTy))
-+      elementType = arrType->getElementType();
-+    else if(VectorType * vecType = dyn_cast<VectorType>(eltTy))
-+      elementType = vecType->getElementType();
-+    else if(StructType * structType = dyn_cast<StructType>(eltTy))
-+      elementType = structType->getTypeAtIndex(index);
-     GBE_ASSERT(elementType);
-     return elementType;
-   }
---- a/backend/src/llvm/llvm_printf_parser.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_printf_parser.cpp	2020-11-09 18:57:52.618943105 +0100
-@@ -323,8 +323,7 @@
-
-   bool PrintfParser::parseOnePrintfInstruction(CallInst * call)
-   {
--    CallSite CS(call);
--    CallSite::arg_iterator CI_FMT = CS.arg_begin();
-+    User::op_iterator CI_FMT = call->arg_begin();
-     int param_num = 0;
-
-     llvm::Constant* arg0 = dyn_cast<llvm::ConstantExpr>(*CI_FMT);
-@@ -341,7 +340,7 @@
-       return false;
-     }
-
--    std::string fmt = fmt_arg->getAsCString();
-+    std::string fmt = fmt_arg->getAsCString().str();
-     if (fmt.size() == 0)
-       return false;
-
-@@ -437,8 +436,8 @@
-         if ( callFunc->getIntrinsicID() != 0)
-           continue;
-
--        Value *Callee = call->getCalledValue();
--        const std::string fnName = Callee->getName();
-+        Value *Callee = call->getCalledOperand();
-+        const std::string fnName = Callee->getName().str();
-
-         if (fnName != "__gen_ocl_printf_stub" && fnName != "__gen_ocl_puts_stub")
-           continue;
-@@ -582,7 +581,7 @@
-             if (!fmt_arg || !fmt_arg->isCString()) {
-               return false;
-             }
--            slot.state.str = fmt_arg->getAsCString();
-+            slot.state.str = fmt_arg->getAsCString().str();
-             return true;
-           }
-           case PRINTF_CONVERSION_P: {
-@@ -595,10 +594,10 @@
-
-         break;
-
--      case Type::VectorTyID: {
--        Type* vect_type = arg->getType();
--        Type* elt_type = vect_type->getVectorElementType();
--        int vec_num = vect_type->getVectorNumElements();
-+      case Type::FixedVectorTyID: {
-+        VectorType* vect_type = dyn_cast<VectorType>(arg->getType());
-+        Type* elt_type = vect_type->getElementType();
-+        int vec_num = vect_type->getNumElements();
-         bool sign = false;
-
-         if (vec_num != slot.state.vector_n) {
---- a/backend/src/llvm/llvm_profiling.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_profiling.cpp	2020-11-09 18:59:50.120929150 +0100
-@@ -35,7 +35,6 @@
- #include "llvm/IR/IRBuilder.h"
-
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
--#include "llvm/IR/CallSite.h"
- #include "llvm/IR/CFG.h"
- #else
- #include "llvm/Support/CallSite.h"
---- a/backend/src/llvm/llvm_sampler_fix.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp	2020-11-09 17:01:09.407774832 +0100
-@@ -45,8 +45,8 @@
-     bool visitCallInst(CallInst *I) {
-       if(!I)
-         return false;
--      Value *Callee = I->getCalledValue();
--      const std::string fnName = Callee->getName();
-+      Value *Callee = I->getCalledOperand();
-+      const std::string fnName = Callee->getName().str();
-       bool changed = false;
-       Type *boolTy = IntegerType::get(I->getContext(), 1);
-       Type *i32Ty = IntegerType::get(I->getContext(), 32);
-@@ -59,7 +59,7 @@
-         Value *needFixVal;
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-         CallInst *init = dyn_cast<CallInst>(I->getOperand(0));
--        if (init && init->getCalledValue()->getName().compare("__translate_sampler_initializer"))
-+        if (init && init->getCalledOperand()->getName().compare("__translate_sampler_initializer"))
-         {
-           const ConstantInt *ci = dyn_cast<ConstantInt>(init->getOperand(0));
-           uint32_t samplerInt = ci->getZExtValue();
-@@ -113,7 +113,7 @@
-         Value *needFixVal;
-  #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-         CallInst *init = dyn_cast<CallInst>(I->getOperand(0));
--        if (init && init->getCalledValue()->getName().compare("__translate_sampler_initializer"))
-+        if (init && init->getCalledOperand()->getName().compare("__translate_sampler_initializer"))
-         {
-           const ConstantInt *ci = dyn_cast<ConstantInt>(init->getOperand(0));
-           uint32_t samplerInt = ci->getZExtValue();
---- a/backend/src/llvm/llvm_scalarize.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_scalarize.cpp	2020-11-09 18:51:16.888990104 +0100
-@@ -178,7 +178,7 @@
-       if(!type)
-         return type;
-       switch(type->getTypeID()) {
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       case Type::ArrayTyID:
-         return GetBasicType(type->getContainedType(0));
-       default:
-@@ -188,7 +188,7 @@
-     }
-
-     int GetComponentCount(const Type* type)  {
--      if (type && type->getTypeID() == Type::VectorTyID)
-+      if (type && type->getTypeID() == Type::FixedVectorTyID)
-         return llvm::dyn_cast<VectorType>(type)->getNumElements();
-       else
-         return 1;
-@@ -652,13 +652,12 @@
-           break;
-         }
-       } else {
--        Value *Callee = call->getCalledValue();
--        const std::string fnName = Callee->getName();
-+        Value *Callee = call->getCalledOperand();
-+        const std::string fnName = Callee->getName().str();
-         auto genIntrinsicID = intrinsicMap.find(fnName);
-
-         // Get the function arguments
--        CallSite CS(call);
--        CallSite::arg_iterator CI = CS.arg_begin() + 1;
-+        User::op_iterator CI = call->arg_begin() + 1;
-
-         switch (genIntrinsicID) {
-           case GEN_OCL_NOT_FOUND:
-@@ -729,7 +728,7 @@
-             extractFromVector(call);
-             break;
-           case GEN_OCL_PRINTF:
--            for (; CI != CS.arg_end(); ++CI)
-+            for (; CI != call->arg_end(); ++CI)
-               if ((*CI)->getType()->isVectorTy())
-                 *CI = InsertToVector(call, *CI);
-             break;
diff --git a/srcpkgs/beignet/patches/llvm12.patch b/srcpkgs/beignet/patches/llvm12.patch
deleted file mode 100644
index 6f8ab005c148..000000000000
--- a/srcpkgs/beignet/patches/llvm12.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-diff --git backend/src/llvm/ExpandLargeIntegers.cpp backend/src/llvm/ExpandLargeIntegers.cpp
-index 8515dc13..27080380 100644
---- a/backend/src/llvm/ExpandLargeIntegers.cpp
-+++ b/backend/src/llvm/ExpandLargeIntegers.cpp
-@@ -328,7 +328,7 @@ static Value *buildVectorOrScalar(ConversionState &State, IRBuilder<> &IRB, Smal
-     // splited, that's why these temporary values should be erased.
-     bool KeepInsert = isLegalBitSize(ElemTy->getPrimitiveSizeInBits() * ElemNo);
-     for (unsigned i = 0; i < ElemNo; ++i) {
--      Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo));
-+      Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo, false));
-       Value *idx = ConstantInt::get(IntTy, i);
-       vec = IRB.CreateInsertElement(tmp, Elements[i], idx);
-       if (!KeepInsert && !isa<Constant>(vec)) {
-@@ -373,7 +373,7 @@ static void unifyElementType(IRBuilder<> &IRB, SmallVector<Value *, 16> &Src, Sm
-       assert((Size % MinWidth) == 0);
- 
-       if (Size > MinWidth) {
--        VectorType *VecTy = VectorType::get(ElemTy, Size/MinWidth);
-+        VectorType *VecTy = VectorType::get(ElemTy, Size/MinWidth, false);
-         Value *Casted = IRB.CreateBitCast(Src[i], VecTy);
-         for (unsigned j = 0; j < Size/MinWidth; j++)
-           Dst.push_back(IRB.CreateExtractElement(Casted, ConstantInt::get(IntTy, j)));
-@@ -462,7 +462,7 @@ static void convertInstruction(Instruction *Inst, ConversionState &State,
-       unsigned ElemNo = Unified.size();
-       Type *ElemTy = Unified[0]->getType();
-       for (unsigned i = 0; i < ElemNo; ++i) {
--        Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo));
-+        Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo, false));
-         Value *idx = ConstantInt::get(IntTy, i);
-         vec = IRB.CreateInsertElement(tmp, Unified[i], idx);
-       }
-diff --git backend/src/llvm/llvm_gen_backend.cpp backend/src/llvm/llvm_gen_backend.cpp
-index c93d89cc..64d5b0e5 100644
---- a/backend/src/llvm/llvm_gen_backend.cpp
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -304,7 +304,7 @@ namespace gbe
-       TYPESIZEVEC(long,8)
-       TYPESIZEVEC(unsigned long,8)
-       else{
--        StructType *StrTy = M->getTypeByName("struct."+name);
-+        StructType *StrTy = StructType::getTypeByName(M->getContext(), "struct."+name);
-         if(StrTy)
-           return getTypeByteSize(unit,StrTy);
-       }
-diff --git backend/src/llvm/llvm_loadstore_optimization.cpp backend/src/llvm/llvm_loadstore_optimization.cpp
-index 5aa38bef..6b5c1bad 100644
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
-@@ -152,7 +152,7 @@ namespace gbe {
-     unsigned addrSpace = ld->getPointerAddressSpace();
-     // insert before first load
-     Builder.SetInsertPoint(ld);
--    VectorType *vecTy = VectorType::get(ld->getType(), size);
-+    VectorType *vecTy = VectorType::get(ld->getType(), size, false);
-     Value *vecPtr = Builder.CreateBitCast(ld->getPointerOperand(),
-                                         PointerType::get(vecTy, addrSpace));
-     LoadInst *vecValue = Builder.CreateLoad(vecPtr);
-@@ -236,7 +236,7 @@ namespace gbe {
-     Builder.SetInsertPoint(merged[size-1]);
- 
-     Type *dataTy = st->getValueOperand()->getType();
--    VectorType *vecTy = VectorType::get(dataTy, size);
-+    VectorType *vecTy = VectorType::get(dataTy, size, false);
-     Value * parent = UndefValue::get(vecTy);
-     for(unsigned i = 0; i < size; i++) {
-       parent = Builder.CreateInsertElement(parent, values[i], ConstantInt::get(IntegerType::get(st->getContext(), 32), i));
-diff --git backend/src/llvm/llvm_printf_parser.cpp backend/src/llvm/llvm_printf_parser.cpp
-index 6bb7c52a..af459cd2 100644
---- a/backend/src/llvm/llvm_printf_parser.cpp
-+++ b/backend/src/llvm/llvm_printf_parser.cpp
-@@ -630,7 +630,7 @@ error:
-             if (elt_type != elt_dst_type) {
-               Value *II = NULL;
-               for (int i = 0; i < vec_num; i++) {
--                Value *vec = II ? II : UndefValue::get(VectorType::get(elt_dst_type, vec_num));
-+                Value *vec = II ? II : UndefValue::get(VectorType::get(elt_dst_type, vec_num, false));
-                 Value *cv = ConstantInt::get(Type::getInt32Ty(elt_type->getContext()), i);
-                 Value *org = builder->CreateExtractElement(arg, cv);
-                 Value *cvt = builder->CreateIntCast(org, elt_dst_type, sign);
-@@ -658,7 +658,7 @@ error:
-             if (elt_type->getTypeID() != Type::FloatTyID) {
-               Value *II = NULL;
-               for (int i = 0; i < vec_num; i++) {
--                Value *vec = II ? II : UndefValue::get(VectorType::get(Type::getFloatTy(elt_type->getContext()), vec_num));
-+                Value *vec = II ? II : UndefValue::get(VectorType::get(Type::getFloatTy(elt_type->getContext()), vec_num, false));
-                 Value *cv = ConstantInt::get(Type::getInt32Ty(elt_type->getContext()), i);
-                 Value *org = builder->CreateExtractElement(arg, cv);
-                 Value* cvt  = builder->CreateFPCast(org, Type::getFloatTy(module->getContext()));
-diff --git backend/src/llvm/llvm_to_gen.cpp backend/src/llvm/llvm_to_gen.cpp
-index 7f7deffe..9e8ccc67 100644
---- a/backend/src/llvm/llvm_to_gen.cpp
-+++ b/backend/src/llvm/llvm_to_gen.cpp
-@@ -358,7 +358,7 @@ namespace gbe
-     passes.add(createScalarReplAggregatesPass(64, true, -1, -1, 64));
- #endif
-     passes.add(createLoadStoreOptimizationPass());
--    passes.add(createConstantPropagationPass());
-+    //passes.add(createConstantPropagationPass());
-     passes.add(createPromoteMemoryToRegisterPass());
-     if(optLevel > 0)
-       passes.add(createGVNPass());                 // Remove redundancies
-@@ -367,11 +367,11 @@ namespace gbe
-     passes.add(createScalarizePass());             // Expand all vector ops
-     passes.add(createExpandLargeIntegersPass());   // legalize large integer operation
-     passes.add(createInstructionCombiningPass());  // legalize will generate some silly instructions
--    passes.add(createConstantPropagationPass());   // propagate constant after scalarize/legalize
-+    //passes.add(createConstantPropagationPass());   // propagate constant after scalarize/legalize
-     passes.add(createExpandConstantExprPass());    // constant prop may generate ConstantExpr
-     passes.add(createPromoteIntegersPass());       // align integer size to power of two
-     passes.add(createRemoveGEPPass(unit));         // Constant prop may generate gep
--    passes.add(createDeadInstEliminationPass());   // Remove simplified instructions
-+    //passes.add(createDeadInstEliminationPass());   // Remove simplified instructions
-     passes.add(createCFGSimplificationPass());     // Merge & remove BBs
-     passes.add(createLowerSwitchPass());           // simplify cfg will generate switch-case instruction
-     if (profiling) {
diff --git a/srcpkgs/beignet/patches/musl.patch b/srcpkgs/beignet/patches/musl.patch
deleted file mode 100644
index cefafbb65588..000000000000
--- a/srcpkgs/beignet/patches/musl.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/backend/src/backend/gen/gen_mesa_disasm.c
-+++ b/backend/src/backend/gen/gen_mesa_disasm.c
-@@ -1137,7 +1137,7 @@ static uint32_t __conv_half_to_float(uint16_t h)
-       // Adjust mantissa so it's normalized (and keep
-       // track of exponent adjustment)
-       int e = -1;
--      uint m = i.mantissa;
-+      unsigned int m = i.mantissa;
-       do {
-         e++;
-         m <<= 1;
diff --git a/srcpkgs/beignet/template b/srcpkgs/beignet/template
deleted file mode 100644
index dce6bbb7ae24..000000000000
--- a/srcpkgs/beignet/template
+++ /dev/null
@@ -1,22 +0,0 @@
-# Template file for 'beignet'
-pkgname=beignet
-version=1.3.2
-revision=10
-archs="i686* x86_64*"
-wrksrc="Beignet-${version}-Source"
-build_style=cmake
-hostmakedepends="clang llvm pkg-config"
-makedepends="MesaLib-devel libedit-devel libffi-devel ocl-icd-devel zlib-devel
- libXfixes-devel"
-depends="ocl-icd"
-short_desc="Beignet GPGPU System for Intel GPUs"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://www.freedesktop.org/wiki/Software/Beignet/"
-distfiles="https://01.org/sites/default/files/${pkgname}-${version}-source.tar.gz"
-checksum=c555edba149de23243965a703f39f79fa06f15bcff5a3762b5544b0925010b43
-
-post_install() {
-	# remove CL headers, we do use opencl-headers instead.
-	rm -r ${DESTDIR}/usr/include
-}
diff --git a/srcpkgs/beignet/update b/srcpkgs/beignet/update
deleted file mode 100644
index ca41e0afe60c..000000000000
--- a/srcpkgs/beignet/update
+++ /dev/null
@@ -1 +0,0 @@
-site="https://01.org/beignet/downloads"
diff --git a/srcpkgs/removed-packages/template b/srcpkgs/removed-packages/template
index 0923c53cfc05..d59bd20f820c 100644
--- a/srcpkgs/removed-packages/template
+++ b/srcpkgs/removed-packages/template
@@ -1,7 +1,7 @@
 # Template file for 'removed-packages'
 pkgname=removed-packages
 version=0.1
-revision=69
+revision=70
 build_style=meta
 short_desc="Uninstalls packages removed from repository"
 maintainer="Piotr Wójcik <chocimier@tlen.pl>"
@@ -25,6 +25,7 @@ replaces="
  atom<=1.44.0_1
  avogadro-devel<=1.2.0_8
  avogadro<=1.2.0_8
+ beignet<=1.3.2_10
  bokken<=1.8_3
  bomi<=0.9.11_17
  burp-client<=1.4.40_13

From f803675cbf7191cbe143cfe8dcae9884f5680057 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 21/29] ldc: rebuild for llvm14

---
 srcpkgs/ldc/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/ldc/template b/srcpkgs/ldc/template
index a27280dde3b8..e21bc6555e38 100644
--- a/srcpkgs/ldc/template
+++ b/srcpkgs/ldc/template
@@ -1,7 +1,7 @@
 # Template file for 'ldc'
 pkgname=ldc
 version=1.28.0
-revision=1
+revision=2
 wrksrc="ldc-${version}-src"
 build_style=cmake
 configure_args="

From d6d90e041621c6d53af6f966778d2a972fab1a5b Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 22:31:25 +0200
Subject: [PATCH 22/29] ldc: update to 1.29.0.

---
 srcpkgs/ldc/template | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/srcpkgs/ldc/template b/srcpkgs/ldc/template
index e21bc6555e38..1d72a8805eb6 100644
--- a/srcpkgs/ldc/template
+++ b/srcpkgs/ldc/template
@@ -1,7 +1,7 @@
 # Template file for 'ldc'
 pkgname=ldc
-version=1.28.0
-revision=2
+version=1.29.0
+revision=1
 wrksrc="ldc-${version}-src"
 build_style=cmake
 configure_args="
@@ -11,7 +11,7 @@ configure_args="
  -DBASH_COMPLETION_COMPLETIONSDIR=/usr/share/bash-completion
  -DC_SYSTEM_LIBS='unwind;m;pthread;rt;dl'"
 conf_files="/etc/ldc2.conf"
-hostmakedepends="dmd llvm12 perl pkg-config"
+hostmakedepends="dmd llvm14 perl pkg-config"
 makedepends="libcurl-devel libffi-devel ncurses-devel zlib-devel
  llvm-libunwind-devel"
 depends="ldc-runtime llvm-libunwind-devel"
@@ -22,7 +22,7 @@ license="BSD-3-Clause, BSL-1.0"
 homepage="https://wiki.dlang.org/LDC"
 changelog="https://raw.githubusercontent.com/ldc-developers/ldc/master/CHANGELOG.md"
 distfiles="https://github.com/ldc-developers/ldc/releases/download/v${version}/ldc-${version}-src.tar.gz"
-checksum=17fee8bb535bcb8cda0a45947526555c46c045f302a7349cc8711b254e54cf09
+checksum=d0c066eb965467625d9c5e75c00c583451b9ffa363601f9e37275ca8a8aea140
 nopie=yes
 nocross="dmd compilation fails on cross"
 # tests timeout on musl; also require unpackaged python3-lit

From 271a357a30a1b8d3a11a193c905b34c312fb04cc Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 23/29] include-what-you-use: update to 0.18.

---
 srcpkgs/include-what-you-use/template | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/include-what-you-use/template b/srcpkgs/include-what-you-use/template
index b13bb7ee56af..297669f60459 100644
--- a/srcpkgs/include-what-you-use/template
+++ b/srcpkgs/include-what-you-use/template
@@ -1,6 +1,6 @@
 # Template file for 'include-what-you-use'
 pkgname=include-what-you-use
-version=0.16
+version=0.18
 revision=1
 wrksrc="${pkgname}"
 build_style=cmake
@@ -12,7 +12,7 @@ maintainer="Leah Neukirchen <leah@vuxu.org>"
 license="NCSA"
 homepage="https://include-what-you-use.org/"
 distfiles="https://include-what-you-use.org/downloads/${pkgname}-${version}.src.tar.gz"
-checksum=8d6fc9b255343bc1e5ec459e39512df1d51c60e03562985e0076036119ff5a1c
+checksum=9102fc8419294757df86a89ce6ec305f8d90a818d1f2598a139d15eb1894b8f3
 python_version=3
 
 post_install() {

From f1c24dd94f207c12f770893b9d8af7dde24af732 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:18:24 +0200
Subject: [PATCH 24/29] SPIRV-LLVM-Translator: update to 14.0.0.

---
 common/shlibs                          |  1 +
 srcpkgs/SPIRV-LLVM-Translator/template | 11 ++++++-----
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/common/shlibs b/common/shlibs
index 4b37a9f7cb44..64eadd03cfcb 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -984,6 +984,7 @@ libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
 libLLVM-14.so libllvm14-14.0.3_1
+libLLVMSPIRVLib.so.14 SPIRV-LLVM-Translator-14.0.0_1
 libisofs.so.6 libisofs-0.6.24_1
 libmpack.so.0 libmpack-1.0.5_1
 libGeoIP.so.1 libgeoip-1.4.8_1
diff --git a/srcpkgs/SPIRV-LLVM-Translator/template b/srcpkgs/SPIRV-LLVM-Translator/template
index 2504cabed367..2277d062d992 100644
--- a/srcpkgs/SPIRV-LLVM-Translator/template
+++ b/srcpkgs/SPIRV-LLVM-Translator/template
@@ -1,19 +1,20 @@
 # Template file for 'SPIRV-LLVM-Translator'
 pkgname=SPIRV-LLVM-Translator
-version=12.0.0
+version=14.0.0
 revision=1
 build_style=cmake
 make_build_args="llvm-spirv"
-configure_args="-Wno-dev -DLLVM_LINK_LLVM_DYLIB=ON -DCMAKE_SKIP_RPATH=ON
- -DLLVM_SPIRV_INCLUDE_TESTS=OFF -DBUILD_SHARED_LIBS=ON"
+configure_args="-DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release
+ -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_SKIP_RPATH=ON -DLLVM_INCLUDE_TESTS=OFF
+ -DLLVM_LINK_LLVM_DYLIB=ON -DLLVM_EXTERNAL_LIT=/usr/bin/lit -Wno-dev -DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=/usr/include/spirv/ "
 hostmakedepends="clang clang-tools-extra llvm"
-makedepends="llvm"
+makedepends="llvm SPIRV-Headers"
 short_desc="API and commands for processing SPIR-V modules"
 maintainer="Orphaned <orphan@voidlinux.org>"
 license="NCSA"
 homepage="https://github.com/KhronosGroup/SPIRV-LLVM-Translator"
 distfiles="https://github.com/KhronosGroup/${pkgname}/archive/refs/tags/v${version}.tar.gz"
-checksum=6e4fad04203f25fcde4c308c53e9f59bd05a390978992db3212d4b63aff62108
+checksum=1afc52bb4e39aeb9b5b69324a201c81bd986364f347b559995eff6fd6f013318
 make_check=no
 
 post_install() {

From 6a053f07748f1fba3eb2925817aff073a3179e8e Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:17:29 +0200
Subject: [PATCH 25/29] SPIRV-Headers: update to 1.3.211.0.

---
 srcpkgs/SPIRV-Headers/template | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/SPIRV-Headers/template b/srcpkgs/SPIRV-Headers/template
index 5dcf457c04c7..ce8288174e48 100644
--- a/srcpkgs/SPIRV-Headers/template
+++ b/srcpkgs/SPIRV-Headers/template
@@ -1,11 +1,13 @@
 # Template file for 'SPIRV-Headers'
 pkgname=SPIRV-Headers
-version=1.5.4.raytracing.fixed
+version=1.3.211.0
 revision=1
+reverts="1.5.4.raytracing.fixed"
+wrksrc=${pkgname}-sdk-${version}
 build_style=cmake
 short_desc="Machine-readable files for the SPIR-V Registry"
 maintainer="Orphaned <orphan@voidlinux.org>"
 license="GPL-3.0-or-later"
 homepage="https://github.com/KhronosGroup/SPIRV-Headers"
-distfiles="https://github.com/KhronosGroup/SPIRV-Headers/archive/${version}.tar.gz"
-checksum=df2ad2520be4d95a479fa248921065885bbf435a658349a7fc164ad7b26b68c6
+distfiles="https://github.com/KhronosGroup/SPIRV-Headers/archive/sdk-${version}.tar.gz"
+checksum=30a78e61bd812c75e09fdc7a319af206b1044536326bc3e85fea818376a12568

From 509f026144830f12e8f95487a992ed8cddb20066 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:35:43 +0200
Subject: [PATCH 26/29] ispc: update to 1.17.0.

---
 .../ispc/patches/cmake-build-type-none.patch  |   18 -
 srcpkgs/ispc/patches/llvm12-001.patch         |   57 -
 srcpkgs/ispc/patches/llvm12-002.patch         |  923 --------
 srcpkgs/ispc/patches/llvm12-003.patch         | 1504 ------------
 srcpkgs/ispc/patches/llvm12-004.patch         |   34 -
 srcpkgs/ispc/patches/llvm12-005.patch         |  372 ---
 srcpkgs/ispc/patches/llvm12-006.patch         |  126 -
 srcpkgs/ispc/patches/llvm12-007.patch         |  160 --
 srcpkgs/ispc/patches/llvm12-008.patch         |  149 --
 srcpkgs/ispc/patches/llvm12-009.patch         | 2109 -----------------
 srcpkgs/ispc/template                         |    6 +-
 11 files changed, 3 insertions(+), 5455 deletions(-)
 delete mode 100644 srcpkgs/ispc/patches/cmake-build-type-none.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-001.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-002.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-003.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-004.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-005.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-006.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-007.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-008.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-009.patch

diff --git a/srcpkgs/ispc/patches/cmake-build-type-none.patch b/srcpkgs/ispc/patches/cmake-build-type-none.patch
deleted file mode 100644
index 411e353c7314..000000000000
--- a/srcpkgs/ispc/patches/cmake-build-type-none.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Index: ispc-1.15.0/CMakeLists.txt
-===================================================================
---- ispc-1.15.0.orig/CMakeLists.txt
-+++ ispc-1.15.0/CMakeLists.txt
-@@ -157,13 +157,6 @@ set(OUTPUT_RELEASE Release/bin)
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin )
- 
- if(CMAKE_BUILD_TYPE)
--    # Validate build type
--    set(CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo")
--
--    string(FIND "${CONFIGURATION_TYPES}" "${CMAKE_BUILD_TYPE}" MATCHED_CONFIG)
--    if (${MATCHED_CONFIG} EQUAL -1)
--         message(FATAL_ERROR "CMAKE_BUILD_TYPE (${CMAKE_BUILD_TYPE}) allows only the following values: ${CONFIGURATION_TYPES}")
--    endif()
- else(NOT CMAKE_BUILD_TYPE)
-     set(CMAKE_BUILD_TYPE "Release")
-     message(STATUS "Build type not specified: Use Release by default.")
diff --git a/srcpkgs/ispc/patches/llvm12-001.patch b/srcpkgs/ispc/patches/llvm12-001.patch
deleted file mode 100644
index 5f2d3f5a409e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-001.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 1c0f89dccb774f216c7f6e76a99ee907a1e641cb Mon Sep 17 00:00:00 2001
-From: Dmitry Babokin <dmitry.y.babokin@intel.com>
-Date: Tue, 22 Dec 2020 17:03:59 -0800
-Subject: [PATCH] Fix to work with LLVM trunk after llvm/llvm-project@41c3b2713
-
----
- src/ctx.cpp | 18 ++++++++++++------
- 1 file changed, 12 insertions(+), 6 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 6fbb8b9cf..977e9d222 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1473,11 +1473,15 @@ void FunctionEmitContext::AddDebugPos(llvm::Value *value, const SourcePos *pos,
-     llvm::Instruction *inst = llvm::dyn_cast<llvm::Instruction>(value);
-     if (inst != NULL && m->diBuilder) {
-         SourcePos p = pos ? *pos : currentPos;
--        if (p.first_line != 0)
-+        if (p.first_line != 0) {
-             // If first_line == 0, then we're in the middle of setting up
-             // the standard library or the like; don't add debug positions
-             // for those functions
--            inst->setDebugLoc(llvm::DebugLoc::get(p.first_line, p.first_column, scope ? scope : GetDIScope()));
-+            scope = scope ? scope : GetDIScope();
-+            llvm::DebugLoc diLoc =
-+                llvm::DILocation::get(scope->getContext(), p.first_line, p.first_column, scope, nullptr, false);
-+            inst->setDebugLoc(diLoc);
-+        }
-     }
- }
- 
-@@ -1518,9 +1522,10 @@ void FunctionEmitContext::EmitVariableDebugInfo(Symbol *sym) {
-     llvm::DILocalVariable *var = m->diBuilder->createAutoVariable(
-         scope, sym->name, sym->pos.GetDIFile(), sym->pos.first_line, diType, true /* preserve through opts */);
- 
-+    llvm::DebugLoc diLoc =
-+        llvm::DILocation::get(scope->getContext(), sym->pos.first_line, sym->pos.first_column, scope, nullptr, false);
-     llvm::Instruction *declareInst =
--        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(),
--                                    llvm::DebugLoc::get(sym->pos.first_line, sym->pos.first_column, scope), bblock);
-+        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(), diLoc, bblock);
-     AddDebugPos(declareInst, &sym->pos, scope);
- }
- 
-@@ -1535,9 +1540,10 @@ void FunctionEmitContext::EmitFunctionParameterDebugInfo(Symbol *sym, int argNum
-         m->diBuilder->createParameterVariable(scope, sym->name, argNum + 1, sym->pos.GetDIFile(), sym->pos.first_line,
-                                               diType, true /* preserve through opts */, flags);
- 
-+    llvm::DebugLoc diLoc =
-+        llvm::DILocation::get(scope->getContext(), sym->pos.first_line, sym->pos.first_column, scope, nullptr, false);
-     llvm::Instruction *declareInst =
--        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(),
--                                    llvm::DebugLoc::get(sym->pos.first_line, sym->pos.first_column, scope), bblock);
-+        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(), diLoc, bblock);
-     AddDebugPos(declareInst, &sym->pos, scope);
- }
- 
diff --git a/srcpkgs/ispc/patches/llvm12-002.patch b/srcpkgs/ispc/patches/llvm12-002.patch
deleted file mode 100644
index 0903f30da10d..000000000000
--- a/srcpkgs/ispc/patches/llvm12-002.patch
+++ /dev/null
@@ -1,923 +0,0 @@
-From 0597a79d084c014780136da906afe21d15e982cb Mon Sep 17 00:00:00 2001
-From: DeepakRajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Tue, 5 Jan 2021 13:53:30 -0800
-Subject: [PATCH] Remove LLVM 8.0 and LLVM 9.0. (#1966)
-
----
- .appveyor.yml                        |  3 --
- .travis.yml                          |  7 ---
- CMakeLists.txt                       | 12 ++----
- src/ast.cpp                          |  4 --
- src/ctx.cpp                          | 30 -------------
- src/gen/GlobalsLocalization.cpp      |  4 --
- src/ispc.cpp                         | 20 ---------
- src/ispc.h                           |  3 +-
- src/ispc_version.h                   |  4 +-
- src/main.cpp                         | 13 ------
- src/module.cpp                       | 27 ------------
- src/module.h                         |  2 -
- src/opt.cpp                          | 64 ++--------------------------
- src/type.cpp                         | 10 ++---
- tests/lit-tests/1771.ispc            |  1 -
- tests/lit-tests/1844.ispc            |  3 --
- tests/lit-tests/1926.ispc            |  2 -
- tests/lit-tests/cpus_x86.ispc        |  2 +
- tests/lit-tests/cpus_x86_llvm10.ispc | 11 -----
- tests/lit-tests/lit.cfg              |  5 ---
- 20 files changed, 14 insertions(+), 213 deletions(-)
- delete mode 100644 tests/lit-tests/cpus_x86_llvm10.ispc
-
-diff --git a/.appveyor.yml b/.appveyor.yml
-index 451a7b3e0..7945cca2a 100644
---- a/.appveyor.yml
-+++ b/.appveyor.yml
-@@ -41,8 +41,6 @@ environment:
-       LLVM_VERSION: latest
-     - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
-       LLVM_VERSION: 10.0
--    - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
--      LLVM_VERSION: 9.0
- 
- for:
- -
-@@ -62,7 +60,6 @@ for:
-         if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2019" ( (set generator="Visual Studio 16") & (set vsversion=2019))
-         set LLVM_TAR=llvm-11.0.0-win.vs2019-Release+Asserts-x86.arm.wasm.7z
-         if "%LLVM_VERSION%"=="10.0" (set LLVM_TAR=llvm-10.0.1-win.vs2019-Release+Asserts-x86.arm.wasm.zip)
--        if "%LLVM_VERSION%"=="9.0" (set LLVM_TAR=llvm-9.0.1-win.vs2017-Release+Asserts-x86.arm.wasm.zip)
-   install:
-     - ps: choco install --no-progress winflexbison3 wget 7zip
-     - cmd: |-
-diff --git a/.travis.yml b/.travis.yml
-index 2e96017a6..3a6b85264 100644
---- a/.travis.yml
-+++ b/.travis.yml
-@@ -108,13 +108,6 @@ jobs:
-         - LLVM_TAR=llvm-10.0.1-ubuntu16.04-Release+Asserts-x86.arm.wasm.tar.xz
-         - LLVM_REPO=https://github.com/dbabokin/llvm-project
-         - ISPC_HOME=$TRAVIS_BUILD_DIR
--    # LLVM 9.0 + Ubuntu 16.04: build, lit tests, examples (build + run), benchmarks (build + trial run)
--    - <<: *my_tag
--      env:
--        - LLVM_VERSION=9.0 OS=Ubuntu16.04
--        - LLVM_TAR=llvm-9.0.1-ubuntu16.04-Release+Asserts-x86.arm.wasm.tar.xz
--        - LLVM_REPO=https://github.com/dbabokin/llvm-project
--        - ISPC_HOME=$TRAVIS_BUILD_DIR
-     # WASM enabled build
-     # LLVM 11.0 + Ubuntu 16.04: build, lit tests, examples (build), benchmarks (build + trial run)
-     - <<: *my_tag
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 5fa863fcf..a6b3ed251 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -241,10 +241,8 @@ if (X86_ENABLED)
-         avx2-i8x32 avx2-i16x16
-         avx2-i32x4 avx2-i32x8 avx2-i32x16 avx2-i64x4
-         avx512knl-i32x16
--        avx512skx-i32x16 avx512skx-i32x8)
--    if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "10.0.0")
--        list(APPEND ISPC_TARGETS avx512skx-i8x64 avx512skx-i16x32)
--    endif()
-+        avx512skx-i32x16 avx512skx-i32x8
-+        avx512skx-i8x64 avx512skx-i16x32)
- endif()
- if (ARM_ENABLED)
-     list(APPEND ISPC_TARGETS neon-i8x16 neon-i16x8 neon-i32x4 neon-i32x8)
-@@ -259,11 +257,7 @@ if (WASM_ENABLED)
- endif()
- 
- set(CLANG_LIBRARY_LIST clangFrontend clangDriver clangSerialization clangParse clangSema clangAnalysis clangAST clangBasic clangEdit clangLex)
--set(LLVM_COMPONENTS engine ipo bitreader bitwriter instrumentation linker option)
--
--if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "10.0.0")
--    list(APPEND LLVM_COMPONENTS frontendopenmp)
--endif()
-+set(LLVM_COMPONENTS engine ipo bitreader bitwriter instrumentation linker option frontendopenmp)
- 
- if (X86_ENABLED)
-     list(APPEND LLVM_COMPONENTS x86)
-diff --git a/src/ast.cpp b/src/ast.cpp
-index 20f75a29c..5a43c4854 100644
---- a/src/ast.cpp
-+++ b/src/ast.cpp
-@@ -44,9 +44,7 @@
- #include "sym.h"
- #include "util.h"
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/TimeProfiler.h>
--#endif
- ///////////////////////////////////////////////////////////////////////////
- // ASTNode
- 
-@@ -62,9 +60,7 @@ void AST::AddFunction(Symbol *sym, Stmt *code) {
- }
- 
- void AST::GenerateIR() {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope TimeScope("GenerateIR");
--#endif
-     for (unsigned int i = 0; i < functions.size(); ++i)
-         functions[i]->GenerateIR();
- }
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 977e9d222..42c4ea09d 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -309,21 +309,13 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym, llvm::F
-             char buf[256];
-             snprintf(buf, sizeof(buf), "__off_all_on_mask_%s", g->target->GetISAString());
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_8_0
--            llvm::Constant *offFunc = m->module->getOrInsertFunction(buf, LLVMTypes::VoidType);
--#else // LLVM 9.0+
-             llvm::FunctionCallee offFuncCallee = m->module->getOrInsertFunction(buf, LLVMTypes::VoidType);
-             llvm::Constant *offFunc = llvm::cast<llvm::Constant>(offFuncCallee.getCallee());
--#endif
-             AssertPos(currentPos, llvm::isa<llvm::Function>(offFunc));
-             llvm::BasicBlock *offBB = llvm::BasicBlock::Create(*g->ctx, "entry", (llvm::Function *)offFunc, 0);
-             llvm::StoreInst *inst = new llvm::StoreInst(LLVMMaskAllOff, globalAllOnMaskPtr, offBB);
-             if (g->opt.forceAlignedMemory) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-                 inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-             }
-             llvm::ReturnInst::Create(*g->ctx, offBB);
-         }
-@@ -2288,11 +2280,7 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
- #endif
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-     }
- 
-     AddDebugPos(inst);
-@@ -2431,11 +2419,7 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-                 // vs the proper alignment in practice.)
-                 int align = 1;
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                inst->setAlignment(align);
--#else // LLVM 10.0+
-                 inst->setAlignment(llvm::MaybeAlign(align).valueOrOne());
--#endif
-             }
- 
-             AddDebugPos(inst);
-@@ -2649,11 +2633,7 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-         align = g->target->getNativeVectorAlignment();
- 
-     if (align != 0) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(align);
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(align).valueOrOne());
--#endif
-     }
-     // Don't add debugging info to alloca instructions
-     return inst;
-@@ -2926,11 +2906,7 @@ void FunctionEmitContext::StoreInst(llvm::Value *value, llvm::Value *ptr, const
-     llvm::StoreInst *inst = new llvm::StoreInst(value, ptr, bblock);
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-     }
- 
- #ifdef ISPC_GENX_ENABLED
-@@ -3025,16 +3001,10 @@ void FunctionEmitContext::MemcpyInst(llvm::Value *dest, llvm::Value *src, llvm::
-     }
-     if (align == NULL)
-         align = LLVMInt32(1);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_8_0
--    llvm::Constant *mcFunc =
--        m->module->getOrInsertFunction("llvm.memcpy.p0i8.p0i8.i64", LLVMTypes::VoidType, LLVMTypes::VoidPointerType,
--                                       LLVMTypes::VoidPointerType, LLVMTypes::Int64Type, LLVMTypes::BoolType);
--#else // LLVM 9.0+
-     llvm::FunctionCallee mcFuncCallee =
-         m->module->getOrInsertFunction("llvm.memcpy.p0i8.p0i8.i64", LLVMTypes::VoidType, LLVMTypes::VoidPointerType,
-                                        LLVMTypes::VoidPointerType, LLVMTypes::Int64Type, LLVMTypes::BoolType);
-     llvm::Constant *mcFunc = llvm::cast<llvm::Constant>(mcFuncCallee.getCallee());
--#endif
-     AssertPos(currentPos, mcFunc != NULL);
-     AssertPos(currentPos, llvm::isa<llvm::Function>(mcFunc));
- 
-diff --git a/src/gen/GlobalsLocalization.cpp b/src/gen/GlobalsLocalization.cpp
-index 193a66289..a176e9462 100644
---- a/src/gen/GlobalsLocalization.cpp
-+++ b/src/gen/GlobalsLocalization.cpp
-@@ -470,11 +470,7 @@ void GlobalsLocalization::LocalizeGlobals(LocalizationInfo &LI) {
-         Instruction &FirstI = *Fn->getEntryBlock().begin();
-         Type *ElemTy = GV->getType()->getElementType();
-         AllocaInst *Alloca = new AllocaInst(ElemTy, 0, GV->getName() + ".local", &FirstI);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        Alloca->setAlignment(GV->getAlignment());
--#else // LLVM 10.0+
-         Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()));
--#endif
-         if (!isa<UndefValue>(GV->getInitializer()))
-             new StoreInst(GV->getInitializer(), Alloca, &FirstI);
- 
-diff --git a/src/ispc.cpp b/src/ispc.cpp
-index e2d0f206e..fac5233f7 100644
---- a/src/ispc.cpp
-+++ b/src/ispc.cpp
-@@ -272,9 +272,7 @@ typedef enum {
-     CPU_Silvermont,
- 
-     CPU_ICX,
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     CPU_TGL,
--#endif
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-     CPU_ADL,
-     CPU_SPR,
-@@ -365,10 +363,8 @@ class AllCPUs {
- 
-         names[CPU_ICX].push_back("icelake-server");
-         names[CPU_ICX].push_back("icx");
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         names[CPU_TGL].push_back("tigerlake");
-         names[CPU_TGL].push_back("tgl");
--#endif
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-         names[CPU_ADL].push_back("alderlake");
-         names[CPU_ADL].push_back("adl");
-@@ -411,11 +407,9 @@ class AllCPUs {
-         compat[CPU_ADL] = Set(CPU_ADL, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont,
-                               CPU_SandyBridge, CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_None);
- #endif
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         compat[CPU_TGL] =
-             Set(CPU_TGL, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont, CPU_SandyBridge,
-                 CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_SKX, CPU_ICL, CPU_ICX, CPU_None);
--#endif
-         compat[CPU_ICX] = Set(CPU_ICX, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont,
-                               CPU_SandyBridge, CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_SKX, CPU_ICL, CPU_None);
- 
-@@ -556,9 +550,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-         case CPU_SPR:
- #endif
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         case CPU_TGL:
--#endif
-         case CPU_ICX:
-         case CPU_ICL:
-         case CPU_SKX:
-@@ -916,7 +908,6 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         }
-         break;
-     case ISPCTarget::avx512skx_i8x64:
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0 // LLVM 10.0+
-         // This target is enabled only for LLVM 10.0 and later
-         // because LLVM requires a number of fixes, which are
-         // committed to LLVM 11.0 and can be applied to 10.0, but not
-@@ -937,12 +928,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         this->m_hasVecPrefetch = false;
-         CPUfromISA = CPU_SKX;
-         break;
--#else
--        unsupported_target = true;
--        break;
--#endif
-     case ISPCTarget::avx512skx_i16x32:
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0 // LLVM 10.0+
-         // This target is enabled only for LLVM 10.0 and later
-         // because LLVM requires a number of fixes, which are
-         // committed to LLVM 11.0 and can be applied to 10.0, but not
-@@ -963,10 +949,6 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         this->m_hasVecPrefetch = false;
-         CPUfromISA = CPU_SKX;
-         break;
--#else
--        unsupported_target = true;
--        break;
--#endif
- #ifdef ISPC_ARM_ENABLED
-     case ISPCTarget::neon_i8x16:
-         this->m_isa = Target::NEON;
-@@ -1662,11 +1644,9 @@ Globals::Globals() {
-     isMultiTargetCompilation = false;
-     errorLimit = -1;
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     enableTimeTrace = false;
-     // set default granularity to 500.
-     timeTraceGranularity = 500;
--#endif
-     target = NULL;
-     ctx = new llvm::LLVMContext;
- 
-diff --git a/src/ispc.h b/src/ispc.h
-index e25d8830e..de357a21c 100644
---- a/src/ispc.h
-+++ b/src/ispc.h
-@@ -695,13 +695,12 @@ struct Globals {
- 
-     /* Number of errors to show in ISPC. */
-     int errorLimit;
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-+
-     /* When true, enable compile time tracing. */
-     bool enableTimeTrace;
- 
-     /* When compile time tracing is enabled, set time granularity. */
-     int timeTraceGranularity;
--#endif
- };
- 
- enum {
-diff --git a/src/ispc_version.h b/src/ispc_version.h
-index d781347fd..434b2d678 100644
---- a/src/ispc_version.h
-+++ b/src/ispc_version.h
-@@ -44,13 +44,11 @@
- 
- #define ISPC_LLVM_VERSION (LLVM_VERSION_MAJOR * 10000 + LLVM_VERSION_MINOR * 100)
- 
--#define ISPC_LLVM_8_0 80000
--#define ISPC_LLVM_9_0 90000
- #define ISPC_LLVM_10_0 100000
- #define ISPC_LLVM_11_0 110000
- #define ISPC_LLVM_12_0 120000
- 
--#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_8_0
-+#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_10_0
- #define LATEST_SUPPORTED_LLVM ISPC_LLVM_12_0
- 
- #ifdef __ispc__xstr
-diff --git a/src/main.cpp b/src/main.cpp
-index 8f64330cc..5c920eabc 100644
---- a/src/main.cpp
-+++ b/src/main.cpp
-@@ -55,9 +55,7 @@
- #include <llvm/Support/Signals.h>
- #include <llvm/Support/TargetRegistry.h>
- #include <llvm/Support/TargetSelect.h>
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/ToolOutputFile.h>
--#endif
- 
- #ifdef ISPC_HOST_IS_WINDOWS
- #define strcasecmp stricmp
-@@ -181,11 +179,9 @@ static void lPrintVersion() {
-     snprintf(targetHelp, sizeof(targetHelp), "[--target-os=<os>]\t\t\tSelect target OS.  <os>={%s}",
-              g->target_registry->getSupportedOSes().c_str());
-     PrintWithWordBreaks(targetHelp, 24, TerminalWidth(), stdout);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     printf("    [--time-trace]\t\t\tTurn on time profiler. Generates JSON file based on output filename.\n");
-     printf("    [--time-trace-granularity=<value>\tMinimum time granularity (in microseconds) traced by time "
-            "profiler.\n");
--#endif
-     printf("    [--version]\t\t\t\tPrint ispc version\n");
- #ifdef ISPC_GENX_ENABLED
-     printf("    [--vc-options=<\"-option1 -option2...\">]\t\t\t\tPass additional options to Vector Compiler backend\n");
-@@ -462,7 +458,6 @@ static void setCallingConv(VectorCallStatus vectorCall, Arch arch) {
-     }
- }
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- static void writeCompileTimeFile(const char *outFileName) {
-     llvm::SmallString<128> jsonFileName(outFileName);
-     jsonFileName.append(".json");
-@@ -479,7 +474,6 @@ static void writeCompileTimeFile(const char *outFileName) {
-     of->keep();
-     return;
- }
--#endif
- 
- static std::set<int> ParsingPhases(char *stages, ArgErrors &errorHandler) {
-     constexpr int parsing_limit = 100;
-@@ -791,12 +785,10 @@ int main(int Argc, char *Argv[]) {
-             }
-         } else if (!strncmp(argv[i], "--force-alignment=", 18)) {
-             g->forceAlignment = atoi(argv[i] + 18);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         } else if (!strcmp(argv[i], "--time-trace")) {
-             g->enableTimeTrace = true;
-         } else if (!strncmp(argv[i], "--time-trace-granularity=", 25)) {
-             g->timeTraceGranularity = atoi(argv[i] + 25);
--#endif
-         } else if (!strcmp(argv[i], "--woff") || !strcmp(argv[i], "-woff")) {
-             g->disableWarnings = true;
-             g->emitPerfWarnings = false;
-@@ -1059,7 +1051,6 @@ int main(int Argc, char *Argv[]) {
- 
-     // This needs to happen after the TargetOS is decided.
-     setCallingConv(vectorCall, arch);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     if (g->enableTimeTrace) {
-         llvm::timeTraceProfilerInitialize(g->timeTraceGranularity, "ispc");
-     }
-@@ -1077,9 +1068,5 @@ int main(int Argc, char *Argv[]) {
-         }
-         llvm::timeTraceProfilerCleanup();
-     }
--#else
--    int ret = Module::CompileAndOutput(file, arch, cpu, targets, flags, ot, outFileName, headerFileName, depsFileName,
--                                       depsTargetName, hostStubFileName, devStubFileName);
--#endif
-     return ret;
- }
-diff --git a/src/module.cpp b/src/module.cpp
-index fe7452df1..a85fec77a 100644
---- a/src/module.cpp
-+++ b/src/module.cpp
-@@ -170,9 +170,7 @@ Module::Module(const char *fn) {
-     module->setDataLayout(g->target->getDataLayout()->getStringRepresentation());
- 
-     if (g->generateDebuggingSymbols) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Create Debug Data");
--#endif
-         // To enable debug information on Windows, we have to let llvm know, that
-         // debug information should be emitted in CodeView format.
-         if (g->target_os == TargetOS::windows) {
-@@ -226,10 +224,8 @@ extern YY_BUFFER_STATE yy_create_buffer(FILE *, int);
- extern void yy_delete_buffer(YY_BUFFER_STATE);
- 
- int Module::CompileFile() {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope CompileFileTimeScope(
-         "CompileFile", llvm::StringRef(filename + ("_" + std::string(g->target->GetISAString()))));
--#endif
-     extern void ParserInit();
-     ParserInit();
- 
-@@ -238,18 +234,14 @@ int Module::CompileFile() {
-     // variable 'm' to be initialized and available (which it isn't until
-     // the Module constructor returns...)
-     {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("DefineStdlib");
--#endif
-         DefineStdlib(symbolTable, g->ctx, module, g->includeStdlib);
-     }
- 
-     bool runPreprocessor = g->runCPP;
- 
-     if (runPreprocessor) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Frontend parser");
--#endif
-         if (!IsStdin(filename)) {
-             // Try to open the file first, since otherwise we crash in the
-             // preprocessor if the file doesn't exist.
-@@ -268,9 +260,7 @@ int Module::CompileFile() {
-         yyparse();
-         yy_delete_buffer(strbuf);
-     } else {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Frontend parser");
--#endif
-         // No preprocessor, just open up the file if it's not stdin..
-         FILE *f = NULL;
-         if (IsStdin(filename)) {
-@@ -297,9 +287,7 @@ int Module::CompileFile() {
- 
-     if (diBuilder)
-         diBuilder->finalize();
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope TimeScope("Optimize");
--#endif
-     if (errorCount == 0)
-         Optimize(module, g->opt.level);
- 
-@@ -1243,15 +1231,8 @@ bool Module::writeObjectFileOrAssembly(llvm::TargetMachine *targetMachine, llvm:
-                                        const char *outFileName) {
-     // Figure out if we're generating object file or assembly output, and
-     // set binary output for object files
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    Assert(!g->target->isGenXTarget());
--    llvm::TargetMachine::CodeGenFileType fileType =
--        (outputType == Object) ? llvm::TargetMachine::CGFT_ObjectFile : llvm::TargetMachine::CGFT_AssemblyFile;
--    bool binary = (fileType == llvm::TargetMachine::CGFT_ObjectFile);
--#else // LLVM 10.0+
-     llvm::CodeGenFileType fileType = (outputType == Object) ? llvm::CGFT_ObjectFile : llvm::CGFT_AssemblyFile;
-     bool binary = (fileType == llvm::CGFT_ObjectFile);
--#endif
- 
-     llvm::sys::fs::OpenFlags flags = binary ? llvm::sys::fs::F_None : llvm::sys::fs::F_Text;
- 
-@@ -2219,11 +2200,7 @@ void Module::execPreprocessor(const char *infilename, llvm::raw_string_ostream *
-     inst.setTarget(target);
-     inst.createSourceManager(inst.getFileManager());
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    clang::FrontendInputFile inputFile(infilename, clang::InputKind::Unknown);
--#else // LLVM 10.0+
-     clang::FrontendInputFile inputFile(infilename, clang::InputKind());
--#endif
- 
-     inst.InitializeSourceManager(inputFile);
- 
-@@ -2722,9 +2699,7 @@ int Module::CompileAndOutput(const char *srcFile, Arch arch, const char *cpu, st
- 
-         m = new Module(srcFile);
-         if (m->CompileFile() == 0) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-             llvm::TimeTraceScope TimeScope("Backend");
--#endif
- #ifdef ISPC_GENX_ENABLED
-             if (outputType == Asm || outputType == Object) {
-                 if (g->target->isGenXTarget()) {
-@@ -2855,9 +2830,7 @@ int Module::CompileAndOutput(const char *srcFile, Arch arch, const char *cpu, st
- 
-             m = new Module(srcFile);
-             int compileFileError = m->CompileFile();
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-             llvm::TimeTraceScope TimeScope("Backend");
--#endif
-             if (compileFileError == 0) {
-                 // Create the dispatch module, unless already created;
-                 // in the latter case, just do the checking
-diff --git a/src/module.h b/src/module.h
-index 61d3cfea0..603124d50 100644
---- a/src/module.h
-+++ b/src/module.h
-@@ -43,9 +43,7 @@
- 
- #include <llvm/IR/DebugInfo.h>
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/TimeProfiler.h>
--#endif
- 
- #ifdef ISPC_GENX_ENABLED
- #include "ocl_igc_interface/igc_ocl_device_ctx.h"
-diff --git a/src/opt.cpp b/src/opt.cpp
-index a655a8344..5b1ac7b63 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -66,6 +66,7 @@
- #include <llvm/IR/Instructions.h>
- #include <llvm/IR/IntrinsicInst.h>
- #include <llvm/IR/Intrinsics.h>
-+#include <llvm/IR/IntrinsicsX86.h>
- #include <llvm/IR/LegacyPassManager.h>
- #include <llvm/IR/Module.h>
- #include <llvm/IR/PatternMatch.h>
-@@ -85,9 +86,6 @@
- #include <llvm/Transforms/Scalar/InstSimplifyPass.h>
- #include <llvm/Transforms/Utils.h>
- #include <llvm/Transforms/Utils/BasicBlockUtils.h>
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
--#include <llvm/IR/IntrinsicsX86.h>
--#endif
- 
- #ifdef ISPC_HOST_IS_LINUX
- #include <alloca.h>
-@@ -1003,10 +1001,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
-                 name = LLVMGetName(callInst->getArgOperand(0), "_load");
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                llvm::Instruction *loadInst =
--                    new llvm::LoadInst(castPtr, name, false /* not volatile */, align, (llvm::Instruction *)NULL);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-                 llvm::Instruction *loadInst = new llvm::LoadInst(castPtr, name, false /* not volatile */,
-                                                                  llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
- #else
-@@ -1043,13 +1038,8 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedStore32 ? 4 : 8;
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                llvm::StoreInst *storeInst = new llvm::StoreInst(rvalue, castPtr, (llvm::Instruction *)NULL);
--                storeInst->setAlignment(align);
--#else
-                 llvm::StoreInst *storeInst = new llvm::StoreInst(rvalue, castPtr, (llvm::Instruction *)NULL,
-                                                                  llvm::MaybeAlign(align).valueOrOne());
--#endif
-                 lCopyMetadata(storeInst, callInst);
-                 llvm::ReplaceInstWithInst(callInst, storeInst);
- 
-@@ -1066,9 +1056,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool IntrinsicsOpt::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("IntrinsicsOpt::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -1239,9 +1227,7 @@ bool InstructionSimplifyPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool InstructionSimplifyPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("InstructionSimplifyPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -2974,16 +2960,10 @@ static bool lImproveMaskedStore(llvm::CallInst *callInst) {
- 
-             lvalue = new llvm::BitCastInst(lvalue, ptrType, "lvalue_to_ptr_type", callInst);
-             lCopyMetadata(lvalue, callInst);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--            store =
--                new llvm::StoreInst(rvalue, lvalue, false /* not volatile */,
--                                    g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align);
--#else
-             store = new llvm::StoreInst(
-                 rvalue, lvalue, false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-                     .valueOrOne());
--#endif
-         }
-         if (store != NULL) {
-             lCopyMetadata(store, callInst);
-@@ -3059,11 +3039,7 @@ static bool lImproveMaskedLoad(llvm::CallInst *callInst, llvm::BasicBlock::itera
-         {
-             llvm::Type *ptrType = llvm::PointerType::get(callInst->getType(), 0);
-             ptr = new llvm::BitCastInst(ptr, ptrType, "ptr_cast_for_load", callInst);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--            load = new llvm::LoadInst(ptr, callInst->getName(), false /* not volatile */,
--                                      g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align,
--                                      (llvm::Instruction *)NULL);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-             load = new llvm::LoadInst(
-                 ptr, callInst->getName(), false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-@@ -3129,9 +3105,7 @@ bool ImproveMemoryOpsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ImproveMemoryOpsPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ImproveMemoryOpsPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -3424,9 +3398,7 @@ llvm::Value *lGEPAndLoad(llvm::Value *basePtr, int64_t offset, int align, llvm::
-                          llvm::Type *type) {
-     llvm::Value *ptr = lGEPInst(basePtr, LLVMInt64(offset), "new_base", insertBefore);
-     ptr = new llvm::BitCastInst(ptr, llvm::PointerType::get(type, 0), "ptr_cast", insertBefore);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, align, insertBefore);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-     return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, llvm::MaybeAlign(align), insertBefore);
- #else // LLVM 11.0+
-     return new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-@@ -4135,9 +4107,7 @@ bool GatherCoalescePass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool GatherCoalescePass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("GatherCoalescePass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -4467,9 +4437,7 @@ bool ReplacePseudoMemoryOpsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplacePseudoMemoryOpsPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplacePseudoMemoryOpsPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -4573,9 +4541,7 @@ bool IsCompileTimeConstantPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool IsCompileTimeConstantPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("IsCompileTimeConstantPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5201,9 +5167,7 @@ bool PeepholePass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool PeepholePass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("PeepholePass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5299,9 +5263,7 @@ bool ReplaceStdlibShiftPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceStdlibShiftPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceStdlibShiftPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5399,9 +5361,7 @@ llvm::Instruction *FixBooleanSelectPass::fixSelect(llvm::SelectInst *sel, llvm::
- }
- 
- bool FixBooleanSelectPass::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("FixBooleanSelectPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
- 
-     return modifiedAny;
-@@ -5964,9 +5924,7 @@ bool GenXGatherCoalescing::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool GenXGatherCoalescing::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("GenXGatherCoalescing::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6113,9 +6071,7 @@ bool PromoteToPrivateMemoryPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool PromoteToPrivateMemoryPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("PromoteToPrivateMemoryPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6181,9 +6137,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceLLVMIntrinsics::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceLLVMIntrinsics::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6278,9 +6232,7 @@ bool ReplaceUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceUnsupportedInsts::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceUnsupportedInsts::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6369,9 +6321,7 @@ bool CheckUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool CheckUnsupportedInsts::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("CheckUnsupportedInsts::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6440,9 +6390,7 @@ bool MangleOpenCLBuiltins::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool MangleOpenCLBuiltins::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("MangleOpenCLBuiltins::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6828,9 +6776,7 @@ bool FixAddressSpace::runOnFunction(llvm::Function &F) {
-     // Transformations are correct when the function is not internal.
-     // This is due to address space calculation algorithm.
-     // TODO: problems can be met in case of Stack Calls
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("FixAddressSpace::runOnFunction", F.getName());
--#endif
-     if (F.getLinkage() == llvm::GlobalValue::LinkageTypes::InternalLinkage)
-         return false;
- 
-@@ -6854,9 +6800,7 @@ class DemotePHIs : public llvm::FunctionPass {
- char DemotePHIs::ID = 0;
- 
- bool DemotePHIs::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("DemotePHIs::runOnFunction", F.getName());
--#endif
-     if (F.isDeclaration() || skipFunction(F))
-         return false;
-     std::vector<llvm::Instruction *> WorkList;
-diff --git a/src/type.cpp b/src/type.cpp
-index 688a4e874..fa0cb04db 100644
---- a/src/type.cpp
-+++ b/src/type.cpp
-@@ -1822,14 +1822,10 @@ llvm::DIType *StructType::GetDIType(llvm::DIScope *scope) const {
-     llvm::DIFile *diFile = pos.GetDIFile();
-     llvm::DINamespace *diSpace = pos.GetDINamespace();
-     return m->diBuilder->createStructType(diSpace, GetString(), diFile,
--                                          pos.first_line,          // Line number
--                                          layout->getSizeInBits(), // Size in bits
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                                          layout->getAlignment() * 8, // Alignment in bits
--#else                                                                 // LLVM 10.0+
-+                                          pos.first_line,                     // Line number
-+                                          layout->getSizeInBits(),            // Size in bits
-                                           layout->getAlignment().value() * 8, // Alignment in bits
--#endif
--                                          llvm::DINode::FlagZero, // Flags
-+                                          llvm::DINode::FlagZero,             // Flags
-                                           NULL, elements);
- }
- 
-diff --git a/tests/lit-tests/1771.ispc b/tests/lit-tests/1771.ispc
-index 98064d84d..4feb73dd7 100644
---- a/tests/lit-tests/1771.ispc
-+++ b/tests/lit-tests/1771.ispc
-@@ -5,7 +5,6 @@
- // RUN: %{ispc} %s --target=sse4-i16x8 --emit-asm -o - | FileCheck %s -check-prefix=CHECKSSE4_I16X8
- // RUN: %{ispc} %s --target=sse4-i8x16 --emit-asm -o - | FileCheck %s -check-prefix=CHECKSSE4_I8X16
- 
--// REQUIRES: LLVM_10_0+
- // REQUIRES: X86_ENABLED
- 
- // CHECKAVX2_I32X8: {{[a-z]*xor[a-z]*}}  %xmm0, %xmm0, %xmm0
-diff --git a/tests/lit-tests/1844.ispc b/tests/lit-tests/1844.ispc
-index 793a8866c..189edf4c3 100644
---- a/tests/lit-tests/1844.ispc
-+++ b/tests/lit-tests/1844.ispc
-@@ -6,9 +6,6 @@
- 
- // REQUIRES: X86_ENABLED
- 
--// It doesn't work for anything earlier than 10.0, but it will not be fixed, so don't run.
--// REQUIRES: LLVM_10_0+
--
- extern uniform unsigned int64 var_6;
- extern uniform unsigned int16 var_11;
- extern uniform bool arr_201 [1] [15] [20];
-diff --git a/tests/lit-tests/1926.ispc b/tests/lit-tests/1926.ispc
-index 70f7cc3c2..7921c91a6 100644
---- a/tests/lit-tests/1926.ispc
-+++ b/tests/lit-tests/1926.ispc
-@@ -2,8 +2,6 @@
- // RUN: cat %T/1926.o.json \
- // RUN:   | FileCheck %s
- 
--// REQUIRES: LLVM_10_0+
--
- // CHECK: "traceEvents"
- // CHECK: "detail"
- export uniform int foo(uniform int a[], uniform int count) {
-diff --git a/tests/lit-tests/cpus_x86.ispc b/tests/lit-tests/cpus_x86.ispc
-index 516efdd4c..4d60186f6 100644
---- a/tests/lit-tests/cpus_x86.ispc
-+++ b/tests/lit-tests/cpus_x86.ispc
-@@ -24,6 +24,8 @@
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icl
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icelake-server
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icx
-+//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tigerlake
-+//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tgl
- 
- // REQUIRES: X86_ENABLED
- 
-diff --git a/tests/lit-tests/cpus_x86_llvm10.ispc b/tests/lit-tests/cpus_x86_llvm10.ispc
-deleted file mode 100644
-index ef00000e5..000000000
---- a/tests/lit-tests/cpus_x86_llvm10.ispc
-+++ /dev/null
-@@ -1,11 +0,0 @@
--// The test checks that cpu definitions (including all synonyms) are successfully consumed by compiler.
--
--//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tigerlake
--//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tgl
--
--// REQUIRES: X86_ENABLED
--// REQUIRES: LLVM_10_0+
--
--uniform int i;
--
--void foo() {}
-diff --git a/tests/lit-tests/lit.cfg b/tests/lit-tests/lit.cfg
-index 17016579d..045e69437 100644
---- a/tests/lit-tests/lit.cfg
-+++ b/tests/lit-tests/lit.cfg
-@@ -30,11 +30,6 @@ print("Config:")
- 
- # LLVM version
- llvm_version = LooseVersion(ispc_llvm_version_number)
--if llvm_version >= LooseVersion("10.0.0"):
--    print("LLVM_10_0+: YES")
--    config.available_features.add("LLVM_10_0+")
--else:
--    print("LLVM_10_0+: NO")
- 
- if llvm_version >= LooseVersion("12.0.0"):
-     print("LLVM_12_0+: YES")
diff --git a/srcpkgs/ispc/patches/llvm12-003.patch b/srcpkgs/ispc/patches/llvm12-003.patch
deleted file mode 100644
index 0423afc9e3f9..000000000000
--- a/srcpkgs/ispc/patches/llvm12-003.patch
+++ /dev/null
@@ -1,1504 +0,0 @@
-From 1851d18b213dbad169937076176b2d5509733c76 Mon Sep 17 00:00:00 2001
-From: Deepak Rajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Tue, 12 Jan 2021 22:15:12 -0800
-Subject: [PATCH] fixes #1821 - Removing LLVMGetName() and switching to
- LLVM::Twine.
-
----
- src/ctx.cpp      | 304 ++++++++++++++++++++++-------------------------
- src/ctx.h        |  72 +++++------
- src/expr.cpp     |  36 +++---
- src/llvmutil.cpp |  17 ---
- src/llvmutil.h   |   5 -
- src/opt.cpp      | 103 +++++++++-------
- 6 files changed, 255 insertions(+), 282 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 42c4ea09d..ded524b71 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1020,8 +1020,8 @@ void FunctionEmitContext::EmitCaseLabel(int value, bool checkMask, SourcePos pos
-     llvm::BasicBlock *bbCaseImpl = NULL;
-     if (emitGenXHardwareMask()) {
-         // Create basic block with actual case implementation
--        std::string bbName = bbCase->getName().str() + "_impl";
--        bbCaseImpl = CreateBasicBlock(bbName.c_str(), bbCase);
-+        llvm::Twine bbName = llvm::Twine(bbCase->getName()) + "_impl";
-+        bbCaseImpl = CreateBasicBlock(bbName, bbCase);
-     }
- #endif
- 
-@@ -1185,7 +1185,7 @@ bool FunctionEmitContext::initLabelBBlocks(ASTNode *node, void *data) {
-     if (ctx->labelMap.find(ls->name) != ctx->labelMap.end())
-         Error(ls->pos, "Multiple labels named \"%s\" in function.", ls->name.c_str());
-     else {
--        llvm::BasicBlock *bb = ctx->CreateBasicBlock(ls->name.c_str());
-+        llvm::BasicBlock *bb = ctx->CreateBasicBlock(ls->name);
-         ctx->labelMap[ls->name] = bb;
-     }
-     return true;
-@@ -1299,7 +1299,7 @@ llvm::Value *FunctionEmitContext::Any(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_any"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_any");
- }
- 
- llvm::Value *FunctionEmitContext::All(llvm::Value *mask) {
-@@ -1315,7 +1315,7 @@ llvm::Value *FunctionEmitContext::All(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_all"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_all");
- }
- 
- llvm::Value *FunctionEmitContext::None(llvm::Value *mask) {
-@@ -1331,7 +1331,7 @@ llvm::Value *FunctionEmitContext::None(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_none"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_none");
- }
- 
- llvm::Value *FunctionEmitContext::LaneMask(llvm::Value *v) {
-@@ -1349,7 +1349,7 @@ llvm::Value *FunctionEmitContext::LaneMask(llvm::Value *v) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, v, LLVMGetName(v, "_movmsk"));
-+    return CallInst(fmm, NULL, v, llvm::Twine(v->getName()) + "_movmsk");
- }
- 
- llvm::Value *FunctionEmitContext::MasksAllEqual(llvm::Value *v1, llvm::Value *v2) {
-@@ -1364,11 +1364,12 @@ llvm::Value *FunctionEmitContext::MasksAllEqual(llvm::Value *v1, llvm::Value *v2
- #else
-     if (g->target->getArch() == Arch::wasm32) {
-         llvm::Function *fmm = m->module->getFunction("__wasm_cmp_msk_eq");
--        return CallInst(fmm, NULL, {v1, v2}, LLVMGetName("wasm_cmp_msk_eq", v1, v2));
-+        return CallInst(fmm, NULL, {v1, v2}, ((llvm::Twine("wasm_cmp_msk_eq_") + v1->getName()) + "_") + v2->getName());
-     }
-     llvm::Value *mm1 = LaneMask(v1);
-     llvm::Value *mm2 = LaneMask(v2);
--    return CmpInst(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_EQ, mm1, mm2, LLVMGetName("equal", v1, v2));
-+    return CmpInst(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_EQ, mm1, mm2,
-+                   ((llvm::Twine("equal_") + v1->getName()) + "_") + v2->getName());
- #endif
- }
- 
-@@ -1392,7 +1393,7 @@ llvm::Value *FunctionEmitContext::GetStringPtr(const std::string &str) {
-     return new llvm::BitCastInst(lstrPtr, LLVMTypes::VoidPointerType, "str_void_ptr", bblock);
- }
- 
--llvm::BasicBlock *FunctionEmitContext::CreateBasicBlock(const char *name, llvm::BasicBlock *insertAfter) {
-+llvm::BasicBlock *FunctionEmitContext::CreateBasicBlock(const llvm::Twine &name, llvm::BasicBlock *insertAfter) {
-     llvm::BasicBlock *newBB = llvm::BasicBlock::Create(*g->ctx, name, llvmFunction);
-     if (insertAfter)
-         newBB->moveAfter(insertAfter);
-@@ -1416,14 +1417,15 @@ llvm::Value *FunctionEmitContext::I1VecToBoolVec(llvm::Value *b) {
- 
-         for (unsigned int i = 0; i < at->getNumElements(); ++i) {
-             llvm::Value *elt = ExtractInst(b, i);
--            llvm::Value *sext = SwitchBoolSize(elt, LLVMTypes::BoolVectorStorageType, LLVMGetName(elt, "_to_boolvec"));
-+            llvm::Value *sext =
-+                SwitchBoolSize(elt, LLVMTypes::BoolVectorStorageType, llvm::Twine(elt->getName()) + "_to_boolvec");
-             ret = InsertInst(ret, sext, i);
-         }
-         return ret;
-     } else {
-         // For non-array types, convert to 'LLVMTypes::BoolVectorType' if
-         // necessary.
--        return SwitchBoolSize(b, LLVMTypes::BoolVectorType, LLVMGetName(b, "_to_boolvec"));
-+        return SwitchBoolSize(b, LLVMTypes::BoolVectorType, llvm::Twine(b->getName()) + "_to_boolvec");
-     }
- }
- 
-@@ -1563,7 +1565,7 @@ static int lArrayVectorWidth(llvm::Type *t) {
- }
- 
- llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps inst, llvm::Value *v0, llvm::Value *v1,
--                                                 const char *name) {
-+                                                 const llvm::Twine &name) {
-     if (v0 == NULL || v1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1573,7 +1575,7 @@ llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps in
-     llvm::Type *type = v0->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *bop = llvm::BinaryOperator::Create(inst, v0, v1, name ? name : "", bblock);
-+        llvm::Instruction *bop = llvm::BinaryOperator::Create(inst, v0, v1, name, bblock);
-         AddDebugPos(bop);
-         return bop;
-     } else {
-@@ -1591,7 +1593,7 @@ llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps in
-     }
- }
- 
--llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const char *name) {
-+llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const llvm::Twine &name) {
-     if (v == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1603,14 +1605,14 @@ llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const char *name)
-     llvm::Type *type = v->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *binst = llvm::BinaryOperator::CreateNot(v, name ? name : "not", bblock);
-+        llvm::Instruction *binst = llvm::BinaryOperator::CreateNot(v, name.isTriviallyEmpty() ? "not" : name, bblock);
-         AddDebugPos(binst);
-         return binst;
-     } else {
-         llvm::Value *ret = llvm::UndefValue::get(type);
-         for (int i = 0; i < arraySize; ++i) {
-             llvm::Value *a = ExtractInst(v, i);
--            llvm::Value *op = llvm::BinaryOperator::CreateNot(a, name ? name : "not", bblock);
-+            llvm::Value *op = llvm::BinaryOperator::CreateNot(a, name.isTriviallyEmpty() ? "not" : name, bblock);
-             AddDebugPos(op);
-             ret = InsertInst(ret, op, i);
-         }
-@@ -1638,7 +1640,7 @@ static llvm::Type *lGetMatchingBoolVectorType(llvm::Type *type) {
- }
- 
- llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm::CmpInst::Predicate pred,
--                                          llvm::Value *v0, llvm::Value *v1, const char *name) {
-+                                          llvm::Value *v0, llvm::Value *v1, const llvm::Twine &name) {
-     if (v0 == NULL || v1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1648,7 +1650,8 @@ llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm
-     llvm::Type *type = v0->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *ci = llvm::CmpInst::Create(inst, pred, v0, v1, name ? name : "cmp", bblock);
-+        llvm::Instruction *ci =
-+            llvm::CmpInst::Create(inst, pred, v0, v1, name.isTriviallyEmpty() ? "cmp" : name, bblock);
-         AddDebugPos(ci);
-         return ci;
-     } else {
-@@ -1657,14 +1660,14 @@ llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm
-         for (int i = 0; i < arraySize; ++i) {
-             llvm::Value *a = ExtractInst(v0, i);
-             llvm::Value *b = ExtractInst(v1, i);
--            llvm::Value *op = CmpInst(inst, pred, a, b, name);
-+            llvm::Value *op = CmpInst(inst, pred, a, b, name.isTriviallyEmpty() ? "cmp" : name);
-             ret = InsertInst(ret, op, i);
-         }
-         return ret;
-     }
- }
- 
--llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const char *name) {
-+llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1704,21 +1707,19 @@ llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const char *n
-     return ret;
- }
- 
--llvm::Value *FunctionEmitContext::BitCastInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Value *FunctionEmitContext::BitCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_bitcast");
--
--    llvm::Instruction *inst = new llvm::BitCastInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::BitCastInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_bitcast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const char *name) {
-+llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1728,23 +1729,19 @@ llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const char *n
-         // no-op for varying pointers; they're already vectors of ints
-         return value;
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_ptr2int");
-     llvm::Type *type = LLVMTypes::PointerIntType;
--    llvm::Instruction *inst = new llvm::PtrToIntInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::PtrToIntInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_ptr2int");
--
-     llvm::Type *fromType = value->getType();
-     if (llvm::isa<llvm::VectorType>(fromType)) {
-         // varying pointer
-@@ -1752,27 +1749,26 @@ llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *t
-             // already the right type--done
-             return value;
-         else if (fromType->getScalarSizeInBits() > toType->getScalarSizeInBits())
--            return TruncInst(value, toType, name);
-+            return TruncInst(value, toType,
-+                             name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name);
-         else {
-             AssertPos(currentPos, fromType->getScalarSizeInBits() < toType->getScalarSizeInBits());
--            return ZExtInst(value, toType, name);
-+            return ZExtInst(value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name);
-         }
-     }
- 
--    llvm::Instruction *inst = new llvm::PtrToIntInst(value, toType, name, bblock);
-+    llvm::Instruction *inst = new llvm::PtrToIntInst(
-+        value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_int2ptr");
--
-     llvm::Type *fromType = value->getType();
-     if (llvm::isa<llvm::VectorType>(fromType)) {
-         // varying pointer
-@@ -1780,95 +1776,87 @@ llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *t
-             // done
-             return value;
-         else if (fromType->getScalarSizeInBits() > toType->getScalarSizeInBits())
--            return TruncInst(value, toType, name);
-+            return TruncInst(value, toType,
-+                             name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name);
-         else {
-             AssertPos(currentPos, fromType->getScalarSizeInBits() < toType->getScalarSizeInBits());
--            return ZExtInst(value, toType, name);
-+            return ZExtInst(value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name);
-         }
-     }
- 
--    llvm::Instruction *inst = new llvm::IntToPtrInst(value, toType, name, bblock);
-+    llvm::Instruction *inst = new llvm::IntToPtrInst(
-+        value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::TruncInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::TruncInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_trunc");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::TruncInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::TruncInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_trunc" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
- llvm::Instruction *FunctionEmitContext::CastInst(llvm::Instruction::CastOps op, llvm::Value *value, llvm::Type *type,
--                                                 const char *name) {
-+                                                 const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_cast");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = llvm::CastInst::Create(op, value, type, name, bblock);
-+    llvm::Instruction *inst = llvm::CastInst::Create(
-+        op, value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_cast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::FPCastInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::FPCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_cast");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = llvm::CastInst::CreateFPCast(value, type, name, bblock);
-+    llvm::Instruction *inst = llvm::CastInst::CreateFPCast(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_cast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::SExtInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::SExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_sext");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::SExtInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::SExtInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_sext" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::ZExtInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::ZExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_zext");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::ZExtInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::ZExtInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_zext" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
-@@ -1913,14 +1901,15 @@ llvm::Value *FunctionEmitContext::applyVaryingGEP(llvm::Value *basePtr, llvm::Va
-         scale = SmearUniform(scale);
-         Assert(index != NULL);
-         // offset = index * scale
--        offset = BinaryOperator(llvm::Instruction::Mul, scale, index, LLVMGetName("mul", scale, index));
-+        offset = BinaryOperator(llvm::Instruction::Mul, scale, index,
-+                                ((llvm::Twine("mul_") + scale->getName()) + "_") + index->getName());
-     }
- 
-     // For 64-bit targets, if we've been doing our offset calculations in
-     // 32 bits, we still have to convert to a 64-bit value before we
-     // actually add the offset to the pointer.
-     if (g->target->is32Bit() == false && g->opt.force32BitAddressing == true)
--        offset = SExtInst(offset, LLVMTypes::Int64VectorType, LLVMGetName(offset, "_to_64"));
-+        offset = SExtInst(offset, LLVMTypes::Int64VectorType, llvm::Twine(offset->getName()) + "_to_64");
- 
-     // Smear out the pointer to be varying; either the base pointer or the
-     // index must be varying for this method to be called.
-@@ -1929,7 +1918,7 @@ llvm::Value *FunctionEmitContext::applyVaryingGEP(llvm::Value *basePtr, llvm::Va
-     llvm::Value *varyingPtr = baseIsUniform ? SmearUniform(basePtr) : basePtr;
- 
-     // newPtr = ptr + offset
--    return BinaryOperator(llvm::Instruction::Add, varyingPtr, offset, LLVMGetName(basePtr, "_offset"));
-+    return BinaryOperator(llvm::Instruction::Add, varyingPtr, offset, llvm::Twine(basePtr->getName()) + "_offset");
- }
- 
- void FunctionEmitContext::MatchIntegerTypes(llvm::Value **v0, llvm::Value **v1) {
-@@ -2006,13 +1995,13 @@ llvm::Value *FunctionEmitContext::MakeSlicePointer(llvm::Value *ptr, llvm::Value
-     llvm::StructType *st = llvm::StructType::get(*g->ctx, eltTypes);
- 
-     llvm::Value *ret = llvm::UndefValue::get(st);
--    ret = InsertInst(ret, ptr, 0, LLVMGetName(ret, "_slice_ptr"));
--    ret = InsertInst(ret, offset, 1, LLVMGetName(ret, "_slice_offset"));
-+    ret = InsertInst(ret, ptr, 0, llvm::Twine(ret->getName()) + "_slice_ptr");
-+    ret = InsertInst(ret, offset, 1, llvm::Twine(ret->getName()) + "_slice_offset");
-     return ret;
- }
- 
- llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index, const Type *ptrRefType,
--                                                    const char *name) {
-+                                                    const llvm::Twine &name) {
-     if (basePtr == NULL || index == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2065,8 +2054,8 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
-         // uniform, so just emit the regular LLVM GEP instruction
-         llvm::Value *ind[1] = {index};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&ind[0], &ind[1]);
--        llvm::Instruction *inst =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "gep", bblock);
-+        llvm::Instruction *inst = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                                  name.isTriviallyEmpty() ? "gep" : name, bblock);
-         AddDebugPos(inst);
-         return inst;
-     } else
-@@ -2074,7 +2063,7 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
- }
- 
- llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0, llvm::Value *index1,
--                                                    const Type *ptrRefType, const char *name) {
-+                                                    const Type *ptrRefType, const llvm::Twine &name) {
-     if (basePtr == NULL || index0 == NULL || index1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2114,8 +2103,8 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
-         // uniform, so just emit the regular LLVM GEP instruction
-         llvm::Value *indices[2] = {index0, index1};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&indices[0], &indices[2]);
--        llvm::Instruction *inst =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "gep", bblock);
-+        llvm::Instruction *inst = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                                  name.isTriviallyEmpty() ? "gep" : name, bblock);
-         AddDebugPos(inst);
-         return inst;
-     } else {
-@@ -2138,7 +2127,7 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
- }
- 
- llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int elementNum, const Type *ptrRefType,
--                                                   const char *name, const PointerType **resultPtrType) {
-+                                                   const llvm::Twine &name, const PointerType **resultPtrType) {
-     if (resultPtrType != NULL)
-         AssertPos(currentPos, ptrRefType != NULL);
- 
-@@ -2195,8 +2184,8 @@ llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int
-         // If the pointer is uniform, we can use the regular LLVM GEP.
-         llvm::Value *offsets[2] = {LLVMInt32(0), LLVMInt32(elementNum)};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&offsets[0], &offsets[2]);
--        resultPtr =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "struct_offset", bblock);
-+        resultPtr = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                    name.isTriviallyEmpty() ? "struct_offset" : name, bblock);
-     } else {
-         // Otherwise do the math to find the offset and add it to the given
-         // varying pointers
-@@ -2237,7 +2226,7 @@ llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int
-         return resultPtr;
- }
- 
--llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if ((value == NULL) || (toType == NULL)) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2248,20 +2237,18 @@ llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type
-     llvm::Value *newBool = value;
-     if (g->target->getDataLayout()->getTypeSizeInBits(fromType) >
-         g->target->getDataLayout()->getTypeSizeInBits(toType)) {
--        if (name == NULL)
--            name = LLVMGetName(value, "_switchBool");
--        newBool = TruncInst(value, toType, name);
-+        newBool =
-+            TruncInst(value, toType, name.isTriviallyEmpty() ? (llvm::Twine(value->getName()) + "_switchBool") : name);
-     } else if (g->target->getDataLayout()->getTypeSizeInBits(fromType) <
-                g->target->getDataLayout()->getTypeSizeInBits(toType)) {
--        if (name == NULL)
--            name = LLVMGetName(value, "_switchBool");
--        newBool = SExtInst(value, toType, name);
-+        newBool =
-+            SExtInst(value, toType, name.isTriviallyEmpty() ? (llvm::Twine(value->getName()) + "_switchBool") : name);
-     }
- 
-     return newBool;
- }
- 
--llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, const char *name) {
-+llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, const llvm::Twine &name) {
-     if (ptr == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2270,13 +2257,13 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
-     llvm::PointerType *pt = llvm::dyn_cast<llvm::PointerType>(ptr->getType());
-     AssertPos(currentPos, pt != NULL);
- 
--    if (name == NULL)
--        name = LLVMGetName(ptr, "_load");
--
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    llvm::LoadInst *inst = new llvm::LoadInst(pt->getPointerElementType(), ptr, name, bblock);
-+    llvm::LoadInst *inst =
-+        new llvm::LoadInst(pt->getPointerElementType(), ptr,
-+                           name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name, bblock);
- #else
--    llvm::LoadInst *inst = new llvm::LoadInst(ptr, name, bblock);
-+    llvm::LoadInst *inst =
-+        new llvm::LoadInst(ptr, name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name, bblock);
- #endif
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
-@@ -2307,8 +2294,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
- static llvm::Value *lFinalSliceOffset(FunctionEmitContext *ctx, llvm::Value *ptr, const PointerType **ptrType) {
-     Assert(CastType<PointerType>(*ptrType) != NULL);
- 
--    llvm::Value *slicePtr = ctx->ExtractInst(ptr, 0, LLVMGetName(ptr, "_ptr"));
--    llvm::Value *sliceOffset = ctx->ExtractInst(ptr, 1, LLVMGetName(ptr, "_offset"));
-+    llvm::Value *slicePtr = ctx->ExtractInst(ptr, 0, llvm::Twine(ptr->getName()) + "_ptr");
-+    llvm::Value *sliceOffset = ctx->ExtractInst(ptr, 1, llvm::Twine(ptr->getName()) + "_offset");
- 
-     // slicePtr should be a pointer to an soa-width wide array of the
-     // final atomic/enum/pointer type
-@@ -2327,14 +2314,14 @@ static llvm::Value *lFinalSliceOffset(FunctionEmitContext *ctx, llvm::Value *ptr
-         slicePtr = ctx->BitCastInst(slicePtr, (*ptrType)->LLVMType(g->ctx));
- 
-     // And finally index based on the slice offset
--    return ctx->GetElementPtrInst(slicePtr, sliceOffset, *ptrType, LLVMGetName(slicePtr, "_final_gep"));
-+    return ctx->GetElementPtrInst(slicePtr, sliceOffset, *ptrType, llvm::Twine(slicePtr->getName()) + "_final_gep");
- }
- 
- /** Utility routine that loads from a uniform pointer to soa<> data,
-     returning a regular uniform (non-SOA result).
-  */
- llvm::Value *FunctionEmitContext::loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType,
--                                                     const char *name) {
-+                                                     const llvm::Twine &name) {
-     const Type *unifType = ptrType->GetBaseType()->GetAsUniformType();
- 
-     const CollectionType *ct = CastType<CollectionType>(ptrType->GetBaseType());
-@@ -2363,7 +2350,7 @@ llvm::Value *FunctionEmitContext::loadUniformFromSOA(llvm::Value *ptr, llvm::Val
- }
- 
- llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrRefType,
--                                           const char *name, bool one_elem) {
-+                                           const llvm::Twine &name, bool one_elem) {
-     if (ptr == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2371,9 +2358,6 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
- 
-     AssertPos(currentPos, ptrRefType != NULL && mask != NULL);
- 
--    if (name == NULL)
--        name = LLVMGetName(ptr, "_load");
--
-     const PointerType *ptrType;
-     const Type *elType;
-     if (CastType<ReferenceType>(ptrRefType) != NULL) {
-@@ -2393,7 +2377,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
- 
-     if (ptrType->IsUniformType()) {
-         if (ptrType->IsSlice()) {
--            return loadUniformFromSOA(ptr, mask, ptrType, name);
-+            return loadUniformFromSOA(ptr, mask, ptrType,
-+                                      name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name);
-         } else {
-             // FIXME: same issue as above load inst regarding alignment...
-             //
-@@ -2405,11 +2390,15 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-             const AtomicType *atomicType = CastType<AtomicType>(ptrType->GetBaseType());
- 
- #if ISPC_LLVM_VERSION <= ISPC_LLVM_10_0
--            llvm::LoadInst *inst = new llvm::LoadInst(ptr, name, false /* not volatile */, bblock);
-+            llvm::LoadInst *inst =
-+                new llvm::LoadInst(ptr, name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name,
-+                                   false /* not volatile */, bblock);
- #else // LLVM 11.0+
-             llvm::PointerType *ptr_type = llvm::dyn_cast<llvm::PointerType>(ptr->getType());
-             llvm::LoadInst *inst =
--                new llvm::LoadInst(ptr_type->getPointerElementType(), ptr, name, false /* not volatile */, bblock);
-+                new llvm::LoadInst(ptr_type->getPointerElementType(), ptr,
-+                                   name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name,
-+                                   false /* not volatile */, bblock);
- #endif
- 
-             if (atomicType != NULL && atomicType->IsVaryingType()) {
-@@ -2433,7 +2422,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-     } else {
-         // Otherwise we should have a varying ptr and it's time for a
-         // gather.
--        llvm::Value *gather_result = gather(ptr, ptrType, GetFullMask(), name);
-+        llvm::Value *gather_result = gather(ptr, ptrType, GetFullMask(),
-+                                            name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name);
-         if (!one_elem)
-             return gather_result;
- 
-@@ -2453,19 +2443,19 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-         // We can actually call either one, since both are i32s as far as
-         // LLVM's type system is concerned...
-         llvm::Function *fmm = mm[0]->function;
--        llvm::Value *int_mask = CallInst(fmm, NULL, mask, LLVMGetName(mask, "_movmsk"));
-+        llvm::Value *int_mask = CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_movmsk");
-         std::vector<Symbol *> lz;
-         m->symbolTable->LookupFunction("__count_trailing_zeros_i64", &lz);
-         llvm::Function *flz = lz[0]->function;
--        llvm::Value *elem_idx = CallInst(flz, NULL, int_mask, LLVMGetName(mask, "_clz"));
--        llvm::Value *elem = llvm::ExtractElementInst::Create(gather_result, elem_idx,
--                                                             LLVMGetName(gather_result, "_umasked_elem"), bblock);
-+        llvm::Value *elem_idx = CallInst(flz, NULL, int_mask, llvm::Twine(mask->getName()) + "_clz");
-+        llvm::Value *elem = llvm::ExtractElementInst::Create(
-+            gather_result, elem_idx, llvm::Twine(gather_result->getName()) + "_umasked_elem", bblock);
-         return elem;
-     }
- }
- 
- llvm::Value *FunctionEmitContext::gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask,
--                                         const char *name) {
-+                                         const llvm::Twine &name) {
-     // We should have a varying pointer if we get here...
-     AssertPos(currentPos, ptrType->IsVaryingType());
- 
-@@ -2602,7 +2592,8 @@ void FunctionEmitContext::addGSMetadata(llvm::Value *v, SourcePos pos) {
-     inst->setMetadata("last_column", md);
- }
- 
--llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *name, int align, bool atEntryBlock) {
-+llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const llvm::Twine &name, int align,
-+                                             bool atEntryBlock) {
-     if (llvmType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2615,12 +2606,12 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-         llvm::Instruction *retInst = allocaBlock->getTerminator();
-         AssertPos(currentPos, retInst);
-         unsigned AS = llvmFunction->getParent()->getDataLayout().getAllocaAddrSpace();
--        inst = new llvm::AllocaInst(llvmType, AS, name ? name : "", retInst);
-+        inst = new llvm::AllocaInst(llvmType, AS, name, retInst);
-     } else {
-         // Unless the caller overrode the default and wants it in the
-         // current basic block
-         unsigned AS = llvmFunction->getParent()->getDataLayout().getAllocaAddrSpace();
--        inst = new llvm::AllocaInst(llvmType, AS, name ? name : "", bblock);
-+        inst = new llvm::AllocaInst(llvmType, AS, name, bblock);
-     }
- 
-     // If no alignment was specified but we have an array of a uniform
-@@ -2639,7 +2630,8 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::AllocaInst(const Type *ptrType, const char *name, int align, bool atEntryBlock) {
-+llvm::Value *FunctionEmitContext::AllocaInst(const Type *ptrType, const llvm::Twine &name, int align,
-+                                             bool atEntryBlock) {
-     if (ptrType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3075,66 +3067,59 @@ llvm::Instruction *FunctionEmitContext::BranchInst(llvm::BasicBlock *trueBlock,
-     return b;
- }
- 
--llvm::Value *FunctionEmitContext::ExtractInst(llvm::Value *v, int elt, const char *name) {
-+llvm::Value *FunctionEmitContext::ExtractInst(llvm::Value *v, int elt, const llvm::Twine &name) {
-     if (v == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_extract_%d", elt);
--        name = LLVMGetName(v, buf);
--    }
-     llvm::Instruction *ei = NULL;
-     if (llvm::isa<llvm::VectorType>(v->getType()))
--        ei = llvm::ExtractElementInst::Create(v, LLVMInt32(elt), name, bblock);
-+        ei = llvm::ExtractElementInst::Create(
-+            v, LLVMInt32(elt),
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_extract_") + llvm::Twine(elt)) : name, bblock);
-     else
--        ei = llvm::ExtractValueInst::Create(v, elt, name, bblock);
-+        ei = llvm::ExtractValueInst::Create(
-+            v, elt, name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_extract_") + llvm::Twine(elt)) : name,
-+            bblock);
-     AddDebugPos(ei);
-     return ei;
- }
- 
--llvm::Value *FunctionEmitContext::InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const char *name) {
-+llvm::Value *FunctionEmitContext::InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const llvm::Twine &name) {
-     if (v == NULL || eltVal == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_insert_%d", elt);
--        name = LLVMGetName(v, buf);
--    }
--
-     llvm::Instruction *ii = NULL;
-     if (llvm::isa<llvm::VectorType>(v->getType()))
--        ii = llvm::InsertElementInst::Create(v, eltVal, LLVMInt32(elt), name, bblock);
-+        ii = llvm::InsertElementInst::Create(
-+            v, eltVal, LLVMInt32(elt),
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_insert_") + llvm::Twine(elt)) : name, bblock);
-     else
--        ii = llvm::InsertValueInst::Create(v, eltVal, elt, name, bblock);
-+        ii = llvm::InsertValueInst::Create(
-+            v, eltVal, elt,
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_insert_") + llvm::Twine(elt)) : name, bblock);
-     AddDebugPos(ii);
-     return ii;
- }
- 
--llvm::Value *FunctionEmitContext::ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const char *name) {
-+llvm::Value *FunctionEmitContext::ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask,
-+                                              const llvm::Twine &name) {
-     if (v1 == NULL || v2 == NULL || mask == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_shuffle");
--        name = LLVMGetName(v1, buf);
--    }
--
--    llvm::Instruction *ii = new llvm::ShuffleVectorInst(v1, v2, mask, name, bblock);
-+    llvm::Instruction *ii = new llvm::ShuffleVectorInst(
-+        v1, v2, mask, name.isTriviallyEmpty() ? (llvm::Twine(v1->getName()) + "_shuffle") : name, bblock);
- 
-     AddDebugPos(ii);
-     return ii;
- }
- 
--llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vecType, const char *name) {
-+llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vecType, const llvm::Twine &name) {
-     if (v == NULL || vecType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3148,12 +3133,6 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     Assert(ty && ty->getVectorElementType() == v->getType());
- #endif
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_broadcast");
--        name = LLVMGetName(v, buf);
--    }
--
-     // Generate the following sequence:
-     //   %name_init.i = insertelement <4 x i32> undef, i32 %val, i32 0
-     //   %name.i = shufflevector <4 x i32> %name_init.i, <4 x i32> undef,
-@@ -3163,7 +3142,7 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     llvm::Value *undef2 = llvm::UndefValue::get(vecType);
- 
-     // InsertElement
--    llvm::Twine tw = llvm::Twine(name) + llvm::Twine("_init");
-+    llvm::Twine tw = name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + llvm::Twine("_init");
-     llvm::Value *insert = InsertInst(undef1, v, 0, tw.str().c_str());
- 
-     // ShuffleVector
-@@ -3179,28 +3158,27 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-         llvm::ConstantVector::getSplat(llvm::ElementCount::get(static_cast<unsigned int>(ty->getNumElements()), false),
-                                        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
- #endif
--    llvm::Value *ret = ShuffleInst(insert, undef2, zeroVec, name);
-+    llvm::Value *ret = ShuffleInst(insert, undef2, zeroVec,
-+                                   name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name);
- 
-     return ret;
- }
- 
--llvm::PHINode *FunctionEmitContext::PhiNode(llvm::Type *type, int count, const char *name) {
--    llvm::PHINode *pn = llvm::PHINode::Create(type, count, name ? name : "phi", bblock);
-+llvm::PHINode *FunctionEmitContext::PhiNode(llvm::Type *type, int count, const llvm::Twine &name) {
-+    llvm::PHINode *pn = llvm::PHINode::Create(type, count, name.isTriviallyEmpty() ? "phi" : name, bblock);
-     AddDebugPos(pn);
-     return pn;
- }
- 
- llvm::Instruction *FunctionEmitContext::SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1,
--                                                   const char *name) {
-+                                                   const llvm::Twine &name) {
-     if (test == NULL || val0 == NULL || val1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(test, "_select");
--
--    llvm::Instruction *inst = llvm::SelectInst::Create(test, val0, val1, name, bblock);
-+    llvm::Instruction *inst = llvm::SelectInst::Create(
-+        test, val0, val1, name.isTriviallyEmpty() ? (llvm::Twine(test->getName()) + "_select") : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
-@@ -3226,7 +3204,7 @@ static unsigned int lCalleeArgCount(llvm::Value *callee, const FunctionType *fun
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType,
--                                           const std::vector<llvm::Value *> &args, const char *name) {
-+                                           const std::vector<llvm::Value *> &args, const llvm::Twine &name) {
-     if (func == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3258,9 +3236,9 @@ llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-         llvm::PointerType *func_ptr_type = llvm::dyn_cast<llvm::PointerType>(func->getType());
-         llvm::FunctionType *func_type = llvm::dyn_cast<llvm::FunctionType>(func_ptr_type->getPointerElementType());
--        llvm::CallInst *callinst = llvm::CallInst::Create(func_type, func, argVals, name ? name : "", bblock);
-+        llvm::CallInst *callinst = llvm::CallInst::Create(func_type, func, argVals, name, bblock);
- #else
--        llvm::CallInst *callinst = llvm::CallInst::Create(func, argVals, name ? name : "", bblock);
-+        llvm::CallInst *callinst = llvm::CallInst::Create(func, argVals, name, bblock);
- #endif
- 
-         // We could be dealing with a function pointer in which case this will not be a 'llvm::Function'.
-@@ -3464,14 +3442,14 @@ llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg,
--                                           const char *name) {
-+                                           const llvm::Twine &name) {
-     std::vector<llvm::Value *> args;
-     args.push_back(arg);
-     return CallInst(func, funcType, args, name);
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg0,
--                                           llvm::Value *arg1, const char *name) {
-+                                           llvm::Value *arg1, const llvm::Twine &name) {
-     std::vector<llvm::Value *> args;
-     args.push_back(arg0);
-     args.push_back(arg1);
-diff --git a/src/ctx.h b/src/ctx.h
-index 6e5ad74ba..48b3bb826 100644
---- a/src/ctx.h
-+++ b/src/ctx.h
-@@ -302,7 +302,7 @@ class FunctionEmitContext {
-     llvm::Value *GetStringPtr(const std::string &str);
- 
-     /** Create a new basic block with given name */
--    llvm::BasicBlock *CreateBasicBlock(const char *name, llvm::BasicBlock *insertAfter = NULL);
-+    llvm::BasicBlock *CreateBasicBlock(const llvm::Twine &name, llvm::BasicBlock *insertAfter = NULL);
- 
-     /** Given a vector with element type i1, return a vector of type
-         LLVMTypes::BoolVectorType.  This method handles the conversion for
-@@ -380,33 +380,33 @@ class FunctionEmitContext {
-         this also handles applying the given operation to the vector
-         elements. */
-     llvm::Value *BinaryOperator(llvm::Instruction::BinaryOps inst, llvm::Value *v0, llvm::Value *v1,
--                                const char *name = NULL);
-+                                const llvm::Twine &name = "");
- 
-     /** Emit the "not" operator.  Like BinaryOperator(), this also handles
-         a VectorType-based operand. */
--    llvm::Value *NotOperator(llvm::Value *v, const char *name = NULL);
-+    llvm::Value *NotOperator(llvm::Value *v, const llvm::Twine &name = "");
- 
-     /** Emit a comparison instruction.  If the operands are VectorTypes,
-         then a value for the corresponding boolean VectorType is
-         returned. */
-     llvm::Value *CmpInst(llvm::Instruction::OtherOps inst, llvm::CmpInst::Predicate pred, llvm::Value *v0,
--                         llvm::Value *v1, const char *name = NULL);
-+                         llvm::Value *v1, const llvm::Twine &name = "");
- 
-     /** Given a scalar value, return a vector of the same type (or an
-         array, for pointer types). */
--    llvm::Value *SmearUniform(llvm::Value *value, const char *name = NULL);
-+    llvm::Value *SmearUniform(llvm::Value *value, const llvm::Twine &name = "");
- 
--    llvm::Value *BitCastInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Value *PtrToIntInst(llvm::Value *value, const char *name = NULL);
--    llvm::Value *PtrToIntInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Value *IntToPtrInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+    llvm::Value *BitCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Value *PtrToIntInst(llvm::Value *value, const llvm::Twine &name = "");
-+    llvm::Value *PtrToIntInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Value *IntToPtrInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
- 
--    llvm::Instruction *TruncInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+    llvm::Instruction *TruncInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-     llvm::Instruction *CastInst(llvm::Instruction::CastOps op, llvm::Value *value, llvm::Type *type,
--                                const char *name = NULL);
--    llvm::Instruction *FPCastInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Instruction *SExtInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Instruction *ZExtInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+                                const llvm::Twine &name = "");
-+    llvm::Instruction *FPCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Instruction *SExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Instruction *ZExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
- 
-     /** Given two integer-typed values (but possibly one vector and the
-         other not, and or of possibly-different bit-widths), update their
-@@ -426,9 +426,9 @@ class FunctionEmitContext {
-         pointers.  The underlying type of the base pointer must be provided
-         via the ptrType parameter */
-     llvm::Value *GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index, const Type *ptrType,
--                                   const char *name = NULL);
-+                                   const llvm::Twine &name = "");
-     llvm::Value *GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0, llvm::Value *index1, const Type *ptrType,
--                                   const char *name = NULL);
-+                                   const llvm::Twine &name = "");
- 
-     /** This method returns a new pointer that represents offsetting the
-         given base pointer to point at the given element number of the
-@@ -436,26 +436,26 @@ class FunctionEmitContext {
-         pointer must be a pointer to a structure type.  The ptrType gives
-         the type of the pointer, though it may be NULL if the base pointer
-         is uniform. */
--    llvm::Value *AddElementOffset(llvm::Value *basePtr, int elementNum, const Type *ptrType, const char *name = NULL,
--                                  const PointerType **resultPtrType = NULL);
-+    llvm::Value *AddElementOffset(llvm::Value *basePtr, int elementNum, const Type *ptrType,
-+                                  const llvm::Twine &name = "", const PointerType **resultPtrType = NULL);
- 
-     /** Bool is stored as i8 and <WIDTH x i8> but represented in IR as i1 and
-      * <WIDTH x MASK>. This is a helper function to match bool size at storage
-      * interface. */
--    llvm::Value *SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const char *name = NULL);
-+    llvm::Value *SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name = "");
-     /** Load from the memory location(s) given by lvalue, using the given
-         mask.  The lvalue may be varying, in which case this corresponds to
-         a gather from the multiple memory locations given by the array of
-         pointer values given by the lvalue.  If the lvalue is not varying,
-         then both the mask pointer and the type pointer may be NULL. */
--    llvm::Value *LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrType, const char *name = NULL,
-+    llvm::Value *LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrType, const llvm::Twine &name = "",
-                           bool one_elem = false);
- 
-     /* Load from memory location(s) given.
-      * 'type' needs to be provided when storage type is different from IR type. For example,
-      * 'unform bool' is 'i1' in IR but stored as 'i8'.
-      * Otherwise leave this as NULL. */
--    llvm::Value *LoadInst(llvm::Value *ptr, const Type *type = NULL, const char *name = NULL);
-+    llvm::Value *LoadInst(llvm::Value *ptr, const Type *type = NULL, const llvm::Twine &name = "");
- 
-     /** Emits an alloca instruction to allocate stack storage for the given
-         type.  If a non-zero alignment is specified, the object is also
-@@ -463,7 +463,8 @@ class FunctionEmitContext {
-         instruction is added at the start of the function in the entry
-         basic block; if it should be added to the current basic block, then
-         the atEntryBlock parameter should be false. */
--    llvm::Value *AllocaInst(llvm::Type *llvmType, const char *name = NULL, int align = 0, bool atEntryBlock = true);
-+    llvm::Value *AllocaInst(llvm::Type *llvmType, const llvm::Twine &name = "", int align = 0,
-+                            bool atEntryBlock = true);
- 
-     /** Emits an alloca instruction to allocate stack storage for the given
-         type.  If a non-zero alignment is specified, the object is also
-@@ -474,7 +475,7 @@ class FunctionEmitContext {
-         This implementation is preferred when possible. It is needed when
-         storage type is different from IR type. For example,
-         'unform bool' is 'i1' in IR but stored as 'i8'. */
--    llvm::Value *AllocaInst(const Type *ptrType, const char *name = NULL, int align = 0, bool atEntryBlock = true);
-+    llvm::Value *AllocaInst(const Type *ptrType, const llvm::Twine &name = "", int align = 0, bool atEntryBlock = true);
- 
-     /** Standard store instruction; for this variant, the lvalue must be a
-         single pointer, not a varying lvalue.
-@@ -502,39 +503,41 @@ class FunctionEmitContext {
-     /** This convenience method maps to an llvm::ExtractElementInst if the
-         given value is a llvm::VectorType, and to an llvm::ExtractValueInst
-         otherwise. */
--    llvm::Value *ExtractInst(llvm::Value *v, int elt, const char *name = NULL);
-+    llvm::Value *ExtractInst(llvm::Value *v, int elt, const llvm::Twine &name = "");
- 
-     /** This convenience method maps to an llvm::InsertElementInst if the
-         given value is a llvm::VectorType, and to an llvm::InsertValueInst
-         otherwise. */
--    llvm::Value *InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const char *name = NULL);
-+    llvm::Value *InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const llvm::Twine &name = "");
- 
-     /** This convenience method maps to an llvm::ShuffleVectorInst. */
--    llvm::Value *ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const char *name = NULL);
-+    llvm::Value *ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const llvm::Twine &name = "");
- 
-     /** This convenience method to generate broadcast pattern. It takes a value
-         and a vector type. Type of the value must match element type of the
-         vector. */
--    llvm::Value *BroadcastValue(llvm::Value *v, llvm::Type *vecType, const char *name = NULL);
-+    llvm::Value *BroadcastValue(llvm::Value *v, llvm::Type *vecType, const llvm::Twine &name = "");
- 
--    llvm::PHINode *PhiNode(llvm::Type *type, int count, const char *name = NULL);
--    llvm::Instruction *SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1, const char *name = NULL);
-+    llvm::PHINode *PhiNode(llvm::Type *type, int count, const llvm::Twine &name = "");
-+    llvm::Instruction *SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1,
-+                                  const llvm::Twine &name = "");
- 
-     /** Emits IR to do a function call with the given arguments.  If the
-         function type is a varying function pointer type, its full type
-         must be provided in funcType.  funcType can be NULL if func is a
-         uniform function pointer. */
-     llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, const std::vector<llvm::Value *> &args,
--                          const char *name = NULL);
-+                          const llvm::Twine &name = "");
- 
-     /** This is a convenience method that issues a call instruction to a
-         function that takes just a single argument. */
--    llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg, const char *name = NULL);
-+    llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg,
-+                          const llvm::Twine &name = "");
- 
-     /** This is a convenience method that issues a call instruction to a
-         function that takes two arguments. */
-     llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg0, llvm::Value *arg1,
--                          const char *name = NULL);
-+                          const llvm::Twine &name = "");
- 
-     /** Launch an asynchronous task to run the given function, passing it
-         he given argument values. */
-@@ -756,9 +759,10 @@ class FunctionEmitContext {
-     void maskedStore(llvm::Value *value, llvm::Value *ptr, const Type *ptrType, llvm::Value *mask);
-     void storeUniformToSOA(llvm::Value *value, llvm::Value *ptr, llvm::Value *mask, const Type *valueType,
-                            const PointerType *ptrType);
--    llvm::Value *loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType, const char *name);
-+    llvm::Value *loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType,
-+                                    const llvm::Twine &name = "");
- 
--    llvm::Value *gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask, const char *name);
-+    llvm::Value *gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask, const llvm::Twine &name = "");
- 
-     llvm::Value *addVaryingOffsetsIfNeeded(llvm::Value *ptr, const Type *ptrType);
- };
-diff --git a/src/expr.cpp b/src/expr.cpp
-index 80cc3020a..6d38d1889 100644
---- a/src/expr.cpp
-+++ b/src/expr.cpp
-@@ -1021,11 +1021,11 @@ static llvm::Value *lEmitNegate(Expr *arg, SourcePos pos, FunctionEmitContext *c
-     ctx->SetDebugPos(pos);
-     if (type->IsFloatType()) {
-         llvm::Value *zero = llvm::ConstantFP::getZeroValueForNegation(type->LLVMType(g->ctx));
--        return ctx->BinaryOperator(llvm::Instruction::FSub, zero, argVal, LLVMGetName(argVal, "_negate"));
-+        return ctx->BinaryOperator(llvm::Instruction::FSub, zero, argVal, llvm::Twine(argVal->getName()) + "_negate");
-     } else {
-         llvm::Value *zero = lLLVMConstantValue(type, g->ctx, 0.);
-         AssertPos(pos, type->IsIntType());
--        return ctx->BinaryOperator(llvm::Instruction::Sub, zero, argVal, LLVMGetName(argVal, "_negate"));
-+        return ctx->BinaryOperator(llvm::Instruction::Sub, zero, argVal, llvm::Twine(argVal->getName()) + "_negate");
-     }
- }
- 
-@@ -1047,11 +1047,11 @@ llvm::Value *UnaryExpr::GetValue(FunctionEmitContext *ctx) const {
-         return lEmitNegate(expr, pos, ctx);
-     case LogicalNot: {
-         llvm::Value *argVal = expr->GetValue(ctx);
--        return ctx->NotOperator(argVal, LLVMGetName(argVal, "_logicalnot"));
-+        return ctx->NotOperator(argVal, llvm::Twine(argVal->getName()) + "_logicalnot");
-     }
-     case BitNot: {
-         llvm::Value *argVal = expr->GetValue(ctx);
--        return ctx->NotOperator(argVal, LLVMGetName(argVal, "_bitnot"));
-+        return ctx->NotOperator(argVal, llvm::Twine(argVal->getName()) + "_bitnot");
-     }
-     default:
-         FATAL("logic error");
-@@ -1518,7 +1518,8 @@ static llvm::Value *lEmitBinaryArith(BinaryExpr::Op op, llvm::Value *value0, llv
-             return NULL;
-         }
- 
--        return ctx->BinaryOperator(inst, value0, value1, LLVMGetName(opName, value0, value1));
-+        return ctx->BinaryOperator(inst, value0, value1,
-+                                   (((llvm::Twine(opName) + "_") + value0->getName()) + "_") + value1->getName());
-     }
- }
- 
-@@ -1563,7 +1564,7 @@ static llvm::Value *lEmitBinaryCmp(BinaryExpr::Op op, llvm::Value *e0Val, llvm::
-     }
- 
-     llvm::Value *cmp = ctx->CmpInst(isFloatOp ? llvm::Instruction::FCmp : llvm::Instruction::ICmp, pred, e0Val, e1Val,
--                                    LLVMGetName(opName, e0Val, e1Val));
-+                                    (((llvm::Twine(opName) + "_") + e0Val->getName()) + "_") + e1Val->getName());
-     // This is a little ugly: CmpInst returns i1 values, but we use vectors
-     // of i32s for varying bool values; type convert the result here if
-     // needed.
-@@ -4177,7 +4178,7 @@ static llvm::Value *lConvertToSlicePointer(FunctionEmitContext *ctx, llvm::Value
-     // offsets
-     llvm::Value *result = llvm::Constant::getNullValue(sliceStructType);
-     // And replace the pointer in the struct with the given pointer
--    return ctx->InsertInst(result, ptr, 0, LLVMGetName(ptr, "_slice"));
-+    return ctx->InsertInst(result, ptr, 0, llvm::Twine(ptr->getName()) + "_slice");
- }
- 
- /** If the given array index is a compile time constant, check to see if it
-@@ -4258,8 +4259,8 @@ llvm::Value *IndexExpr::GetLValue(FunctionEmitContext *ctx) const {
-         // Convert to a slice pointer if we're indexing into SOA data
-         basePtrValue = lConvertPtrToSliceIfNeeded(ctx, basePtrValue, &baseExprType);
- 
--        llvm::Value *ptr =
--            ctx->GetElementPtrInst(basePtrValue, indexValue, baseExprType, LLVMGetName(basePtrValue, "_offset"));
-+        llvm::Value *ptr = ctx->GetElementPtrInst(basePtrValue, indexValue, baseExprType,
-+                                                  llvm::Twine(basePtrValue->getName()) + "_offset");
-         return lAddVaryingOffsetsIfNeeded(ctx, ptr, GetLValueType());
-     }
- 
-@@ -4290,8 +4291,8 @@ llvm::Value *IndexExpr::GetLValue(FunctionEmitContext *ctx) const {
-     ctx->SetDebugPos(pos);
- 
-     // And do the actual indexing calculation..
--    llvm::Value *ptr =
--        ctx->GetElementPtrInst(basePtr, LLVMInt32(0), indexValue, basePtrType, LLVMGetName(basePtr, "_offset"));
-+    llvm::Value *ptr = ctx->GetElementPtrInst(basePtr, LLVMInt32(0), indexValue, basePtrType,
-+                                              llvm::Twine(basePtr->getName()) + "_offset");
-     return lAddVaryingOffsetsIfNeeded(ctx, ptr, GetLValueType());
- }
- 
-@@ -4788,15 +4789,14 @@ llvm::Value *VectorMemberExpr::GetValue(FunctionEmitContext *ctx) const {
-         for (size_t i = 0; i < identifier.size(); ++i) {
-             char idStr[2] = {identifier[i], '\0'};
-             llvm::Value *elementPtr =
--                ctx->AddElementOffset(basePtr, indices[i], basePtrType, LLVMGetName(basePtr, idStr));
-+                ctx->AddElementOffset(basePtr, indices[i], basePtrType, llvm::Twine(basePtr->getName()) + idStr);
-             llvm::Value *elementValue = ctx->LoadInst(elementPtr, elementMask, elementPtrType);
- 
--            const char *resultName = LLVMGetName(resultPtr, idStr);
--            llvm::Value *ptmp = ctx->AddElementOffset(resultPtr, i, NULL, resultName);
-+            llvm::Value *ptmp = ctx->AddElementOffset(resultPtr, i, NULL, llvm::Twine(resultPtr->getName()) + idStr);
-             ctx->StoreInst(elementValue, ptmp, elementPtrType, expr->GetType()->IsUniformType());
-         }
- 
--        return ctx->LoadInst(resultPtr, memberType, LLVMGetName(basePtr, "_swizzle"));
-+        return ctx->LoadInst(resultPtr, memberType, llvm::Twine(basePtr->getName()) + "_swizzle");
-     }
- }
- 
-@@ -4932,7 +4932,7 @@ llvm::Value *MemberExpr::GetValue(FunctionEmitContext *ctx) const {
- 
-     ctx->SetDebugPos(pos);
-     std::string suffix = std::string("_") + identifier;
--    return ctx->LoadInst(lvalue, mask, lvalueType, LLVMGetName(lvalue, suffix.c_str()));
-+    return ctx->LoadInst(lvalue, mask, lvalueType, llvm::Twine(lvalue->getName()) + suffix);
- }
- 
- const Type *MemberExpr::GetType() const { return NULL; }
-@@ -6502,7 +6502,7 @@ static llvm::Value *lTypeConvAtomic(FunctionEmitContext *ctx, llvm::Value *exprV
-                 // does for everyone else...
-                 Assert(cast);
-                 cast = ctx->SwitchBoolSize(cast, LLVMTypes::BoolVectorType->getElementType(),
--                                           LLVMGetName(cast, "to_i_bool"));
-+                                           llvm::Twine(cast->getName()) + "to_i_bool");
-             }
-         } else {
-             // fromType->IsVaryingType())
-@@ -8246,7 +8246,7 @@ llvm::Value *NewExpr::GetValue(FunctionEmitContext *ctx) const {
-         // pointer of the return type and to run the code for initializers,
-         // if present.
-         llvm::Type *ptrType = retType->LLVMType(g->ctx);
--        ptrValue = ctx->BitCastInst(ptrValue, ptrType, LLVMGetName(ptrValue, "_cast_ptr"));
-+        ptrValue = ctx->BitCastInst(ptrValue, ptrType, llvm::Twine(ptrValue->getName()) + "_cast_ptr");
- 
-         if (initExpr != NULL)
-             InitSymbol(ptrValue, allocType, initExpr, ctx, pos);
-diff --git a/src/llvmutil.cpp b/src/llvmutil.cpp
-index 970175dbf..d0becb9f5 100644
---- a/src/llvmutil.cpp
-+++ b/src/llvmutil.cpp
-@@ -1605,23 +1605,6 @@ llvm::Value *LLVMShuffleVectors(llvm::Value *v1, llvm::Value *v2, int32_t shuf[]
-     return new llvm::ShuffleVectorInst(v1, v2, vec, "shuffle", insertBefore);
- }
- 
--const char *LLVMGetName(llvm::Value *v, const char *s) {
--    if (v == NULL)
--        return s;
--    std::string ret = std::string(v->getName());
--    ret += s;
--    return strdup(ret.c_str());
--}
--
--const char *LLVMGetName(const char *op, llvm::Value *v1, llvm::Value *v2) {
--    std::string r = op;
--    r += "_";
--    r += v1->getName().str();
--    r += "_";
--    r += v2->getName().str();
--    return strdup(r.c_str());
--}
--
- #ifdef ISPC_GENX_ENABLED
- bool lIsSVMLoad(llvm::Instruction *inst) {
-     Assert(inst);
-diff --git a/src/llvmutil.h b/src/llvmutil.h
-index 42cce4d83..07d089bb4 100644
---- a/src/llvmutil.h
-+++ b/src/llvmutil.h
-@@ -328,11 +328,6 @@ extern llvm::Value *LLVMConcatVectors(llvm::Value *v1, llvm::Value *v2, llvm::In
- extern llvm::Value *LLVMShuffleVectors(llvm::Value *v1, llvm::Value *v2, int32_t shuf[], int shufSize,
-                                        llvm::Instruction *insertBefore);
- 
--/** Utility routines to concat strings with the names of existing values to
--    create meaningful new names for instruction values.
--*/
--extern const char *LLVMGetName(llvm::Value *v, const char *);
--extern const char *LLVMGetName(const char *op, llvm::Value *v1, llvm::Value *v2);
- #ifdef ISPC_GENX_ENABLED
- enum AddressSpace { Local, Global, External };
- 
-diff --git a/src/opt.cpp b/src/opt.cpp
-index 5b1ac7b63..9d6cae058 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -257,7 +257,7 @@ static bool lGetSourcePosFromMetadata(const llvm::Instruction *inst, SourcePos *
-     return true;
- }
- 
--static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, const char *name,
-+static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[2] = {arg0, arg1};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[2]);
-@@ -265,21 +265,22 @@ static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llv
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    const char *name, llvm::Instruction *insertBefore = NULL) {
-+                                    const llvm::Twine &name, llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[3] = {arg0, arg1, arg2};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[3]);
-     return llvm::CallInst::Create(func, newArgArray, name, insertBefore);
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, const char *name, llvm::Instruction *insertBefore = NULL) {
-+                                    llvm::Value *arg3, const llvm::Twine &name,
-+                                    llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[4] = {arg0, arg1, arg2, arg3};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[4]);
-     return llvm::CallInst::Create(func, newArgArray, name, insertBefore);
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, llvm::Value *arg4, const char *name,
-+                                    llvm::Value *arg3, llvm::Value *arg4, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[5] = {arg0, arg1, arg2, arg3, arg4};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[5]);
-@@ -287,7 +288,7 @@ static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llv
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, llvm::Value *arg4, llvm::Value *arg5, const char *name,
-+                                    llvm::Value *arg3, llvm::Value *arg4, llvm::Value *arg5, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[6] = {arg0, arg1, arg2, arg3, arg4, arg5};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[6]);
-@@ -991,23 +992,24 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 llvm::Type *returnType = callInst->getType();
-                 Assert(llvm::isa<llvm::VectorType>(returnType));
-                 // cast the i8 * to the appropriate type
--                const char *name = LLVMGetName(callInst->getArgOperand(0), "_cast");
--                llvm::Value *castPtr = new llvm::BitCastInst(callInst->getArgOperand(0),
--                                                             llvm::PointerType::get(returnType, 0), name, callInst);
-+                llvm::Value *castPtr =
-+                    new llvm::BitCastInst(callInst->getArgOperand(0), llvm::PointerType::get(returnType, 0),
-+                                          llvm::Twine(callInst->getArgOperand(0)->getName()) + "_cast", callInst);
-                 lCopyMetadata(castPtr, callInst);
-                 int align;
-                 if (g->opt.forceAlignedMemory)
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
--                name = LLVMGetName(callInst->getArgOperand(0), "_load");
- #if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
--                llvm::Instruction *loadInst = new llvm::LoadInst(castPtr, name, false /* not volatile */,
--                                                                 llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
-+                llvm::Instruction *loadInst =
-+                    new llvm::LoadInst(castPtr, llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load",
-+                                       false /* not volatile */, llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
- #else
-                 llvm::Instruction *loadInst = new llvm::LoadInst(
--                    llvm::dyn_cast<llvm::PointerType>(castPtr->getType())->getPointerElementType(), castPtr, name,
--                    false /* not volatile */, llvm::MaybeAlign(align).valueOrOne(), (llvm::Instruction *)NULL);
-+                    llvm::dyn_cast<llvm::PointerType>(castPtr->getType())->getPointerElementType(), castPtr,
-+                    llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load", false /* not volatile */,
-+                    llvm::MaybeAlign(align).valueOrOne(), (llvm::Instruction *)NULL);
- #endif
-                 lCopyMetadata(loadInst, callInst);
-                 llvm::ReplaceInstWithInst(callInst, loadInst);
-@@ -1028,9 +1030,9 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 // all lanes storing, so replace with a regular store
-                 llvm::Value *rvalue = callInst->getArgOperand(2);
-                 llvm::Type *storeType = rvalue->getType();
--                const char *name = LLVMGetName(callInst->getArgOperand(0), "_ptrcast");
--                llvm::Value *castPtr = new llvm::BitCastInst(callInst->getArgOperand(0),
--                                                             llvm::PointerType::get(storeType, 0), name, callInst);
-+                llvm::Value *castPtr =
-+                    new llvm::BitCastInst(callInst->getArgOperand(0), llvm::PointerType::get(storeType, 0),
-+                                          llvm::Twine(callInst->getArgOperand(0)->getName()) + "_ptrcast", callInst);
-                 lCopyMetadata(castPtr, callInst);
- 
-                 int align;
-@@ -1339,8 +1341,8 @@ static llvm::Value *lGetBasePointer(llvm::Value *v, llvm::Instruction *insertBef
-         if (t == NULL) {
-             return NULL;
-         } else {
--            return llvm::CastInst::Create(ci->getOpcode(), t, ci->getType()->getScalarType(), LLVMGetName(t, "_cast"),
--                                          insertBefore);
-+            return llvm::CastInst::Create(ci->getOpcode(), t, ci->getType()->getScalarType(),
-+                                          llvm::Twine(t->getName()) + "_cast", insertBefore);
-         }
-     }
- 
-@@ -1583,13 +1585,13 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-         if (co == NULL)
-             *constOffset = NULL;
-         else
--            *constOffset =
--                llvm::CastInst::Create(cast->getOpcode(), co, cast->getType(), LLVMGetName(co, "_cast"), insertBefore);
-+            *constOffset = llvm::CastInst::Create(cast->getOpcode(), co, cast->getType(),
-+                                                  llvm::Twine(co->getName()) + "_cast", insertBefore);
-         if (vo == NULL)
-             *variableOffset = NULL;
-         else
--            *variableOffset =
--                llvm::CastInst::Create(cast->getOpcode(), vo, cast->getType(), LLVMGetName(vo, "_cast"), insertBefore);
-+            *variableOffset = llvm::CastInst::Create(cast->getOpcode(), vo, cast->getType(),
-+                                                     llvm::Twine(vo->getName()) + "_cast", insertBefore);
-         return;
-     }
- 
-@@ -1608,16 +1610,18 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-             else if (c1 == NULL || llvm::isa<llvm::ConstantAggregateZero>(c1))
-                 *constOffset = c0;
-             else
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, c0, c1, LLVMGetName("add", c0, c1),
--                                                            insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, c0, c1, ((llvm::Twine("add_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
- 
-             if (v0 == NULL || llvm::isa<llvm::ConstantAggregateZero>(v0))
-                 *variableOffset = v1;
-             else if (v1 == NULL || llvm::isa<llvm::ConstantAggregateZero>(v1))
-                 *variableOffset = v0;
-             else
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, v0, v1,
--                                                               LLVMGetName("add", v0, v1), insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, v0, v1, ((llvm::Twine("add_") + v0->getName()) + "_") + v1->getName(),
-+                    insertBefore);
-             return;
-         } else if (bop->getOpcode() == llvm::Instruction::Shl) {
-             lExtractConstantOffset(op0, &c0, &v0, insertBefore);
-@@ -1633,10 +1637,12 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-                 *constOffset = vec;
-                 *variableOffset = NULL;
-             } else {
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Shl, c0, c1, LLVMGetName("shl", c0, c1),
--                                                            insertBefore);
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Shl, v0, c1,
--                                                               LLVMGetName("shl", v0, c1), insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Shl, c0, c1, ((llvm::Twine("shl_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Shl, v0, c1, ((llvm::Twine("shl_") + v0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-             }
-             return;
-         } else if (bop->getOpcode() == llvm::Instruction::Mul) {
-@@ -1648,25 +1654,30 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-             // Note that the first term is a constant and the last three are
-             // variable.
-             if (c0 != NULL && c1 != NULL)
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, c1, LLVMGetName("mul", c0, c1),
--                                                            insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Mul, c0, c1, ((llvm::Twine("mul_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-             else
-                 *constOffset = NULL;
- 
-             llvm::Value *va = NULL, *vb = NULL, *vc = NULL;
-             if (v0 != NULL && c1 != NULL)
--                va = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, c1, LLVMGetName("mul", v0, c1),
-+                va = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, c1,
-+                                                  ((llvm::Twine("mul_") + v0->getName()) + "_") + c1->getName(),
-                                                   insertBefore);
-             if (c0 != NULL && v1 != NULL)
--                vb = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, v1, LLVMGetName("mul", c0, v1),
-+                vb = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, v1,
-+                                                  ((llvm::Twine("mul_") + c0->getName()) + "_") + v1->getName(),
-                                                   insertBefore);
-             if (v0 != NULL && v1 != NULL)
--                vc = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, v1, LLVMGetName("mul", v0, v1),
-+                vc = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, v1,
-+                                                  ((llvm::Twine("mul_") + v0->getName()) + "_") + v1->getName(),
-                                                   insertBefore);
- 
-             llvm::Value *vab = NULL;
-             if (va != NULL && vb != NULL)
--                vab = llvm::BinaryOperator::Create(llvm::Instruction::Add, va, vb, LLVMGetName("add", va, vb),
-+                vab = llvm::BinaryOperator::Create(llvm::Instruction::Add, va, vb,
-+                                                   ((llvm::Twine("add_") + va->getName()) + "_") + vb->getName(),
-                                                    insertBefore);
-             else if (va != NULL)
-                 vab = va;
-@@ -1674,8 +1685,9 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-                 vab = vb;
- 
-             if (vab != NULL && vc != NULL)
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, vab, vc,
--                                                               LLVMGetName("add", vab, vc), insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, vab, vc, ((llvm::Twine("add_") + vab->getName()) + "_") + vc->getName(),
-+                    insertBefore);
-             else if (vab != NULL)
-                 *variableOffset = vab;
-             else
-@@ -1943,7 +1955,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-             // all zeros (i.e. a ConstantAggregateZero, but just in case,
-             // do the more general check with lVectorIs32BitInts().
-             variableOffset = new llvm::TruncInst(variableOffset, LLVMTypes::Int32VectorType,
--                                                 LLVMGetName(variableOffset, "_trunc"), insertBefore);
-+                                                 llvm::Twine(variableOffset->getName()) + "_trunc", insertBefore);
-         else
-             return false;
-     }
-@@ -1952,7 +1964,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-         if (lVectorIs32BitInts(constOffset)) {
-             // Truncate them so we have a 32-bit vector type for them.
-             constOffset = new llvm::TruncInst(constOffset, LLVMTypes::Int32VectorType,
--                                              LLVMGetName(constOffset, "_trunc"), insertBefore);
-+                                              llvm::Twine(constOffset->getName()) + "_trunc", insertBefore);
-         } else {
-             // FIXME: otherwise we just assume that all constant offsets
-             // can actually always fit into 32-bits...  (This could be
-@@ -1963,7 +1975,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-             // llvm::ConstantFoldInstruction() doesn't seem to be doing
-             // enough for us in some cases if we call it from here.
-             constOffset = new llvm::TruncInst(constOffset, LLVMTypes::Int32VectorType,
--                                              LLVMGetName(constOffset, "_trunc"), insertBefore);
-+                                              llvm::Twine(constOffset->getName()) + "_trunc", insertBefore);
-         }
-     }
- 
-@@ -2012,8 +2024,8 @@ static bool lOffsets32BitSafe(llvm::Value **offsetPtr, llvm::Instruction *insert
- 
-         // Alternatively, offset could be a sequence of adds terminating
-         // in safe constant vectors or a SExt.
--        *offsetPtr =
--            new llvm::TruncInst(offset, LLVMTypes::Int32VectorType, LLVMGetName(offset, "_trunc"), insertBefore);
-+        *offsetPtr = new llvm::TruncInst(offset, LLVMTypes::Int32VectorType, llvm::Twine(offset->getName()) + "_trunc",
-+                                         insertBefore);
-         return true;
-     } else
-         return false;
-@@ -2229,7 +2241,8 @@ static bool lGSToGSBaseOffsets(llvm::CallInst *callInst) {
-     }
-     // Cast the base pointer to a void *, since that's what the
-     // __pseudo_*_base_offsets_* functions want.
--    basePtr = new llvm::IntToPtrInst(basePtr, LLVMTypes::VoidPointerType, LLVMGetName(basePtr, "_2void"), callInst);
-+    basePtr = new llvm::IntToPtrInst(basePtr, LLVMTypes::VoidPointerType, llvm::Twine(basePtr->getName()) + "_2void",
-+                                     callInst);
-     lCopyMetadata(basePtr, callInst);
-     llvm::Function *gatherScatterFunc = info->baseOffsetsFunc;
- 
-@@ -2803,7 +2816,7 @@ static bool lGSToLoadStore(llvm::CallInst *callInst) {
-                 lCopyMetadata(ptr, callInst);
-                 Debug(pos, "Transformed gather to unaligned vector load!");
-                 llvm::Instruction *newCall =
--                    lCallInst(gatherInfo->loadMaskedFunc, ptr, mask, LLVMGetName(ptr, "_masked_load"));
-+                    lCallInst(gatherInfo->loadMaskedFunc, ptr, mask, llvm::Twine(ptr->getName()) + "_masked_load");
-                 lCopyMetadata(newCall, callInst);
-                 llvm::ReplaceInstWithInst(callInst, newCall);
-                 return true;
diff --git a/srcpkgs/ispc/patches/llvm12-004.patch b/srcpkgs/ispc/patches/llvm12-004.patch
deleted file mode 100644
index 3a94d8443a5e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-004.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From c03a5142444476a1caa5c2ba7fa2d92d7793d6f1 Mon Sep 17 00:00:00 2001
-From: Deepak Rajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Mon, 25 Jan 2021 09:22:49 -0800
-Subject: [PATCH] Fixing build on llvm trunk.
-
----
- src/ctx.cpp | 7 +++----
- 1 file changed, 3 insertions(+), 4 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index ded524b71..b60e6fe84 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1020,8 +1020,7 @@ void FunctionEmitContext::EmitCaseLabel(int value, bool checkMask, SourcePos pos
-     llvm::BasicBlock *bbCaseImpl = NULL;
-     if (emitGenXHardwareMask()) {
-         // Create basic block with actual case implementation
--        llvm::Twine bbName = llvm::Twine(bbCase->getName()) + "_impl";
--        bbCaseImpl = CreateBasicBlock(bbName, bbCase);
-+        bbCaseImpl = CreateBasicBlock(llvm::Twine(bbCase->getName()) + "_impl", bbCase);
-     }
- #endif
- 
-@@ -3142,8 +3141,8 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     llvm::Value *undef2 = llvm::UndefValue::get(vecType);
- 
-     // InsertElement
--    llvm::Twine tw = name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + llvm::Twine("_init");
--    llvm::Value *insert = InsertInst(undef1, v, 0, tw.str().c_str());
-+    llvm::Value *insert =
-+        InsertInst(undef1, v, 0, name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + "_init");
- 
-     // ShuffleVector
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
diff --git a/srcpkgs/ispc/patches/llvm12-005.patch b/srcpkgs/ispc/patches/llvm12-005.patch
deleted file mode 100644
index e3e96b00abfa..000000000000
--- a/srcpkgs/ispc/patches/llvm12-005.patch
+++ /dev/null
@@ -1,372 +0,0 @@
-From c1d0a51bf8416d42144de9e2bdd59825eaeff1ac Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Fri, 8 Jan 2021 14:13:49 -0800
-Subject: [PATCH] LLVM 11 support for gen code
-
----
- src/ctx.cpp                     |  13 ++-
- src/gen/GlobalsLocalization.cpp |   9 +-
- src/opt.cpp                     | 143 ++++++++++++++++++++++++--------
- 3 files changed, 124 insertions(+), 41 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index b60e6fe84..2a72e6837 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1,5 +1,5 @@
- /*
--  Copyright (c) 2010-2020, Intel Corporation
-+  Copyright (c) 2010-2021, Intel Corporation
-   All rights reserved.
- 
-   Redistribution and use in source and binary forms, with or without
-@@ -3685,8 +3685,17 @@ llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::
-     AssertPos(currentPos, llvm::isa<llvm::VectorType>(value->getType()));
-     llvm::VectorType *vt = llvm::dyn_cast<llvm::VectorType>(value->getType());
-     if (defaults == NULL) {
--        defaults = llvm::ConstantVector::getSplat(value->getType()->getVectorNumElements(),
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+        defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-+                                                  llvm::Constant::getNullValue(vt->getElementType()));
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+        defaults = llvm::ConstantVector::getSplat({static_cast<unsigned int>(vt->getNumElements()), false},
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
-+#else
-+        defaults = llvm::ConstantVector::getSplat(
-+            llvm::ElementCount::get(static_cast<unsigned int>(vt->getNumElements()), false),
-+            llvm::Constant::getNullValue(vt->getElementType()));
-+#endif
-     }
- 
-     auto Fn = llvm::GenXIntrinsic::getGenXDeclaration(m->module, llvm::GenXIntrinsic::genx_simdcf_predicate,
-diff --git a/src/gen/GlobalsLocalization.cpp b/src/gen/GlobalsLocalization.cpp
-index a176e9462..41f3b00e2 100644
---- a/src/gen/GlobalsLocalization.cpp
-+++ b/src/gen/GlobalsLocalization.cpp
-@@ -1,5 +1,5 @@
- /*
--  Copyright (c) 2014, 2016-2020, Intel Corporation
-+  Copyright (c) 2014, 2016-2021, Intel Corporation
-   All rights reserved.
- 
-   Redistribution and use in source and binary forms, with or without
-@@ -53,8 +53,10 @@
- #include <llvm/GenXIntrinsics/GenXIntrOpts.h>
- #include <llvm/GenXIntrinsics/GenXIntrinsics.h>
- #include <llvm/GenXIntrinsics/GenXMetadata.h>
--#include <llvm/IR/CFG.h>
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
- #include <llvm/IR/CallSite.h>
-+#endif
-+#include <llvm/IR/CFG.h>
- #include <llvm/IR/DebugInfo.h>
- #include <llvm/IR/Dominators.h>
- #include <llvm/IR/Function.h>
-@@ -470,7 +472,8 @@ void GlobalsLocalization::LocalizeGlobals(LocalizationInfo &LI) {
-         Instruction &FirstI = *Fn->getEntryBlock().begin();
-         Type *ElemTy = GV->getType()->getElementType();
-         AllocaInst *Alloca = new AllocaInst(ElemTy, 0, GV->getName() + ".local", &FirstI);
--        Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()));
-+        Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()).valueOrOne());
-+
-         if (!isa<UndefValue>(GV->getInitializer()))
-             new StoreInst(GV->getInitializer(), Alloca, &FirstI);
- 
-diff --git a/src/opt.cpp b/src/opt.cpp
-index d58d77f73..1789b8476 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -2899,15 +2899,17 @@ static llvm::Function *lGenXMaskedInt8Inst(llvm::Instruction *inst, bool isStore
- static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::Instruction *inst) {
-     Assert(g->target->isGenXTarget());
-     Assert(llvm::isa<llvm::VectorType>(val->getType()));
--    Assert(llvm::isPowerOf2_32(val->getType()->getVectorNumElements()));
--    Assert(val->getType()->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-+
-+    llvm::VectorType *valVecType = llvm::dyn_cast<llvm::VectorType>(val->getType());
-+    Assert(llvm::isPowerOf2_32(valVecType->getNumElements()));
-+    Assert(valVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
- 
-     // The data write of svm store must have a size that is a power of two from 16 to 128
-     // bytes. However for int8 type and simd width = 8, the data write size is 8.
-     // So we use masked store function here instead of svm store which process int8 type
-     // correctly.
--    if (val->getType()->getPrimitiveSizeInBits() / 8 < 16) {
--        Assert(val->getType()->getScalarType() == LLVMTypes::Int8Type);
-+    if (valVecType->getPrimitiveSizeInBits() / 8 < 16) {
-+        Assert(valVecType->getScalarType() == LLVMTypes::Int8Type);
-         if (llvm::Function *maskedFunc = lGenXMaskedInt8Inst(inst, true))
-             return llvm::dyn_cast<llvm::CallInst>(lCallInst(maskedFunc, ptr, val, LLVMMaskAllOn, ""));
-         else {
-@@ -2923,15 +2925,17 @@ static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::
- 
- static llvm::CallInst *lGenXLoadInst(llvm::Value *ptr, llvm::Type *retType, llvm::Instruction *inst) {
-     Assert(llvm::isa<llvm::VectorType>(retType));
--    Assert(llvm::isPowerOf2_32(retType->getVectorNumElements()));
--    Assert(retType->getPrimitiveSizeInBits());
--    Assert(retType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-+
-+    llvm::VectorType *retVecType = llvm::dyn_cast<llvm::VectorType>(retType);
-+    Assert(llvm::isPowerOf2_32(retVecType->getNumElements()));
-+    Assert(retVecType->getPrimitiveSizeInBits());
-+    Assert(retVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-     // The data read of svm load must have a size that is a power of two from 16 to 128
-     // bytes. However for int8 type and simd width = 8, the data read size is 8.
-     // So we use masked load function here instead of svm load which process int8 type
-     // correctly.
--    if (retType->getPrimitiveSizeInBits() / 8 < 16) {
--        Assert(retType->getScalarType() == LLVMTypes::Int8Type);
-+    if (retVecType->getPrimitiveSizeInBits() / 8 < 16) {
-+        Assert(retVecType->getScalarType() == LLVMTypes::Int8Type);
-         if (llvm::Function *maskedFunc = lGenXMaskedInt8Inst(inst, false))
-             return llvm::dyn_cast<llvm::CallInst>(lCallInst(maskedFunc, ptr, LLVMMaskAllOn, ""));
-         else {
-@@ -5622,15 +5626,24 @@ static bool lVectorizeGEPs(llvm::Value *ptr, std::vector<PtrUse> &ptrUses, std::
-         llvm::PtrToIntInst *ptrToInt =
-             new llvm::PtrToIntInst(ptr, LLVMTypes::Int64Type, "vectorized_ptrtoint", insertBefore);
-         llvm::Instruction *addr = llvm::BinaryOperator::CreateAdd(ptrToInt, offset, "vectorized_address", insertBefore);
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        llvm::Type *retType = llvm::FixedVectorType::get(scalar_type, reqSize / t_size);
-+#else
-         llvm::Type *retType = llvm::VectorType::get(scalar_type, reqSize / t_size);
-+#endif
-         llvm::Function *fn = llvm::GenXIntrinsic::getGenXDeclaration(
-             m->module, llvm::GenXIntrinsic::genx_svm_block_ld_unaligned, {retType, addr->getType()});
-         llvm::Instruction *ld = llvm::CallInst::Create(fn, {addr}, "vectorized_ld", insertBefore);
- 
-         if (loadingPtr) {
-             // Cast int to ptr via inttoptr
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            ld = new llvm::IntToPtrInst(ld, llvm::FixedVectorType::get(originalType, reqSize / t_size),
-+                                        "vectorized_inttoptr", insertBefore);
-+#else
-             ld = new llvm::IntToPtrInst(ld, llvm::VectorType::get(originalType, reqSize / t_size),
-                                         "vectorized_inttoptr", insertBefore);
-+#endif
-         }
- 
-         // Scalar extracts for all loaded elements
-@@ -6160,19 +6173,34 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-         llvm::Instruction *inst = &*I;
-         if (llvm::CallInst *ci = llvm::dyn_cast<llvm::CallInst>(inst)) {
-             llvm::Function *func = ci->getCalledFunction();
--            if (func && func->getName() == "llvm.trap") {
-+            if (func && func->getName().equals("llvm.trap")) {
-                 llvm::Type *argTypes[] = {LLVMTypes::Int1VectorType, LLVMTypes::Int16VectorType};
-                 // Description of parameters for genx_raw_send_noresult can be found in target-genx.ll
-                 auto Fn = +llvm::GenXIntrinsic::getGenXDeclaration(
-                     m->module, llvm::GenXIntrinsic::genx_raw_send_noresult, argTypes);
-                 llvm::SmallVector<llvm::Value *, 8> Args;
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 0));
--                Args.push_back(llvm::ConstantVector::getSplat(g->target->getNativeVectorWidth(),
--                                                              llvm::ConstantInt::getTrue(*g->ctx)));
-+                Args.push_back(llvm::ConstantVector::getSplat(
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+                    g->target->getNativeVectorWidth(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+                    {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
-+#else // LLVM 12.0+
-+                    llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-+#endif
-+                    llvm::ConstantInt::getTrue(*g->ctx)));
-+
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 39));
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 33554448));
-                 llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
--                    g->target->getNativeVectorWidth(), llvm::Constant::getNullValue(llvm::Type::getInt16Ty(*g->ctx)));
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+                    g->target->getNativeVectorWidth(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+                    {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
-+#else // LLVM 12.0+
-+                    llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-+#endif
-+                    llvm::Constant::getNullValue(llvm::Type::getInt16Ty(*g->ctx)));
-                 Args.push_back(zeroMask);
- 
-                 llvm::Instruction *newInst = llvm::CallInst::Create(Fn, Args, ci->getName());
-@@ -6181,7 +6209,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     modifiedAny = true;
-                     goto restart;
-                 }
--            } else if (func && func->getName() == "llvm.assume") {
-+            } else if (func && func->getName().equals("llvm.assume")) {
-                 ci->eraseFromParent();
-                 modifiedAny = true;
-                 goto restart;
-@@ -6335,7 +6363,7 @@ bool CheckUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 continue;
-             for (int i = 0; i < unsupportedFuncs.size(); i++) {
-                 std::smatch match;
--                std::string funcName = func->getName();
-+                std::string funcName = func->getName().str();
-                 if (std::regex_match(funcName, match, unsupportedFuncs[i])) {
-                     // We found unsupported function. Generate error and stop compilation.
-                     SourcePos pos;
-@@ -6418,12 +6446,14 @@ bool MangleOpenCLBuiltins::runOnBasicBlock(llvm::BasicBlock &bb) {
-             if (func->getName().startswith("__spirv_ocl")) {
-                 std::string mangledName;
-                 llvm::Type *retType = func->getReturnType();
--                std::string funcName = func->getName();
-+                std::string funcName = func->getName().str();
-                 std::vector<llvm::Type *> ArgTy;
-                 // spirv OpenCL builtins are used for double types only
--                Assert(retType->isVectorTy() && retType->getVectorElementType()->isDoubleTy() ||
-+                Assert(retType->isVectorTy() &&
-+                           llvm::dyn_cast<llvm::VectorType>(retType)->getElementType()->isDoubleTy() ||
-                        retType->isSingleValueType() && retType->isDoubleTy());
--                if (retType->isVectorTy() && retType->getVectorElementType()->isDoubleTy()) {
-+                if (retType->isVectorTy() &&
-+                    llvm::dyn_cast<llvm::VectorType>(retType)->getElementType()->isDoubleTy()) {
-                     ArgTy.push_back(LLVMTypes::DoubleVectorType);
-                     // _DvWIDTH suffix is used in target file to differentiate scalar
-                     // and vector versions of intrinsics. Here we remove this
-@@ -6511,8 +6541,15 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- 
-     // Cast offsets to int64
-     Offsets = new llvm::ZExtInst(
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        Offsets,
-+        llvm::FixedVectorType::get(LLVMTypes::Int64Type,
-+                                   llvm::dyn_cast<llvm::VectorType>(Offsets->getType())->getNumElements()),
-+        "svm_offset_zext", InsertBefore);
-+#else
-         Offsets, llvm::VectorType::get(LLVMTypes::Int64Type, Offsets->getType()->getVectorNumElements()),
-         "svm_offset_zext", InsertBefore);
-+#endif
- 
-     if (!llvm::isa<llvm::ConstantPointerNull>(Ptr)) {
-         // Cast ptr to int64
-@@ -6520,13 +6557,31 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- 
-         // Vectorize ptr
-         llvm::Value *undefInsertValue =
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            llvm::UndefValue::get(llvm::FixedVectorType::get(
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+#else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
-+#endif
-         address = llvm::InsertElementInst::Create(undefInsertValue, address, LLVMInt32(0), "svm_ptr_iei", InsertBefore);
-         llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+            {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
-+#else
-+        llvm::ElementCount::get(
-+                                llvm::dyn_cast<llvm::FixedVectorType>(addressType->getNumElements(), false),
-+#endif
-             llvm::Constant::getNullValue(llvm::Type::getInt32Ty(InsertBefore->getContext())));
-+
-         llvm::Value *undefShuffleValue =
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            llvm::UndefValue::get(llvm::FixedVectorType::get(
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+#else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
-+#endif
-         address = new llvm::ShuffleVectorInst(address, undefShuffleValue, zeroVec, "svm_ptr_svi", InsertBefore);
- 
-         // Calculate address
-@@ -6553,9 +6608,12 @@ llvm::Instruction *FixAddressSpace::processVectorLoad(llvm::LoadInst *LI) {
-     if (retType->getScalarType()->isPointerTy()) {
-         isPtrLoad = true;
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        retType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(retType)->getNumElements());
-+#else
-         retType = llvm::VectorType::get(scalarType, retType->getVectorNumElements());
-+#endif
-     }
--
-     llvm::Instruction *res = lGenXLoadInst(ptr, retType, llvm::dyn_cast<llvm::Instruction>(LI));
-     Assert(res);
- 
-@@ -6580,11 +6638,16 @@ llvm::Instruction *FixAddressSpace::processSVMVectorLoad(llvm::Instruction *CI)
-     ptr = new llvm::IntToPtrInst(ptr, llvm::PointerType::get(retType, 0), CI->getName() + "_inttoptr", CI);
-     llvm::Instruction *loadInst = NULL;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    loadInst = new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), loadInst,
--                                  CI->getName(), (llvm::Instruction *)NULL);
-+    loadInst = new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-+                                  CI->getName(), false /* not volatile */,
-+                                  llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne(),
-+                                  (llvm::Instruction *)NULL);
- #else
--    loadInst = new llvm::LoadInst(ptr, CI->getName(), (llvm::Instruction *)NULL);
-+    loadInst = new llvm::LoadInst(ptr, CI->getName(), false,
-+                                  llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne(),
-+                                  (llvm::Instruction *)NULL);
- #endif
-+
-     Assert(loadInst);
-     return loadInst;
- }
-@@ -6606,7 +6669,11 @@ llvm::Instruction *FixAddressSpace::processVectorStore(llvm::StoreInst *SI) {
-     // Note: it doesn't look like a normal case for GenX target
-     if (valType->getScalarType()->isPointerTy()) {
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        valType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(valType)->getNumElements());
-+#else
-         valType = llvm::VectorType::get(scalarType, valType->getVectorNumElements());
-+#endif
-         val = new llvm::PtrToIntInst(val, valType, "svm_st_val_ptrtoint", SI);
-     }
- 
-@@ -6631,12 +6698,8 @@ llvm::Instruction *FixAddressSpace::processSVMVectorStore(llvm::Instruction *CI)
-     ptr = new llvm::IntToPtrInst(ptr, llvm::PointerType::get(valType, 0), CI->getName() + "_inttoptr", CI);
- 
-     llvm::Instruction *storeInst = NULL;
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    loadInst = new llvm::StoreInst(val, llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(),
--                                   storeInst, CI->getName(), (llvm::Instruction *)NULL);
--#else
--    storeInst = new llvm::StoreInst(val, ptr, (llvm::Instruction *)NULL);
--#endif
-+    storeInst = new llvm::StoreInst(val, ptr, (llvm::Instruction *)NULL,
-+                                    llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
-     Assert(storeInst);
-     return storeInst;
- }
-@@ -6645,15 +6708,18 @@ llvm::Instruction *FixAddressSpace::createInt8WrRegion(llvm::Value *Val, llvm::V
-     int width = g->target->getVectorWidth();
- 
-     llvm::Value *Args[8];
--
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Args[0] = llvm::UndefValue::get(llvm::FixedVectorType::get(LLVMTypes::Int8Type, width * 4)); // old value
-+#else
-     Args[0] = llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int8Type, width * 4)); // old value
--    Args[1] = Val;                                                                          // value to store
--    Args[2] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);                              // vstride
--    Args[3] = llvm::ConstantInt::get(LLVMTypes::Int32Type, width);                          // width
--    Args[4] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 4);                              // stride
--    Args[5] = llvm::ConstantInt::get(LLVMTypes::Int16Type, 0);                              // offsets
--    Args[6] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);                              // parent width (ignored)
--    Args[7] = Mask;                                                                         // mask
-+#endif
-+    Args[1] = Val;                                                 // value to store
-+    Args[2] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);     // vstride
-+    Args[3] = llvm::ConstantInt::get(LLVMTypes::Int32Type, width); // width
-+    Args[4] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 4);     // stride
-+    Args[5] = llvm::ConstantInt::get(LLVMTypes::Int16Type, 0);     // offsets
-+    Args[6] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);     // parent width (ignored)
-+    Args[7] = Mask;                                                // mask
- 
-     llvm::Type *Tys[4];
- 
-@@ -6708,7 +6774,12 @@ llvm::Instruction *FixAddressSpace::processGatherScatterPrivate(llvm::CallInst *
-         return NULL;
- 
-     llvm::Value *address = calculateGatherScatterAddress(ptr, offsets, CI);
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    llvm::Type *i8VecType = llvm::FixedVectorType::get(LLVMTypes::Int8Type, width * 4);
-+#else
-     llvm::Type *i8VecType = llvm::VectorType::get(LLVMTypes::Int8Type, width * 4);
-+#endif
-+
-     bool isInt8 = (value->getType()->getScalarType() == LLVMTypes::Int8Type);
- 
-     Assert(address && "Bad gather/scatter address!");
diff --git a/srcpkgs/ispc/patches/llvm12-006.patch b/srcpkgs/ispc/patches/llvm12-006.patch
deleted file mode 100644
index a829ea48391e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-006.patch
+++ /dev/null
@@ -1,126 +0,0 @@
-From bb3f493d1fbd45c79e1d9dee67a0430ba313eaad Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 19 Jan 2021 11:07:33 -0800
-Subject: [PATCH] Fixed ifdefs for LLVM_11
-
----
- src/ctx.cpp |  6 +++---
- src/opt.cpp | 18 +++++++++---------
- 2 files changed, 12 insertions(+), 12 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 2a72e6837..527a02f30 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1691,7 +1691,7 @@ llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const llvm::T
-     if (llvm::Constant *const_val = llvm::dyn_cast<llvm::Constant>(value)) {
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         ret = llvm::ConstantVector::getSplat(g->target->getVectorWidth(), const_val);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-         ret =
-             llvm::ConstantVector::getSplat({static_cast<unsigned int>(g->target->getVectorWidth()), false}, const_val);
- #else // LLVM 12.0+
-@@ -3148,7 +3148,7 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-     llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
-         vecType->getVectorNumElements(), llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-     llvm::Constant *zeroVec =
-         llvm::ConstantVector::getSplat({static_cast<unsigned int>(ty->getNumElements()), false},
-                                        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
-@@ -3688,7 +3688,7 @@ llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-         defaults = llvm::ConstantVector::getSplat({static_cast<unsigned int>(vt->getNumElements()), false},
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
- #else
-diff --git a/src/opt.cpp b/src/opt.cpp
-index 1789b8476..3ff191a0a 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -1045,7 +1045,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                 llvm::Instruction *loadInst =
-                     new llvm::LoadInst(castPtr, llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load",
-                                        false /* not volatile */, llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
-@@ -1472,7 +1472,7 @@ static llvm::Value *lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offse
-                     llvm::Value *zeroMask =
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                         llvm::ConstantVector::getSplat(cv->getType()->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                         llvm::ConstantVector::getSplat(
-                             {llvm::dyn_cast<llvm::VectorType>(cv->getType())->getNumElements(), false},
- #else // LLVM 12.0+
-@@ -1495,7 +1495,7 @@ static llvm::Value *lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offse
-                         llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                             bop_var_type->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                             {llvm::dyn_cast<llvm::VectorType>(bop_var_type)->getNumElements(), false},
- #else // LLVM 12.0+
-                             llvm::ElementCount::get(
-@@ -2803,7 +2803,7 @@ static bool lGSToLoadStore(llvm::CallInst *callInst) {
-             llvm::Value *zeroMask =
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                 llvm::ConstantVector::getSplat(callInst->getType()->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                 llvm::ConstantVector::getSplat(
-                     {llvm::dyn_cast<llvm::VectorType>(callInst->getType())->getNumElements(), false},
- 
-@@ -3100,7 +3100,7 @@ static bool lImproveMaskedLoad(llvm::CallInst *callInst, llvm::BasicBlock::itera
-         {
-             llvm::Type *ptrType = llvm::PointerType::get(callInst->getType(), 0);
-             ptr = new llvm::BitCastInst(ptr, ptrType, "ptr_cast_for_load", callInst);
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             load = new llvm::LoadInst(
-                 ptr, callInst->getName(), false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-@@ -3459,7 +3459,7 @@ llvm::Value *lGEPAndLoad(llvm::Value *basePtr, int64_t offset, int align, llvm::
-                          llvm::Type *type) {
-     llvm::Value *ptr = lGEPInst(basePtr, LLVMInt64(offset), "new_base", insertBefore);
-     ptr = new llvm::BitCastInst(ptr, llvm::PointerType::get(type, 0), "ptr_cast", insertBefore);
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-     return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, llvm::MaybeAlign(align), insertBefore);
- #else // LLVM 11.0+
-     return new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-@@ -6183,7 +6183,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 Args.push_back(llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                     g->target->getNativeVectorWidth(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                     {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
- #else // LLVM 12.0+
-                     llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-@@ -6195,7 +6195,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                     g->target->getNativeVectorWidth(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                     {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
- #else // LLVM 12.0+
-                     llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-@@ -6567,7 +6567,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
-         llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-             {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
- #else
-         llvm::ElementCount::get(
diff --git a/srcpkgs/ispc/patches/llvm12-007.patch b/srcpkgs/ispc/patches/llvm12-007.patch
deleted file mode 100644
index 1b975f896c7e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-007.patch
+++ /dev/null
@@ -1,160 +0,0 @@
-From 62f5a6c37bf26fc25a7cf81868052d3472874610 Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 23 Mar 2021 23:07:30 -0700
-Subject: [PATCH] Do not generate function mask when it is not required
-
----
- src/ctx.cpp                    | 39 ++++++++++++++-------
- tests/lit-tests/full_mask.ispc | 63 ++++++++++++++++++++++++++++++++++
- 2 files changed, 90 insertions(+), 12 deletions(-)
- create mode 100644 tests/lit-tests/full_mask.ispc
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 527a02f30..9e775fc5c 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -231,10 +231,18 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym, llvm::F
-     internalMaskPointer = AllocaInst(LLVMTypes::MaskType, "internal_mask_memory");
-     StoreInst(LLVMMaskAllOn, internalMaskPointer);
- 
--    functionMaskValue = LLVMMaskAllOn;
--
--    fullMaskPointer = AllocaInst(LLVMTypes::MaskType, "full_mask_memory");
--    StoreInst(LLVMMaskAllOn, fullMaskPointer);
-+    // If the function doesn't have __mask in parameters, there is no need to
-+    // have function mask
-+    if ((func->GetType()->isExported &&
-+         (lf->getFunctionType()->getNumParams() == func->GetType()->GetNumParameters())) ||
-+        (func->GetType()->isUnmasked) || (func->GetType()->isTask)) {
-+        functionMaskValue = NULL;
-+        fullMaskPointer = NULL;
-+    } else {
-+        functionMaskValue = LLVMMaskAllOn;
-+        fullMaskPointer = AllocaInst(LLVMTypes::MaskType, "full_mask_memory");
-+        StoreInst(LLVMMaskAllOn, fullMaskPointer);
-+    }
- 
-     blockEntryMask = NULL;
-     breakLanesPtr = continueLanesPtr = NULL;
-@@ -389,20 +397,26 @@ llvm::BasicBlock *FunctionEmitContext::GetCurrentBasicBlock() { return bblock; }
- 
- void FunctionEmitContext::SetCurrentBasicBlock(llvm::BasicBlock *bb) { bblock = bb; }
- 
--llvm::Value *FunctionEmitContext::GetFunctionMask() { return functionMaskValue; }
-+llvm::Value *FunctionEmitContext::GetFunctionMask() { return fullMaskPointer ? functionMaskValue : LLVMMaskAllOn; }
- 
- llvm::Value *FunctionEmitContext::GetInternalMask() { return LoadInst(internalMaskPointer, NULL, "load_mask"); }
- 
- llvm::Value *FunctionEmitContext::GetFullMask() {
--    return BinaryOperator(llvm::Instruction::And, GetInternalMask(), functionMaskValue, "internal_mask&function_mask");
-+    return fullMaskPointer ? BinaryOperator(llvm::Instruction::And, GetInternalMask(), functionMaskValue,
-+                                            "internal_mask&function_mask")
-+                           : GetInternalMask();
- }
- 
--llvm::Value *FunctionEmitContext::GetFullMaskPointer() { return fullMaskPointer; }
-+llvm::Value *FunctionEmitContext::GetFullMaskPointer() {
-+    return fullMaskPointer ? fullMaskPointer : internalMaskPointer;
-+}
- 
- void FunctionEmitContext::SetFunctionMask(llvm::Value *value) {
--    functionMaskValue = value;
--    if (bblock != NULL)
--        StoreInst(GetFullMask(), fullMaskPointer);
-+    if (fullMaskPointer != NULL) {
-+        functionMaskValue = value;
-+        if (bblock != NULL)
-+            StoreInst(GetFullMask(), fullMaskPointer);
-+    }
- }
- 
- void FunctionEmitContext::SetBlockEntryMask(llvm::Value *value) { blockEntryMask = value; }
-@@ -410,7 +424,8 @@ void FunctionEmitContext::SetBlockEntryMask(llvm::Value *value) { blockEntryMask
- void FunctionEmitContext::SetInternalMask(llvm::Value *value) {
-     StoreInst(value, internalMaskPointer);
-     // kludge so that __mask returns the right value in ispc code.
--    StoreInst(GetFullMask(), fullMaskPointer);
-+    if (fullMaskPointer)
-+        StoreInst(GetFullMask(), fullMaskPointer);
- }
- 
- void FunctionEmitContext::SetInternalMaskAnd(llvm::Value *oldMask, llvm::Value *test) {
-@@ -1265,7 +1280,7 @@ void FunctionEmitContext::CurrentLanesReturned(Expr *expr, bool doCoherenceCheck
-         // lanes have returned
-         if (doCoherenceCheck) {
-             // if newReturnedLanes == functionMaskValue, get out of here!
--            llvm::Value *cmp = MasksAllEqual(functionMaskValue, newReturnedLanes);
-+            llvm::Value *cmp = MasksAllEqual(GetFunctionMask(), newReturnedLanes);
-             llvm::BasicBlock *bDoReturn = CreateBasicBlock("do_return");
-             llvm::BasicBlock *bNoReturn = CreateBasicBlock("no_return");
-             BranchInst(bDoReturn, bNoReturn, cmp);
-diff --git a/tests/lit-tests/full_mask.ispc b/tests/lit-tests/full_mask.ispc
-new file mode 100644
-index 000000000..ac0b0bca3
---- /dev/null
-+++ b/tests/lit-tests/full_mask.ispc
-@@ -0,0 +1,63 @@
-+// RUN: %{ispc} %s -DISPC_EXPORT --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_EXPORT %s
-+
-+// RUN: %{ispc} %s -DISPC_UNMASKED --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_UNMASKED %s
-+
-+// RUN: %{ispc} %s -DISPC_NOQUALIF --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_NOQUALIF %s
-+
-+// RUN: %{ispc} %s -DISPC_TASK --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_TASK %s
-+
-+struct Parameters {
-+    float *vout;
-+    int param;
-+};
-+
-+#ifdef ISPC_EXPORT
-+// CHECK_ISPC_EXPORT: define void @simple_export___
-+// CHECK_ISPC_EXPORT: %full_mask_memory = alloca
-+// CHECK_ISPC_EXPORT: define void @simple_export(
-+// CHECK_ISPC_EXPORT-NOT: %full_mask_memory = alloca
-+export void simple_export(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_UNMASKED
-+// CHECK_ISPC_UNMASKED: define void @simple_unmasked
-+// CHECK_ISPC_UNMASKED-NOT: %full_mask_memory = alloca
-+unmasked void simple_unmasked(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_NOQUALIF
-+// CHECK_ISPC_NOQUALIF: define void @simple
-+// CHECK_ISPC_NOQUALIF: %full_mask_memory = alloca
-+void simple(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_TASK
-+
-+// CHECK_ISPC_TASK: define void @simple_task
-+// CHECK_ISPC_TASK-NOT: %full_mask_memory = alloca
-+// CHECK_ISPC_TASK: define void @simple_entry_point__
-+// CHECK_ISPC_TASK: %full_mask_memory = alloca
-+// CHECK_ISPC_TASK: define void @simple_entry_point(
-+// CHECK_ISPC_TASK-NOT: %full_mask_memory = alloca
-+task void simple_task(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+export void simple_entry_point(void *uniform parameters, uniform int dim0, uniform int dim1, uniform int dim2) {
-+    launch[dim0, dim1, dim2] simple_task(parameters);
-+}
-+#endif
-\ No newline at end of file
diff --git a/srcpkgs/ispc/patches/llvm12-008.patch b/srcpkgs/ispc/patches/llvm12-008.patch
deleted file mode 100644
index c8413d8b7887..000000000000
--- a/srcpkgs/ispc/patches/llvm12-008.patch
+++ /dev/null
@@ -1,149 +0,0 @@
-From afad14227d9204a3c8a626ca608f5b43c3218fe9 Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 4 May 2021 11:43:52 -0700
-Subject: [PATCH] Fixed ISPC gen build for LLVM12
-
----
- src/ctx.cpp |  4 ++++
- src/opt.cpp | 43 +++++++++++++++++++++++++++++--------------
- 2 files changed, 33 insertions(+), 14 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 0c7050591..f7dc06939 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -3738,7 +3738,11 @@ llvm::Value *FunctionEmitContext::GenXSimdCFAny(llvm::Value *value) {
- 
- llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::Value *defaults) {
-     AssertPos(currentPos, llvm::isa<llvm::VectorType>(value->getType()));
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    llvm::FixedVectorType *vt = llvm::dyn_cast<llvm::FixedVectorType>(value->getType());
-+#else
-     llvm::VectorType *vt = llvm::dyn_cast<llvm::VectorType>(value->getType());
-+#endif
-     if (defaults == NULL) {
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-diff --git a/src/opt.cpp b/src/opt.cpp
-index cea4afa23..4e33d6b1a 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -2916,9 +2916,13 @@ static llvm::Function *lGenXMaskedInt8Inst(llvm::Instruction *inst, bool isStore
- 
- static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::Instruction *inst) {
-     Assert(g->target->isGenXTarget());
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Assert(llvm::isa<llvm::FixedVectorType>(val->getType()));
-+    llvm::FixedVectorType *valVecType = llvm::dyn_cast<llvm::FixedVectorType>(val->getType());
-+#else
-     Assert(llvm::isa<llvm::VectorType>(val->getType()));
--
-     llvm::VectorType *valVecType = llvm::dyn_cast<llvm::VectorType>(val->getType());
-+#endif
-     Assert(llvm::isPowerOf2_32(valVecType->getNumElements()));
-     Assert(valVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
- 
-@@ -2942,9 +2946,13 @@ static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::
- }
- 
- static llvm::CallInst *lGenXLoadInst(llvm::Value *ptr, llvm::Type *retType, llvm::Instruction *inst) {
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Assert(llvm::isa<llvm::FixedVectorType>(retType));
-+    llvm::FixedVectorType *retVecType = llvm::dyn_cast<llvm::FixedVectorType>(retType);
-+#else
-     Assert(llvm::isa<llvm::VectorType>(retType));
--
-     llvm::VectorType *retVecType = llvm::dyn_cast<llvm::VectorType>(retType);
-+#endif
-     Assert(llvm::isPowerOf2_32(retVecType->getNumElements()));
-     Assert(retVecType->getPrimitiveSizeInBits());
-     Assert(retVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-@@ -5485,8 +5493,13 @@ static void lCreateBlockLDUse(llvm::Instruction *currInst, std::vector<llvm::Ext
-         } else if (auto gather = lGetPseudoGather(llvm::dyn_cast<llvm::Instruction>(ui->getUser()))) {
-             // Collect idxs from gather and fix users
-             llvm::Value *res = llvm::UndefValue::get(gather->getType());
--            for (unsigned i = 0, end = llvm::dyn_cast<llvm::VectorType>(res->getType())->getNumElements(); i < end;
--                 ++i) {
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            for (unsigned i = 0, end = llvm::dyn_cast<llvm::FixedVectorType>(res->getType())->getNumElements(); i < end;
-+                 ++i)
-+#else
-+            for (unsigned i = 0, end = llvm::dyn_cast<llvm::VectorType>(res->getType())->getNumElements(); i < end; ++i)
-+#endif
-+            {
-                 // Get element via IEI
-                 res = llvm::InsertElementInst::Create(res, EEIs[ptrUse.idxs[curr_idx++]],
-                                                       llvm::ConstantInt::get(LLVMTypes::Int32Type, i),
-@@ -5522,10 +5535,11 @@ static bool lVectorizeGEPs(llvm::Value *ptr, std::vector<PtrUse> &ptrUses, std::
- 
-     // Adjust values for vector load
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    if (auto vecTy = llvm::dyn_cast<llvm::FixedVectorType>(type)) {
-+    if (auto vecTy = llvm::dyn_cast<llvm::FixedVectorType>(type))
- #else
--    if (auto vecTy = llvm::dyn_cast<llvm::VectorType>(type)) {
-+    if (auto vecTy = llvm::dyn_cast<llvm::VectorType>(type))
- #endif
-+    {
-         // Get single element size
-         t_size /= vecTy->getNumElements();
-         // Get single element type
-@@ -6477,7 +6491,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-         Offsets,
-         llvm::FixedVectorType::get(LLVMTypes::Int64Type,
--                                   llvm::dyn_cast<llvm::VectorType>(Offsets->getType())->getNumElements()),
-+                                   llvm::dyn_cast<llvm::FixedVectorType>(Offsets->getType())->getNumElements()),
-         "svm_offset_zext", InsertBefore);
- #else
-         Offsets, llvm::VectorType::get(LLVMTypes::Int64Type, Offsets->getType()->getVectorNumElements()),
-@@ -6492,7 +6506,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
-         llvm::Value *undefInsertValue =
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-             llvm::UndefValue::get(llvm::FixedVectorType::get(
--                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements()));
- #else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
- #endif
-@@ -6501,17 +6515,16 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
- #elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
--            {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
-+            {llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements(), false},
- #else
--        llvm::ElementCount::get(
--                                llvm::dyn_cast<llvm::FixedVectorType>(addressType->getNumElements(), false),
-+            llvm::ElementCount::get(llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements(), false),
- #endif
-             llvm::Constant::getNullValue(llvm::Type::getInt32Ty(InsertBefore->getContext())));
- 
-         llvm::Value *undefShuffleValue =
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-             llvm::UndefValue::get(llvm::FixedVectorType::get(
--                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements()));
- #else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
- #endif
-@@ -6542,7 +6555,8 @@ llvm::Instruction *FixAddressSpace::processVectorLoad(llvm::LoadInst *LI) {
-         isPtrLoad = true;
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--        retType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(retType)->getNumElements());
-+        retType =
-+            llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::FixedVectorType>(retType)->getNumElements());
- #else
-         retType = llvm::VectorType::get(scalarType, retType->getVectorNumElements());
- #endif
-@@ -6604,7 +6618,8 @@ llvm::Instruction *FixAddressSpace::processVectorStore(llvm::StoreInst *SI) {
-     if (valType->getScalarType()->isPointerTy()) {
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--        valType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(valType)->getNumElements());
-+        valType =
-+            llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::FixedVectorType>(valType)->getNumElements());
- #else
-         valType = llvm::VectorType::get(scalarType, valType->getVectorNumElements());
- #endif
diff --git a/srcpkgs/ispc/patches/llvm12-009.patch b/srcpkgs/ispc/patches/llvm12-009.patch
deleted file mode 100644
index d3ea67828582..000000000000
--- a/srcpkgs/ispc/patches/llvm12-009.patch
+++ /dev/null
@@ -1,2109 +0,0 @@
-From 97b13c32132e2704a5e3e7b2eae49d854d087e3e Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 4 May 2021 11:31:55 -0700
-Subject: [PATCH] Updated builtins-cm* for switch to LLVM12
-
----
- builtins/builtins-cm-32.ll | 234 ++++++++++++++++++-------------------
- builtins/builtins-cm-64.ll | 232 ++++++++++++++++++------------------
- 2 files changed, 233 insertions(+), 233 deletions(-)
-
-diff --git a/builtins/builtins-cm-32.ll b/builtins/builtins-cm-32.ll
-index 32debf32e..481bbdc48 100644
---- a/builtins/builtins-cm-32.ll
-+++ b/builtins/builtins-cm-32.ll
-@@ -557,7 +557,7 @@ $_ZN13VaryingWriter12WriteVecElemIPvEEvv = comdat any
- @.str.10 = private unnamed_addr constant [5 x i8] c"%08X\00", align 1
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -618,7 +618,7 @@ define internal <1 x i8> @_ZN7details13__impl_divremILi1EEEu2CMvbT__cS1_S1_u2CMv
- declare <1 x i8> @llvm.genx.rdregioni.v1i8.v1i8.i16(<1 x i8>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -634,7 +634,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -680,7 +680,7 @@ define internal <2 x i8> @_ZN7details13__impl_divremILi2EEEu2CMvbT__cS1_S1_u2CMv
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -818,7 +818,7 @@ define internal <16 x i8> @_ZN7details13__impl_divremILi16EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -864,7 +864,7 @@ define internal <32 x i8> @_ZN7details13__impl_divremILi32EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -890,7 +890,7 @@ define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -904,7 +904,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -918,7 +918,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -932,7 +932,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -946,7 +946,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -960,7 +960,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -974,7 +974,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1058,7 +1058,7 @@ define internal <1 x i16> @_ZN7details13__impl_divremILi1EEEu2CMvbT__sS1_S1_u2CM
- declare <1 x i16> @llvm.genx.rdregioni.v1i16.v1i16.i16(<1 x i16>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1074,7 +1074,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1143,7 +1143,7 @@ define internal <2 x i16> @_ZN7details13__impl_divremILi2EEEu2CMvbT__sS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1350,7 +1350,7 @@ define internal <16 x i16> @_ZN7details13__impl_divremILi16EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1419,7 +1419,7 @@ define internal <32 x i16> @_ZN7details13__impl_divremILi32EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1445,7 +1445,7 @@ define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 si
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1459,7 +1459,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1473,7 +1473,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1487,7 +1487,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -1501,7 +1501,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -1515,7 +1515,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1529,7 +1529,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1730,7 +1730,7 @@ define internal <1 x i32> @_ZN7details13__impl_divremILi1EEEu2CMvbT__iS1_S1_u2CM
- declare <1 x i32> @llvm.genx.rdregioni.v1i32.v1i32.i16(<1 x i32>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1746,7 +1746,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -1932,7 +1932,7 @@ define internal <2 x i32> @_ZN7details13__impl_divremILi2EEEu2CMvbT__iS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2490,7 +2490,7 @@ define internal <16 x i32> @_ZN7details13__impl_divremILi16EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2676,7 +2676,7 @@ define internal <32 x i32> @_ZN7details13__impl_divremILi32EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2702,7 +2702,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2716,7 +2716,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -2730,7 +2730,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2744,7 +2744,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -2758,7 +2758,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -2772,7 +2772,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2786,7 +2786,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2844,7 +2844,7 @@ define internal <1 x i8> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2860,7 +2860,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -2906,7 +2906,7 @@ define internal <2 x i8> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3044,7 +3044,7 @@ define internal <16 x i8> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3090,7 +3090,7 @@ define internal <32 x i8> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3116,7 +3116,7 @@ define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3130,7 +3130,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -3144,7 +3144,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3158,7 +3158,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -3172,7 +3172,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -3186,7 +3186,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3200,7 +3200,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3278,7 +3278,7 @@ define internal <1 x i16> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3294,7 +3294,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3360,7 +3360,7 @@ define internal <2 x i16> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3558,7 +3558,7 @@ define internal <16 x i16> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3624,7 +3624,7 @@ define internal <32 x i16> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3650,7 +3650,7 @@ define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 ze
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3664,7 +3664,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3678,7 +3678,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3692,7 +3692,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -3706,7 +3706,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -3720,7 +3720,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3734,7 +3734,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3892,7 +3892,7 @@ define internal <1 x i32> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3908,7 +3908,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4054,7 +4054,7 @@ define internal <2 x i32> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4492,7 +4492,7 @@ define internal <16 x i32> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4638,7 +4638,7 @@ define internal <32 x i32> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4664,7 +4664,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4678,7 +4678,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4692,7 +4692,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4706,7 +4706,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -4720,7 +4720,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -4734,7 +4734,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4748,7 +4748,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-+define internal void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-   %8 = alloca i8*, align 4
-   %9 = alloca i8*, align 4
-   %10 = alloca i32, align 4
-@@ -4988,7 +4988,7 @@ define internal void @_ZN7details16_cm_print_formatILi128EEEv15cm_surfaceindexju
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i32) #26 !dbg !117 {
-+define internal void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i32) #26 !dbg !117 {
-   %10 = alloca i32, align 4
-   %11 = alloca i8*, align 4
-   %12 = alloca i32, align 4
-@@ -5069,7 +5069,7 @@ define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i3
-   %67 = load i64, i64* %13, align 8, !dbg !159, !tbaa !19
-   %68 = load <5 x i32>, <5 x i32>* %21, align 32, !dbg !160, !tbaa !7
-   call void @_ZN13VaryingWriterC2ERjRPKjiyu2CMvb5_i(%class.VaryingWriter* %23, i32* dereferenceable(4) %19, i32** dereferenceable(4) %14, i32 %66, i64 %67, <5 x i32> %68), !dbg !161
--  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval align 32 %22, %class.VaryingWriter* byval align 32 %23), !dbg !162
-+  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval(%class.UniformWriter) align 32 %22, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %23), !dbg !162
-   br label %70, !dbg !163
- 
- ; <label>:70:                                     ; preds = %60
-@@ -5187,7 +5187,7 @@ define internal <5 x i32> @_Z17get_auxiliary_strv() #28 comdat !dbg !178 {
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %class.VaryingWriter* byval align 32) #25 comdat !dbg !191 {
-+define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !191 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %class.VaryingWriter, align 32
-@@ -5196,7 +5196,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %8 = bitcast %class.UniformWriter* %5 to i8*, !dbg !196
-   %9 = bitcast %class.UniformWriter* %1 to i8*, !dbg !196
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %8, i8* align 32 %9, i32 64, i1 false), !dbg !196, !tbaa.struct !197
--  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval align 32 %5), !dbg !198
-+  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5), !dbg !198
-   br i1 %10, label %16, label %11, !dbg !199
- 
- ; <label>:11:                                     ; preds = %3
-@@ -5204,7 +5204,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %13 = bitcast %class.VaryingWriter* %6 to i8*, !dbg !201
-   %14 = bitcast %class.VaryingWriter* %2 to i8*, !dbg !201
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %13, i8* align 32 %14, i32 64, i1 false), !dbg !201, !tbaa.struct !197
--  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval align 32 %6), !dbg !202
-+  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %6), !dbg !202
-   br label %16, !dbg !199
- 
- ; <label>:16:                                     ; preds = %11, %3
-@@ -5279,7 +5279,7 @@ define internal void @_ZN13VaryingWriterC2ERjRPKjiyu2CMvb5_i(%class.VaryingWrite
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @__num_cores() #29 !dbg !236 {
-+define internal i32 @__num_cores() #29 !dbg !236 {
-   ret i32 -1, !dbg !237
- }
- 
-@@ -8860,7 +8860,7 @@ declare dso_local void @_ZN7details37__cm_intrinsic_impl_svm_scatter_writeIiLi1E
- declare void @llvm.genx.svm.scatter.v1i1.v1i64.v1i32(<1 x i1>, i32, <1 x i64>, <1 x i32>) #27
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval align 32) #25 comdat !dbg !1645 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32) #25 comdat !dbg !1645 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.UniformWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8869,7 +8869,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
-   %7 = bitcast %class.UniformWriter* %4 to i8*, !dbg !1647
-   %8 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1647
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %7, i8* align 32 %8, i32 64, i1 false), !dbg !1647, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %5), !dbg !1648
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval(%class.UniformWriter) align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %5), !dbg !1648
-   ret i1 %9, !dbg !1649
- }
- 
-@@ -8877,7 +8877,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
- declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture readonly, i32, i1) #32
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval align 32) #25 comdat !dbg !1650 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !1650 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.VaryingWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -8886,12 +8886,12 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWrite
-   %7 = bitcast %class.VaryingWriter* %4 to i8*, !dbg !1652
-   %8 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !1652
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %7, i8* align 32 %8, i32 64, i1 false), !dbg !1652, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %5), !dbg !1653
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %5), !dbg !1653
-   ret i1 %9, !dbg !1654
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1655 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1655 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8914,7 +8914,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %22 = bitcast %class.UniformWriter* %5 to i8*, !dbg !1657
-   %23 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1657
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %22, i8* align 32 %23, i32 64, i1 false), !dbg !1657, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %6), !dbg !1658
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %6), !dbg !1658
-   br i1 %24, label %60, label %25, !dbg !1659
- 
- ; <label>:25:                                     ; preds = %3
-@@ -8922,7 +8922,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %27 = bitcast %class.UniformWriter* %7 to i8*, !dbg !1661
-   %28 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1661
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %27, i8* align 32 %28, i32 64, i1 false), !dbg !1661, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %8), !dbg !1662
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval(%class.UniformWriter) align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %8), !dbg !1662
-   br i1 %29, label %60, label %30, !dbg !1663
- 
- ; <label>:30:                                     ; preds = %25
-@@ -8930,7 +8930,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %32 = bitcast %class.UniformWriter* %9 to i8*, !dbg !1665
-   %33 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1665
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %32, i8* align 32 %33, i32 64, i1 false), !dbg !1665, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %10), !dbg !1666
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval(%class.UniformWriter) align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %10), !dbg !1666
-   br i1 %34, label %60, label %35, !dbg !1667
- 
- ; <label>:35:                                     ; preds = %30
-@@ -8938,7 +8938,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %37 = bitcast %class.UniformWriter* %11 to i8*, !dbg !1669
-   %38 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1669
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %37, i8* align 32 %38, i32 64, i1 false), !dbg !1669, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %12), !dbg !1670
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval(%class.UniformWriter) align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %12), !dbg !1670
-   br i1 %39, label %60, label %40, !dbg !1671
- 
- ; <label>:40:                                     ; preds = %35
-@@ -8946,7 +8946,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %42 = bitcast %class.UniformWriter* %13 to i8*, !dbg !1673
-   %43 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1673
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %42, i8* align 32 %43, i32 64, i1 false), !dbg !1673, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %14), !dbg !1674
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval(%class.UniformWriter) align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %14), !dbg !1674
-   br i1 %44, label %60, label %45, !dbg !1675
- 
- ; <label>:45:                                     ; preds = %40
-@@ -8954,7 +8954,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %47 = bitcast %class.UniformWriter* %15 to i8*, !dbg !1677
-   %48 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1677
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %47, i8* align 32 %48, i32 64, i1 false), !dbg !1677, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %16), !dbg !1678
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval(%class.UniformWriter) align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %16), !dbg !1678
-   br i1 %49, label %60, label %50, !dbg !1679
- 
- ; <label>:50:                                     ; preds = %45
-@@ -8962,7 +8962,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %52 = bitcast %class.UniformWriter* %17 to i8*, !dbg !1681
-   %53 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1681
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %52, i8* align 32 %53, i32 64, i1 false), !dbg !1681, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %18), !dbg !1682
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval(%class.UniformWriter) align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %18), !dbg !1682
-   br i1 %54, label %60, label %55, !dbg !1683
- 
- ; <label>:55:                                     ; preds = %50
-@@ -8970,7 +8970,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %57 = bitcast %class.UniformWriter* %19 to i8*, !dbg !1685
-   %58 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1685
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %57, i8* align 32 %58, i32 64, i1 false), !dbg !1685, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %20), !dbg !1686
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval(%class.UniformWriter) align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %20), !dbg !1686
-   br label %60, !dbg !1683
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -8979,7 +8979,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1688 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1688 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9005,7 +9005,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1697 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1697 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9031,7 +9031,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1706 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1706 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9057,7 +9057,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1715 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1715 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9083,7 +9083,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1724 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1724 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9109,7 +9109,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1733 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1733 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9135,7 +9135,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1742 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1742 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9161,7 +9161,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1751 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1751 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9984,7 +9984,7 @@ define internal i32 @_ZN7details18_cm_print_type_oclIPvEENS_18SHADER_PRINTF_TYPE
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2055 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2055 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.VaryingWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -10007,7 +10007,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %22 = bitcast %class.VaryingWriter* %5 to i8*, !dbg !2057
-   %23 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2057
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %22, i8* align 32 %23, i32 64, i1 false), !dbg !2057, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %6), !dbg !2058
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %6), !dbg !2058
-   br i1 %24, label %60, label %25, !dbg !2059
- 
- ; <label>:25:                                     ; preds = %3
-@@ -10015,7 +10015,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %27 = bitcast %class.VaryingWriter* %7 to i8*, !dbg !2061
-   %28 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2061
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %27, i8* align 32 %28, i32 64, i1 false), !dbg !2061, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %8), !dbg !2062
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %8), !dbg !2062
-   br i1 %29, label %60, label %30, !dbg !2063
- 
- ; <label>:30:                                     ; preds = %25
-@@ -10023,7 +10023,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %32 = bitcast %class.VaryingWriter* %9 to i8*, !dbg !2065
-   %33 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2065
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %32, i8* align 32 %33, i32 64, i1 false), !dbg !2065, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %10), !dbg !2066
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %10), !dbg !2066
-   br i1 %34, label %60, label %35, !dbg !2067
- 
- ; <label>:35:                                     ; preds = %30
-@@ -10031,7 +10031,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %37 = bitcast %class.VaryingWriter* %11 to i8*, !dbg !2069
-   %38 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2069
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %37, i8* align 32 %38, i32 64, i1 false), !dbg !2069, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %12), !dbg !2070
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %12), !dbg !2070
-   br i1 %39, label %60, label %40, !dbg !2071
- 
- ; <label>:40:                                     ; preds = %35
-@@ -10039,7 +10039,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %42 = bitcast %class.VaryingWriter* %13 to i8*, !dbg !2073
-   %43 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2073
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %42, i8* align 32 %43, i32 64, i1 false), !dbg !2073, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %14), !dbg !2074
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %14), !dbg !2074
-   br i1 %44, label %60, label %45, !dbg !2075
- 
- ; <label>:45:                                     ; preds = %40
-@@ -10047,7 +10047,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %47 = bitcast %class.VaryingWriter* %15 to i8*, !dbg !2077
-   %48 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2077
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %47, i8* align 32 %48, i32 64, i1 false), !dbg !2077, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %16), !dbg !2078
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %16), !dbg !2078
-   br i1 %49, label %60, label %50, !dbg !2079
- 
- ; <label>:50:                                     ; preds = %45
-@@ -10055,7 +10055,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %52 = bitcast %class.VaryingWriter* %17 to i8*, !dbg !2081
-   %53 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2081
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %52, i8* align 32 %53, i32 64, i1 false), !dbg !2081, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %18), !dbg !2082
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %18), !dbg !2082
-   br i1 %54, label %60, label %55, !dbg !2083
- 
- ; <label>:55:                                     ; preds = %50
-@@ -10063,7 +10063,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %57 = bitcast %class.VaryingWriter* %19 to i8*, !dbg !2085
-   %58 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2085
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %57, i8* align 32 %58, i32 64, i1 false), !dbg !2085, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %20), !dbg !2086
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %20), !dbg !2086
-   br label %60, !dbg !2083
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -10072,7 +10072,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2088 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2088 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10098,7 +10098,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2097 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2097 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10124,7 +10124,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2106 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2106 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10150,7 +10150,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2115 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2115 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10176,7 +10176,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2124 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2124 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10202,7 +10202,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2133 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2133 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10228,7 +10228,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2142 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2142 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10254,7 +10254,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2151 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2151 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-diff --git a/builtins/builtins-cm-64.ll b/builtins/builtins-cm-64.ll
-index 39a2dd8be..375d01bed 100644
---- a/builtins/builtins-cm-64.ll
-+++ b/builtins/builtins-cm-64.ll
-@@ -557,7 +557,7 @@ $_ZN13VaryingWriter12WriteVecElemIPvEEvv = comdat any
- @.str.10 = private unnamed_addr constant [8 x i8] c"%016llX\00", align 1
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -618,7 +618,7 @@ define internal <1 x i8> @_ZN7details13__impl_divremILi1EEEu2CMvbT__cS1_S1_u2CMv
- declare <1 x i8> @llvm.genx.rdregioni.v1i8.v1i8.i16(<1 x i8>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -634,7 +634,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -680,7 +680,7 @@ define internal <2 x i8> @_ZN7details13__impl_divremILi2EEEu2CMvbT__cS1_S1_u2CMv
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -818,7 +818,7 @@ define internal <16 x i8> @_ZN7details13__impl_divremILi16EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -864,7 +864,7 @@ define internal <32 x i8> @_ZN7details13__impl_divremILi32EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -890,7 +890,7 @@ define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -904,7 +904,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -918,7 +918,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -932,7 +932,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -946,7 +946,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -960,7 +960,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -974,7 +974,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1058,7 +1058,7 @@ define internal <1 x i16> @_ZN7details13__impl_divremILi1EEEu2CMvbT__sS1_S1_u2CM
- declare <1 x i16> @llvm.genx.rdregioni.v1i16.v1i16.i16(<1 x i16>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1074,7 +1074,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1143,7 +1143,7 @@ define internal <2 x i16> @_ZN7details13__impl_divremILi2EEEu2CMvbT__sS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1350,7 +1350,7 @@ define internal <16 x i16> @_ZN7details13__impl_divremILi16EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1419,7 +1419,7 @@ define internal <32 x i16> @_ZN7details13__impl_divremILi32EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1445,7 +1445,7 @@ define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 si
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1459,7 +1459,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1473,7 +1473,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1487,7 +1487,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -1501,7 +1501,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -1515,7 +1515,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1529,7 +1529,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1730,7 +1730,7 @@ define internal <1 x i32> @_ZN7details13__impl_divremILi1EEEu2CMvbT__iS1_S1_u2CM
- declare <1 x i32> @llvm.genx.rdregioni.v1i32.v1i32.i16(<1 x i32>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1746,7 +1746,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -1932,7 +1932,7 @@ define internal <2 x i32> @_ZN7details13__impl_divremILi2EEEu2CMvbT__iS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2490,7 +2490,7 @@ define internal <16 x i32> @_ZN7details13__impl_divremILi16EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2676,7 +2676,7 @@ define internal <32 x i32> @_ZN7details13__impl_divremILi32EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2702,7 +2702,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2716,7 +2716,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -2730,7 +2730,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2744,7 +2744,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -2758,7 +2758,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -2772,7 +2772,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2786,7 +2786,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2844,7 +2844,7 @@ define internal <1 x i8> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2860,7 +2860,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -2906,7 +2906,7 @@ define internal <2 x i8> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3044,7 +3044,7 @@ define internal <16 x i8> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3090,7 +3090,7 @@ define internal <32 x i8> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3116,7 +3116,7 @@ define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3130,7 +3130,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -3144,7 +3144,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3158,7 +3158,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -3172,7 +3172,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -3186,7 +3186,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3200,7 +3200,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3278,7 +3278,7 @@ define internal <1 x i16> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3294,7 +3294,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3360,7 +3360,7 @@ define internal <2 x i16> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3558,7 +3558,7 @@ define internal <16 x i16> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3624,7 +3624,7 @@ define internal <32 x i16> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3650,7 +3650,7 @@ define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 ze
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3664,7 +3664,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3678,7 +3678,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3692,7 +3692,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -3706,7 +3706,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -3720,7 +3720,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3734,7 +3734,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3892,7 +3892,7 @@ define internal <1 x i32> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3908,7 +3908,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4054,7 +4054,7 @@ define internal <2 x i32> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4492,7 +4492,7 @@ define internal <16 x i32> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4638,7 +4638,7 @@ define internal <32 x i32> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4664,7 +4664,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4678,7 +4678,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4692,7 +4692,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4706,7 +4706,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -4720,7 +4720,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -4734,7 +4734,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4748,7 +4748,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-+define internal void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-   %8 = alloca i8*, align 8
-   %9 = alloca i8*, align 8
-   %10 = alloca i32, align 4
-@@ -5070,7 +5070,7 @@ define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i3
-   %67 = load i64, i64* %13, align 8, !dbg !159, !tbaa !19
-   %68 = load <5 x i32>, <5 x i32>* %21, align 32, !dbg !160, !tbaa !7
-   call void @_ZN13VaryingWriterC2ERyRPKjiyu2CMvb5_i(%class.VaryingWriter* %23, i64* dereferenceable(8) %19, i32** dereferenceable(8) %14, i32 %66, i64 %67, <5 x i32> %68), !dbg !161
--  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval align 32 %22, %class.VaryingWriter* byval align 32 %23), !dbg !162
-+  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval(%class.UniformWriter) align 32 %22, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %23), !dbg !162
-   br label %70, !dbg !163
- 
- ; <label>:70:                                     ; preds = %60
-@@ -5188,7 +5188,7 @@ define internal <5 x i32> @_Z17get_auxiliary_strv() #28 comdat !dbg !178 {
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %class.VaryingWriter* byval align 32) #25 comdat !dbg !191 {
-+define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !191 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %class.VaryingWriter, align 32
-@@ -5197,7 +5197,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %8 = bitcast %class.UniformWriter* %5 to i8*, !dbg !196
-   %9 = bitcast %class.UniformWriter* %1 to i8*, !dbg !196
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %8, i8* align 32 %9, i64 64, i1 false), !dbg !196, !tbaa.struct !197
--  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval align 32 %5), !dbg !198
-+  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5), !dbg !198
-   br i1 %10, label %16, label %11, !dbg !199
- 
- ; <label>:11:                                     ; preds = %3
-@@ -5205,7 +5205,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %13 = bitcast %class.VaryingWriter* %6 to i8*, !dbg !201
-   %14 = bitcast %class.VaryingWriter* %2 to i8*, !dbg !201
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %13, i8* align 32 %14, i64 64, i1 false), !dbg !201, !tbaa.struct !197
--  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval align 32 %6), !dbg !202
-+  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %6), !dbg !202
-   br label %16, !dbg !199
- 
- ; <label>:16:                                     ; preds = %11, %3
-@@ -5280,7 +5280,7 @@ define internal void @_ZN13VaryingWriterC2ERyRPKjiyu2CMvb5_i(%class.VaryingWrite
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @__num_cores() #29 !dbg !236 {
-+define internal i32 @__num_cores() #29 !dbg !236 {
-   ret i32 -1, !dbg !237
- }
- 
-@@ -8870,7 +8870,7 @@ declare dso_local void @_ZN7details37__cm_intrinsic_impl_svm_scatter_writeIiLi1E
- declare void @llvm.genx.svm.scatter.v1i1.v1i64.v1i32(<1 x i1>, i32, <1 x i64>, <1 x i32>) #27
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval align 32) #25 comdat !dbg !1645 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32) #25 comdat !dbg !1645 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.UniformWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8879,7 +8879,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
-   %7 = bitcast %class.UniformWriter* %4 to i8*, !dbg !1647
-   %8 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1647
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %7, i8* align 32 %8, i64 64, i1 false), !dbg !1647, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %5), !dbg !1648
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval(%class.UniformWriter) align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %5), !dbg !1648
-   ret i1 %9, !dbg !1649
- }
- 
-@@ -8887,7 +8887,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
- declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1) #32
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval align 32) #25 comdat !dbg !1650 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !1650 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.VaryingWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -8896,12 +8896,12 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWrite
-   %7 = bitcast %class.VaryingWriter* %4 to i8*, !dbg !1652
-   %8 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !1652
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %7, i8* align 32 %8, i64 64, i1 false), !dbg !1652, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %5), !dbg !1653
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %5), !dbg !1653
-   ret i1 %9, !dbg !1654
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1655 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1655 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8924,7 +8924,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %22 = bitcast %class.UniformWriter* %5 to i8*, !dbg !1657
-   %23 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1657
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %22, i8* align 32 %23, i64 64, i1 false), !dbg !1657, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %6), !dbg !1658
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %6), !dbg !1658
-   br i1 %24, label %60, label %25, !dbg !1659
- 
- ; <label>:25:                                     ; preds = %3
-@@ -8932,7 +8932,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %27 = bitcast %class.UniformWriter* %7 to i8*, !dbg !1661
-   %28 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1661
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %27, i8* align 32 %28, i64 64, i1 false), !dbg !1661, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %8), !dbg !1662
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval(%class.UniformWriter) align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %8), !dbg !1662
-   br i1 %29, label %60, label %30, !dbg !1663
- 
- ; <label>:30:                                     ; preds = %25
-@@ -8940,7 +8940,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %32 = bitcast %class.UniformWriter* %9 to i8*, !dbg !1665
-   %33 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1665
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %32, i8* align 32 %33, i64 64, i1 false), !dbg !1665, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %10), !dbg !1666
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval(%class.UniformWriter) align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %10), !dbg !1666
-   br i1 %34, label %60, label %35, !dbg !1667
- 
- ; <label>:35:                                     ; preds = %30
-@@ -8948,7 +8948,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %37 = bitcast %class.UniformWriter* %11 to i8*, !dbg !1669
-   %38 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1669
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %37, i8* align 32 %38, i64 64, i1 false), !dbg !1669, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %12), !dbg !1670
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval(%class.UniformWriter) align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %12), !dbg !1670
-   br i1 %39, label %60, label %40, !dbg !1671
- 
- ; <label>:40:                                     ; preds = %35
-@@ -8956,7 +8956,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %42 = bitcast %class.UniformWriter* %13 to i8*, !dbg !1673
-   %43 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1673
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %42, i8* align 32 %43, i64 64, i1 false), !dbg !1673, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %14), !dbg !1674
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval(%class.UniformWriter) align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %14), !dbg !1674
-   br i1 %44, label %60, label %45, !dbg !1675
- 
- ; <label>:45:                                     ; preds = %40
-@@ -8964,7 +8964,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %47 = bitcast %class.UniformWriter* %15 to i8*, !dbg !1677
-   %48 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1677
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %47, i8* align 32 %48, i64 64, i1 false), !dbg !1677, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %16), !dbg !1678
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval(%class.UniformWriter) align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %16), !dbg !1678
-   br i1 %49, label %60, label %50, !dbg !1679
- 
- ; <label>:50:                                     ; preds = %45
-@@ -8972,7 +8972,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %52 = bitcast %class.UniformWriter* %17 to i8*, !dbg !1681
-   %53 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1681
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %52, i8* align 32 %53, i64 64, i1 false), !dbg !1681, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %18), !dbg !1682
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval(%class.UniformWriter) align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %18), !dbg !1682
-   br i1 %54, label %60, label %55, !dbg !1683
- 
- ; <label>:55:                                     ; preds = %50
-@@ -8980,7 +8980,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %57 = bitcast %class.UniformWriter* %19 to i8*, !dbg !1685
-   %58 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1685
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %57, i8* align 32 %58, i64 64, i1 false), !dbg !1685, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %20), !dbg !1686
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval(%class.UniformWriter) align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %20), !dbg !1686
-   br label %60, !dbg !1683
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -8989,7 +8989,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1688 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1688 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9015,7 +9015,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1697 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1697 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9041,7 +9041,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1706 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1706 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9067,7 +9067,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1715 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1715 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9093,7 +9093,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1724 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1724 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9119,7 +9119,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1733 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1733 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9145,7 +9145,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1742 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1742 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9171,7 +9171,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1751 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1751 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10013,7 +10013,7 @@ define internal i32 @_ZN7details18_cm_print_type_oclIPvEENS_18SHADER_PRINTF_TYPE
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2061 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2061 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.VaryingWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -10036,7 +10036,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %22 = bitcast %class.VaryingWriter* %5 to i8*, !dbg !2063
-   %23 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2063
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %22, i8* align 32 %23, i64 64, i1 false), !dbg !2063, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %6), !dbg !2064
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %6), !dbg !2064
-   br i1 %24, label %60, label %25, !dbg !2065
- 
- ; <label>:25:                                     ; preds = %3
-@@ -10044,7 +10044,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %27 = bitcast %class.VaryingWriter* %7 to i8*, !dbg !2067
-   %28 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2067
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %27, i8* align 32 %28, i64 64, i1 false), !dbg !2067, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %8), !dbg !2068
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %8), !dbg !2068
-   br i1 %29, label %60, label %30, !dbg !2069
- 
- ; <label>:30:                                     ; preds = %25
-@@ -10052,7 +10052,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %32 = bitcast %class.VaryingWriter* %9 to i8*, !dbg !2071
-   %33 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2071
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %32, i8* align 32 %33, i64 64, i1 false), !dbg !2071, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %10), !dbg !2072
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %10), !dbg !2072
-   br i1 %34, label %60, label %35, !dbg !2073
- 
- ; <label>:35:                                     ; preds = %30
-@@ -10060,7 +10060,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %37 = bitcast %class.VaryingWriter* %11 to i8*, !dbg !2075
-   %38 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2075
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %37, i8* align 32 %38, i64 64, i1 false), !dbg !2075, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %12), !dbg !2076
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %12), !dbg !2076
-   br i1 %39, label %60, label %40, !dbg !2077
- 
- ; <label>:40:                                     ; preds = %35
-@@ -10068,7 +10068,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %42 = bitcast %class.VaryingWriter* %13 to i8*, !dbg !2079
-   %43 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2079
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %42, i8* align 32 %43, i64 64, i1 false), !dbg !2079, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %14), !dbg !2080
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %14), !dbg !2080
-   br i1 %44, label %60, label %45, !dbg !2081
- 
- ; <label>:45:                                     ; preds = %40
-@@ -10076,7 +10076,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %47 = bitcast %class.VaryingWriter* %15 to i8*, !dbg !2083
-   %48 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2083
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %47, i8* align 32 %48, i64 64, i1 false), !dbg !2083, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %16), !dbg !2084
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %16), !dbg !2084
-   br i1 %49, label %60, label %50, !dbg !2085
- 
- ; <label>:50:                                     ; preds = %45
-@@ -10084,7 +10084,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %52 = bitcast %class.VaryingWriter* %17 to i8*, !dbg !2087
-   %53 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2087
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %52, i8* align 32 %53, i64 64, i1 false), !dbg !2087, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %18), !dbg !2088
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %18), !dbg !2088
-   br i1 %54, label %60, label %55, !dbg !2089
- 
- ; <label>:55:                                     ; preds = %50
-@@ -10092,7 +10092,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %57 = bitcast %class.VaryingWriter* %19 to i8*, !dbg !2091
-   %58 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2091
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %57, i8* align 32 %58, i64 64, i1 false), !dbg !2091, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %20), !dbg !2092
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %20), !dbg !2092
-   br label %60, !dbg !2089
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -10101,7 +10101,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2094 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2094 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10127,7 +10127,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2103 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2103 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10153,7 +10153,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2112 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2112 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10179,7 +10179,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2121 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2121 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10205,7 +10205,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2130 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2130 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10231,7 +10231,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2139 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2139 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10257,7 +10257,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2148 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2148 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10283,7 +10283,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2157 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2157 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
diff --git a/srcpkgs/ispc/template b/srcpkgs/ispc/template
index 9c3acb42a9cf..3a85ff2605af 100644
--- a/srcpkgs/ispc/template
+++ b/srcpkgs/ispc/template
@@ -1,7 +1,7 @@
 # Template file for 'ispc'
 pkgname=ispc
-version=1.15.0
-revision=2
+version=1.17.0
+revision=1
 archs="x86_64*"
 build_style=cmake
 configure_args="-DISPC_NO_DUMPS=ON -DARM_ENABLED=OFF"
@@ -12,7 +12,7 @@ maintainer="Andrea Brancaleoni <abc@pompel.me>"
 license="BSD-3-Clause"
 homepage="https://ispc.github.io"
 distfiles="https://github.com/ispc/ispc/archive/v${version}.tar.gz"
-checksum=2658ff00dc045ac9fcefbf6bd26dffaf723b059a942a27df91bbb61bc503a285
+checksum=37fb1055d6c6b232e112d8d50145d726824ed4d8da93a7396315dceba6c76e62
 nocross=yes
 nopie=yes
 

From 9f0e423eba1dd587b1cefef15762ce2265d09ffe Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Tue, 3 May 2022 01:20:03 +0200
Subject: [PATCH 27/29] llvm14: switch to runtimes build.

https://reviews.llvm.org/rGac7031b2b2fa
https://reviews.llvm.org/D110338#3022952
---
 srcpkgs/llvm14/template | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
index 3e7e6ab2c00b..e731aa76130a 100644
--- a/srcpkgs/llvm14/template
+++ b/srcpkgs/llvm14/template
@@ -51,7 +51,8 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
-_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
+_enabled_projects="clang;clang-tools-extra;lld"
+_enabled_runtimes="compiler-rt;libcxx;libcxxabi;libunwind"
 
 _lldb_enable=yes
 _libomp_enable=no
@@ -67,9 +68,8 @@ esac
 
 subpackages="clang-tools-extra"
 
-# must go before clang
 if [ "$_libomp_enable" = "yes" ]; then
-	_enabled_projects+=";openmp"
+	_enabled_runtimes+=";openmp"
 	subpackages+=" libomp libomp-devel"
 	# because of cmake nonsense referencing libomptarget.so.*
 	depends+=" libomp>=${version}_${revision}"
@@ -88,6 +88,7 @@ fi
 subpackages+=" lld lld-devel"
 
 configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+configure_args+=" -DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}"
 
 post_patch() {
 	if [ "$_lldb_enable" = "yes" ]; then
@@ -156,7 +157,8 @@ pre_configure() {
 		CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
 			CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
-			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
+			-DLLVM_ENABLE_PROJECTS=${_enabled_projects} \
+			-DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}
 		make ${makejobs} -C utils/TableGen
 		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen

From 69284da4dbfcb60a4481b2c2b32a8d342c7eb60f Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 03:39:58 +0200
Subject: [PATCH 28/29] llvm14: fix build.

---
 srcpkgs/llvm14/files/llvm-Config-llvm-config.h | 9 +++++++++
 srcpkgs/llvm14/template                        | 3 +++
 2 files changed, 12 insertions(+)
 create mode 100644 srcpkgs/llvm14/files/llvm-Config-llvm-config.h

diff --git a/srcpkgs/llvm14/files/llvm-Config-llvm-config.h b/srcpkgs/llvm14/files/llvm-Config-llvm-config.h
new file mode 100644
index 000000000000..2fa08c9be696
--- /dev/null
+++ b/srcpkgs/llvm14/files/llvm-Config-llvm-config.h
@@ -0,0 +1,9 @@
+#include <bits/wordsize.h>
+
+#if __WORDSIZE == 32
+#include "llvm-config-32.h"
+#elif __WORDSIZE == 64
+#include "llvm-config-64.h"
+#else
+#error "Unknown word size"
+#endif
diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
index e731aa76130a..b21cff99e4d4 100644
--- a/srcpkgs/llvm14/template
+++ b/srcpkgs/llvm14/template
@@ -168,6 +168,9 @@ pre_configure() {
 		cd ../..
 	fi
 
+	mkdir -p gnu
+	touch gnu/stubs-32.h
+
 	case "$XBPS_TARGET_MACHINE" in
 		i686*) _arch="X86";;
 		x86_64*) _arch="X86";;

From 74b418722a07b5a81c498a84ff1b5f35257b9808 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 14:07:14 +0200
Subject: [PATCH 29/29] zig: fix build.

---
 srcpkgs/zig/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/zig/template b/srcpkgs/zig/template
index 728c5a64e9df..c175de62c5f7 100644
--- a/srcpkgs/zig/template
+++ b/srcpkgs/zig/template
@@ -5,7 +5,7 @@ revision=2
 archs="x86_64* aarch64*"
 build_style=cmake
 make_cmd=make
-makedepends="clang llvm12 lld-devel"
+makedepends="clang12 llvm12 lld12-devel"
 short_desc="Programming language designed for robustness, optimality, and clarity"
 maintainer="Isaac Freund <mail@isaacfreund.com>"
 license="MIT"

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: [PR PATCH] [Updated] Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (2 preceding siblings ...)
  2022-05-04 12:17 ` [PR PATCH] [Updated] Llvm14 prez
@ 2022-05-04 17:10 ` prez
  2022-05-04 20:26 ` prez
                   ` (65 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-05-04 17:10 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 667 bytes --]

There is an updated pull request by prez against master on the void-packages repository

https://github.com/prez/void-packages llvm
https://github.com/void-linux/void-packages/pull/36962

Llvm14
Supersedes https://github.com/void-linux/void-packages/pull/36229, https://github.com/void-linux/void-packages/pull/34800 - thank you @motorto and @DBLouis.

Updated patches, ping @q66 .

@ifreund todo: zig. Since it depends on `lld-devel`, I guess we need to split out `lld12`? Would appreciate your help with this, I don't want to wait for the next zig version.

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/36962.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-llvm-36962.patch --]
[-- Type: text/x-diff, Size: 536915 bytes --]

From af3214d006e7bc77ca1201c220be4ce4b8bebd34 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:15:06 +0200
Subject: [PATCH 01/29] New package: llvm14-14.0.3

---
 common/shlibs                                 |  16 +-
 srcpkgs/clang                                 |   2 +-
 srcpkgs/clang-analyzer                        |   2 +-
 srcpkgs/clang-tools-extra                     |   2 +-
 srcpkgs/libclang                              |   2 +-
 srcpkgs/libclang-cpp                          |   2 +-
 srcpkgs/libcxx                                |   2 +-
 srcpkgs/libcxx-devel                          |   2 +-
 srcpkgs/libcxxabi                             |   2 +-
 srcpkgs/libcxxabi-devel                       |   2 +-
 srcpkgs/libllvm14                             |   1 +
 srcpkgs/libomp                                |   2 +-
 srcpkgs/libomp-devel                          |   2 +-
 srcpkgs/lld                                   |   2 +-
 srcpkgs/lld-devel                             |   2 +-
 srcpkgs/lldb                                  |   2 +-
 srcpkgs/lldb-devel                            |   2 +-
 srcpkgs/llvm-libunwind                        |   2 +-
 srcpkgs/llvm-libunwind-devel                  |   2 +-
 .../patches/clang-002-add-musl-triples.patch  | 110 +++++
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 +
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ++
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 ++
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 +++
 srcpkgs/llvm14/patches/libcxx-musl.patch      |  26 ++
 srcpkgs/llvm14/patches/libcxx-ppc.patch       |  22 +
 .../llvm14/patches/libcxx-ssp-nonshared.patch |  11 +
 srcpkgs/llvm14/patches/libcxxabi-dl.patch     |  25 ++
 srcpkgs/llvm14/patches/lldb-musl.patch        |  31 ++
 srcpkgs/llvm14/patches/llvm-001-musl.patch    |  57 +++
 .../patches/llvm-002-musl-ppc64-elfv2.patch   |  30 ++
 .../patches/llvm-003-ppc-secureplt.patch      |  11 +
 .../patches/llvm-004-override-opt.patch       |  18 +
 .../llvm14/patches/llvm-005-ppc-bigpic.patch  |  36 ++
 .../patches/llvm-006-aarch64-mf_exec.patch    |  25 ++
 srcpkgs/llvm14/template                       | 424 ++++++++++++++++++
 srcpkgs/llvm14/update                         |   3 +
 37 files changed, 1018 insertions(+), 20 deletions(-)
 create mode 120000 srcpkgs/libllvm14
 create mode 100644 srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
 create mode 100644 srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
 create mode 100644 srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
 create mode 100644 srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-ppc.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxxabi-dl.patch
 create mode 100644 srcpkgs/llvm14/patches/lldb-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-001-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-004-override-opt.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
 create mode 100644 srcpkgs/llvm14/template
 create mode 100644 srcpkgs/llvm14/update

diff --git a/common/shlibs b/common/shlibs
index 4114151662fb..81acc39defb4 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -975,11 +975,12 @@ libuchardet.so.0 uchardet-0.0.6_1
 libgtksourceviewmm-3.0.so.0 gtksourceviewmm-3.2.0_1
 libyajl.so.2 yajl-2.0.1_1
 libconfuse.so.2 confuse-3.2.1_1
-liblldb.so.12 lldb-12.0.0_1
-libclang.so.12 libclang-12.0.0_1
-libclang-cpp.so.12 libclang-cpp-12.0.0_1
+liblldb.so.14 lldb-14.0.3_1
+libclang.so.14 libclang-14.0.3_1
+libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
+libLLVM-14.so libllvm14-14.0.3_1
 libisofs.so.6 libisofs-0.6.24_1
 libmpack.so.0 libmpack-1.0.5_1
 libGeoIP.so.1 libgeoip-1.4.8_1
@@ -4152,3 +4153,12 @@ librz_bin.so.0.3.4 rizin-0.3.4_1
 libaravis-0.8.so.0 libaravis-0.8.21_1
 libLimeSuite.so.20.10-1 LimeSuite-20.10.0_1
 libnvme.so.1 libnvme-1.0_1
+libomp.so libomp-14.0.3_1
+libomptarget.rtl.amdgpu.so libomp-14.0.3_1
+libomptarget.rtl.cuda.so libomp-14.0.3_1
+libomptarget.rtl.x86_64.so libomp-14.0.3_1
+libarcher.so libomp-14.0.3_1
+libomptarget.so libomp-14.0.3_1
+liblldbIntelFeatures.so.14 lldb-14.0.3_1
+libLTO.so.14 llvm14-14.0.3_1
+libRemarks.so.14 llvm14-14.0.3_1
diff --git a/srcpkgs/clang b/srcpkgs/clang
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang
+++ b/srcpkgs/clang
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/clang-analyzer b/srcpkgs/clang-analyzer
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang-analyzer
+++ b/srcpkgs/clang-analyzer
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/clang-tools-extra b/srcpkgs/clang-tools-extra
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang-tools-extra
+++ b/srcpkgs/clang-tools-extra
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libclang b/srcpkgs/libclang
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libclang
+++ b/srcpkgs/libclang
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libclang-cpp b/srcpkgs/libclang-cpp
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libclang-cpp
+++ b/srcpkgs/libclang-cpp
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxx b/srcpkgs/libcxx
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxx
+++ b/srcpkgs/libcxx
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxx-devel b/srcpkgs/libcxx-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxx-devel
+++ b/srcpkgs/libcxx-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxxabi b/srcpkgs/libcxxabi
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxxabi
+++ b/srcpkgs/libcxxabi
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxxabi-devel b/srcpkgs/libcxxabi-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxxabi-devel
+++ b/srcpkgs/libcxxabi-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libllvm14 b/srcpkgs/libllvm14
new file mode 120000
index 000000000000..1d42ed7632a6
--- /dev/null
+++ b/srcpkgs/libllvm14
@@ -0,0 +1 @@
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libomp b/srcpkgs/libomp
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libomp
+++ b/srcpkgs/libomp
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libomp-devel b/srcpkgs/libomp-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libomp-devel
+++ b/srcpkgs/libomp-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lld b/srcpkgs/lld
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lld
+++ b/srcpkgs/lld
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lld-devel b/srcpkgs/lld-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lld-devel
+++ b/srcpkgs/lld-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lldb b/srcpkgs/lldb
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lldb
+++ b/srcpkgs/lldb
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lldb-devel b/srcpkgs/lldb-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lldb-devel
+++ b/srcpkgs/lldb-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm-libunwind b/srcpkgs/llvm-libunwind
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/llvm-libunwind
+++ b/srcpkgs/llvm-libunwind
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm-libunwind-devel b/srcpkgs/llvm-libunwind-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/llvm-libunwind-devel
+++ b/srcpkgs/llvm-libunwind-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
new file mode 100644
index 000000000000..7b640e102bed
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
@@ -0,0 +1,110 @@
+--- a/clang/lib/Driver/ToolChains/Gnu.cpp
++++ b/clang/lib/Driver/ToolChains/Gnu.cpp
+@@ -2083,7 +2083,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
+                                              "armv7hl-redhat-linux-gnueabi",
+                                              "armv6hl-suse-linux-gnueabi",
+-                                             "armv7hl-suse-linux-gnueabi"};
++                                             "armv7hl-suse-linux-gnueabi",
++                                             "armv7l-linux-gnueabihf"};
+   static const char *const ARMebLibDirs[] = {"/lib"};
+   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi"};
+   static const char *const ARMebHFTriples[] = {
+@@ -2151,8 +2152,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
+   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
+   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
+-                                             "powerpcle-unknown-linux-gnu",
+-                                             "powerpcle-linux-musl"};
++                                             "powerpcle-unknown-linux-gnu"};
+
+   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
+   static const char *const PPC64Triples[] = {
+@@ -2231,6 +2231,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+     return;
+   }
+
++  if (TargetTriple.isMusl()) {
++    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
++    static const char *const ARMHFMuslTriples[] = {
++        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
++    };
++    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
++    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
++    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
++    static const char *const MIPSMuslTriples[] = {
++        "mips-linux-musl", "mipsel-linux-musl",
++        "mipsel-linux-muslhf", "mips-linux-muslhf"
++    };
++    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
++    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
++    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
++    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
++
++    switch (TargetTriple.getArch()) {
++    case llvm::Triple::aarch64:
++      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      break;
++    case llvm::Triple::arm:
++      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
++      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
++        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
++      } else {
++        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
++      }
++      break;
++    case llvm::Triple::x86_64:
++      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      break;
++    case llvm::Triple::x86:
++      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      break;
++    case llvm::Triple::mips:
++      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
++      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
++      break;
++    case llvm::Triple::ppc:
++      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      break;
++    case llvm::Triple::ppcle:
++      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      break;
++    case llvm::Triple::ppc64:
++      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      break;
++    case llvm::Triple::ppc64le:
++      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      break;
++    default:
++      break;
++    }
++    TripleAliases.push_back(TargetTriple.str());
++    if (TargetTriple.str() != BiarchTriple.str())
++      BiarchTripleAliases.push_back(BiarchTriple.str());
++    return;
++  }
++
+   // Android targets should not use GNU/Linux tools or libraries.
+   if (TargetTriple.isAndroid()) {
+     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
new file mode 100644
index 000000000000..47128af79b7f
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
@@ -0,0 +1,13 @@
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -490,10 +490,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+     Loader = "ld.so.1";
+     break;
+   case llvm::Triple::ppc64:
+-    LibDir = "lib64";
+-    Loader =
+-        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
+-    break;
+   case llvm::Triple::ppc64le:
+     LibDir = "lib64";
+     Loader =
diff --git a/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
new file mode 100644
index 000000000000..21fc8003c5f1
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
@@ -0,0 +1,48 @@
+--- a/clang/lib/Basic/Targets/PPC.h
++++ b/clang/lib/Basic/Targets/PPC.h
+@@ -415,11 +415,10 @@ public:
+       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
+     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
+       DataLayout = "e-m:e-i64:64-n32:64";
+-      ABI = "elfv2";
+     } else {
+       DataLayout = "E-m:e-i64:64-n32:64";
+-      ABI = "elfv1";
+     }
++    ABI = "elfv2";
+ 
+     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
+       LongDoubleWidth = LongDoubleAlign = 64;
+--- a/clang/lib/CodeGen/TargetInfo.cpp
++++ b/clang/lib/CodeGen/TargetInfo.cpp
+@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
+       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
+ 
+     if (Triple.isOSBinFormatELF()) {
+-      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
+-      if (getTarget().getABI() == "elfv2")
+-        Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      if (getTarget().getABI() == "elfv1")
++        Kind = PPC64_SVR4_ABIInfo::ELFv1;
+       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
+ 
+       return SetCGInfo(
+--- a/clang/lib/Driver/ToolChains/Clang.cpp
++++ b/clang/lib/Driver/ToolChains/Clang.cpp
+@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
+   const llvm::Triple &T = getToolChain().getTriple();
+   if (T.isOSBinFormatELF()) {
+     switch (getToolChain().getArch()) {
+-    case llvm::Triple::ppc64: {
+-      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
+-          T.isOSOpenBSD() || T.isMusl())
+-        ABIName = "elfv2";
+-      else
+-        ABIName = "elfv1";
+-      break;
+-    }
++    case llvm::Triple::ppc64:
+     case llvm::Triple::ppc64le:
+       ABIName = "elfv2";
+       break;
diff --git a/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch b/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
new file mode 100644
index 000000000000..4135bfd4486a
--- /dev/null
+++ b/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
@@ -0,0 +1,35 @@
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
+@@ -74,6 +74,10 @@
+ #include <sys/utsname.h>
+ #endif
+
++#if SANITIZER_LINUX && defined(__powerpc__)
++#include <asm/ptrace.h>
++#endif
++
+ #if SANITIZER_LINUX && !SANITIZER_ANDROID
+ #include <sys/personality.h>
+ #endif
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
+@@ -92,7 +92,7 @@
+ # include <utime.h>
+ # include <sys/ptrace.h>
+ #    if defined(__mips64) || defined(__aarch64__) || defined(__arm__) || \
+-        defined(__hexagon__) || SANITIZER_RISCV64
++        defined(__hexagon__) || defined(__powerpc__) || SANITIZER_RISCV64
+ #      include <asm/ptrace.h>
+ #      ifdef __arm__
+ typedef struct user_fpregs elf_fpregset_t;
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
+@@ -31,7 +31,7 @@
+ #include <sys/types.h> // for pid_t
+ #include <sys/uio.h> // for iovec
+ #include <elf.h> // for NT_PRSTATUS
+-#if (defined(__aarch64__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
++#if (defined(__aarch64__) || defined(__powerpc__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
+ // GLIBC 2.20+ sys/user does not include asm/ptrace.h
+ # include <asm/ptrace.h>
+ #endif
diff --git a/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch b/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
new file mode 100644
index 000000000000..d0b61c80c897
--- /dev/null
+++ b/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
@@ -0,0 +1,62 @@
+--- a/compiler-rt/lib/xray/xray_powerpc64.inc
++++ b/compiler-rt/lib/xray/xray_powerpc64.inc
+@@ -12,7 +12,13 @@
+ 
+ #include <cstdint>
+ #include <mutex>
++#ifdef __GLIBC__
+ #include <sys/platform/ppc.h>
++#else
++#include <cctype>
++#include <cstring>
++#include <cstdlib>
++#endif
+ 
+ #include "xray_defs.h"
+ 
+@@ -20,13 +26,45 @@ namespace __xray {
+ 
+ ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
+   CPU = 0;
++#ifdef __GLIBC__
+   return __ppc_get_timebase();
++#else
++  return __builtin_ppc_get_timebase();
++#endif
+ }
+ 
+ inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
+   static std::mutex M;
+   std::lock_guard<std::mutex> Guard(M);
++#ifdef __GLIBC__
+   return __ppc_get_timebase_freq();
++#else
++  /* FIXME: a less dirty implementation? */
++  static uint64_t base;
++  if (!base) {
++    FILE *f = fopen("/proc/cpuinfo", "rb");
++    if (f) {
++      ssize_t nr;
++      /* virtually always big enough to hold the line */
++      char buf[512];
++      while (fgets(buf, sizeof(buf), f)) {
++        char *ret = strstr(buf, "timebase");
++        if (!ret) {
++          continue;
++        }
++        ret += sizeof("timebase") - 1;
++        ret = strchr(ret, ':');
++        if (!ret) {
++          continue;
++        }
++        base = strtoul(ret + 1, nullptr, 10);
++        break;
++      }
++      fclose(f);
++    }
++  }
++  return base;
++#endif
+ }
+ 
+ inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
diff --git a/srcpkgs/llvm14/patches/libcxx-musl.patch b/srcpkgs/llvm14/patches/libcxx-musl.patch
new file mode 100644
index 000000000000..bbd31ffc2cb1
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-musl.patch
@@ -0,0 +1,26 @@
+--- a/libcxx/include/locale
++++ b/libcxx/include/locale
+@@ -742,7 +742,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
+         typename remove_reference<decltype(errno)>::type __save_errno = errno;
+         errno = 0;
+         char *__p2;
++#if defined(__linux__) && !defined(__GLIBC__)
++        long long __ll = strtoll(__a, &__p2, __base);
++#else
+         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
++#endif
+         typename remove_reference<decltype(errno)>::type __current_errno = errno;
+         if (__current_errno == 0)
+             errno = __save_errno;
+@@ -782,7 +786,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
+         typename remove_reference<decltype(errno)>::type __save_errno = errno;
+         errno = 0;
+         char *__p2;
++#if defined(__linux__) && !defined(__GLIBC__)
++        unsigned long long __ll = strtoull(__a, &__p2, __base);
++#else
+         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
++#endif
+         typename remove_reference<decltype(errno)>::type __current_errno = errno;
+         if (__current_errno == 0)
+             errno = __save_errno;
diff --git a/srcpkgs/llvm14/patches/libcxx-ppc.patch b/srcpkgs/llvm14/patches/libcxx-ppc.patch
new file mode 100644
index 000000000000..7a92f8004e1c
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-ppc.patch
@@ -0,0 +1,22 @@
+This ensures `is_iec559` is defined correctly under all long double ABIs,
+including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__`
+is not defined on gcc.
+
+--- a/libcxx/include/limits
++++ b/libcxx/include/limits
+@@ -426,8 +426,14 @@ protected:
+     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
+     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
+ 
+-#if (defined(__ppc__) || defined(__ppc64__))
++#if defined(__powerpc__) || defined(__powerpc64__)
++#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__)
++    /* IEEE 754 quadruple or double precision */
++    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
++#else
++    /* 128-bit IBM double-double */
+     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
++#endif
+ #else
+     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
+ #endif
diff --git a/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch b/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
new file mode 100644
index 000000000000..70292beb2fcd
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
@@ -0,0 +1,11 @@
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -769,6 +769,8 @@ function(cxx_link_system_libraries target)
+     target_link_libraries(${target} PRIVATE atomic)
+   endif()
+ 
++#ssp  target_link_libraries(${target} PRIVATE ssp_nonshared)
++
+   if (MINGW)
+     target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
+   endif()
diff --git a/srcpkgs/llvm14/patches/libcxxabi-dl.patch b/srcpkgs/llvm14/patches/libcxxabi-dl.patch
new file mode 100644
index 000000000000..3a15f9db8c98
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxxabi-dl.patch
@@ -0,0 +1,25 @@
+Also link to -ldl to prevent undefined references.
+
+--- a/libcxxabi/src/CMakeLists.txt
++++ b/libcxxabi/src/CMakeLists.txt
+@@ -73,6 +73,7 @@
+   endif()
+ 
+   add_library_flags_if(LIBCXXABI_HAS_C_LIB c)
++  add_library_flags_if(LIBCXXABI_HAS_C_LIB dl)
+ endif()
+ 
+ if (LIBCXXABI_USE_LLVM_UNWINDER)
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -745,6 +745,10 @@
+     target_link_libraries(${target} PRIVATE m)
+   endif()
+ 
++  if (LIBCXX_HAS_C_LIB)
++    target_link_libraries(${target} PRIVATE dl)
++  endif()
++
+   if (LIBCXX_HAS_RT_LIB)
+     target_link_libraries(${target} PRIVATE rt)
+   endif()
diff --git a/srcpkgs/llvm14/patches/lldb-musl.patch b/srcpkgs/llvm14/patches/lldb-musl.patch
new file mode 100644
index 000000000000..601c0d138523
--- /dev/null
+++ b/srcpkgs/llvm14/patches/lldb-musl.patch
@@ -0,0 +1,31 @@
+--- a/lldb/source/Plugins/Process/Linux/Procfs.h
++++ b/lldb/source/Plugins/Process/Linux/Procfs.h
+@@ -10,21 +10,12 @@
+ // sys/procfs.h on Android/Linux for all supported architectures.
+ 
+ #include <sys/ptrace.h>
++#include <asm/ptrace.h>
+ 
+-#ifdef __ANDROID__
+-#if defined(__arm64__) || defined(__aarch64__)
+-typedef unsigned long elf_greg_t;
+-typedef elf_greg_t
+-    elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
+-typedef struct user_fpsimd_state elf_fpregset_t;
+-#ifndef NT_FPREGSET
+-#define NT_FPREGSET NT_PRFPREG
+-#endif // NT_FPREGSET
+-#elif defined(__mips__)
+-#ifndef NT_FPREGSET
+-#define NT_FPREGSET NT_PRFPREG
+-#endif // NT_FPREGSET
+-#endif
+-#else // __ANDROID__
++#if !defined(__GLIBC__) && defined(__powerpc__)
++#define pt_regs musl_pt_regs
++#include <sys/procfs.h>
++#undef pt_regs
++#else
+ #include <sys/procfs.h>
+-#endif // __ANDROID__
++#endif
diff --git a/srcpkgs/llvm14/patches/llvm-001-musl.patch b/srcpkgs/llvm14/patches/llvm-001-musl.patch
new file mode 100644
index 000000000000..f2a3f8d62813
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-001-musl.patch
@@ -0,0 +1,57 @@
+From faca3fbd15d0c3108493c3c54cd93138e049ac43 Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe@gmail.com>
+Date: Tue, 8 Sep 2015 22:03:02 +0200
+Subject: [PATCH 3/3] musl
+
+---
+ include/llvm/Analysis/TargetLibraryInfo.h | 9 +++++++++
+ lib/Support/DynamicLibrary.cpp            | 2 +-
+ lib/Support/Unix/Signals.inc              | 6 +++---
+ utils/unittest/googletest/src/gtest.cc    | 1 +
+ 5 files changed, 17 insertions(+), 6 deletions(-)
+
+diff --git a/include/llvm/Analysis/TargetLibraryInfo.h b/include/llvm/Analysis/TargetLibraryInfo.h
+index 34a8a1e3..1214ece5 100644
+--- a/llvm/include/llvm/Analysis/TargetLibraryInfo.h
++++ b/llvm/include/llvm/Analysis/TargetLibraryInfo.h
+@@ -18,6 +18,15 @@
+ #include "llvm/IR/PassManager.h"
+ #include "llvm/Pass.h"
+ 
++#undef fopen64
++#undef fseeko64
++#undef fstat64
++#undef fstatvfs64
++#undef ftello64
++#undef lstat64
++#undef stat64
++#undef tmpfile64
++
+ namespace llvm {
+ template <typename T> class ArrayRef;
+ class Triple;
+diff --git a/lib/Support/Unix/DynamicLibrary.inc b/lib/Support/Unix/DynamicLibrary.inc
+index a2a37996..2f86c470 100644
+--- a/llvm/lib/Support/Unix/DynamicLibrary.inc
++++ b/llvm/lib/Support/Unix/DynamicLibrary.inc
+@@ -102,7 +102,7 @@ static void *DoSearch(const char* SymbolName) {
+ 
+ // This macro returns the address of a well-known, explicit symbol
+ #define EXPLICIT_SYMBOL(SYM) \
+-   if (!strcmp(SymbolName, #SYM)) return &SYM
++   if (!strcmp(SymbolName, #SYM)) return (void *)&SYM
+ 
+ // Under glibc we have a weird situation. The stderr/out/in symbols are both
+ // macros and global variables because of standards requirements. So, we
+diff --git a/utils/unittest/googletest/src/gtest.cc b/utils/unittest/googletest/src/gtest.cc
+index d882ab2e..f1fb12d0 100644
+--- a/llvm/utils/unittest/googletest/src/gtest.cc
++++ b/llvm/utils/unittest/googletest/src/gtest.cc
+@@ -128,6 +128,7 @@
+ 
+ #if GTEST_CAN_STREAM_RESULTS_
+ # include <arpa/inet.h>  // NOLINT
++# include <sys/socket.h>  // NOLINT
+ # include <netdb.h>  // NOLINT
+ # include <sys/socket.h>  // NOLINT
+ # include <sys/types.h>  // NOLINT
diff --git a/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch b/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
new file mode 100644
index 000000000000..0071d964bd37
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
@@ -0,0 +1,30 @@
+This patches LLVM to use ELFv2 on ppc64 unconditionally unless overridden. We
+need this because unlike most distros we use ELFv2 for both glibc and musl
+on big endian ppc64.
+
+diff --git a/lib/Target/PowerPC/PPCTargetMachine.cpp b/lib/Target/PowerPC/PPCTargetMachine.cpp
+index 0634833e..b7cbc2e7 100644
+--- a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
++++ b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
+@@ -222,9 +222,8 @@ static PPCTargetMachine::PPCABI computeTargetABI(const Triple &TT,
+ 
+   switch (TT.getArch()) {
+   case Triple::ppc64le:
+-    return PPCTargetMachine::PPC_ABI_ELFv2;
+   case Triple::ppc64:
+-    return PPCTargetMachine::PPC_ABI_ELFv1;
++    return PPCTargetMachine::PPC_ABI_ELFv2;
+   default:
+     return PPCTargetMachine::PPC_ABI_UNKNOWN;
+   }
+diff --git a/test/CodeGen/PowerPC/ppc64-elf-abi.ll b/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+index 8b1cf6b5..296a2afa 100644
+--- a/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
++++ b/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+@@ -1,4 +1,5 @@
+-; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv1
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-musl < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv1 < %s | FileCheck %s -check-prefix=CHECK-ELFv1
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv2 < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
diff --git a/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch b/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
new file mode 100644
index 000000000000..b5d15974375d
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
@@ -0,0 +1,11 @@
+--- a/llvm/lib/Target/PowerPC/PPCSubtarget.cpp
++++ b/llvm/lib/Target/PowerPC/PPCSubtarget.cpp
+@@ -165,7 +165,7 @@ void PPCSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) {
+ 
+   if ((TargetTriple.isOSFreeBSD() && TargetTriple.getOSMajorVersion() >= 13) ||
+       TargetTriple.isOSNetBSD() || TargetTriple.isOSOpenBSD() ||
+-      TargetTriple.isMusl())
++      isTargetLinux())
+     SecurePlt = true;
+ 
+   if (HasSPE && IsPPC64)
diff --git a/srcpkgs/llvm14/patches/llvm-004-override-opt.patch b/srcpkgs/llvm14/patches/llvm-004-override-opt.patch
new file mode 100644
index 000000000000..51d0e4b31b32
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-004-override-opt.patch
@@ -0,0 +1,18 @@
+This allows us to override the optimization level as not all platforms can
+deal with -O3.
+
+--- a/llvm/CMakeLists.txt
++++ b/llvm/CMakeLists.txt
+@@ -918,6 +918,12 @@ if( MINGW AND NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" )
+   llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "-O2")
+ endif()
+ 
++set(VOID_CXX_OPT_FLAGS "" CACHE STRING "Optimization level to use")
++
++if (NOT VOID_CXX_OPT_FLAGS STREQUAL "")
++    llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "${VOID_CXX_OPT_FLAGS}")
++endif()
++
+ # Put this before tblgen. Else we have a circular dependence.
+ add_subdirectory(lib/Demangle)
+ add_subdirectory(lib/Support)
diff --git a/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch b/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
new file mode 100644
index 000000000000..d332687b9d92
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
@@ -0,0 +1,36 @@
+From f3dbdd49c06bfafc1d6138094cf42889c14d38b6 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Sun, 3 Nov 2019 10:57:27 -0600
+Subject: [PATCH] [LLVM][PowerPC] Assume BigPIC if no PIC level is specified
+
+---
+ llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp  | 2 +-
+ llvm/lib/Target/PowerPC/PPCMCInstLower.cpp | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/Target/PowerPC/PPCAsmPrinter.cpp b/lib/Target/PowerPC/PPCAsmPrinter.cpp
+index cce21f32..87ca5f9b 100644
+--- a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
++++ b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
+@@ -520,7 +520,7 @@ void PPCAsmPrinter::EmitTlsCall(const MachineInstr *MI,
+ 
+   // Add 32768 offset to the symbol so we follow up the latest GOT/PLT ABI.
+   if (Kind == MCSymbolRefExpr::VK_PLT && Subtarget->isSecurePlt() &&
+-      M->getPICLevel() == PICLevel::BigPIC)
++      M->getPICLevel() != PICLevel::SmallPIC)
+     TlsRef = MCBinaryExpr::createAdd(
+         TlsRef, MCConstantExpr::create(32768, OutContext), OutContext);
+   const MachineOperand &MO = MI->getOperand(2);
+diff --git a/lib/Target/PowerPC/PPCMCInstLower.cpp b/lib/Target/PowerPC/PPCMCInstLower.cpp
+index 5cc180d7..a5b02565 100644
+--- a/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
++++ b/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
+@@ -117,7 +117,7 @@ static MCOperand GetSymbolRef(const MachineOperand &MO, const MCSymbol *Symbol,
+   const MCExpr *Expr = MCSymbolRefExpr::create(Symbol, RefKind, Ctx);
+   // If -msecure-plt -fPIC, add 32768 to symbol.
+   if (Subtarget->isSecurePlt() && TM.isPositionIndependent() &&
+-      M->getPICLevel() == PICLevel::BigPIC &&
++      M->getPICLevel() != PICLevel::SmallPIC &&
+       MO.getTargetFlags() == PPCII::MO_PLT)
+     Expr =
+         MCBinaryExpr::createAdd(Expr, MCConstantExpr::create(32768, Ctx), Ctx);
diff --git a/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch b/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
new file mode 100644
index 000000000000..a00abd216665
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
@@ -0,0 +1,25 @@
+Fix failures in AllocationTests/MappedMemoryTest.* on aarch64:
+
+    Failing Tests (8):
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.AllocAndRelease/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.DuplicateNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.EnabledWrite/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.MultipleAllocAndRelease/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.SuccessiveNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.UnalignedNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.ZeroNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.ZeroSizeNear/3
+
+Upstream-Issue: https://bugs.llvm.org/show_bug.cgi?id=14278#c10
+
+--- a/llvm/lib/Support/Unix/Memory.inc
++++ b/llvm/lib/Support/Unix/Memory.inc
+@@ -58,7 +58,7 @@ static int getPosixProtectionFlags(unsigned Flags) {
+     return PROT_READ | PROT_WRITE | PROT_EXEC;
+   case llvm::sys::Memory::MF_EXEC:
+ #if (defined(__FreeBSD__) || defined(__POWERPC__) || defined (__ppc__) || \
+-     defined(_POWER) || defined(_ARCH_PPC))
++     defined(_POWER) || defined(_ARCH_PPC) || (defined(__linux__) && defined(__aarch64__)))
+     // On PowerPC, having an executable page that has no read permission
+     // can have unintended consequences.  The function InvalidateInstruction-
+     // Cache uses instructions dcbf and icbi, both of which are treated by
diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
new file mode 100644
index 000000000000..3e7e6ab2c00b
--- /dev/null
+++ b/srcpkgs/llvm14/template
@@ -0,0 +1,424 @@
+# Template file for 'llvm14'
+pkgname=llvm14
+version=14.0.3
+revision=1
+wrksrc="llvm-project-${version}.src"
+build_wrksrc=llvm
+build_style=cmake
+configure_args="
+ -DCMAKE_BUILD_TYPE=Release -Wno-dev
+ -DENABLE_LINKER_BUILD_ID=YES
+ -DLLDB_USE_SYSTEM_SIX=YES
+ -DLIBCXX_CXX_ABI=libcxxabi
+ -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
+ -DLIBCXXABI_USE_LLVM_UNWINDER=YES
+ -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
+ -DLIBOMP_ENABLE_SHARED=YES
+ -DLIBOMP_INSTALL_ALIASES=NO
+ -DLLVM_INCLUDE_DOCS=YES
+ -DLLVM_BUILD_DOCS=YES
+ -DLLVM_ENABLE_SPHINX=YES
+ -DSPHINX_WARNINGS_AS_ERRORS=NO
+ -DLLVM_INSTALL_UTILS=YES
+ -DLLVM_BUILD_LLVM_DYLIB=YES
+ -DLLVM_LINK_LLVM_DYLIB=YES
+ -DLLVM_ENABLE_RTTI=YES
+ -DLLVM_ENABLE_FFI=YES
+ -DLLVM_BINUTILS_INCDIR=/usr/include"
+hostmakedepends="perl python3 zlib-devel libffi-devel swig python3-Sphinx
+ python3-recommonmark python3-sphinx-automodapi"
+makedepends="python3-devel zlib-devel elfutils-devel libffi-devel libedit-devel
+ libxml2-devel binutils-devel libatomic-devel"
+depends="libllvm14>=${version}_${revision}"
+short_desc="Low Level Virtual Machine"
+maintainer="q66 <daniel@octaforge.org>"
+license="Apache-2.0"
+homepage="https://www.llvm.org"
+distfiles="https://github.com/llvm/llvm-project/releases/download/llvmorg-${version}/llvm-project-${version}.src.tar.xz"
+checksum=44d3e7a784d5cf805e72853bb03f218bd1058d448c03ca883dabbebc99204e0c
+lib32disabled=yes
+python_version=3
+
+if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+	configure_args+=" -DLIBCXX_HAS_MUSL_LIBC=YES"
+	makedepends+=" libexecinfo-devel"
+	depends+=" libexecinfo-devel"
+fi
+
+# "operand out of range" assembler failures
+case "$XBPS_TARGET_MACHINE" in
+	ppc64*) ;;
+	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
+esac
+
+_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
+
+_lldb_enable=yes
+_libomp_enable=no
+
+case "$XBPS_TARGET_MACHINE" in
+	ppc64le*) ;;
+	ppc*|i686*) _lldb_enable=no ;;
+esac
+
+case "$XBPS_TARGET_MACHINE" in
+	x86_64*|aarch64*|ppc64*) _libomp_enable=yes;;
+esac
+
+subpackages="clang-tools-extra"
+
+# must go before clang
+if [ "$_libomp_enable" = "yes" ]; then
+	_enabled_projects+=";openmp"
+	subpackages+=" libomp libomp-devel"
+	# because of cmake nonsense referencing libomptarget.so.*
+	depends+=" libomp>=${version}_${revision}"
+fi
+
+subpackages+=" clang clang-analyzer libclang libclang-cpp
+ llvm-libunwind llvm-libunwind-devel libcxx libcxx-devel
+ libcxxabi libcxxabi-devel libllvm14"
+
+if [ "$_lldb_enable" = "yes" ]; then
+	# XXX fails to cross compile due to python
+	_enabled_projects+=";lldb"
+	subpackages+=" lldb lldb-devel"
+fi
+
+subpackages+=" lld lld-devel"
+
+configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+
+post_patch() {
+	if [ "$_lldb_enable" = "yes" ]; then
+		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+			vsed -i 's|__ptrace_request|int|g' \
+				${wrksrc}/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
+		fi
+		# disable docs for lldb as they fail to generate
+		vsed -i '/add_subdirectory(docs)/d' \
+			${wrksrc}/lldb/CMakeLists.txt
+	fi
+
+	# update config.guess for better platform detection
+	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
+		${wrksrc}/llvm/cmake
+
+	# fix linker failures on some archs
+	vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
+		${wrksrc}/libcxxabi/cmake/config-ix.cmake
+	vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
+		${wrksrc}/libcxxabi/cmake/config-ix.cmake
+
+	# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*) ;;
+		ppc*-musl|i686-musl|mips*-musl)
+			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
+				${wrksrc}/libunwind/src/CMakeLists.txt
+			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
+				${wrksrc}/libcxxabi/src/CMakeLists.txt
+			vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
+			;;
+	esac
+
+	case "$XBPS_TARGET_MACHINE" in
+		x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
+			vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
+				${wrksrc}/compiler-rt/CMakeLists.txt
+			;;
+		arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
+			vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
+				${wrksrc}/compiler-rt/cmake/config-ix.cmake
+			;;
+	esac
+}
+
+pre_configure() {
+	local triplet
+
+	# Vastly reduce size of debugging symbols:
+	CFLAGS=${CFLAGS/ -g/ -g1}
+	CXXFLAGS=${CXXFLAGS/ -g/ -g1}
+
+	# since gcc9, the build likes to blow up for ppc32 apparently because
+	# of clang being too large for a 24-bit relative call to the PLT, so
+	# optimize for size instead
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*) ;;
+		mips*-musl|ppc*) configure_args+=" -DVOID_CXX_OPT_FLAGS=-Os" ;;
+	esac
+
+	if [ "$CROSS_BUILD" ]; then
+		msg_normal "Building host tblgen\n"
+		mkdir -p build/HOST
+		cd build/HOST
+		CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
+			CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
+			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
+			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
+		make ${makejobs} -C utils/TableGen
+		make ${makejobs} -C tools/clang/utils/TableGen
+		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
+		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
+		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
+		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
+		cd ../..
+	fi
+
+	case "$XBPS_TARGET_MACHINE" in
+		i686*) _arch="X86";;
+		x86_64*) _arch="X86";;
+		armv5*) _arch="Armv5te";;
+		armv6*) _arch="Armv6";;
+		armv7*) _arch="Armv7";;
+		aarch64*) _arch="AArch64";;
+		mips*) _arch="Mips";;
+		ppc*) _arch="PowerPC";;
+		riscv64*) _arch="RISCV64";;
+	esac
+
+	triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
+
+	configure_args+=" -DLLVM_TARGET_ARCH=${_arch}"
+	configure_args+=" -DLLVM_HOST_TRIPLE=${triplet}"
+	configure_args+=" -DLLVM_DEFAULT_TARGET_TRIPLE=${triplet}"
+}
+
+do_install() {
+	cd build
+	cmake -DCMAKE_INSTALL_PREFIX=${DESTDIR}/usr -P cmake_install.cmake
+
+	# Required for multilib.
+	if [ "$XBPS_TARGET_MACHINE" = "x86_64" ]; then
+		for _header in llvm-config; do
+			mv ${DESTDIR}/usr/include/llvm/Config/${_header}{,-64}.h
+			vinstall ${FILESDIR}/llvm-Config-${_header}.h 644 \
+				usr/include/llvm/Config ${_header}.h
+		done
+	fi
+
+	# Remove llvm-config-host in cross builds.
+	if [ "$CROSS_BUILD" ]; then
+		rm -f ${DESTDIR}/usr/bin/llvm-config-host
+	fi
+
+	# Install libcxxabi headers
+	vinstall ${wrksrc}/libcxxabi/include/__cxxabi_config.h 644 usr/include
+	vinstall ${wrksrc}/libcxxabi/include/cxxabi.h 644 usr/include
+
+	# Install libunwind headers
+	vinstall ${wrksrc}/libunwind/include/__libunwind_config.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/libunwind.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/unwind.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/mach-o/compact_unwind_encoding.h \
+		644 usr/include/mach-o
+}
+
+clang-analyzer_package() {
+	pycompile_dirs="usr/share/scan-view"
+	depends="clang-${version}_${revision} python3 perl"
+	short_desc+=" - A source code analysis framework"
+	homepage="https://clang-analyzer.llvm.org/"
+	pkg_install() {
+		vmove usr/share/man/man1/scan-build.1
+		vmove "/usr/bin/scan-*"
+		vmove "/usr/share/scan-*"
+		vmove "/usr/libexec/*analyzer"
+	}
+}
+
+clang-tools-extra_package() {
+	lib32disabled=yes
+	depends="clang-${version}_${revision} python3"
+	short_desc+=" - Extra Clang tools"
+	homepage="https://clang.llvm.org/extra/"
+	pkg_install() {
+		vmove usr/include/clang-tidy
+		vmove usr/bin/clang-apply-replacements
+		vmove usr/bin/clang-query
+		vmove usr/bin/clang-rename
+		vmove usr/bin/clang-tidy
+		vmove usr/bin/diagtool
+		vmove usr/bin/find-all-symbols
+		vmove usr/bin/hmaptool
+		vmove usr/bin/modularize
+		vmove usr/bin/pp-trace
+		vmove usr/bin/sancov
+		vmove "usr/lib/libclangApplyReplacements*"
+		vmove "usr/lib/libclangQuery*"
+		vmove "usr/lib/libclangTidy*"
+		vmove "usr/share/clang/*tidy*"
+		vmove usr/share/doc/clang-tools
+		vmove usr/share/man/man1/extraclangtools.1
+		vmove usr/share/man/man1/diagtool.1
+	}
+}
+
+clang_package() {
+	lib32disabled=yes
+	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
+	 libclang-${version}_${revision}"
+	short_desc+=" - C language family frontend"
+	homepage="https://clang.llvm.org/"
+	pkg_install() {
+		vmove usr/include/clang
+		vmove usr/include/clang-c
+		vmove "usr/bin/*clang*"
+		vmove usr/bin/c-index-test
+		vmove usr/lib/clang
+		vmove usr/lib/cmake/clang
+		vmove "usr/lib/libclang*.a"
+		vmove "usr/lib/libclang*.so"
+		vmove usr/share/clang
+		vmove usr/share/doc/clang
+		vmove usr/share/man/man1/clang.1
+	}
+}
+
+libclang_package() {
+	short_desc+=" - C frontend runtime library"
+	pkg_install() {
+		vmove "usr/lib/libclang.so.*"
+	}
+}
+
+libclang-cpp_package() {
+	short_desc+=" - C frontend runtime library (C++ interface)"
+	pkg_install() {
+		vmove "usr/lib/libclang-cpp.so.*"
+	}
+}
+
+lld_package() {
+	lib32disabled=yes
+	short_desc+=" - linker"
+	homepage="https://lld.llvm.org"
+	pkg_install() {
+		vmove usr/bin/lld*
+		vmove usr/bin/wasm-ld
+		vmove usr/bin/ld.lld*
+		vmove usr/bin/ld64.lld*
+		vmove usr/share/doc/lld
+	}
+}
+
+lld-devel_package() {
+	lib32disabled=yes
+	short_desc+=" - linker - development files"
+	homepage="https://lld.llvm.org"
+	depends="lld>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include/lld
+		vmove usr/lib/cmake/lld
+		vmove "usr/lib/liblld*a"
+	}
+}
+
+lldb_package() {
+	lib32disabled=yes
+	depends+=" python3-six"
+	short_desc+=" - LLDB debugger"
+	homepage="https://lldb.llvm.org/"
+	pkg_install() {
+		vmove usr/bin/*lldb*
+		vmove usr/lib/liblldb*so.*
+		vmove /usr/lib/python*
+	}
+}
+
+lldb-devel_package() {
+	lib32disabled=yes
+	depends="lldb>=${version}_${revision}"
+	short_desc+=" - LLDB debugger - development files"
+	pkg_install() {
+		vmove usr/include/lldb
+		vmove "usr/lib/liblldb*.so"
+	}
+}
+
+llvm-libunwind_package() {
+	short_desc+=" - libunwind"
+	pkg_install() {
+		vmove "usr/lib/libunwind.so.*"
+	}
+}
+
+llvm-libunwind-devel_package() {
+	short_desc+=" - libunwind - development files"
+	depends="llvm-libunwind>=${version}_${revision}"
+	conflicts="libunwind-devel>=0"
+	pkg_install() {
+		vmove usr/lib/libunwind.so
+		vmove usr/lib/libunwind.a
+		vmove "usr/include/*unwind*"
+		vmove usr/include/mach-o
+		vmove usr/share/doc/libunwind
+	}
+}
+
+libcxxabi_package() {
+	short_desc+=" - low level support for libc++"
+	pkg_install() {
+		vmove "usr/lib/libc++abi.so.*"
+	}
+}
+
+libcxxabi-devel_package() {
+	short_desc+=" - low level support for libc++ - development files"
+	depends="libcxxabi>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/lib/libc++abi.so
+		vmove usr/lib/libc++abi.a
+		vmove "usr/include/*cxxabi*"
+	}
+}
+
+libcxx_package() {
+	short_desc+=" - C++ standard library"
+	pkg_install() {
+		vmove "usr/lib/libc++.so.*"
+	}
+}
+
+libcxx-devel_package() {
+	short_desc+=" - C++ standard library - development files"
+	depends="libcxx>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/lib/libc++.so
+		vmove usr/lib/libc++.a
+		vmove usr/lib/libc++experimental.a
+		vmove usr/include/c++
+		vmove usr/share/doc/libcxx
+	}
+}
+
+libomp_package() {
+	short_desc+=" - Clang OpenMP support library"
+	pkg_install() {
+		vmove usr/lib/libomp.so
+		vmove "usr/lib/libomptarget.rtl.*.so"
+		vmove usr/lib/libarcher.so
+		vmove "usr/lib/libomp*.so.*"
+	}
+}
+
+libomp-devel_package() {
+	short_desc+=" - Clang OpenMP support library - development files"
+	depends="libomp>=${version}_${revision}"
+	pkg_install() {
+		vmove "usr/lib/libomp*.so"
+		vmove "usr/lib/libarcher*"
+		vmove "usr/include/omp*.h"
+		vmove "usr/lib/clang/${version}/include/omp*.h"
+		vmove usr/share/man/man1/llvmopenmp.1
+		vmove usr/share/doc/openmp
+	}
+}
+
+libllvm14_package() {
+	short_desc+=" - runtime library"
+	pkg_install() {
+		vmove "usr/lib/libLLVM-*.so*"
+	}
+}
diff --git a/srcpkgs/llvm14/update b/srcpkgs/llvm14/update
new file mode 100644
index 000000000000..e95cf26b3586
--- /dev/null
+++ b/srcpkgs/llvm14/update
@@ -0,0 +1,3 @@
+site="https://github.com/llvm/llvm-project/releases"
+pattern="llvmorg-\K(\d+.){2}\d+(-rc\d+)?"
+ignore="*-rc*"

From 8438d62e818f41e2c2663bb6ed0e30d730118cad Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:16:07 +0200
Subject: [PATCH 02/29] llvm: update to 14.0.3.

---
 srcpkgs/llvm/template | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/llvm/template b/srcpkgs/llvm/template
index a92db6f94f9f..d226c61c734e 100644
--- a/srcpkgs/llvm/template
+++ b/srcpkgs/llvm/template
@@ -1,10 +1,10 @@
 # Template file for 'llvm'
 pkgname=llvm
-version=12.0.0
+version=14.0.3
 revision=1
 build_style=meta
-depends="llvm12"
-replaces="llvm11>=0 llvm10>=0 llvm9>=0 llvm8>=0 llvm7>=0 llvm6.0>=0 llvm3.9>=0"
+depends="llvm14"
+replaces="llvm13>=0 llvm12>=0 llvm11>=0 llvm10>=0 llvm9>=0 llvm8>=0 llvm7>=0 llvm6.0>=0 llvm3.9>=0"
 short_desc="LLVM meta package"
 maintainer="Enno Boland <gottox@voidlinux.org>"
 license="Public Domain"

From 92edaa1759b7b52e98fd6a3adf5a761334849304 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:36:32 +0200
Subject: [PATCH 03/29] llvm12: drop non-llvm components

---
 ...clang-001-fix-unwind-chain-inclusion.patch |  44 ---
 .../patches/clang-002-add-musl-triples.patch  | 110 -------
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 -
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ---
 .../compiler-rt-aarch64-ucontext.patch        |  11 -
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 --
 .../llvm12/patches/compiler-rt-size_t.patch   |  10 -
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 ----
 srcpkgs/llvm12/patches/libcxx-musl.patch      |  26 --
 srcpkgs/llvm12/patches/libcxx-ppc.patch       |  22 --
 .../llvm12/patches/libcxx-ssp-nonshared.patch |  11 -
 srcpkgs/llvm12/patches/libcxxabi-dl.patch     |  25 --
 srcpkgs/llvm12/patches/libunwind-ppc32.patch  |  63 ----
 srcpkgs/llvm12/patches/lldb-musl.patch        |  31 --
 .../llvm12/patches/ppc32-compiler-rt.patch    |  21 --
 srcpkgs/llvm12/template                       | 301 +-----------------
 16 files changed, 1 insertion(+), 832 deletions(-)
 delete mode 100644 srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-size_t.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-ppc.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxxabi-dl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libunwind-ppc32.patch
 delete mode 100644 srcpkgs/llvm12/patches/lldb-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/ppc32-compiler-rt.patch

diff --git a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
deleted file mode 100644
index e4eaa7783e7a..000000000000
--- a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 352974169f0d2b5da3d5321f588f5e3b5941330e Mon Sep 17 00:00:00 2001
-From: Andrea Brancaleoni <miwaxe@gmail.com>
-Date: Tue, 8 Sep 2015 22:14:57 +0200
-Subject: [PATCH 2/7] fix unwind chain inclusion
-
----
- lib/Headers/unwind.h | 9 +++++----
- 1 file changed, 5 insertions(+), 4 deletions(-)
-
-diff --git a/lib/Headers/unwind.h b/lib/Headers/unwind.h
-index 303d792..44e10cc 100644
---- a/clang/lib/Headers/unwind.h
-+++ b/clang/lib/Headers/unwind.h
-@@ -9,9 +9,6 @@
- 
- /* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/
- 
--#ifndef __CLANG_UNWIND_H
--#define __CLANG_UNWIND_H
--
- #if defined(__APPLE__) && __has_include_next(<unwind.h>)
- /* Darwin (from 11.x on) provide an unwind.h. If that's available,
-  * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE,
-@@ -39,6 +36,9 @@
- # endif
- #else
- 
-+#ifndef __CLANG_UNWIND_H
-+#define __CLANG_UNWIND_H
-+
- #include <stdint.h>
- 
- #ifdef __cplusplus
-@@ -322,6 +322,7 @@ _Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *);
- }
- #endif
- 
-+#endif /* __CLANG_UNWIND_H */
-+
- #endif
- 
--#endif /* __CLANG_UNWIND_H */
--- 
-2.5.1
diff --git a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
deleted file mode 100644
index 25688d40dbc2..000000000000
--- a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
+++ /dev/null
@@ -1,110 +0,0 @@
---- a/clang/lib/Driver/ToolChains/Gnu.cpp
-+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
-@@ -2086,7 +2086,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
-                                              "armv7hl-redhat-linux-gnueabi",
-                                              "armv6hl-suse-linux-gnueabi",
--                                             "armv7hl-suse-linux-gnueabi"};
-+                                             "armv7hl-suse-linux-gnueabi",
-+                                             "armv7l-linux-gnueabihf"};
-   static const char *const ARMebLibDirs[] = {"/lib"};
-   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
-                                              "armeb-linux-androideabi"};
-@@ -2153,8 +2154,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
-   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
-   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
--                                             "powerpcle-unknown-linux-gnu",
--                                             "powerpcle-linux-musl"};
-+                                             "powerpcle-unknown-linux-gnu"};
- 
-   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
-   static const char *const PPC64Triples[] = {
-@@ -2235,6 +2235,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-     return;
-   }
- 
-+  if (TargetTriple.isMusl()) {
-+    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
-+    static const char *const ARMHFMuslTriples[] = {
-+        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
-+    };
-+    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
-+    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
-+    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
-+    static const char *const MIPSMuslTriples[] = {
-+        "mips-linux-musl", "mipsel-linux-musl",
-+        "mipsel-linux-muslhf", "mips-linux-muslhf"
-+    };
-+    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
-+    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
-+    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
-+    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
-+
-+    switch (TargetTriple.getArch()) {
-+    case llvm::Triple::aarch64:
-+      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
-+      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
-+      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
-+      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
-+      break;
-+    case llvm::Triple::arm:
-+      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
-+      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
-+        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
-+      } else {
-+        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
-+      }
-+      break;
-+    case llvm::Triple::x86_64:
-+      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-+      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
-+      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-+      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
-+      break;
-+    case llvm::Triple::x86:
-+      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-+      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
-+      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-+      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
-+      break;
-+    case llvm::Triple::mips:
-+      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
-+      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
-+      break;
-+    case llvm::Triple::ppc:
-+      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
-+      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
-+      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
-+      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
-+      break;
-+    case llvm::Triple::ppcle:
-+      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
-+      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
-+      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
-+      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
-+      break;
-+    case llvm::Triple::ppc64:
-+      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
-+      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
-+      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
-+      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
-+      break;
-+    case llvm::Triple::ppc64le:
-+      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
-+      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
-+      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
-+      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
-+      break;
-+    default:
-+      break;
-+    }
-+    TripleAliases.push_back(TargetTriple.str());
-+    if (TargetTriple.str() != BiarchTriple.str())
-+      BiarchTripleAliases.push_back(BiarchTriple.str());
-+    return;
-+  }
-+
-   // Android targets should not use GNU/Linux tools or libraries.
-   if (TargetTriple.isAndroid()) {
-     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
deleted file mode 100644
index 4ad6412d1e6c..000000000000
--- a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/clang/lib/Driver/ToolChains/Linux.cpp
-+++ b/clang/lib/Driver/ToolChains/Linux.cpp
-@@ -504,10 +504,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
-     Loader = "ld.so.1";
-     break;
-   case llvm::Triple::ppc64:
--    LibDir = "lib64";
--    Loader =
--        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
--    break;
-   case llvm::Triple::ppc64le:
-     LibDir = "lib64";
-     Loader =
diff --git a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
deleted file mode 100644
index 21fc8003c5f1..000000000000
--- a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
+++ /dev/null
@@ -1,48 +0,0 @@
---- a/clang/lib/Basic/Targets/PPC.h
-+++ b/clang/lib/Basic/Targets/PPC.h
-@@ -415,11 +415,10 @@ public:
-       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
-     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
-       DataLayout = "e-m:e-i64:64-n32:64";
--      ABI = "elfv2";
-     } else {
-       DataLayout = "E-m:e-i64:64-n32:64";
--      ABI = "elfv1";
-     }
-+    ABI = "elfv2";
- 
-     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
-       LongDoubleWidth = LongDoubleAlign = 64;
---- a/clang/lib/CodeGen/TargetInfo.cpp
-+++ b/clang/lib/CodeGen/TargetInfo.cpp
-@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
-       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
- 
-     if (Triple.isOSBinFormatELF()) {
--      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
--      if (getTarget().getABI() == "elfv2")
--        Kind = PPC64_SVR4_ABIInfo::ELFv2;
-+      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
-+      if (getTarget().getABI() == "elfv1")
-+        Kind = PPC64_SVR4_ABIInfo::ELFv1;
-       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
- 
-       return SetCGInfo(
---- a/clang/lib/Driver/ToolChains/Clang.cpp
-+++ b/clang/lib/Driver/ToolChains/Clang.cpp
-@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
-   const llvm::Triple &T = getToolChain().getTriple();
-   if (T.isOSBinFormatELF()) {
-     switch (getToolChain().getArch()) {
--    case llvm::Triple::ppc64: {
--      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
--          T.isOSOpenBSD() || T.isMusl())
--        ABIName = "elfv2";
--      else
--        ABIName = "elfv1";
--      break;
--    }
-+    case llvm::Triple::ppc64:
-     case llvm::Triple::ppc64le:
-       ABIName = "elfv2";
-       break;
diff --git a/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch b/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
deleted file mode 100644
index 893c059d7b8d..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp.orig
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-@@ -1799,7 +1799,7 @@
- 
- static bool Aarch64GetESR(ucontext_t *ucontext, u64 *esr) {
-   static const u32 kEsrMagic = 0x45535201;
--  u8 *aux = ucontext->uc_mcontext.__reserved;
-+  u8 *aux = reinterpret_cast<u8 *>(ucontext->uc_mcontext.__reserved);
-   while (true) {
-     _aarch64_ctx *ctx = (_aarch64_ctx *)aux;
-     if (ctx->size == 0) break;
diff --git a/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch b/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
deleted file mode 100644
index 35f16d24f340..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
+++ /dev/null
@@ -1,35 +0,0 @@
---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-@@ -74,6 +74,10 @@
- #include <sys/utsname.h>
- #endif
- 
-+#if SANITIZER_LINUX && defined(__powerpc__)
-+#include <asm/ptrace.h>
-+#endif
-+
- #if SANITIZER_LINUX && !SANITIZER_ANDROID
- #include <sys/personality.h>
- #endif
---- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
-@@ -92,7 +92,7 @@
- # include <utime.h>
- # include <sys/ptrace.h>
- #if defined(__mips64) || defined(__aarch64__) || defined(__arm__) || \
--    SANITIZER_RISCV64
-+    defined(__powerpc__) || SANITIZER_RISCV64
- #  include <asm/ptrace.h>
- #  ifdef __arm__
- typedef struct user_fpregs elf_fpregset_t;
---- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
-@@ -31,7 +31,7 @@
- #include <sys/types.h> // for pid_t
- #include <sys/uio.h> // for iovec
- #include <elf.h> // for NT_PRSTATUS
--#if (defined(__aarch64__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
-+#if (defined(__aarch64__) || defined(__powerpc__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
- // GLIBC 2.20+ sys/user does not include asm/ptrace.h
- # include <asm/ptrace.h>
- #endif
diff --git a/srcpkgs/llvm12/patches/compiler-rt-size_t.patch b/srcpkgs/llvm12/patches/compiler-rt-size_t.patch
deleted file mode 100644
index 2c63063a5e9e..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-size_t.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/compiler-rt/lib/fuzzer/FuzzerInterceptors.cpp.orig
-+++ b/compiler-rt/lib/fuzzer/FuzzerInterceptors.cpp
-@@ -25,6 +25,7 @@
-   }
- 
- #include <cassert>
-+#include <cstddef>
- #include <cstdint>
- #include <dlfcn.h> // for dlsym()
- 
diff --git a/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch b/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
deleted file mode 100644
index d0b61c80c897..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
+++ /dev/null
@@ -1,62 +0,0 @@
---- a/compiler-rt/lib/xray/xray_powerpc64.inc
-+++ b/compiler-rt/lib/xray/xray_powerpc64.inc
-@@ -12,7 +12,13 @@
- 
- #include <cstdint>
- #include <mutex>
-+#ifdef __GLIBC__
- #include <sys/platform/ppc.h>
-+#else
-+#include <cctype>
-+#include <cstring>
-+#include <cstdlib>
-+#endif
- 
- #include "xray_defs.h"
- 
-@@ -20,13 +26,45 @@ namespace __xray {
- 
- ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
-   CPU = 0;
-+#ifdef __GLIBC__
-   return __ppc_get_timebase();
-+#else
-+  return __builtin_ppc_get_timebase();
-+#endif
- }
- 
- inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
-   static std::mutex M;
-   std::lock_guard<std::mutex> Guard(M);
-+#ifdef __GLIBC__
-   return __ppc_get_timebase_freq();
-+#else
-+  /* FIXME: a less dirty implementation? */
-+  static uint64_t base;
-+  if (!base) {
-+    FILE *f = fopen("/proc/cpuinfo", "rb");
-+    if (f) {
-+      ssize_t nr;
-+      /* virtually always big enough to hold the line */
-+      char buf[512];
-+      while (fgets(buf, sizeof(buf), f)) {
-+        char *ret = strstr(buf, "timebase");
-+        if (!ret) {
-+          continue;
-+        }
-+        ret += sizeof("timebase") - 1;
-+        ret = strchr(ret, ':');
-+        if (!ret) {
-+          continue;
-+        }
-+        base = strtoul(ret + 1, nullptr, 10);
-+        break;
-+      }
-+      fclose(f);
-+    }
-+  }
-+  return base;
-+#endif
- }
- 
- inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
diff --git a/srcpkgs/llvm12/patches/libcxx-musl.patch b/srcpkgs/llvm12/patches/libcxx-musl.patch
deleted file mode 100644
index bbd31ffc2cb1..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-musl.patch
+++ /dev/null
@@ -1,26 +0,0 @@
---- a/libcxx/include/locale
-+++ b/libcxx/include/locale
-@@ -742,7 +742,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
-         typename remove_reference<decltype(errno)>::type __save_errno = errno;
-         errno = 0;
-         char *__p2;
-+#if defined(__linux__) && !defined(__GLIBC__)
-+        long long __ll = strtoll(__a, &__p2, __base);
-+#else
-         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
-+#endif
-         typename remove_reference<decltype(errno)>::type __current_errno = errno;
-         if (__current_errno == 0)
-             errno = __save_errno;
-@@ -782,7 +786,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
-         typename remove_reference<decltype(errno)>::type __save_errno = errno;
-         errno = 0;
-         char *__p2;
-+#if defined(__linux__) && !defined(__GLIBC__)
-+        unsigned long long __ll = strtoull(__a, &__p2, __base);
-+#else
-         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
-+#endif
-         typename remove_reference<decltype(errno)>::type __current_errno = errno;
-         if (__current_errno == 0)
-             errno = __save_errno;
diff --git a/srcpkgs/llvm12/patches/libcxx-ppc.patch b/srcpkgs/llvm12/patches/libcxx-ppc.patch
deleted file mode 100644
index 7a92f8004e1c..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-ppc.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-This ensures `is_iec559` is defined correctly under all long double ABIs,
-including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__`
-is not defined on gcc.
-
---- a/libcxx/include/limits
-+++ b/libcxx/include/limits
-@@ -426,8 +426,14 @@ protected:
-     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
-     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
- 
--#if (defined(__ppc__) || defined(__ppc64__))
-+#if defined(__powerpc__) || defined(__powerpc64__)
-+#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__)
-+    /* IEEE 754 quadruple or double precision */
-+    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
-+#else
-+    /* 128-bit IBM double-double */
-     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
-+#endif
- #else
-     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
- #endif
diff --git a/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch b/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
deleted file mode 100644
index 70292beb2fcd..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/libcxx/CMakeLists.txt
-+++ b/libcxx/CMakeLists.txt
-@@ -769,6 +769,8 @@ function(cxx_link_system_libraries target)
-     target_link_libraries(${target} PRIVATE atomic)
-   endif()
- 
-+#ssp  target_link_libraries(${target} PRIVATE ssp_nonshared)
-+
-   if (MINGW)
-     target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
-   endif()
diff --git a/srcpkgs/llvm12/patches/libcxxabi-dl.patch b/srcpkgs/llvm12/patches/libcxxabi-dl.patch
deleted file mode 100644
index 3a15f9db8c98..000000000000
--- a/srcpkgs/llvm12/patches/libcxxabi-dl.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-Also link to -ldl to prevent undefined references.
-
---- a/libcxxabi/src/CMakeLists.txt
-+++ b/libcxxabi/src/CMakeLists.txt
-@@ -73,6 +73,7 @@
-   endif()
- 
-   add_library_flags_if(LIBCXXABI_HAS_C_LIB c)
-+  add_library_flags_if(LIBCXXABI_HAS_C_LIB dl)
- endif()
- 
- if (LIBCXXABI_USE_LLVM_UNWINDER)
---- a/libcxx/CMakeLists.txt
-+++ b/libcxx/CMakeLists.txt
-@@ -745,6 +745,10 @@
-     target_link_libraries(${target} PRIVATE m)
-   endif()
- 
-+  if (LIBCXX_HAS_C_LIB)
-+    target_link_libraries(${target} PRIVATE dl)
-+  endif()
-+
-   if (LIBCXX_HAS_RT_LIB)
-     target_link_libraries(${target} PRIVATE rt)
-   endif()
diff --git a/srcpkgs/llvm12/patches/libunwind-ppc32.patch b/srcpkgs/llvm12/patches/libunwind-ppc32.patch
deleted file mode 100644
index 74aa7576ecf9..000000000000
--- a/srcpkgs/llvm12/patches/libunwind-ppc32.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-This fixes build at least with gcc9 which does not define `__ppc__`.
-
---- a/libunwind/include/__libunwind_config.h
-+++ b/libunwind/include/__libunwind_config.h
-@@ -49,7 +49,7 @@
- #  define _LIBUNWIND_CONTEXT_SIZE 167
- #  define _LIBUNWIND_CURSOR_SIZE 179
- #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64
--# elif defined(__ppc__)
-+# elif defined(__powerpc__)
- #  define _LIBUNWIND_TARGET_PPC 1
- #  define _LIBUNWIND_CONTEXT_SIZE 117
- #  define _LIBUNWIND_CURSOR_SIZE 124
---- a/libunwind/src/UnwindRegistersRestore.S
-+++ b/libunwind/src/UnwindRegistersRestore.S
-@@ -392,7 +392,7 @@ Lnovec:
-   PPC64_LR(3)
-   bctr
- 
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- 
- DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind13Registers_ppc6jumptoEv)
- //
---- a/libunwind/src/UnwindRegistersSave.S
-+++ b/libunwind/src/UnwindRegistersSave.S
-@@ -554,7 +554,7 @@ DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext)
-   blr
- 
- 
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- 
- //
- // extern int unw_getcontext(unw_context_t* thread_state)
---- a/libunwind/src/config.h
-+++ b/libunwind/src/config.h
-@@ -95,12 +95,12 @@
- #define _LIBUNWIND_BUILD_SJLJ_APIS
- #endif
- 
--#if defined(__i386__) || defined(__x86_64__) || defined(__ppc__) || defined(__ppc64__) || defined(__powerpc64__)
-+#if defined(__i386__) || defined(__x86_64__) || defined(__powerpc__) || defined(__powerpc64__)
- #define _LIBUNWIND_SUPPORT_FRAME_APIS
- #endif
- 
- #if defined(__i386__) || defined(__x86_64__) ||                                \
--    defined(__ppc__) || defined(__ppc64__) || defined(__powerpc64__) ||        \
-+    defined(__powerpc__) || defined(__powerpc64__) ||                          \
-     (!defined(__APPLE__) && defined(__arm__)) ||                               \
-     (defined(__arm64__) || defined(__aarch64__)) ||                            \
-     defined(__mips__)
---- a/libunwind/src/libunwind.cpp
-+++ b/libunwind/src/libunwind.cpp
-@@ -42,7 +42,7 @@ _LIBUNWIND_HIDDEN int __unw_init_local(unw_cursor_t *cursor,
- # define REGISTER_KIND Registers_x86_64
- #elif defined(__powerpc64__)
- # define REGISTER_KIND Registers_ppc64
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- # define REGISTER_KIND Registers_ppc
- #elif defined(__aarch64__)
- # define REGISTER_KIND Registers_arm64
diff --git a/srcpkgs/llvm12/patches/lldb-musl.patch b/srcpkgs/llvm12/patches/lldb-musl.patch
deleted file mode 100644
index 601c0d138523..000000000000
--- a/srcpkgs/llvm12/patches/lldb-musl.patch
+++ /dev/null
@@ -1,31 +0,0 @@
---- a/lldb/source/Plugins/Process/Linux/Procfs.h
-+++ b/lldb/source/Plugins/Process/Linux/Procfs.h
-@@ -10,21 +10,12 @@
- // sys/procfs.h on Android/Linux for all supported architectures.
- 
- #include <sys/ptrace.h>
-+#include <asm/ptrace.h>
- 
--#ifdef __ANDROID__
--#if defined(__arm64__) || defined(__aarch64__)
--typedef unsigned long elf_greg_t;
--typedef elf_greg_t
--    elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
--typedef struct user_fpsimd_state elf_fpregset_t;
--#ifndef NT_FPREGSET
--#define NT_FPREGSET NT_PRFPREG
--#endif // NT_FPREGSET
--#elif defined(__mips__)
--#ifndef NT_FPREGSET
--#define NT_FPREGSET NT_PRFPREG
--#endif // NT_FPREGSET
--#endif
--#else // __ANDROID__
-+#if !defined(__GLIBC__) && defined(__powerpc__)
-+#define pt_regs musl_pt_regs
-+#include <sys/procfs.h>
-+#undef pt_regs
-+#else
- #include <sys/procfs.h>
--#endif // __ANDROID__
-+#endif
diff --git a/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch b/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch
deleted file mode 100644
index 8e0a9a779d1b..000000000000
--- a/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-commit ba4ede595ff9599232f5dd2b4384c243137b53fc
-Author: Daniel Kolesa <daniel@octaforge.org>
-Date:   Tue Jun 22 23:40:54 2021 +0200
-
-    enable compiler-rt support for ppc32
-
-diff --git a/compiler-rt/cmake/base-config-ix.cmake b/compiler-rt/cmake/base-config-ix.cmake
-index 1edab43..5c0c8a2 100644
---- a/compiler-rt/cmake/base-config-ix.cmake
-+++ b/compiler-rt/cmake/base-config-ix.cmake
-@@ -182,9 +182,7 @@ macro(test_targets)
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc64le")
-       test_target_arch(powerpc64le "" "-m64")
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc")
--      if(CMAKE_SYSTEM_NAME MATCHES "AIX")
--        test_target_arch(powerpc "" "-m32")
--      endif()
-+      test_target_arch(powerpc "" "-m32")
-       test_target_arch(powerpc64 "" "-m64")
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "s390x")
-       test_target_arch(s390x "" "")
diff --git a/srcpkgs/llvm12/template b/srcpkgs/llvm12/template
index 7ce18028e4a3..7b361bbbf5bc 100644
--- a/srcpkgs/llvm12/template
+++ b/srcpkgs/llvm12/template
@@ -1,25 +1,17 @@
 # Template file for 'llvm12'
 pkgname=llvm12
 version=12.0.1
-revision=2
+revision=3
 wrksrc="llvm-project-${version}.src"
 build_wrksrc=llvm
 build_style=cmake
 configure_args="
  -DCMAKE_BUILD_TYPE=Release -Wno-dev
  -DENABLE_LINKER_BUILD_ID=YES
- -DLLDB_USE_SYSTEM_SIX=YES
- -DLIBCXX_CXX_ABI=libcxxabi
- -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
- -DLIBCXXABI_USE_LLVM_UNWINDER=YES
- -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
- -DLIBOMP_ENABLE_SHARED=YES
- -DLIBOMP_INSTALL_ALIASES=NO
  -DLLVM_INCLUDE_DOCS=YES
  -DLLVM_BUILD_DOCS=YES
  -DLLVM_ENABLE_SPHINX=YES
  -DSPHINX_WARNINGS_AS_ERRORS=NO
- -DLLVM_INSTALL_UTILS=YES
  -DLLVM_BUILD_LLVM_DYLIB=YES
  -DLLVM_LINK_LLVM_DYLIB=YES
  -DLLVM_ENABLE_RTTI=YES
@@ -51,87 +43,10 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
-_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
-
-_lldb_enable=yes
-_libomp_enable=no
-
-case "$XBPS_TARGET_MACHINE" in
-	ppc64le*) ;;
-	ppc*|i686*) _lldb_enable=no ;;
-esac
-
-case "$XBPS_TARGET_MACHINE" in
-	x86_64*|aarch64*|ppc64*) _libomp_enable=yes;;
-esac
-
-subpackages="clang-tools-extra"
-
-# must go before clang
-if [ "$_libomp_enable" = "yes" ]; then
-	_enabled_projects+=";openmp"
-	subpackages+=" libomp libomp-devel"
-	# because of cmake nonsense referencing libomptarget.so.*
-	depends+=" libomp>=${version}_${revision}"
-fi
-
-subpackages+=" clang clang-analyzer libclang libclang-cpp
- llvm-libunwind llvm-libunwind-devel libcxx libcxx-devel
- libcxxabi libcxxabi-devel libllvm12"
-
-if [ "$_lldb_enable" = "yes" ]; then
-	# XXX fails to cross compile due to python
-	_enabled_projects+=";lldb"
-	subpackages+=" lldb lldb-devel"
-fi
-
-subpackages+=" lld lld-devel"
-
-configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
-
 post_patch() {
-	if [ "$_lldb_enable" = "yes" ]; then
-		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
-			vsed -i 's|__ptrace_request|int|g' \
-				${wrksrc}/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
-		fi
-		# disable docs for lldb as they fail to generate
-		vsed -i '/add_subdirectory(docs)/d' \
-			${wrksrc}/lldb/CMakeLists.txt
-	fi
-
 	# update config.guess for better platform detection
 	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
 		${wrksrc}/llvm/cmake
-
-	# fix linker failures on some archs
-	vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
-		${wrksrc}/libcxxabi/cmake/config-ix.cmake
-	vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
-		${wrksrc}/libcxxabi/cmake/config-ix.cmake
-
-	# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
-	case "$XBPS_TARGET_MACHINE" in
-		ppc64*) ;;
-		ppc*-musl|i686-musl|mips*-musl)
-			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
-				${wrksrc}/libunwind/src/CMakeLists.txt
-			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
-				${wrksrc}/libcxxabi/src/CMakeLists.txt
-			vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
-			;;
-	esac
-
-	case "$XBPS_TARGET_MACHINE" in
-		x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
-			vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
-				${wrksrc}/compiler-rt/CMakeLists.txt
-			;;
-		arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
-			vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
-				${wrksrc}/compiler-rt/cmake/config-ix.cmake
-			;;
-	esac
 }
 
 pre_configure() {
@@ -158,10 +73,8 @@ pre_configure() {
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
 			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
 		make ${makejobs} -C utils/TableGen
-		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
 		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
-		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
 		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
 		cd ../..
 	fi
@@ -202,218 +115,6 @@ do_install() {
 	if [ "$CROSS_BUILD" ]; then
 		rm -f ${DESTDIR}/usr/bin/llvm-config-host
 	fi
-
-	# Install libcxxabi headers
-	vinstall ${wrksrc}/libcxxabi/include/__cxxabi_config.h 644 usr/include
-	vinstall ${wrksrc}/libcxxabi/include/cxxabi.h 644 usr/include
-
-	# Install libunwind headers
-	vinstall ${wrksrc}/libunwind/include/__libunwind_config.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/libunwind.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/unwind.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/mach-o/compact_unwind_encoding.h \
-		644 usr/include/mach-o
-}
-
-clang-analyzer_package() {
-	pycompile_dirs="usr/share/scan-view"
-	depends="clang-${version}_${revision} python3 perl"
-	short_desc+=" - A source code analysis framework"
-	homepage="https://clang-analyzer.llvm.org/"
-	pkg_install() {
-		vmove usr/share/man/man1/scan-build.1
-		vmove "/usr/bin/scan-*"
-		vmove "/usr/share/scan-*"
-		vmove "/usr/libexec/*analyzer"
-	}
-}
-
-clang-tools-extra_package() {
-	lib32disabled=yes
-	depends="clang-${version}_${revision} python3"
-	short_desc+=" - Extra Clang tools"
-	homepage="https://clang.llvm.org/extra/"
-	pkg_install() {
-		vmove usr/include/clang-tidy
-		vmove usr/bin/clang-apply-replacements
-		vmove usr/bin/clang-query
-		vmove usr/bin/clang-rename
-		vmove usr/bin/clang-tidy
-		vmove usr/bin/diagtool
-		vmove usr/bin/find-all-symbols
-		vmove usr/bin/hmaptool
-		vmove usr/bin/modularize
-		vmove usr/bin/pp-trace
-		vmove usr/bin/sancov
-		vmove "usr/lib/libclangApplyReplacements*"
-		vmove "usr/lib/libclangQuery*"
-		vmove "usr/lib/libclangTidy*"
-		vmove "usr/share/clang/*tidy*"
-		vmove usr/share/doc/clang-tools
-		vmove usr/share/man/man1/extraclangtools.1
-		vmove usr/share/man/man1/diagtool.1
-	}
-}
-
-clang_package() {
-	lib32disabled=yes
-	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
-	 libclang-${version}_${revision}"
-	short_desc+=" - C language family frontend"
-	homepage="https://clang.llvm.org/"
-	pkg_install() {
-		vmove usr/include/clang
-		vmove usr/include/clang-c
-		vmove "usr/bin/*clang*"
-		vmove usr/bin/c-index-test
-		vmove usr/lib/clang
-		vmove usr/lib/cmake/clang
-		vmove "usr/lib/libclang*.a"
-		vmove "usr/lib/libclang*.so"
-		vmove usr/share/clang
-		vmove usr/share/doc/clang
-		vmove usr/share/man/man1/clang.1
-	}
-}
-
-libclang_package() {
-	short_desc+=" - C frontend runtime library"
-	pkg_install() {
-		vmove "usr/lib/libclang.so.*"
-	}
-}
-
-libclang-cpp_package() {
-	short_desc+=" - C frontend runtime library (C++ interface)"
-	pkg_install() {
-		vmove "usr/lib/libclang-cpp.so.*"
-	}
-}
-
-lld_package() {
-	lib32disabled=yes
-	short_desc+=" - linker"
-	homepage="https://lld.llvm.org"
-	pkg_install() {
-		vmove usr/bin/lld*
-		vmove usr/bin/wasm-ld
-		vmove usr/bin/ld.lld*
-		vmove usr/bin/ld64.lld*
-		vmove usr/share/doc/lld
-	}
-}
-
-lld-devel_package() {
-	lib32disabled=yes
-	short_desc+=" - linker - development files"
-	homepage="https://lld.llvm.org"
-	depends="lld>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/include/lld
-		vmove usr/lib/cmake/lld
-		vmove "usr/lib/liblld*a"
-	}
-}
-
-lldb_package() {
-	lib32disabled=yes
-	depends+=" python3-six"
-	short_desc+=" - LLDB debugger"
-	homepage="https://lldb.llvm.org/"
-	pkg_install() {
-		vmove usr/bin/*lldb*
-		vmove usr/lib/liblldb*so.*
-		vmove /usr/lib/python*
-	}
-}
-
-lldb-devel_package() {
-	lib32disabled=yes
-	depends="lldb>=${version}_${revision}"
-	short_desc+=" - LLDB debugger - development files"
-	pkg_install() {
-		vmove usr/include/lldb
-		vmove "usr/lib/liblldb*.so"
-	}
-}
-
-llvm-libunwind_package() {
-	short_desc+=" - libunwind"
-	pkg_install() {
-		vmove "usr/lib/libunwind.so.*"
-	}
-}
-
-llvm-libunwind-devel_package() {
-	short_desc+=" - libunwind - development files"
-	depends="llvm-libunwind>=${version}_${revision}"
-	conflicts="libunwind-devel>=0"
-	pkg_install() {
-		vmove usr/lib/libunwind.so
-		vmove usr/lib/libunwind.a
-		vmove "usr/include/*unwind*"
-		vmove usr/include/mach-o
-		vmove usr/share/doc/libunwind
-	}
-}
-
-libcxxabi_package() {
-	short_desc+=" - low level support for libc++"
-	pkg_install() {
-		vmove "usr/lib/libc++abi.so.*"
-	}
-}
-
-libcxxabi-devel_package() {
-	short_desc+=" - low level support for libc++ - development files"
-	depends="libcxxabi>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/lib/libc++abi.so
-		vmove usr/lib/libc++abi.a
-		vmove "usr/include/*cxxabi*"
-	}
-}
-
-libcxx_package() {
-	short_desc+=" - C++ standard library"
-	pkg_install() {
-		vmove "usr/lib/libc++.so.*"
-	}
-}
-
-libcxx-devel_package() {
-	short_desc+=" - C++ standard library - development files"
-	depends="libcxx>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/lib/libc++.so
-		vmove usr/lib/libc++.a
-		vmove usr/lib/libc++experimental.a
-		vmove usr/include/c++
-		vmove usr/share/doc/libcxx
-	}
-}
-
-libomp_package() {
-	short_desc+=" - Clang OpenMP support library"
-	pkg_install() {
-		vmove usr/lib/libomp.so
-		vmove "usr/lib/libomptarget.rtl.*.so"
-		vmove usr/lib/libarcher.so
-		vmove "usr/lib/libomp*.so.*"
-	}
-}
-
-libomp-devel_package() {
-	short_desc+=" - Clang OpenMP support library - development files"
-	depends="libomp>=${version}_${revision}"
-	pkg_install() {
-		vmove "usr/lib/libomp*.so"
-		vmove "usr/lib/libarcher*"
-		vmove "usr/include/omp*.h"
-		vmove "usr/lib/clang/${version}/include/omp*.h"
-		vmove usr/share/man/man1/llvmopenmp.1
-		vmove usr/share/doc/openmp
-	}
 }
 
 libllvm12_package() {

From dd0a815073454885bd6e389186b3464ba9a421a9 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 14:00:28 +0200
Subject: [PATCH 04/29] New packages: clang12, libclang12, libclang12-cpp,
 lld12, lld12-devel.

---
 common/shlibs                                 |   2 +
 srcpkgs/clang12                               |   1 +
 srcpkgs/libclang12                            |   1 +
 srcpkgs/libclang12-cpp                        |   1 +
 srcpkgs/lld12                                 |   1 +
 srcpkgs/lld12-devel                           |   1 +
 ...clang-001-fix-unwind-chain-inclusion.patch |  44 +++++++
 .../patches/clang-002-add-musl-triples.patch  | 110 ++++++++++++++++++
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 +++
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ++++++++
 srcpkgs/llvm12/template                       |  71 +++++++++++
 11 files changed, 293 insertions(+)
 create mode 120000 srcpkgs/clang12
 create mode 120000 srcpkgs/libclang12
 create mode 120000 srcpkgs/libclang12-cpp
 create mode 120000 srcpkgs/lld12
 create mode 120000 srcpkgs/lld12-devel
 create mode 100644 srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch

diff --git a/common/shlibs b/common/shlibs
index 81acc39defb4..86f4c9060d3b 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -975,6 +975,8 @@ libuchardet.so.0 uchardet-0.0.6_1
 libgtksourceviewmm-3.0.so.0 gtksourceviewmm-3.2.0_1
 libyajl.so.2 yajl-2.0.1_1
 libconfuse.so.2 confuse-3.2.1_1
+libclang.so.12 libclang12-12.0.0_1
+libclang-cpp.so.12 libclang12-cpp-12.0.0_1
 liblldb.so.14 lldb-14.0.3_1
 libclang.so.14 libclang-14.0.3_1
 libclang-cpp.so.14 libclang-cpp-14.0.3_1
diff --git a/srcpkgs/clang12 b/srcpkgs/clang12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/clang12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/libclang12 b/srcpkgs/libclang12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/libclang12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/libclang12-cpp b/srcpkgs/libclang12-cpp
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/libclang12-cpp
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/lld12 b/srcpkgs/lld12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/lld12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/lld12-devel b/srcpkgs/lld12-devel
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/lld12-devel
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
new file mode 100644
index 000000000000..e4eaa7783e7a
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
@@ -0,0 +1,44 @@
+From 352974169f0d2b5da3d5321f588f5e3b5941330e Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe@gmail.com>
+Date: Tue, 8 Sep 2015 22:14:57 +0200
+Subject: [PATCH 2/7] fix unwind chain inclusion
+
+---
+ lib/Headers/unwind.h | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/lib/Headers/unwind.h b/lib/Headers/unwind.h
+index 303d792..44e10cc 100644
+--- a/clang/lib/Headers/unwind.h
++++ b/clang/lib/Headers/unwind.h
+@@ -9,9 +9,6 @@
+ 
+ /* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/
+ 
+-#ifndef __CLANG_UNWIND_H
+-#define __CLANG_UNWIND_H
+-
+ #if defined(__APPLE__) && __has_include_next(<unwind.h>)
+ /* Darwin (from 11.x on) provide an unwind.h. If that's available,
+  * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE,
+@@ -39,6 +36,9 @@
+ # endif
+ #else
+ 
++#ifndef __CLANG_UNWIND_H
++#define __CLANG_UNWIND_H
++
+ #include <stdint.h>
+ 
+ #ifdef __cplusplus
+@@ -322,6 +322,7 @@ _Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *);
+ }
+ #endif
+ 
++#endif /* __CLANG_UNWIND_H */
++
+ #endif
+ 
+-#endif /* __CLANG_UNWIND_H */
+-- 
+2.5.1
diff --git a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
new file mode 100644
index 000000000000..25688d40dbc2
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
@@ -0,0 +1,110 @@
+--- a/clang/lib/Driver/ToolChains/Gnu.cpp
++++ b/clang/lib/Driver/ToolChains/Gnu.cpp
+@@ -2086,7 +2086,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
+                                              "armv7hl-redhat-linux-gnueabi",
+                                              "armv6hl-suse-linux-gnueabi",
+-                                             "armv7hl-suse-linux-gnueabi"};
++                                             "armv7hl-suse-linux-gnueabi",
++                                             "armv7l-linux-gnueabihf"};
+   static const char *const ARMebLibDirs[] = {"/lib"};
+   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
+                                              "armeb-linux-androideabi"};
+@@ -2153,8 +2154,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
+   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
+   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
+-                                             "powerpcle-unknown-linux-gnu",
+-                                             "powerpcle-linux-musl"};
++                                             "powerpcle-unknown-linux-gnu"};
+ 
+   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
+   static const char *const PPC64Triples[] = {
+@@ -2235,6 +2235,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+     return;
+   }
+ 
++  if (TargetTriple.isMusl()) {
++    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
++    static const char *const ARMHFMuslTriples[] = {
++        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
++    };
++    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
++    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
++    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
++    static const char *const MIPSMuslTriples[] = {
++        "mips-linux-musl", "mipsel-linux-musl",
++        "mipsel-linux-muslhf", "mips-linux-muslhf"
++    };
++    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
++    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
++    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
++    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
++
++    switch (TargetTriple.getArch()) {
++    case llvm::Triple::aarch64:
++      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      break;
++    case llvm::Triple::arm:
++      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
++      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
++        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
++      } else {
++        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
++      }
++      break;
++    case llvm::Triple::x86_64:
++      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      break;
++    case llvm::Triple::x86:
++      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      break;
++    case llvm::Triple::mips:
++      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
++      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
++      break;
++    case llvm::Triple::ppc:
++      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      break;
++    case llvm::Triple::ppcle:
++      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      break;
++    case llvm::Triple::ppc64:
++      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      break;
++    case llvm::Triple::ppc64le:
++      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      break;
++    default:
++      break;
++    }
++    TripleAliases.push_back(TargetTriple.str());
++    if (TargetTriple.str() != BiarchTriple.str())
++      BiarchTripleAliases.push_back(BiarchTriple.str());
++    return;
++  }
++
+   // Android targets should not use GNU/Linux tools or libraries.
+   if (TargetTriple.isAndroid()) {
+     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
new file mode 100644
index 000000000000..4ad6412d1e6c
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
@@ -0,0 +1,13 @@
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -504,10 +504,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+     Loader = "ld.so.1";
+     break;
+   case llvm::Triple::ppc64:
+-    LibDir = "lib64";
+-    Loader =
+-        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
+-    break;
+   case llvm::Triple::ppc64le:
+     LibDir = "lib64";
+     Loader =
diff --git a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
new file mode 100644
index 000000000000..21fc8003c5f1
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
@@ -0,0 +1,48 @@
+--- a/clang/lib/Basic/Targets/PPC.h
++++ b/clang/lib/Basic/Targets/PPC.h
+@@ -415,11 +415,10 @@ public:
+       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
+     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
+       DataLayout = "e-m:e-i64:64-n32:64";
+-      ABI = "elfv2";
+     } else {
+       DataLayout = "E-m:e-i64:64-n32:64";
+-      ABI = "elfv1";
+     }
++    ABI = "elfv2";
+ 
+     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
+       LongDoubleWidth = LongDoubleAlign = 64;
+--- a/clang/lib/CodeGen/TargetInfo.cpp
++++ b/clang/lib/CodeGen/TargetInfo.cpp
+@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
+       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
+ 
+     if (Triple.isOSBinFormatELF()) {
+-      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
+-      if (getTarget().getABI() == "elfv2")
+-        Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      if (getTarget().getABI() == "elfv1")
++        Kind = PPC64_SVR4_ABIInfo::ELFv1;
+       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
+ 
+       return SetCGInfo(
+--- a/clang/lib/Driver/ToolChains/Clang.cpp
++++ b/clang/lib/Driver/ToolChains/Clang.cpp
+@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
+   const llvm::Triple &T = getToolChain().getTriple();
+   if (T.isOSBinFormatELF()) {
+     switch (getToolChain().getArch()) {
+-    case llvm::Triple::ppc64: {
+-      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
+-          T.isOSOpenBSD() || T.isMusl())
+-        ABIName = "elfv2";
+-      else
+-        ABIName = "elfv1";
+-      break;
+-    }
++    case llvm::Triple::ppc64:
+     case llvm::Triple::ppc64le:
+       ABIName = "elfv2";
+       break;
diff --git a/srcpkgs/llvm12/template b/srcpkgs/llvm12/template
index 7b361bbbf5bc..274b57183654 100644
--- a/srcpkgs/llvm12/template
+++ b/srcpkgs/llvm12/template
@@ -43,6 +43,12 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
+_enabled_projects="clang;lld"
+
+subpackages+=" clang12 libclang12 libclang12-cpp libllvm12 lld12 lld12-devel"
+
+configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+
 post_patch() {
 	# update config.guess for better platform detection
 	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
@@ -73,8 +79,10 @@ pre_configure() {
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
 			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
 		make ${makejobs} -C utils/TableGen
+		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
 		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
+		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
 		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
 		cd ../..
 	fi
@@ -117,6 +125,69 @@ do_install() {
 	fi
 }
 
+clang12_package() {
+	conflicts="clang"
+	lib32disabled=yes
+	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
+	 libclang12-${version}_${revision}"
+	short_desc+=" - C language family frontend"
+	homepage="https://clang.llvm.org/"
+	pkg_install() {
+		vmove usr/include/clang
+		vmove usr/include/clang-c
+		vmove "usr/bin/*clang*"
+		vmove usr/bin/c-index-test
+		vmove usr/lib/clang
+		vmove usr/lib/cmake/clang
+		vmove "usr/lib/libclang*.a"
+		vmove "usr/lib/libclang*.so"
+		vmove usr/share/clang
+		vmove usr/share/doc/clang
+		vmove usr/share/man/man1/clang.1
+	}
+}
+
+libclang12_package() {
+	short_desc+=" - C frontend runtime library"
+	pkg_install() {
+		vmove "usr/lib/libclang.so.*"
+	}
+}
+
+libclang12-cpp_package() {
+	short_desc+=" - C frontend runtime library (C++ interface)"
+	pkg_install() {
+		vmove "usr/lib/libclang-cpp.so.*"
+	}
+}
+
+lld12_package() {
+	conflicts="lld"
+	lib32disabled=yes
+	short_desc+=" - linker"
+	homepage="https://lld.llvm.org"
+	pkg_install() {
+		vmove usr/bin/lld*
+		vmove usr/bin/wasm-ld
+		vmove usr/bin/ld.lld*
+		vmove usr/bin/ld64.lld*
+		vmove usr/share/doc/lld
+	}
+}
+
+lld12-devel_package() {
+	conflicts="lld-devel"
+	lib32disabled=yes
+	short_desc+=" - linker - development files"
+	homepage="https://lld.llvm.org"
+	depends="lld12>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include/lld
+		vmove usr/lib/cmake/lld
+		vmove "usr/lib/liblld*a"
+	}
+}
+
 libllvm12_package() {
 	short_desc+=" - runtime library"
 	pkg_install() {

From 78d156cc0e8cbf8d6628dc316523878417e952be Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 05/29] chromium: update for llvm14

---
 srcpkgs/chromium/template | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/srcpkgs/chromium/template b/srcpkgs/chromium/template
index 0dce8772fdb8..8b604a349229 100644
--- a/srcpkgs/chromium/template
+++ b/srcpkgs/chromium/template
@@ -2,7 +2,7 @@
 pkgname=chromium
 # See https://chromiumdash.appspot.com/releases?platform=Linux for the latest version
 version=101.0.4951.41
-revision=1
+revision=2
 archs="i686* x86_64* aarch64* armv7l* ppc64le*"
 short_desc="Google's attempt at creating a safer, faster, and more stable browser"
 maintainer="Duncaen <duncaen@voidlinux.org>"
@@ -20,7 +20,7 @@ desc_option_debug="Build with debug symbols"
 desc_option_js_optimize="Optimize the JS used for Chromium's UI"
 desc_option_pipewire="Enable support for screen sharing for WebRTC via PipeWire"
 
-hostmakedepends="$(vopt_if clang "clang lld llvm12") python python3 pkgconf perl gperf bison ninja nodejs hwids
+hostmakedepends="$(vopt_if clang "clang lld llvm14") python python3 pkgconf perl gperf bison ninja nodejs hwids
  libatomic-devel libevent-devel libglib-devel $(vopt_if js_optimize openjdk) wayland-devel libepoxy-devel"
 makedepends="libpng-devel gtk+-devel gtk+3-devel nss-devel pciutils-devel
  libXi-devel libgcrypt-devel libgnome-keyring-devel cups-devel elfutils-devel
@@ -266,12 +266,6 @@ do_configure() {
 		'disable_fieldtrial_testing_config=true'
 
 		'is_official_build=true'
-
-		# segfaults with llvm-12.0.1
-		'is_cfi=false'
-		'use_thin_lto=false'
-		'use_cfi_icall=false'
-		'chrome_pgo_phase=0'
 	)
 
 	if [ "$CROSS_BUILD" ]; then

From bc3cf98e2b9f6019b8ca00c820a3b358b091d1a9 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 06/29] ghdl: update for llvm14

---
 srcpkgs/ghdl/patches/{llvm12.patch => llvm.patch} | 2 ++
 srcpkgs/ghdl/template                             | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)
 rename srcpkgs/ghdl/patches/{llvm12.patch => llvm.patch} (82%)

diff --git a/srcpkgs/ghdl/patches/llvm12.patch b/srcpkgs/ghdl/patches/llvm.patch
similarity index 82%
rename from srcpkgs/ghdl/patches/llvm12.patch
rename to srcpkgs/ghdl/patches/llvm.patch
index 8d2f76bfda06..9201816ae053 100644
--- a/srcpkgs/ghdl/patches/llvm12.patch
+++ b/srcpkgs/ghdl/patches/llvm.patch
@@ -7,6 +7,8 @@ index c1c1a6d..dad7c38 100755
         check_version 10.0 $llvm_version ||
         check_version 11.0 $llvm_version ||
 +       check_version 12.0 $llvm_version ||
++       check_version 13.0 $llvm_version ||
++       check_version 14.0 $llvm_version ||
         false; then
      echo "Debugging is enabled with llvm $llvm_version"
    else
diff --git a/srcpkgs/ghdl/template b/srcpkgs/ghdl/template
index e756d8c3cd87..9ca1169b22bd 100644
--- a/srcpkgs/ghdl/template
+++ b/srcpkgs/ghdl/template
@@ -7,7 +7,7 @@
 pkgname=ghdl
 reverts="20181129_1"
 version=1.0.0
-revision=1
+revision=2
 build_style=configure
 configure_args="--prefix=/usr --srcdir=.. --incdir=lib/ghdl/include"
 makedepends="zlib-devel"

From 8744d7d79b7b6f2bdf5e89453a5f8584fdb99df8 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 07/29] qt5: rebuild for llvm14

---
 srcpkgs/qt5/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index ee788fad2019..25f15583a42d 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -3,7 +3,7 @@ pkgname=qt5
 version=5.15.3+20220222
 # commit fcca82ca40a5d8a02a4ddd90846d070f2c58cfad
 # base repo: https://invent.kde.org/qt/qt/qt5
-revision=3
+revision=4
 build_style=meta
 hostmakedepends="cmake clang flex perl glib-devel pkg-config
  python re2c ruby which"

From fdc1b9b45f51d61cb9e93148eb181103a6188f85 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 08/29] tilix: rebuild for llvm14

---
 srcpkgs/tilix/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/tilix/template b/srcpkgs/tilix/template
index d8f014bc78c5..ac1bf7dd3bdd 100644
--- a/srcpkgs/tilix/template
+++ b/srcpkgs/tilix/template
@@ -1,7 +1,7 @@
 # Template file for 'tilix'
 pkgname=tilix
 version=1.9.4
-revision=3
+revision=4
 build_style=meson
 configure_args="-Db_lto=false"
 hostmakedepends="automake gettext-devel gdk-pixbuf glib-devel ldc po4a pkg-config

From 5a1cbff7e2cb513167841e803e7f1f4d905842b4 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 09/29] shiboken2: rebuild for llvm14

---
 srcpkgs/shiboken2/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/shiboken2/template b/srcpkgs/shiboken2/template
index b56613229c13..ab9d2c4cb8f9 100644
--- a/srcpkgs/shiboken2/template
+++ b/srcpkgs/shiboken2/template
@@ -1,7 +1,7 @@
 # Template file for 'shiboken2'
 pkgname=shiboken2
 version=5.15.2
-revision=4
+revision=5
 _pkgname="pyside-setup-opensource-src-${version}"
 wrksrc="${_pkgname/%5.14.2.1/5.14.2}"
 build_wrksrc="sources/shiboken2"

From c448e99709e362dd785b7348faec90e85e0ea8ab Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 10/29] gnome-builder: rebuild for llvm14

---
 srcpkgs/gnome-builder/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/gnome-builder/template b/srcpkgs/gnome-builder/template
index 93559b21774f..5a5a51893ae8 100644
--- a/srcpkgs/gnome-builder/template
+++ b/srcpkgs/gnome-builder/template
@@ -1,7 +1,7 @@
 # Template file for 'gnome-builder'
 pkgname=gnome-builder
 version=41.3
-revision=1
+revision=2
 build_style=meson
 build_helper=qemu
 configure_args="-Dhelp=true -Dnetwork_tests=false"

From c580f7815d7a81d7c4bd56bd27ebcd22b82635d6 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 11/29] bcc: rebuild for llvm14

---
 srcpkgs/bcc/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/bcc/template b/srcpkgs/bcc/template
index 54509b63d5a7..2cfa0a2977d0 100644
--- a/srcpkgs/bcc/template
+++ b/srcpkgs/bcc/template
@@ -1,7 +1,7 @@
 # Template file for 'bcc'
 pkgname=bcc
 version=0.24.0
-revision=1
+revision=2
 wrksrc="bcc"
 build_style=cmake
 configure_args="-DREVISION=${version} -DENABLE_LLVM_SHARED=1"

From 46690d5c043d37c6b3209ce8098e1a7cd85ab123 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 12/29] mesa: rebuild for llvm14

---
 srcpkgs/mesa/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/mesa/template b/srcpkgs/mesa/template
index c90500de7416..8f08262fb135 100644
--- a/srcpkgs/mesa/template
+++ b/srcpkgs/mesa/template
@@ -1,7 +1,7 @@
 # Template file for 'mesa'
 pkgname=mesa
 version=21.3.7
-revision=1
+revision=2
 build_style=meson
 configure_args="-Dglvnd=true -Dshared-glapi=enabled -Dgbm=enabled -Degl=enabled
  -Dosmesa=true -Dgles1=enabled -Dgles2=enabled -Dglx=dri -Ddri3=enabled

From 127a0bb67ac383aecbbe9025649c63cc2ae4a743 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 13/29] juCi++: rebuild for llvm14

---
 srcpkgs/juCi++/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/juCi++/template b/srcpkgs/juCi++/template
index 1a7604b44a00..5103324dec20 100644
--- a/srcpkgs/juCi++/template
+++ b/srcpkgs/juCi++/template
@@ -1,7 +1,7 @@
 # Template file for 'juCi++'
 pkgname=juCi++
 version=1.6.2
-revision=2
+revision=3
 _libclangmm_commit="b342f4dd6de4fe509a692a4b4fcfc7e24aae9590"
 _tiny_commit="c9c8bf810ddad8cd17882b9a9ee628a690e779f5"
 wrksrc="jucipp-v${version}"

From 394ee70e8242cfee71f4afee3dc30ef81f0e7cff Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 14/29] kdevelop: rebuild for llvm14

---
 srcpkgs/kdevelop/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/kdevelop/template b/srcpkgs/kdevelop/template
index 010185849d80..abf08c313071 100644
--- a/srcpkgs/kdevelop/template
+++ b/srcpkgs/kdevelop/template
@@ -1,7 +1,7 @@
 # Template file for 'kdevelop'
 pkgname=kdevelop
 version=21.12.3
-revision=1
+revision=2
 build_style=cmake
 configure_args="-DBUILD_TESTING=OFF"
 hostmakedepends="extra-cmake-modules qt5-qmake qt5-host-tools qt5-tools

From b8e909079e1f1f70b87876da73ad6b1718f2a24d Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 15/29] codelite: rebuild for llvm14

---
 srcpkgs/codelite/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/codelite/template b/srcpkgs/codelite/template
index 3a993a2c0cfb..24e2c879dd45 100644
--- a/srcpkgs/codelite/template
+++ b/srcpkgs/codelite/template
@@ -1,7 +1,7 @@
 # Template file for 'codelite'
 pkgname=codelite
 version=15.0.6
-revision=1
+revision=2
 build_style=cmake
 build_helper=cmake-wxWidgets-gtk3
 configure_args="-DWITH_PCH=0 -DWITH_WX_CONFIG=wx-config-gtk3

From 72aad906e80a17ccc97398f1324176e9d0cf3857 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 16/29] ccls: rebuild for llvm14

---
 srcpkgs/ccls/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/ccls/template b/srcpkgs/ccls/template
index fbb7c6847bc1..40aba3b55bfe 100644
--- a/srcpkgs/ccls/template
+++ b/srcpkgs/ccls/template
@@ -1,7 +1,7 @@
 # Template file for 'ccls'
 pkgname=ccls
 version=0.20210330
-revision=2
+revision=3
 build_style=cmake
 hostmakedepends="clang-tools-extra"
 makedepends="llvm ncurses-devel rapidjson zlib-devel clang-tools-extra"

From 313b9dcaed208ddc1198390cdf5d0f60e01c00c1 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 17/29] clazy: rebuild for llvm14

---
 srcpkgs/clazy/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/clazy/template b/srcpkgs/clazy/template
index 11f3bab55aef..f81de08ab836 100644
--- a/srcpkgs/clazy/template
+++ b/srcpkgs/clazy/template
@@ -1,7 +1,7 @@
 # Template file for 'clazy'
 pkgname=clazy
 version=1.11
-revision=1
+revision=2
 build_style=cmake
 build_helper=qemu
 hostmakedepends="llvm"

From 4550c56aeda7a1fb90cc0c8f1b584a2d1c2ea400 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 18/29] bpftrace: rebuild for llvm14

---
 srcpkgs/bpftrace/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/bpftrace/template b/srcpkgs/bpftrace/template
index 28ab3c626399..eb2480d2230e 100644
--- a/srcpkgs/bpftrace/template
+++ b/srcpkgs/bpftrace/template
@@ -1,7 +1,7 @@
 # Template file for 'bpftrace'
 pkgname=bpftrace
 version=0.14.1
-revision=1
+revision=2
 archs="x86_64* aarch64* ppc64*"
 build_style=cmake
 configure_args="-DBUILD_TESTING=OFF"  # needs root to run

From bd26ab8eff3ab9fc7c1450122507057bda8429fb Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 19/29] rtags: rebuild for llvm14

---
 srcpkgs/rtags/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/rtags/template b/srcpkgs/rtags/template
index b496a1b0e721..9b161e690d76 100644
--- a/srcpkgs/rtags/template
+++ b/srcpkgs/rtags/template
@@ -1,7 +1,7 @@
 # Template file for 'rtags'
 pkgname=rtags
 version=2.38
-revision=5
+revision=6
 build_style=cmake
 # Don't run tests in do_install, please.
 configure_args="-DSKIP_CTEST=TRUE"

From 85c1d5ed55c9cfec26fb359efdf77773f30bc64c Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:07:19 +0200
Subject: [PATCH 20/29] beignet: remove package

---
 srcpkgs/beignet/patches/cl_uint.patch         |  22 -
 ...419a0008e38ef2d9d255d9e9c74e9fba084b.patch | 134 ---
 srcpkgs/beignet/patches/llvm06.patch          |  33 -
 srcpkgs/beignet/patches/llvm08.patch          |  56 --
 srcpkgs/beignet/patches/llvm09.patch          | 111 ---
 srcpkgs/beignet/patches/llvm10.patch          | 347 -------
 srcpkgs/beignet/patches/llvm11.patch          | 937 ------------------
 srcpkgs/beignet/patches/llvm12.patch          | 115 ---
 srcpkgs/beignet/patches/musl.patch            |  11 -
 srcpkgs/beignet/template                      |  22 -
 srcpkgs/beignet/update                        |   1 -
 srcpkgs/removed-packages/template             |   3 +-
 12 files changed, 2 insertions(+), 1790 deletions(-)
 delete mode 100644 srcpkgs/beignet/patches/cl_uint.patch
 delete mode 100644 srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm06.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm08.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm09.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm10.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm11.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm12.patch
 delete mode 100644 srcpkgs/beignet/patches/musl.patch
 delete mode 100644 srcpkgs/beignet/template
 delete mode 100644 srcpkgs/beignet/update

diff --git a/srcpkgs/beignet/patches/cl_uint.patch b/srcpkgs/beignet/patches/cl_uint.patch
deleted file mode 100644
index 86ba00f04e95..000000000000
--- a/srcpkgs/beignet/patches/cl_uint.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/src/cl_api_kernel.c	2017-09-22 10:05:22.000000000 +0200
-+++ b/src/cl_api_kernel.c	2020-03-24 18:27:40.186485887 +0100
-@@ -151,7 +151,7 @@
-         fixed_local_sz[0] = 16;
-         fixed_local_sz[1] = 1;
-       } else {
--        uint j, maxDimSize = 64 /* from 64? */, maxGroupSize = 256; //MAX_WORK_GROUP_SIZE may too large
-+        cl_uint j, maxDimSize = 64 /* from 64? */, maxGroupSize = 256; //MAX_WORK_GROUP_SIZE may too large
-         size_t realGroupSize = 1;
-         for (i = 0; i < work_dim; i++) {
-           for (j = maxDimSize; j > 1; j--) {
---- a/src/cl_enqueue.c	2017-09-22 10:05:22.000000000 +0200
-+++ b/src/cl_enqueue.c	2020-03-24 18:30:12.031479833 +0100
-@@ -494,7 +494,7 @@
- cl_int cl_enqueue_svm_free(enqueue_data *data, cl_int status) {
-   int i;
-   void **pointers = data->pointers;
--  uint num_svm_ptrs = data->size;
-+  cl_uint num_svm_ptrs = data->size;
-   cl_int err = CL_SUCCESS;
- 
-   if (status != CL_COMPLETE)
diff --git a/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch b/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
deleted file mode 100644
index 8de9e6e2f093..000000000000
--- a/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
+++ /dev/null
@@ -1,134 +0,0 @@
-From e1b2419a0008e38ef2d9d255d9e9c74e9fba084b Mon Sep 17 00:00:00 2001
-From: "Rebecca N. Palmer" <rebecca_palmer@zoho.com>
-Date: Sat, 21 Jul 2018 20:05:54 +0100
-Subject: Add preliminary LLVM 7 support
-
-This is preliminary because LLVM 7 has not been released yet:
-it was tested with the snapshot from Debian experimental (svn336894).
-
-1.Change linking order, as clangCodeGen now links to clangFrontend
-2.Pass references not pointers to WriteBitcodeToFile and CloneModule
-3.Add the headers that LoopSimplifyID, LCSSAID and
-some create*Pass have moved to
-4.Define our DEBUG whether or not we just undefined LLVM's
-(theirs is now LLVM_DEBUG, but we never actually use it)
-
-Signed-off-by: Rebecca N. Palmer <rebecca_palmer@zoho.com>
-Reviewed-by: Yang Rong <rong.r.yang@intel.com>
----
- CMake/FindLLVM.cmake                     | 2 +-
- backend/src/backend/gen_program.cpp      | 8 ++++++++
- backend/src/backend/program.cpp          | 4 ++++
- backend/src/llvm/ExpandLargeIntegers.cpp | 2 +-
- backend/src/llvm/llvm_bitcode_link.cpp   | 4 ++++
- backend/src/llvm/llvm_includes.hpp       | 4 ++++
- 6 files changed, 22 insertions(+), 2 deletions(-)
-
-diff --git a/CMake/FindLLVM.cmake b/CMake/FindLLVM.cmake
-index 5457f24..f882589 100644
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -113,10 +113,10 @@ macro(add_one_lib name)
- endmacro()
- 
- #Assume clang lib path same as llvm lib path
-+add_one_lib("clangCodeGen")
- add_one_lib("clangFrontend")
- add_one_lib("clangSerialization")
- add_one_lib("clangDriver")
--add_one_lib("clangCodeGen")
- add_one_lib("clangSema")
- add_one_lib("clangStaticAnalyzerFrontend")
- add_one_lib("clangStaticAnalyzerCheckers")
-diff --git a/backend/src/backend/gen_program.cpp b/backend/src/backend/gen_program.cpp
-index 274c99c..4159234 100644
---- a/backend/src/backend/gen_program.cpp
-+++ b/backend/src/backend/gen_program.cpp
-@@ -454,7 +454,11 @@ namespace gbe {
- #ifdef GBE_COMPILER_AVAILABLE
-       std::string str;
-       llvm::raw_string_ostream OS(str);
-+#if LLVM_VERSION_MAJOR >= 7
-+      llvm::WriteBitcodeToFile(*((llvm::Module*)prog->module), OS);
-+#else
-       llvm::WriteBitcodeToFile((llvm::Module*)prog->module, OS);
-+#endif
-       std::string& bin_str = OS.str();
-       int llsz = bin_str.size();
-       *binary = (char *)malloc(sizeof(char) * (llsz+1) );
-@@ -545,7 +549,11 @@ namespace gbe {
-                                     &modRef);
-         src = llvm::unwrap(modRef);
-       }
-+#if LLVM_VERSION_MAJOR >= 7
-+      llvm::Module* clone = llvm::CloneModule(*src).release();
-+#else
-       llvm::Module* clone = llvm::CloneModule(src).release();
-+#endif
-       if (LLVMLinkModules2(wrap(dst), wrap(clone))) {
- #elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-       if (LLVMLinkModules(wrap(dst), wrap(src), LLVMLinkerPreserveSource_Removed, &errMsg)) {
-diff --git a/backend/src/backend/program.cpp b/backend/src/backend/program.cpp
-index c37c595..b36f7b4 100644
---- a/backend/src/backend/program.cpp
-+++ b/backend/src/backend/program.cpp
-@@ -794,7 +794,11 @@ namespace gbe {
-       llvm::raw_fd_ostream ostream (dumpSPIRBinaryName.c_str(),
-                                     err, llvm::sys::fs::F_None);
-       if (!err)
-+#if LLVM_VERSION_MAJOR<7
-         llvm::WriteBitcodeToFile(*out_module, ostream);
-+#else
-+        llvm::WriteBitcodeToFile(**out_module, ostream);
-+#endif
-     }
- #endif
-     return true;
-diff --git a/backend/src/llvm/ExpandLargeIntegers.cpp b/backend/src/llvm/ExpandLargeIntegers.cpp
-index 8515dc1..4aec44e 100644
---- a/backend/src/llvm/ExpandLargeIntegers.cpp
-+++ b/backend/src/llvm/ExpandLargeIntegers.cpp
-@@ -99,8 +99,8 @@ using namespace llvm;
- 
- #ifdef DEBUG
-   #undef DEBUG
--  #define DEBUG(...)
- #endif
-+#define DEBUG(...)
- // Break instructions up into no larger than 64-bit chunks.
- static const unsigned kChunkBits = 64;
- static const unsigned kChunkBytes = kChunkBits / CHAR_BIT;
-diff --git a/backend/src/llvm/llvm_bitcode_link.cpp b/backend/src/llvm/llvm_bitcode_link.cpp
-index ef56e4c..4c3e20e 100644
---- a/backend/src/llvm/llvm_bitcode_link.cpp
-+++ b/backend/src/llvm/llvm_bitcode_link.cpp
-@@ -340,7 +340,11 @@ namespace gbe
-     /* We use beignet's bitcode as dst because it will have a lot of
-        lazy functions which will not be loaded. */
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 39
-+#if LLVM_VERSION_MAJOR >= 7
-+    llvm::Module * linked_module = llvm::CloneModule(*(llvm::Module*)mod).release();
-+#else
-     llvm::Module * linked_module = llvm::CloneModule((llvm::Module*)mod).release();
-+#endif
-     if(LLVMLinkModules2(wrap(clonedLib), wrap(linked_module))) {
- #else
-     char* errorMsg;
-diff --git a/backend/src/llvm/llvm_includes.hpp b/backend/src/llvm/llvm_includes.hpp
-index 184553a..ffccf02 100644
---- a/backend/src/llvm/llvm_includes.hpp
-+++ b/backend/src/llvm/llvm_includes.hpp
-@@ -89,6 +89,10 @@
- #include "llvm/CodeGen/IntrinsicLowering.h"
- 
- #include "llvm/Transforms/Scalar.h"
-+#if LLVM_VERSION_MAJOR >= 7
-+#include "llvm/Transforms/Utils.h"
-+#include "llvm/Transforms/InstCombine/InstCombine.h"
-+#endif
- #include "llvm/MC/MCAsmInfo.h"
- #include "llvm/MC/MCContext.h"
- #include "llvm/MC/MCInstrInfo.h"
--- 
-cgit v1.1
-
diff --git a/srcpkgs/beignet/patches/llvm06.patch b/srcpkgs/beignet/patches/llvm06.patch
deleted file mode 100644
index 3389e66c82df..000000000000
--- a/srcpkgs/beignet/patches/llvm06.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-Source: Arch Linux
-Upstream: unknown
-Reason: fixes llvm6 compilation
-
---- a/backend/src/llvm/llvm_to_gen.cpp	2017-10-24 09:04:48.000000000 +0300
-+++ b/backend/src/llvm/llvm_to_gen.cpp	2018-03-16 16:08:54.669963824 +0200
-@@ -322,7 +322,11 @@ namespace gbe
-     DataLayout DL(&mod);
-     
-     gbeDiagnosticContext dc;
-+#if LLVM_VERSION_MAJOR >= 6
-+    mod.getContext().setDiagnosticHandlerCallBack(&gbeDiagnosticHandler,&dc);
-+#else
-     mod.getContext().setDiagnosticHandler(&gbeDiagnosticHandler,&dc);
-+#endif
- 
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-     mod.setDataLayout(DL);
---- a/backend/src/llvm/llvm_unroll.cpp	2017-10-24 09:04:48.000000000 +0300
-+++ b/backend/src/llvm/llvm_unroll.cpp	2018-03-16 16:09:47.736403557 +0200
-@@ -205,7 +205,9 @@ namespace gbe {
-           if (parentTripCount != 0 && currTripCount * parentTripCount > 32) {
-             //Don't change the unrollID if doesn't force unroll.
-             //setUnrollID(parentL, false);
--#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-+#if LLVM_VERSION_MAJOR >= 6
-+            loopInfo.erase(parentL);
-+#elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-             loopInfo.markAsRemoved(parentL);
- #else
-             LPM.deleteLoopFromQueue(parentL);
-Only in Beignet-1.3.2-Source: build
-
diff --git a/srcpkgs/beignet/patches/llvm08.patch b/srcpkgs/beignet/patches/llvm08.patch
deleted file mode 100644
index a0c5e7a7c4f7..000000000000
--- a/srcpkgs/beignet/patches/llvm08.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 75c152599a7c1739e6dadcdb9b377acf7e44d9cf Mon Sep 17 00:00:00 2001
-From: Jan Beich <jbeich@FreeBSD.org>
-Date: Wed, 30 Jan 2019 12:42:34 +0000
-Subject: [PATCH] lang/beignet: unbreak with llvm80
-
-Regressed by https://github.com/llvm/llvm-project/commit/721d95713a9e
-
-unable to load /usr/local/lib/beignet//libgbeinterp.so which is part of the driver, please check!
-ld-elf.so.1: /usr/local/lib/beignet//libgbeinterp.so: Undefined symbol "_ZN4llvm24DisableABIBreakingChecksE"
-
-Regressed by https://github.com/llvm/llvm-project/commit/4a2d58e16acc
-
-backend/src/llvm/llvm_gen_backend.cpp:3076:5: error:
-      unknown type name 'TerminatorInst'
-    TerminatorInst *term = bb->getTerminator();
-    ^
-backend/src/llvm/llvm_gen_backend.cpp:3083:5: error:
-      unknown type name 'TerminatorInst'
-    TerminatorInst *term = bb->getTerminator();
-    ^
-
---- a/backend/src/CMakeLists.txt	2017-09-22 08:05:22 UTC
-+++ b/backend/src/CMakeLists.txt
-@@ -168,6 +168,7 @@ add_dependencies(gbe beignet_bitcode)
- endif (NOT (USE_STANDALONE_GBE_COMPILER STREQUAL "true"))
- 
- add_library(gbeinterp SHARED gbe_bin_interpreter.cpp)
-+target_link_libraries(gbeinterp ${LLVM_MODULE_LIBS})
- 
- if (LLVM_VERSION_NODOT VERSION_EQUAL 34)
-   find_library(TERMINFO NAMES tinfo ncurses)
---- a/backend/src/llvm/llvm_gen_backend.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -3073,14 +3073,22 @@ namespace gbe
- 
- 
-   static unsigned getChildNo(BasicBlock *bb) {
-+#if LLVM_VERSION_MAJOR < 8
-     TerminatorInst *term = bb->getTerminator();
-+#else
-+    Instruction *term = bb->getTerminator();
-+#endif
-     return term->getNumSuccessors();
-   }
- 
-   // return NULL if index out-range of children number
-   static BasicBlock *getChildPossible(BasicBlock *bb, unsigned index) {
- 
-+#if LLVM_VERSION_MAJOR < 8
-     TerminatorInst *term = bb->getTerminator();
-+#else
-+    Instruction *term = bb->getTerminator();
-+#endif
-     unsigned childNo = term->getNumSuccessors();
-     BasicBlock *child = NULL;
-     if(index < childNo) {
diff --git a/srcpkgs/beignet/patches/llvm09.patch b/srcpkgs/beignet/patches/llvm09.patch
deleted file mode 100644
index acaeceabb6dd..000000000000
--- a/srcpkgs/beignet/patches/llvm09.patch
+++ /dev/null
@@ -1,111 +0,0 @@
-Source: FreeBSD + q66
-
-Mostly FreeBSD other than FindLLVM.cmake changes.
-Linking against clang-cpp does not work for us.
-
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -140,6 +140,7 @@ add_one_lib("clangStaticAnalyzerCore")
- add_one_lib("clangAnalysis")
- add_one_lib("clangEdit")
- add_one_lib("clangAST")
-+add_one_lib("clangASTMatchers")
- add_one_lib("clangParse")
- add_one_lib("clangSema")
- add_one_lib("clangLex")
---- a/backend/src/llvm/llvm_intrinsic_lowering.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_intrinsic_lowering.cpp
-@@ -77,7 +77,11 @@ namespace gbe {
-         std::vector<Type *> ParamTys;
-         for (Value** I = ArgBegin; I != ArgEnd; ++I)
-           ParamTys.push_back((*I)->getType());
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+        FunctionCallee FCache = M->getOrInsertFunction(NewFn,
-+#else
-         Constant* FCache = M->getOrInsertFunction(NewFn,
-+#endif
-                                         FunctionType::get(RetTy, ParamTys, false));
- 
-         IRBuilder<> Builder(CI->getParent(), BasicBlock::iterator(CI));
---- a/backend/src/llvm/llvm_sampler_fix.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp
-@@ -82,7 +82,11 @@ namespace gbe {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-           Module *M = I->getParent()->getParent()->getParent();
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+          FunctionCallee samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#endif
- #else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType(), nullptr);
- #endif
-@@ -124,7 +128,11 @@ namespace gbe {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-           Module *M = I->getParent()->getParent()->getParent();
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+          FunctionCallee samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#endif
- #else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType(), nullptr);
- #endif
---- a/backend/src/llvm/llvm_profiling.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_profiling.cpp
-@@ -163,10 +163,18 @@ namespace gbe
-       // __gen_ocl_store_timestamp(int nth, int type);
-       Value *Args[2] = {ConstantInt::get(intTy, pointNum++), ConstantInt::get(intTy, profilingType)};
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+      builder->CreateCall(module->getOrInsertFunction(
-+#else
-       builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-+#endif
-               "__gen_ocl_calc_timestamp", Type::getVoidTy(module->getContext()),
-               IntegerType::getInt32Ty(module->getContext()),
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+              IntegerType::getInt32Ty(module->getContext())),
-+#else
-               IntegerType::getInt32Ty(module->getContext()))),
-+#endif
-               ArrayRef<Value*>(Args));
- #else
-       builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-@@ -185,10 +193,18 @@ namespace gbe
-     Value *Args2[2] = {profilingBuf, ConstantInt::get(intTy, profilingType)};
- 
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+    builder->CreateCall(module->getOrInsertFunction(
-+#else
-     builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-+#endif
-             "__gen_ocl_store_profiling", Type::getVoidTy(module->getContext()),
-             ptrTy,
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+            IntegerType::getInt32Ty(module->getContext())),
-+#else
-             IntegerType::getInt32Ty(module->getContext()))),
-+#endif
-             ArrayRef<Value*>(Args2));
- #else
-     builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
---- a/backend/src/llvm/llvm_device_enqueue.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_device_enqueue.cpp
-@@ -398,8 +398,13 @@ namespace gbe {
-               std::vector<Type *> ParamTys;
-               for (Value** iter = args.begin(); iter != args.end(); ++iter)
-                 ParamTys.push_back((*iter)->getType());
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+              CallInst* newCI = builder.CreateCall(mod->getOrInsertFunction(
-+                              "__gen_enqueue_kernel_slm", FunctionType::get(intTy, ParamTys, false)), args);
-+#else
-               CallInst* newCI = builder.CreateCall(cast<llvm::Function>(mod->getOrInsertFunction(
-                               "__gen_enqueue_kernel_slm", FunctionType::get(intTy, ParamTys, false))), args);
-+#endif
-               CI->replaceAllUsesWith(newCI);
-               deadInsnSet.insert(CI);
-             }
diff --git a/srcpkgs/beignet/patches/llvm10.patch b/srcpkgs/beignet/patches/llvm10.patch
deleted file mode 100644
index 8aafe48a240d..000000000000
--- a/srcpkgs/beignet/patches/llvm10.patch
+++ /dev/null
@@ -1,347 +0,0 @@
-diff --git CMake/FindLLVM.cmake CMake/FindLLVM.cmake
-index 0a59e47..6e90923 100644
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -104,28 +104,16 @@ string(REGEX REPLACE " *\n" "" LLVM_SYSTEM_LIBS ${LLVM_SYSTEM_LIBS_ORIG})
- endif (LLVM_SYSTEM_LIBS_ORIG)
- endif (LLVM_VERSION_NODOT VERSION_GREATER 34)
- 
-+#something harmless because whitespace at start is an error
-+set(CLANG_LIBRARIES "-ldl")
- macro(add_one_lib name)
-   FIND_LIBRARY(CLANG_LIB
-     NAMES ${name}
-     PATHS ${LLVM_LIBRARY_DIR} NO_DEFAULT_PATH)
--  set(CLANG_LIBRARIES ${CLANG_LIBRARIES} ${CLANG_LIB})
-+  set(CLANG_LIBRARIES "${CLANG_LIBRARIES} ${CLANG_LIB}")
-+  message(STATUS "clanglibs name ${name} this ${CLANG_LIB} all ${CLANG_LIBRARIES} ")
- 	unset(CLANG_LIB CACHE)
- endmacro()
- 
- #Assume clang lib path same as llvm lib path
--add_one_lib("clangCodeGen")
--add_one_lib("clangFrontend")
--add_one_lib("clangSerialization")
--add_one_lib("clangDriver")
--add_one_lib("clangSema")
--add_one_lib("clangStaticAnalyzerFrontend")
--add_one_lib("clangStaticAnalyzerCheckers")
--add_one_lib("clangStaticAnalyzerCore")
--add_one_lib("clangAnalysis")
--add_one_lib("clangEdit")
--add_one_lib("clangAST")
--add_one_lib("clangASTMatchers")
--add_one_lib("clangParse")
--add_one_lib("clangSema")
--add_one_lib("clangLex")
--add_one_lib("clangBasic")
-+add_one_lib("clang-cpp")
-diff --git CMakeLists.txt CMakeLists.txt
-index c11acbb..08f427d 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -79,7 +79,7 @@ elseif (COMPILER STREQUAL "CLANG")
- elseif (COMPILER STREQUAL "ICC")
-   set (CMAKE_C_CXX_FLAGS "${CMAKE_C_CXX_FLAGS}  -wd2928 -Wall -fPIC -fstrict-aliasing -fp-model fast -msse4.1 -Wl,-E")
- endif ()
--set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
-+set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof")
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
- set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
- set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
-diff --git backend/src/backend/program.cpp backend/src/backend/program.cpp
-index b36f7b4..e666031 100644
---- a/backend/src/backend/program.cpp
-+++ b/backend/src/backend/program.cpp
-@@ -694,9 +694,9 @@ namespace gbe {
- #endif
-                 );
- 
-+    llvm::cl::ResetAllOptionOccurrences();
-     clang::CompilerInvocation::CreateFromArgs(*CI,
--                                              &args[0],
--                                              &args[0] + args.size(),
-+                                              clang::ArrayRef<const char*>(args),
-                                               Diags);
-     // Create the compiler instance
-     clang::CompilerInstance Clang;
-@@ -1242,8 +1242,7 @@ EXTEND_QUOTE:
-       // Create the compiler invocation
-       std::unique_ptr<clang::CompilerInvocation> CI(new clang::CompilerInvocation);
-       return clang::CompilerInvocation::CreateFromArgs(*CI,
--                                                       &args[0],
--                                                       &args[0] + args.size(),
-+                                                       clang::ArrayRef<const char*>(args),
-                                                        Diags);
-     }
- #endif
-diff --git backend/src/llvm/llvm_gen_backend.cpp backend/src/llvm/llvm_gen_backend.cpp
-index c6fc30d..82441d8 100644
---- a/backend/src/llvm/llvm_gen_backend.cpp
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -575,10 +575,12 @@ namespace gbe
-         has_errors(false),
-         legacyMode(true)
-     {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-       initializeLoopInfoWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeLoopInfoPass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-       pass = PASS_EMIT_REGISTERS;
-     }
-diff --git backend/src/llvm/llvm_gen_backend.hpp backend/src/llvm/llvm_gen_backend.hpp
-index b4715b1..8e74f7a 100644
---- a/backend/src/llvm/llvm_gen_backend.hpp
-+++ b/backend/src/llvm/llvm_gen_backend.hpp
-@@ -130,10 +130,10 @@ namespace gbe
-   llvm::FunctionPass *createGenPass(ir::Unit &unit);
- 
-   /*! Remove the GEP instructions */
--  llvm::BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit);
-+  llvm::FunctionPass *createRemoveGEPPass(const ir::Unit &unit);
- 
-   /*! Merge load/store if possible */
--  llvm::BasicBlockPass *createLoadStoreOptimizationPass();
-+  llvm::FunctionPass *createLoadStoreOptimizationPass();
- 
-   /*! Scalarize all vector op instructions */
-   llvm::FunctionPass* createScalarizePass();
-@@ -141,7 +141,7 @@ namespace gbe
-   llvm::ModulePass* createBarrierNodupPass(bool);
- 
-   /*! Convert the Intrinsic call to gen function */
--  llvm::BasicBlockPass *createIntrinsicLoweringPass();
-+  llvm::FunctionPass *createIntrinsicLoweringPass();
- 
-   /*! Passer the printf function call. */
-   llvm::FunctionPass* createPrintfParserPass(ir::Unit &unit);
-diff --git backend/src/llvm/llvm_intrinsic_lowering.cpp backend/src/llvm/llvm_intrinsic_lowering.cpp
-index 94f0ce6..b5539e9 100644
---- a/backend/src/llvm/llvm_intrinsic_lowering.cpp
-+++ b/backend/src/llvm/llvm_intrinsic_lowering.cpp
-@@ -29,12 +29,12 @@
- using namespace llvm;
- 
- namespace gbe {
--    class InstrinsicLowering : public BasicBlockPass
-+    class InstrinsicLowering : public FunctionPass
-     {
-     public:
-       static char ID;
-       InstrinsicLowering() :
--        BasicBlockPass(ID) {}
-+        FunctionPass(ID) {}
- 
-       void getAnalysisUsage(AnalysisUsage &AU) const {
- 
-@@ -93,9 +93,9 @@ namespace gbe {
-         CI->eraseFromParent();
-         return NewCI;
-       }
--      virtual bool runOnBasicBlock(BasicBlock &BB)
-+      virtual bool runOnFunction(Function &F)
-       {
--        bool changedBlock = false;
-+        for (BasicBlock &BB : F) {
-         Module *M = BB.getParent()->getParent();
- 
-         DataLayout TD(M);
-@@ -159,13 +159,14 @@ namespace gbe {
-             }
-           }
-         }
--        return changedBlock;
-+        }
-+        return true;
-       }
-     };
- 
-     char InstrinsicLowering::ID = 0;
- 
--    BasicBlockPass *createIntrinsicLoweringPass() {
-+    FunctionPass *createIntrinsicLoweringPass() {
-       return new InstrinsicLowering();
-     }
- } // end namespace
-diff --git backend/src/llvm/llvm_loadstore_optimization.cpp backend/src/llvm/llvm_loadstore_optimization.cpp
-index 5aa38be..e314302 100644
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
-@@ -26,13 +26,13 @@
- 
- using namespace llvm;
- namespace gbe {
--  class GenLoadStoreOptimization : public BasicBlockPass {
-+  class GenLoadStoreOptimization : public FunctionPass {
- 
-   public:
-     static char ID;
-     ScalarEvolution *SE;
-     const DataLayout *TD;
--    GenLoadStoreOptimization() : BasicBlockPass(ID) {}
-+    GenLoadStoreOptimization() : FunctionPass(ID) {}
- 
-     void getAnalysisUsage(AnalysisUsage &AU) const {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-@@ -45,7 +45,9 @@ namespace gbe {
-       AU.setPreservesCFG();
-     }
- 
--    virtual bool runOnBasicBlock(BasicBlock &BB) {
-+    virtual bool runOnFunction(Function &F) {
-+        bool changedAnyBlock = false;
-+        for (BasicBlock &BB : F) {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-       SE = &getAnalysis<ScalarEvolutionWrapperPass>().getSE();
- #else
-@@ -59,7 +61,9 @@ namespace gbe {
-       #else
-         TD = getAnalysisIfAvailable<DataLayout>();
-       #endif
--      return optimizeLoadStore(BB);
-+           changedAnyBlock = optimizeLoadStore(BB) | changedAnyBlock;
-+        }
-+        return changedAnyBlock;
-     }
-     Type    *getValueType(Value *insn);
-     Value   *getPointerOperand(Value *I);
-@@ -148,7 +152,7 @@ namespace gbe {
-       values.push_back(merged[i]);
-     }
-     LoadInst *ld = cast<LoadInst>(merged[0]);
--    unsigned align = ld->getAlignment();
-+    MaybeAlign align = ld->getAlign();
-     unsigned addrSpace = ld->getPointerAddressSpace();
-     // insert before first load
-     Builder.SetInsertPoint(ld);
-@@ -231,7 +235,7 @@ namespace gbe {
- 
-     unsigned addrSpace = st->getPointerAddressSpace();
- 
--    unsigned align = st->getAlignment();
-+    MaybeAlign align = st->getAlign();
-     // insert before the last store
-     Builder.SetInsertPoint(merged[size-1]);
- 
-@@ -325,7 +329,7 @@ namespace gbe {
-     return changed;
-   }
- 
--  BasicBlockPass *createLoadStoreOptimizationPass() {
-+  FunctionPass *createLoadStoreOptimizationPass() {
-     return new GenLoadStoreOptimization();
-   }
- };
-diff --git backend/src/llvm/llvm_passes.cpp backend/src/llvm/llvm_passes.cpp
-index 10752a3..b8f2282 100644
---- a/backend/src/llvm/llvm_passes.cpp
-+++ b/backend/src/llvm/llvm_passes.cpp
-@@ -37,7 +37,7 @@
- #include "sys/map.hpp"
- 
- using namespace llvm;
--
-+template class cfg::Update<BasicBlock *>;
- namespace gbe
- {
-   bool isKernelFunction(const llvm::Function &F) {
-@@ -219,13 +219,13 @@ namespace gbe
-     return offset;
-   }
- 
--  class GenRemoveGEPPasss : public BasicBlockPass
-+  class GenRemoveGEPPasss : public FunctionPass
-   {
- 
-    public:
-     static char ID;
-     GenRemoveGEPPasss(const ir::Unit &unit) :
--      BasicBlockPass(ID),
-+      FunctionPass(ID),
-       unit(unit) {}
-     const ir::Unit &unit;
-     void getAnalysisUsage(AnalysisUsage &AU) const {
-@@ -242,16 +242,18 @@ namespace gbe
- 
-     bool simplifyGEPInstructions(GetElementPtrInst* GEPInst);
- 
--    virtual bool runOnBasicBlock(BasicBlock &BB)
-+    virtual bool runOnFunction(Function &F)
-     {
--      bool changedBlock = false;
-+      bool changedAnyBlock = false;
-+        for (BasicBlock &BB : F) {
-       iplist<Instruction>::iterator I = BB.getInstList().begin();
-       for (auto nextI = I, E = --BB.getInstList().end(); I != E; I = nextI) {
-         iplist<Instruction>::iterator I = nextI++;
-         if(GetElementPtrInst* gep = dyn_cast<GetElementPtrInst>(&*I))
--          changedBlock = (simplifyGEPInstructions(gep) || changedBlock);
-+          changedAnyBlock = (simplifyGEPInstructions(gep) | changedAnyBlock);
-       }
--      return changedBlock;
-+        }
-+      return changedAnyBlock;
-     }
-   };
- 
-@@ -367,7 +369,7 @@ namespace gbe
-     return true;
-   }
- 
--  BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit) {
-+  FunctionPass *createRemoveGEPPass(const ir::Unit &unit) {
-     return new GenRemoveGEPPasss(unit);
-   }
- } /* namespace gbe */
-diff --git backend/src/llvm/llvm_sampler_fix.cpp backend/src/llvm/llvm_sampler_fix.cpp
-index 2a097c8..863be6d 100644
---- a/backend/src/llvm/llvm_sampler_fix.cpp
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp
-@@ -33,10 +33,12 @@ namespace gbe {
-   class SamplerFix : public FunctionPass {
-   public:
-     SamplerFix() : FunctionPass(ID) {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
-       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-     }
- 
-diff --git backend/src/llvm/llvm_scalarize.cpp backend/src/llvm/llvm_scalarize.cpp
-index e9a2a66..e9d2ee4 100644
---- a/backend/src/llvm/llvm_scalarize.cpp
-+++ b/backend/src/llvm/llvm_scalarize.cpp
-@@ -96,10 +96,12 @@ namespace gbe {
- 
-     Scalarize() : FunctionPass(ID)
-     {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
-       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-     }
- 
-diff --git utests/CMakeLists.txt utests/CMakeLists.txt
-index 300d87a..64179c7 100644
---- a/utests/CMakeLists.txt
-+++ b/utests/CMakeLists.txt
-@@ -26,8 +26,8 @@ if (NOT NOT_BUILD_STAND_ALONE_UTEST)
-   # Threads
-   Find_Package(Threads)
- 
--  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
--  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
-+  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof -ffloat-store -fno-strict-aliasing")
-+  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS} -ffloat-store -fno-strict-aliasing") #compiler_{degrees,radians,function_argument2} use equality comparison of floats, compiler_long_bitcast uses aliasing
-   set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
-   set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
-   set (CMAKE_CXX_FLAGS_MINSIZEREL     "-Os -DNDEBUG -DGBE_DEBUG=0")
diff --git a/srcpkgs/beignet/patches/llvm11.patch b/srcpkgs/beignet/patches/llvm11.patch
deleted file mode 100644
index 2c3a4278943c..000000000000
--- a/srcpkgs/beignet/patches/llvm11.patch
+++ /dev/null
@@ -1,937 +0,0 @@
-Source: Snektron
-
-There were a few changes required for LLVM 11:
-* llvm::StringRef requires .str(), implicit conversion was removed
-* llvm::CallSite was removed, but the required methods are available on llvm::CallInst
-* VectorTyID was split into FixedVectorTyID and ScalableVectorTyID, FixedVectorTyID was used
-* CallInst::getCalledValue() was renamed to CallInst::getCalledOperand()
-* Implicit conversion from MaybeAlign to Align was removed, so MaybeAlign::valueOrOne was used instead.
-
---- a/backend/src/llvm/StripAttributes.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/StripAttributes.cpp	2020-11-09 19:04:19.641897141 +0100
-@@ -107,9 +107,8 @@
-        BB != E; ++BB) {
-     for (BasicBlock::iterator Inst = BB->begin(), E = BB->end();
-          Inst != E; ++Inst) {
--      CallSite Call(&*Inst);
--      if (Call)
--        Call.setCallingConv(CallingConv::C);
-+      if (CallInst* callInst = dyn_cast<CallInst>(&*Inst))
-+        callInst->setCallingConv(CallingConv::C);
-     }
-   }
-
---- a/backend/src/llvm/llvm_bitcode_link.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_bitcode_link.cpp	2020-11-09 17:04:09.633753428 +0100
-@@ -98,7 +98,7 @@
-         if (callFunc && callFunc->getIntrinsicID() != 0)
-           continue;
-
--        std::string fnName = call->getCalledValue()->stripPointerCasts()->getName();
-+        std::string fnName = call->getCalledOperand()->stripPointerCasts()->getName().str();
-
-         if (!MFS.insert(fnName).second) {
-           continue;
---- a/backend/src/llvm/llvm_device_enqueue.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_device_enqueue.cpp	2020-11-09 19:01:49.201915008 +0100
-@@ -45,7 +45,7 @@
-       return NULL;
-
-     /* This is a fake, to check the function bitcast is for block or not */
--    std::string fnName = Fn->getName();
-+    std::string fnName = Fn->getName().str();
-     if(fnName.find("_invoke") == std::string::npos)
-       return NULL;
-
-@@ -119,18 +119,18 @@
-       ParamTys.push_back(ty);
-     }
-     FunctionType* NewFT = FunctionType::get(Fn->getReturnType(), ParamTys, false);
--    Function* NewFn = Function::Create(NewFT, Function::ExternalLinkage, Fn->getName());
-+    Function* NewFn = Function::Create(NewFT, Function::ExternalLinkage, Fn->getName().str());
-     SmallVector<ReturnInst*, 8> Returns;
-
-     Function::arg_iterator NewFnArgIt = NewFn->arg_begin();
-     for (Function::arg_iterator I = Fn->arg_begin(), E = Fn->arg_end(); I != E; ++I) {
--      std::string ArgName = I->getName();
-+      std::string ArgName = I->getName().str();
-       NewFnArgIt->setName(ArgName);
-       VMap[&*I] = &(*NewFnArgIt++);
-     }
-     CloneFunctionInto(NewFn, Fn, VMap, /*ModuleLevelChanges=*/true, Returns);
-
--    Fn->setName("__d" + Fn->getName());
-+    Fn->setName("__d" + Fn->getName().str());
-     mod->getFunctionList().push_back(NewFn);
-     //mod->getOrInsertFunction(NewFn->getName(), NewFn->getFunctionType(),
-     //                         NewFn->getAttributes());
-@@ -147,7 +147,7 @@
-       argTypeNames.push_back(llvm::MDString::get(Context, "char*"));
-       argBaseTypeNames.push_back(llvm::MDString::get(Context, "char*"));
-       argTypeQuals.push_back(llvm::MDString::get(Context, ""));
--      argNames.push_back(llvm::MDString::get(Context, I->getName()));
-+      argNames.push_back(llvm::MDString::get(Context, I->getName().str()));
-     }
-
-     //If run to here, llvm version always > 3.9, add the version check just for build.
-@@ -198,7 +198,7 @@
-            * invoke pointer to store the index in the unit's block functions index.*/
-           Function *Fn = dyn_cast<Function>(bt->getOperand(0));
-
--          std::string fnName = Fn->getName();
-+          std::string fnName = Fn->getName().str();
-           int index = -1;
-           for(size_t i=0; i<unit.blockFuncs.size(); i++) {
-             if(unit.blockFuncs[i] == fnName) {
-@@ -241,7 +241,7 @@
-             //unnamed call function, parse the use to find the define of called function
-             SmallVector<Value*, 16> args(CI->op_begin(), CI->op_end()-1);
-
--            Value *v = CI->getCalledValue();
-+            Value *v = CI->getCalledOperand();
-             BitCastInst* bt = dyn_cast<BitCastInst>(v);
-             if(bt == NULL)
-               continue;
-@@ -316,7 +316,7 @@
-                   ConstantExpr *expr = dyn_cast<ConstantExpr>(c->getOperand(3));
-                   BitCastInst *bt = dyn_cast<BitCastInst>(expr->getAsInstruction());
-                   Function* f = dyn_cast<Function>(bt->getOperand(0));
--                  blocks[v] = f->getName();
-+                  blocks[v] = f->getName().str();
-                 }
-               }
-
-@@ -332,7 +332,7 @@
-           } else {
-             //handle enqueue_kernel function call
-             Function *fn = CI->getCalledFunction();
--            if (fn->getName().find("enqueue_kernel") == std::string::npos)
-+            if (fn->getName().str().find("enqueue_kernel") == std::string::npos)
-               continue;
-
-             //block parameter's index, 3 or 6
-@@ -361,7 +361,7 @@
-                   ConstantExpr *expr = dyn_cast<ConstantExpr>(c->getOperand(3));
-                   BitCastInst *bt = dyn_cast<BitCastInst>(expr->getAsInstruction());
-                   Function* f = dyn_cast<Function>(bt->getOperand(0));
--                  blocks[v] = f->getName();
-+                  blocks[v] = f->getName().str();
-                 }
-               }
-             } else if(isa<AllocaInst>(block)) {
---- a/backend/src/llvm/llvm_gen_backend.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_gen_backend.cpp	2020-11-09 18:33:50.919114327 +0100
-@@ -376,7 +376,7 @@
-           GBE_ASSERT(index == 0);
-           return this->_newScalar(value, key, type, index, uniform);
-           break;
--        case Type::VectorTyID:
-+        case Type::FixedVectorTyID:
-         {
-           auto vectorType = cast<VectorType>(type);
-           auto elementType = vectorType->getElementType();
-@@ -743,20 +743,20 @@
- #undef DECL_VISIT_FN
-
-     // Emit rounding instructions from gen native function
--    void emitRoundingCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode);
-+    void emitRoundingCallInst(CallInst &I, ir::Opcode opcode);
-     // Emit unary instructions from gen native function
--    void emitUnaryCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode, ir::Type = ir::TYPE_FLOAT);
-+    void emitUnaryCallInst(CallInst &I, ir::Opcode opcode, ir::Type = ir::TYPE_FLOAT);
-     // Emit unary instructions from gen native function
--    void emitAtomicInst(CallInst &I, CallSite &CS, ir::AtomicOps opcode);
-+    void emitAtomicInst(CallInst &I, ir::AtomicOps opcode);
-     // Emit workgroup instructions
--    void emitWorkGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode);
-+    void emitWorkGroupInst(CallInst &I, ir::WorkGroupOps opcode);
-     // Emit subgroup instructions
--    void emitSubGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode);
-+    void emitSubGroupInst(CallInst &I, ir::WorkGroupOps opcode);
-     // Emit subgroup instructions
--    void emitBlockReadWriteMemInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
--    void emitBlockReadWriteImageInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-+    void emitBlockReadWriteMemInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-+    void emitBlockReadWriteImageInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-
--    uint8_t appendSampler(CallSite::arg_iterator AI);
-+    uint8_t appendSampler(User::op_iterator AI);
-     uint8_t getImageID(CallInst &I);
-
-     // These instructions are not supported at all
-@@ -1320,13 +1320,13 @@
- #endif
-
-       if(typeNameNode) {
--        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
-+        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-       }
-       if(typeBaseNameNode) {
--        llvmInfo.typeBaseName= (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString();
-+        llvmInfo.typeBaseName= (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString().str();
-       }
--      llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
--      llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString();
-+      llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-+      llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString().str();
-       bool isImage = llvmInfo.isImageType();
-       bool isPipe = llvmInfo.isPipeType();
-       if (I->getType()->isPointerTy() || isImage || isPipe) {
-@@ -1531,7 +1531,7 @@
-             EltTy = getEltType(EltTy, TypeIndex);
-         }
-
--        ir::Constant cc = unit.getConstantSet().getConstant(pointer->getName());
-+        ir::Constant cc = unit.getConstantSet().getConstant(pointer->getName().str());
-         unsigned int defOffset = cc.getOffset();
-         relocs.push_back(ir::RelocEntry(offset, defOffset + constantOffset));
-
-@@ -1546,7 +1546,7 @@
-       return;
-     }
-     if (isa<GlobalVariable>(c)) {
--      ir::Constant cc = unit.getConstantSet().getConstant(c->getName());
-+      ir::Constant cc = unit.getConstantSet().getConstant(c->getName().str());
-       unsigned int defOffset = cc.getOffset();
-
-       relocs.push_back(ir::RelocEntry(offset, defOffset));
-@@ -1609,7 +1609,7 @@
-           }
-           break;
-         }
--      case Type::TypeID::VectorTyID:
-+      case Type::TypeID::FixedVectorTyID:
-         {
-           const ConstantDataSequential *cds = dyn_cast<ConstantDataSequential>(c);
-           const VectorType *vecTy = cast<VectorType>(type);
-@@ -1936,7 +1936,7 @@
-       case Type::PointerTyID:
-         regTranslator.newScalar(value, key, 0, uniform);
-         break;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         auto vectorType = cast<VectorType>(type);
-         const uint32_t elemNum = vectorType->getNumElements();
-@@ -2395,7 +2395,7 @@
- #endif
-         }
-         if(typeNameNode) {
--          llvmInfo.typeName = (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
-+          llvmInfo.typeName = (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-           //LLVM 3.9 image's type name include access qual, don't match OpenCL spec, erase them.
-           std::vector<std::string> filters = {"__read_only ", "__write_only "};
-           for (uint32_t i = 0; i < filters.size(); i++) {
-@@ -2406,16 +2406,16 @@
-           }
-         }
-         if(typeBaseNameNode){
--          llvmInfo.typeBaseName = (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString();
-+          llvmInfo.typeBaseName = (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString().str();
-         }
-         if(accessQualNode) {
--          llvmInfo.accessQual = (cast<MDString>(accessQualNode->getOperand(opID)))->getString();
-+          llvmInfo.accessQual = (cast<MDString>(accessQualNode->getOperand(opID)))->getString().str();
-         }
-         if(typeQualNode) {
--          llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString();
-+          llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString().str();
-         }
-         if(argNameNode){
--          llvmInfo.argName = (cast<MDString>(argNameNode->getOperand(opID)))->getString();
-+          llvmInfo.argName = (cast<MDString>(argNameNode->getOperand(opID)))->getString().str();
-         }
-
-         // function arguments are uniform values.
-@@ -3010,7 +3010,7 @@
-         } else {
-           this->newRegister(const_cast<GlobalVariable*>(&v));
-           ir::Register reg = regTranslator.getScalar(const_cast<GlobalVariable*>(&v), 0);
--          ir::Constant &con = unit.getConstantSet().getConstant(v.getName());
-+          ir::Constant &con = unit.getConstantSet().getConstant(v.getName().str());
-           if (!legacyMode) {
-             ir::Register regload = ctx.reg(getFamily(getType(ctx, v.getType())));
-             ctx.LOADI(getType(ctx, v.getType()), regload, ctx.newIntegerImmediate(con.getOffset(), getType(ctx, v.getType())));
-@@ -3212,7 +3212,7 @@
-         GBE_ASSERTM(false, "Unsupported calling convention");
-     }
-
--    ctx.startFunction(F.getName());
-+    ctx.startFunction(F.getName().str());
-
-     ir::Function &fn = ctx.getFunction();
-     this->regTranslator.clear();
-@@ -3810,9 +3810,9 @@
-
-   void GenWriter::regAllocateCallInst(CallInst &I) {
-     Value *dst = &I;
--    Value *Callee = I.getCalledValue();
-+    Value *Callee = I.getCalledOperand();
-     GBE_ASSERT(ctx.getFunction().getProfile() == ir::PROFILE_OCL);
--    GBE_ASSERT(isa<InlineAsm>(I.getCalledValue()) == false);
-+    GBE_ASSERT(isa<InlineAsm>(I.getCalledOperand()) == false);
-     if(I.getNumArgOperands()) GBE_ASSERT(I.hasStructRetAttr() == false);
-
-     // We only support a small number of intrinsics right now
-@@ -3870,7 +3870,7 @@
-       }
-     }
-     // Get the name of the called function and handle it
--    const std::string fnName = Callee->stripPointerCasts()->getName();
-+    const std::string fnName = Callee->stripPointerCasts()->getName().str();
-     auto genIntrinsicID = intrinsicMap.find(fnName);
-     switch (genIntrinsicID) {
-       case GEN_OCL_GET_GROUP_ID0:
-@@ -4166,7 +4166,7 @@
-     };
-   }
-
--  void GenWriter::emitRoundingCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode) {
-+  void GenWriter::emitRoundingCallInst(CallInst &I, ir::Opcode opcode) {
-     if (I.getType()->isHalfTy()) {
-       const ir::Register src = this->getRegister(I.getOperand(0));
-       const ir::Register srcFloat = ctx.reg(ir::FAMILY_DWORD);
-@@ -4177,14 +4177,14 @@
-       ctx.F32TO16(ir::TYPE_U16, ir::TYPE_FLOAT, dst, dstFloat);
-     } else {
-       GBE_ASSERT(I.getType()->isFloatTy());
--      this->emitUnaryCallInst(I,CS,opcode);
-+      this->emitUnaryCallInst(I,opcode);
-     }
-   }
-
--  void GenWriter::emitUnaryCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
-+  void GenWriter::emitUnaryCallInst(CallInst &I, ir::Opcode opcode, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--    CallSite::arg_iterator AE = CS.arg_end();
-+    User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-     GBE_ASSERT(AI != AE);
-     const ir::Register src = this->getRegister(*AI);
-@@ -4293,9 +4293,9 @@
-     this->emitAtomicInstHelper(opcode, type, dst, llvmPtr, payloadTuple);
-   }
-
--  void GenWriter::emitAtomicInst(CallInst &I, CallSite &CS, ir::AtomicOps opcode) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitAtomicInst(CallInst &I, ir::AtomicOps opcode) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-     Value *llvmPtr = *AI;
-     ir::AddressSpace addrSpace = addressSpaceLLVMToGen(llvmPtr->getType()->getPointerAddressSpace());
-@@ -4348,7 +4348,7 @@
-     }
-   }
-
--  void GenWriter::emitWorkGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode) {
-+  void GenWriter::emitWorkGroupInst(CallInst &I, ir::WorkGroupOps opcode) {
-     ir::Function &f = ctx.getFunction();
-
-     if (f.getwgBroadcastSLM() < 0 && opcode == ir::WORKGROUP_OP_BROADCAST) {
-@@ -4378,8 +4378,8 @@
-       GBE_ASSERT(f.gettidMapSLM() >= 0);
-     }
-
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     if (opcode == ir::WORKGROUP_OP_ALL || opcode == ir::WORKGROUP_OP_ANY) {
-@@ -4391,14 +4391,14 @@
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], 3);
-       ctx.WORKGROUP(opcode, (uint32_t)f.gettidMapSLM(), getRegister(&I), srcTuple, 3, ir::TYPE_S32);
-     } else if (opcode == ir::WORKGROUP_OP_BROADCAST) {
--      int argNum = CS.arg_size();
-+      int argNum = I.arg_size();
-       std::vector<ir::Register> src(argNum);
-       for (int i = 0; i < argNum; i++) {
-         src[i] = this->getRegister(*(AI++));
-       }
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], argNum);
-       ctx.WORKGROUP(ir::WORKGROUP_OP_BROADCAST, (uint32_t)f.getwgBroadcastSLM(), getRegister(&I), srcTuple, argNum,
--          getType(ctx, (*CS.arg_begin())->getType()));
-+          getType(ctx, (*I.arg_begin())->getType()));
-     } else {
-       ConstantInt *sign = dyn_cast<ConstantInt>(AI);
-       GBE_ASSERT(sign);
-@@ -4423,9 +4423,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitSubGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitSubGroupInst(CallInst &I, ir::WorkGroupOps opcode) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     if (opcode == ir::WORKGROUP_OP_ALL || opcode == ir::WORKGROUP_OP_ANY) {
-@@ -4435,7 +4435,7 @@
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], 1);
-       ctx.SUBGROUP(opcode, getRegister(&I), srcTuple, 1, ir::TYPE_S32);
-     } else if (opcode == ir::WORKGROUP_OP_BROADCAST) {
--      int argNum = CS.arg_size();
-+      int argNum = I.arg_size();
-       GBE_ASSERT(argNum == 2);
-       std::vector<ir::Register> src(argNum);
-       for (int i = 0; i < argNum; i++) {
-@@ -4443,7 +4443,7 @@
-       }
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], argNum);
-       ctx.SUBGROUP(ir::WORKGROUP_OP_BROADCAST, getRegister(&I), srcTuple, argNum,
--          getType(ctx, (*CS.arg_begin())->getType()));
-+          getType(ctx, (*I.arg_begin())->getType()));
-     } else {
-       ConstantInt *sign = dyn_cast<ConstantInt>(AI);
-       GBE_ASSERT(sign);
-@@ -4466,9 +4466,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitBlockReadWriteMemInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitBlockReadWriteMemInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     Value *llvmPtr = *(AI++);
-@@ -4522,9 +4522,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitBlockReadWriteImageInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitBlockReadWriteImageInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     const uint8_t imageID = getImageID(I);
-@@ -4557,7 +4557,7 @@
-
-   /* append a new sampler. should be called before any reference to
-    * a sampler_t value. */
--  uint8_t GenWriter::appendSampler(CallSite::arg_iterator AI) {
-+  uint8_t GenWriter::appendSampler(User::op_iterator AI) {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-     CallInst *TC = dyn_cast<CallInst>(*AI);
-     Constant *CPV = TC ? dyn_cast<Constant>(TC->getOperand(0)) : NULL;
-@@ -4595,10 +4595,9 @@
-         const ir::Function &fn = ctx.getFunction();
-
-         // Get the function arguments
--        CallSite CS(&I);
--        CallSite::arg_iterator AI = CS.arg_begin();
-+        User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--        CallSite::arg_iterator AE = CS.arg_end();
-+        User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-         switch (F->getIntrinsicID()) {
-           case Intrinsic::stacksave:
-@@ -4764,17 +4763,17 @@
-             ctx.MAD(srcType, dst, src0, src1, src2);
-           }
-           break;
--          case Intrinsic::sqrt: this->emitUnaryCallInst(I,CS,ir::OP_SQR); break;
--          case Intrinsic::ceil: this->emitRoundingCallInst(I,CS,ir::OP_RNDU); break;
--          case Intrinsic::trunc: this->emitRoundingCallInst(I,CS,ir::OP_RNDZ); break;
--          case Intrinsic::rint: this->emitRoundingCallInst(I,CS,ir::OP_RNDE); break;
--          case Intrinsic::floor: this->emitRoundingCallInst(I,CS,ir::OP_RNDD); break;
--          case Intrinsic::sin: this->emitUnaryCallInst(I,CS,ir::OP_SIN); break;
--          case Intrinsic::cos: this->emitUnaryCallInst(I,CS,ir::OP_COS); break;
--          case Intrinsic::log2: this->emitUnaryCallInst(I,CS,ir::OP_LOG); break;
--          case Intrinsic::exp2: this->emitUnaryCallInst(I,CS,ir::OP_EXP); break;
-+          case Intrinsic::sqrt: this->emitUnaryCallInst(I,ir::OP_SQR); break;
-+          case Intrinsic::ceil: this->emitRoundingCallInst(I,ir::OP_RNDU); break;
-+          case Intrinsic::trunc: this->emitRoundingCallInst(I,ir::OP_RNDZ); break;
-+          case Intrinsic::rint: this->emitRoundingCallInst(I,ir::OP_RNDE); break;
-+          case Intrinsic::floor: this->emitRoundingCallInst(I,ir::OP_RNDD); break;
-+          case Intrinsic::sin: this->emitUnaryCallInst(I,ir::OP_SIN); break;
-+          case Intrinsic::cos: this->emitUnaryCallInst(I,ir::OP_COS); break;
-+          case Intrinsic::log2: this->emitUnaryCallInst(I,ir::OP_LOG); break;
-+          case Intrinsic::exp2: this->emitUnaryCallInst(I,ir::OP_EXP); break;
-           case Intrinsic::bswap:
--            this->emitUnaryCallInst(I,CS,ir::OP_BSWAP, getUnsignedType(ctx, I.getType())); break;
-+            this->emitUnaryCallInst(I,ir::OP_BSWAP, getUnsignedType(ctx, I.getType())); break;
-           case Intrinsic::pow:
-           {
-             const ir::Register src0 = this->getRegister(*AI); ++AI;
-@@ -4794,21 +4793,20 @@
-         }
-       } else {
-         // Get the name of the called function and handle it
--        Value *Callee = I.getCalledValue();
--        const std::string fnName = Callee->stripPointerCasts()->getName();
-+        Value *Callee = I.getCalledOperand();
-+        const std::string fnName = Callee->stripPointerCasts()->getName().str();
-         auto genIntrinsicID = intrinsicMap.find(fnName);
-
-         // Get the function arguments
--        CallSite CS(&I);
--        CallSite::arg_iterator AI = CS.arg_begin();
-+        User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--        CallSite::arg_iterator AE = CS.arg_end();
-+        User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-
-         switch (genIntrinsicID) {
--          case GEN_OCL_FBH: this->emitUnaryCallInst(I,CS,ir::OP_FBH, ir::TYPE_U32); break;
--          case GEN_OCL_FBL: this->emitUnaryCallInst(I,CS,ir::OP_FBL, ir::TYPE_U32); break;
--          case GEN_OCL_CBIT: this->emitUnaryCallInst(I,CS,ir::OP_CBIT, getUnsignedType(ctx, (*AI)->getType())); break;
-+          case GEN_OCL_FBH: this->emitUnaryCallInst(I,ir::OP_FBH, ir::TYPE_U32); break;
-+          case GEN_OCL_FBL: this->emitUnaryCallInst(I,ir::OP_FBL, ir::TYPE_U32); break;
-+          case GEN_OCL_CBIT: this->emitUnaryCallInst(I,ir::OP_CBIT, getUnsignedType(ctx, (*AI)->getType())); break;
-           case GEN_OCL_ABS:
-           {
-             const ir::Register src = this->getRegister(*AI);
-@@ -4915,8 +4913,8 @@
-             ctx.REGION(dst, src, x.getIntegerValue());
-             break;
-           }
--          case GEN_OCL_RSQ: this->emitUnaryCallInst(I,CS,ir::OP_RSQ); break;
--          case GEN_OCL_RCP: this->emitUnaryCallInst(I,CS,ir::OP_RCP); break;
-+          case GEN_OCL_RSQ: this->emitUnaryCallInst(I,ir::OP_RSQ); break;
-+          case GEN_OCL_RCP: this->emitUnaryCallInst(I,ir::OP_RCP); break;
-           case GEN_OCL_FORCE_SIMD8: ctx.setSimdWidth(8); break;
-           case GEN_OCL_FORCE_SIMD16: ctx.setSimdWidth(16); break;
-           case GEN_OCL_LBARRIER: ctx.SYNC(ir::syncLocalBarrier); break;
-@@ -4947,31 +4945,31 @@
-             break;
-           }
-           case GEN_OCL_ATOMIC_ADD0:
--          case GEN_OCL_ATOMIC_ADD1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_ADD); break;
-+          case GEN_OCL_ATOMIC_ADD1: this->emitAtomicInst(I,ir::ATOMIC_OP_ADD); break;
-           case GEN_OCL_ATOMIC_SUB0:
--          case GEN_OCL_ATOMIC_SUB1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_SUB); break;
-+          case GEN_OCL_ATOMIC_SUB1: this->emitAtomicInst(I,ir::ATOMIC_OP_SUB); break;
-           case GEN_OCL_ATOMIC_AND0:
--          case GEN_OCL_ATOMIC_AND1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_AND); break;
-+          case GEN_OCL_ATOMIC_AND1: this->emitAtomicInst(I,ir::ATOMIC_OP_AND); break;
-           case GEN_OCL_ATOMIC_OR0:
--          case GEN_OCL_ATOMIC_OR1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_OR); break;
-+          case GEN_OCL_ATOMIC_OR1: this->emitAtomicInst(I,ir::ATOMIC_OP_OR); break;
-           case GEN_OCL_ATOMIC_XOR0:
--          case GEN_OCL_ATOMIC_XOR1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_XOR); break;
-+          case GEN_OCL_ATOMIC_XOR1: this->emitAtomicInst(I,ir::ATOMIC_OP_XOR); break;
-           case GEN_OCL_ATOMIC_XCHG0:
--          case GEN_OCL_ATOMIC_XCHG1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_XCHG); break;
-+          case GEN_OCL_ATOMIC_XCHG1: this->emitAtomicInst(I,ir::ATOMIC_OP_XCHG); break;
-           case GEN_OCL_ATOMIC_INC0:
--          case GEN_OCL_ATOMIC_INC1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_INC); break;
-+          case GEN_OCL_ATOMIC_INC1: this->emitAtomicInst(I,ir::ATOMIC_OP_INC); break;
-           case GEN_OCL_ATOMIC_DEC0:
--          case GEN_OCL_ATOMIC_DEC1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_DEC); break;
-+          case GEN_OCL_ATOMIC_DEC1: this->emitAtomicInst(I,ir::ATOMIC_OP_DEC); break;
-           case GEN_OCL_ATOMIC_UMIN0:
--          case GEN_OCL_ATOMIC_UMIN1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_UMIN); break;
-+          case GEN_OCL_ATOMIC_UMIN1: this->emitAtomicInst(I,ir::ATOMIC_OP_UMIN); break;
-           case GEN_OCL_ATOMIC_UMAX0:
--          case GEN_OCL_ATOMIC_UMAX1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_UMAX); break;
-+          case GEN_OCL_ATOMIC_UMAX1: this->emitAtomicInst(I,ir::ATOMIC_OP_UMAX); break;
-           case GEN_OCL_ATOMIC_IMIN0:
--          case GEN_OCL_ATOMIC_IMIN1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_IMIN); break;
-+          case GEN_OCL_ATOMIC_IMIN1: this->emitAtomicInst(I,ir::ATOMIC_OP_IMIN); break;
-           case GEN_OCL_ATOMIC_IMAX0:
--          case GEN_OCL_ATOMIC_IMAX1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_IMAX); break;
-+          case GEN_OCL_ATOMIC_IMAX1: this->emitAtomicInst(I,ir::ATOMIC_OP_IMAX); break;
-           case GEN_OCL_ATOMIC_CMPXCHG0:
--          case GEN_OCL_ATOMIC_CMPXCHG1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_CMPXCHG); break;
-+          case GEN_OCL_ATOMIC_CMPXCHG1: this->emitAtomicInst(I,ir::ATOMIC_OP_CMPXCHG); break;
-           case GEN_OCL_GET_IMAGE_WIDTH:
-           case GEN_OCL_GET_IMAGE_HEIGHT:
-           case GEN_OCL_GET_IMAGE_DEPTH:
-@@ -5429,48 +5427,48 @@
-             ctx.WAIT();
-             break;
-           }
--          case GEN_OCL_WORK_GROUP_ALL: this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_ALL); break;
--          case GEN_OCL_WORK_GROUP_ANY: this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_ANY); break;
-+          case GEN_OCL_WORK_GROUP_ALL: this->emitWorkGroupInst(I, ir::WORKGROUP_OP_ALL); break;
-+          case GEN_OCL_WORK_GROUP_ANY: this->emitWorkGroupInst(I, ir::WORKGROUP_OP_ANY); break;
-           case GEN_OCL_WORK_GROUP_BROADCAST:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_BROADCAST); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_BROADCAST); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_ADD); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_MAX); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_MIN); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-           case GEN_OCL_SUB_GROUP_BROADCAST:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_BROADCAST); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_BROADCAST); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_ADD); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_MAX); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_MIN); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-           case GEN_OCL_LRP:
-           {
-             const ir::Register dst  = this->getRegister(&I);
-@@ -5484,69 +5482,69 @@
-             break;
-           }
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, false, 1); break;
-+            this->emitBlockReadWriteMemInst(I, false, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, false, 2); break;
-+            this->emitBlockReadWriteMemInst(I, false, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, false, 4); break;
-+            this->emitBlockReadWriteMemInst(I, false, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, false, 8); break;
-+            this->emitBlockReadWriteMemInst(I, false, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, true, 1); break;
-+            this->emitBlockReadWriteMemInst(I, true, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, true, 2); break;
-+            this->emitBlockReadWriteMemInst(I, true, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, true, 4); break;
-+            this->emitBlockReadWriteMemInst(I, true, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, true, 8); break;
-+            this->emitBlockReadWriteMemInst(I, true, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, false, 1); break;
-+            this->emitBlockReadWriteImageInst(I, false, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, false, 2); break;
-+            this->emitBlockReadWriteImageInst(I, false, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, false, 4); break;
-+            this->emitBlockReadWriteImageInst(I, false, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, false, 8); break;
-+            this->emitBlockReadWriteImageInst(I, false, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, true, 1); break;
-+            this->emitBlockReadWriteImageInst(I, true, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, true, 2); break;
-+            this->emitBlockReadWriteImageInst(I, true, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, true, 4); break;
-+            this->emitBlockReadWriteImageInst(I, true, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, true, 8); break;
-+            this->emitBlockReadWriteImageInst(I, true, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, false, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, false, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, false, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, false, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, true, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, true, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, true, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, true, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, false, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, false, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, false, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, false, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, true, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, true, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, true, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, true, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 8, ir::TYPE_U16); break;
-           case GEN_OCL_GET_PIPE:
-           case GEN_OCL_MAKE_RID:
-           case GEN_OCL_GET_RID:
---- a/backend/src/llvm/llvm_includes.hpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_includes.hpp	2020-11-09 19:00:09.955926795 +0100
-@@ -103,7 +103,6 @@
-
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
- #include "llvm/IR/Mangler.h"
--#include "llvm/IR/CallSite.h"
- #include "llvm/IR/CFG.h"
- #include "llvm/IR/InstVisitor.h"
- #include "llvm/IR/IRPrintingPasses.h"
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-11-09 19:10:37.141852308 +0100
-@@ -160,7 +160,7 @@
-     Value *vecPtr = Builder.CreateBitCast(ld->getPointerOperand(),
-                                         PointerType::get(vecTy, addrSpace));
-     LoadInst *vecValue = Builder.CreateLoad(vecPtr);
--    vecValue->setAlignment(align);
-+    vecValue->setAlignment(align.valueOrOne());
-
-     for (unsigned i = 0; i < size; ++i) {
-       Value *S = Builder.CreateExtractElement(vecValue, Builder.getInt32(i));
-@@ -251,7 +251,7 @@
-       return;
-     Value *newPtr = Builder.CreateBitCast(stPointer, PointerType::get(vecTy, addrSpace));
-     StoreInst *newST = Builder.CreateStore(parent, newPtr);
--    newST->setAlignment(align);
-+    newST->setAlignment(align.valueOrOne());
-   }
-
-   // Find the safe iterator we can point to. If reorder happens, we need to
---- a/backend/src/llvm/llvm_passes.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_passes.cpp	2020-11-09 18:48:55.997006837 +0100
-@@ -95,7 +95,7 @@
-   {
-     switch (Ty->getTypeID()) {
-       case Type::VoidTyID: NOT_SUPPORTED;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         const VectorType* VecTy = cast<VectorType>(Ty);
-         uint32_t elemNum = VecTy->getNumElements();
-@@ -138,7 +138,7 @@
-       case Type::HalfTyID:    return 16;
-       case Type::FloatTyID:   return 32;
-       case Type::DoubleTyID:  return 64;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         const VectorType* VecTy = cast<VectorType>(Ty);
-         uint32_t numElem = VecTy->getNumElements();
-@@ -184,10 +184,12 @@
-     Type *elementType = NULL;
-     if (PointerType* ptrType = dyn_cast<PointerType>(eltTy))
-       elementType = ptrType->getElementType();
--    else if(SequentialType * seqType = dyn_cast<SequentialType>(eltTy))
--      elementType = seqType->getElementType();
--    else if(CompositeType * compTy= dyn_cast<CompositeType>(eltTy))
--      elementType = compTy->getTypeAtIndex(index);
-+    else if (ArrayType * arrType = dyn_cast<ArrayType>(eltTy))
-+      elementType = arrType->getElementType();
-+    else if(VectorType * vecType = dyn_cast<VectorType>(eltTy))
-+      elementType = vecType->getElementType();
-+    else if(StructType * structType = dyn_cast<StructType>(eltTy))
-+      elementType = structType->getTypeAtIndex(index);
-     GBE_ASSERT(elementType);
-     return elementType;
-   }
---- a/backend/src/llvm/llvm_printf_parser.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_printf_parser.cpp	2020-11-09 18:57:52.618943105 +0100
-@@ -323,8 +323,7 @@
-
-   bool PrintfParser::parseOnePrintfInstruction(CallInst * call)
-   {
--    CallSite CS(call);
--    CallSite::arg_iterator CI_FMT = CS.arg_begin();
-+    User::op_iterator CI_FMT = call->arg_begin();
-     int param_num = 0;
-
-     llvm::Constant* arg0 = dyn_cast<llvm::ConstantExpr>(*CI_FMT);
-@@ -341,7 +340,7 @@
-       return false;
-     }
-
--    std::string fmt = fmt_arg->getAsCString();
-+    std::string fmt = fmt_arg->getAsCString().str();
-     if (fmt.size() == 0)
-       return false;
-
-@@ -437,8 +436,8 @@
-         if ( callFunc->getIntrinsicID() != 0)
-           continue;
-
--        Value *Callee = call->getCalledValue();
--        const std::string fnName = Callee->getName();
-+        Value *Callee = call->getCalledOperand();
-+        const std::string fnName = Callee->getName().str();
-
-         if (fnName != "__gen_ocl_printf_stub" && fnName != "__gen_ocl_puts_stub")
-           continue;
-@@ -582,7 +581,7 @@
-             if (!fmt_arg || !fmt_arg->isCString()) {
-               return false;
-             }
--            slot.state.str = fmt_arg->getAsCString();
-+            slot.state.str = fmt_arg->getAsCString().str();
-             return true;
-           }
-           case PRINTF_CONVERSION_P: {
-@@ -595,10 +594,10 @@
-
-         break;
-
--      case Type::VectorTyID: {
--        Type* vect_type = arg->getType();
--        Type* elt_type = vect_type->getVectorElementType();
--        int vec_num = vect_type->getVectorNumElements();
-+      case Type::FixedVectorTyID: {
-+        VectorType* vect_type = dyn_cast<VectorType>(arg->getType());
-+        Type* elt_type = vect_type->getElementType();
-+        int vec_num = vect_type->getNumElements();
-         bool sign = false;
-
-         if (vec_num != slot.state.vector_n) {
---- a/backend/src/llvm/llvm_profiling.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_profiling.cpp	2020-11-09 18:59:50.120929150 +0100
-@@ -35,7 +35,6 @@
- #include "llvm/IR/IRBuilder.h"
-
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
--#include "llvm/IR/CallSite.h"
- #include "llvm/IR/CFG.h"
- #else
- #include "llvm/Support/CallSite.h"
---- a/backend/src/llvm/llvm_sampler_fix.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp	2020-11-09 17:01:09.407774832 +0100
-@@ -45,8 +45,8 @@
-     bool visitCallInst(CallInst *I) {
-       if(!I)
-         return false;
--      Value *Callee = I->getCalledValue();
--      const std::string fnName = Callee->getName();
-+      Value *Callee = I->getCalledOperand();
-+      const std::string fnName = Callee->getName().str();
-       bool changed = false;
-       Type *boolTy = IntegerType::get(I->getContext(), 1);
-       Type *i32Ty = IntegerType::get(I->getContext(), 32);
-@@ -59,7 +59,7 @@
-         Value *needFixVal;
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-         CallInst *init = dyn_cast<CallInst>(I->getOperand(0));
--        if (init && init->getCalledValue()->getName().compare("__translate_sampler_initializer"))
-+        if (init && init->getCalledOperand()->getName().compare("__translate_sampler_initializer"))
-         {
-           const ConstantInt *ci = dyn_cast<ConstantInt>(init->getOperand(0));
-           uint32_t samplerInt = ci->getZExtValue();
-@@ -113,7 +113,7 @@
-         Value *needFixVal;
-  #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-         CallInst *init = dyn_cast<CallInst>(I->getOperand(0));
--        if (init && init->getCalledValue()->getName().compare("__translate_sampler_initializer"))
-+        if (init && init->getCalledOperand()->getName().compare("__translate_sampler_initializer"))
-         {
-           const ConstantInt *ci = dyn_cast<ConstantInt>(init->getOperand(0));
-           uint32_t samplerInt = ci->getZExtValue();
---- a/backend/src/llvm/llvm_scalarize.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_scalarize.cpp	2020-11-09 18:51:16.888990104 +0100
-@@ -178,7 +178,7 @@
-       if(!type)
-         return type;
-       switch(type->getTypeID()) {
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       case Type::ArrayTyID:
-         return GetBasicType(type->getContainedType(0));
-       default:
-@@ -188,7 +188,7 @@
-     }
-
-     int GetComponentCount(const Type* type)  {
--      if (type && type->getTypeID() == Type::VectorTyID)
-+      if (type && type->getTypeID() == Type::FixedVectorTyID)
-         return llvm::dyn_cast<VectorType>(type)->getNumElements();
-       else
-         return 1;
-@@ -652,13 +652,12 @@
-           break;
-         }
-       } else {
--        Value *Callee = call->getCalledValue();
--        const std::string fnName = Callee->getName();
-+        Value *Callee = call->getCalledOperand();
-+        const std::string fnName = Callee->getName().str();
-         auto genIntrinsicID = intrinsicMap.find(fnName);
-
-         // Get the function arguments
--        CallSite CS(call);
--        CallSite::arg_iterator CI = CS.arg_begin() + 1;
-+        User::op_iterator CI = call->arg_begin() + 1;
-
-         switch (genIntrinsicID) {
-           case GEN_OCL_NOT_FOUND:
-@@ -729,7 +728,7 @@
-             extractFromVector(call);
-             break;
-           case GEN_OCL_PRINTF:
--            for (; CI != CS.arg_end(); ++CI)
-+            for (; CI != call->arg_end(); ++CI)
-               if ((*CI)->getType()->isVectorTy())
-                 *CI = InsertToVector(call, *CI);
-             break;
diff --git a/srcpkgs/beignet/patches/llvm12.patch b/srcpkgs/beignet/patches/llvm12.patch
deleted file mode 100644
index 6f8ab005c148..000000000000
--- a/srcpkgs/beignet/patches/llvm12.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-diff --git backend/src/llvm/ExpandLargeIntegers.cpp backend/src/llvm/ExpandLargeIntegers.cpp
-index 8515dc13..27080380 100644
---- a/backend/src/llvm/ExpandLargeIntegers.cpp
-+++ b/backend/src/llvm/ExpandLargeIntegers.cpp
-@@ -328,7 +328,7 @@ static Value *buildVectorOrScalar(ConversionState &State, IRBuilder<> &IRB, Smal
-     // splited, that's why these temporary values should be erased.
-     bool KeepInsert = isLegalBitSize(ElemTy->getPrimitiveSizeInBits() * ElemNo);
-     for (unsigned i = 0; i < ElemNo; ++i) {
--      Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo));
-+      Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo, false));
-       Value *idx = ConstantInt::get(IntTy, i);
-       vec = IRB.CreateInsertElement(tmp, Elements[i], idx);
-       if (!KeepInsert && !isa<Constant>(vec)) {
-@@ -373,7 +373,7 @@ static void unifyElementType(IRBuilder<> &IRB, SmallVector<Value *, 16> &Src, Sm
-       assert((Size % MinWidth) == 0);
- 
-       if (Size > MinWidth) {
--        VectorType *VecTy = VectorType::get(ElemTy, Size/MinWidth);
-+        VectorType *VecTy = VectorType::get(ElemTy, Size/MinWidth, false);
-         Value *Casted = IRB.CreateBitCast(Src[i], VecTy);
-         for (unsigned j = 0; j < Size/MinWidth; j++)
-           Dst.push_back(IRB.CreateExtractElement(Casted, ConstantInt::get(IntTy, j)));
-@@ -462,7 +462,7 @@ static void convertInstruction(Instruction *Inst, ConversionState &State,
-       unsigned ElemNo = Unified.size();
-       Type *ElemTy = Unified[0]->getType();
-       for (unsigned i = 0; i < ElemNo; ++i) {
--        Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo));
-+        Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo, false));
-         Value *idx = ConstantInt::get(IntTy, i);
-         vec = IRB.CreateInsertElement(tmp, Unified[i], idx);
-       }
-diff --git backend/src/llvm/llvm_gen_backend.cpp backend/src/llvm/llvm_gen_backend.cpp
-index c93d89cc..64d5b0e5 100644
---- a/backend/src/llvm/llvm_gen_backend.cpp
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -304,7 +304,7 @@ namespace gbe
-       TYPESIZEVEC(long,8)
-       TYPESIZEVEC(unsigned long,8)
-       else{
--        StructType *StrTy = M->getTypeByName("struct."+name);
-+        StructType *StrTy = StructType::getTypeByName(M->getContext(), "struct."+name);
-         if(StrTy)
-           return getTypeByteSize(unit,StrTy);
-       }
-diff --git backend/src/llvm/llvm_loadstore_optimization.cpp backend/src/llvm/llvm_loadstore_optimization.cpp
-index 5aa38bef..6b5c1bad 100644
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
-@@ -152,7 +152,7 @@ namespace gbe {
-     unsigned addrSpace = ld->getPointerAddressSpace();
-     // insert before first load
-     Builder.SetInsertPoint(ld);
--    VectorType *vecTy = VectorType::get(ld->getType(), size);
-+    VectorType *vecTy = VectorType::get(ld->getType(), size, false);
-     Value *vecPtr = Builder.CreateBitCast(ld->getPointerOperand(),
-                                         PointerType::get(vecTy, addrSpace));
-     LoadInst *vecValue = Builder.CreateLoad(vecPtr);
-@@ -236,7 +236,7 @@ namespace gbe {
-     Builder.SetInsertPoint(merged[size-1]);
- 
-     Type *dataTy = st->getValueOperand()->getType();
--    VectorType *vecTy = VectorType::get(dataTy, size);
-+    VectorType *vecTy = VectorType::get(dataTy, size, false);
-     Value * parent = UndefValue::get(vecTy);
-     for(unsigned i = 0; i < size; i++) {
-       parent = Builder.CreateInsertElement(parent, values[i], ConstantInt::get(IntegerType::get(st->getContext(), 32), i));
-diff --git backend/src/llvm/llvm_printf_parser.cpp backend/src/llvm/llvm_printf_parser.cpp
-index 6bb7c52a..af459cd2 100644
---- a/backend/src/llvm/llvm_printf_parser.cpp
-+++ b/backend/src/llvm/llvm_printf_parser.cpp
-@@ -630,7 +630,7 @@ error:
-             if (elt_type != elt_dst_type) {
-               Value *II = NULL;
-               for (int i = 0; i < vec_num; i++) {
--                Value *vec = II ? II : UndefValue::get(VectorType::get(elt_dst_type, vec_num));
-+                Value *vec = II ? II : UndefValue::get(VectorType::get(elt_dst_type, vec_num, false));
-                 Value *cv = ConstantInt::get(Type::getInt32Ty(elt_type->getContext()), i);
-                 Value *org = builder->CreateExtractElement(arg, cv);
-                 Value *cvt = builder->CreateIntCast(org, elt_dst_type, sign);
-@@ -658,7 +658,7 @@ error:
-             if (elt_type->getTypeID() != Type::FloatTyID) {
-               Value *II = NULL;
-               for (int i = 0; i < vec_num; i++) {
--                Value *vec = II ? II : UndefValue::get(VectorType::get(Type::getFloatTy(elt_type->getContext()), vec_num));
-+                Value *vec = II ? II : UndefValue::get(VectorType::get(Type::getFloatTy(elt_type->getContext()), vec_num, false));
-                 Value *cv = ConstantInt::get(Type::getInt32Ty(elt_type->getContext()), i);
-                 Value *org = builder->CreateExtractElement(arg, cv);
-                 Value* cvt  = builder->CreateFPCast(org, Type::getFloatTy(module->getContext()));
-diff --git backend/src/llvm/llvm_to_gen.cpp backend/src/llvm/llvm_to_gen.cpp
-index 7f7deffe..9e8ccc67 100644
---- a/backend/src/llvm/llvm_to_gen.cpp
-+++ b/backend/src/llvm/llvm_to_gen.cpp
-@@ -358,7 +358,7 @@ namespace gbe
-     passes.add(createScalarReplAggregatesPass(64, true, -1, -1, 64));
- #endif
-     passes.add(createLoadStoreOptimizationPass());
--    passes.add(createConstantPropagationPass());
-+    //passes.add(createConstantPropagationPass());
-     passes.add(createPromoteMemoryToRegisterPass());
-     if(optLevel > 0)
-       passes.add(createGVNPass());                 // Remove redundancies
-@@ -367,11 +367,11 @@ namespace gbe
-     passes.add(createScalarizePass());             // Expand all vector ops
-     passes.add(createExpandLargeIntegersPass());   // legalize large integer operation
-     passes.add(createInstructionCombiningPass());  // legalize will generate some silly instructions
--    passes.add(createConstantPropagationPass());   // propagate constant after scalarize/legalize
-+    //passes.add(createConstantPropagationPass());   // propagate constant after scalarize/legalize
-     passes.add(createExpandConstantExprPass());    // constant prop may generate ConstantExpr
-     passes.add(createPromoteIntegersPass());       // align integer size to power of two
-     passes.add(createRemoveGEPPass(unit));         // Constant prop may generate gep
--    passes.add(createDeadInstEliminationPass());   // Remove simplified instructions
-+    //passes.add(createDeadInstEliminationPass());   // Remove simplified instructions
-     passes.add(createCFGSimplificationPass());     // Merge & remove BBs
-     passes.add(createLowerSwitchPass());           // simplify cfg will generate switch-case instruction
-     if (profiling) {
diff --git a/srcpkgs/beignet/patches/musl.patch b/srcpkgs/beignet/patches/musl.patch
deleted file mode 100644
index cefafbb65588..000000000000
--- a/srcpkgs/beignet/patches/musl.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/backend/src/backend/gen/gen_mesa_disasm.c
-+++ b/backend/src/backend/gen/gen_mesa_disasm.c
-@@ -1137,7 +1137,7 @@ static uint32_t __conv_half_to_float(uint16_t h)
-       // Adjust mantissa so it's normalized (and keep
-       // track of exponent adjustment)
-       int e = -1;
--      uint m = i.mantissa;
-+      unsigned int m = i.mantissa;
-       do {
-         e++;
-         m <<= 1;
diff --git a/srcpkgs/beignet/template b/srcpkgs/beignet/template
deleted file mode 100644
index dce6bbb7ae24..000000000000
--- a/srcpkgs/beignet/template
+++ /dev/null
@@ -1,22 +0,0 @@
-# Template file for 'beignet'
-pkgname=beignet
-version=1.3.2
-revision=10
-archs="i686* x86_64*"
-wrksrc="Beignet-${version}-Source"
-build_style=cmake
-hostmakedepends="clang llvm pkg-config"
-makedepends="MesaLib-devel libedit-devel libffi-devel ocl-icd-devel zlib-devel
- libXfixes-devel"
-depends="ocl-icd"
-short_desc="Beignet GPGPU System for Intel GPUs"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://www.freedesktop.org/wiki/Software/Beignet/"
-distfiles="https://01.org/sites/default/files/${pkgname}-${version}-source.tar.gz"
-checksum=c555edba149de23243965a703f39f79fa06f15bcff5a3762b5544b0925010b43
-
-post_install() {
-	# remove CL headers, we do use opencl-headers instead.
-	rm -r ${DESTDIR}/usr/include
-}
diff --git a/srcpkgs/beignet/update b/srcpkgs/beignet/update
deleted file mode 100644
index ca41e0afe60c..000000000000
--- a/srcpkgs/beignet/update
+++ /dev/null
@@ -1 +0,0 @@
-site="https://01.org/beignet/downloads"
diff --git a/srcpkgs/removed-packages/template b/srcpkgs/removed-packages/template
index 0923c53cfc05..d59bd20f820c 100644
--- a/srcpkgs/removed-packages/template
+++ b/srcpkgs/removed-packages/template
@@ -1,7 +1,7 @@
 # Template file for 'removed-packages'
 pkgname=removed-packages
 version=0.1
-revision=69
+revision=70
 build_style=meta
 short_desc="Uninstalls packages removed from repository"
 maintainer="Piotr Wójcik <chocimier@tlen.pl>"
@@ -25,6 +25,7 @@ replaces="
  atom<=1.44.0_1
  avogadro-devel<=1.2.0_8
  avogadro<=1.2.0_8
+ beignet<=1.3.2_10
  bokken<=1.8_3
  bomi<=0.9.11_17
  burp-client<=1.4.40_13

From 97338ef68219b7d590bd10edc23bf882e6d2d9cb Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 21/29] ldc: rebuild for llvm14

---
 srcpkgs/ldc/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/ldc/template b/srcpkgs/ldc/template
index a27280dde3b8..e21bc6555e38 100644
--- a/srcpkgs/ldc/template
+++ b/srcpkgs/ldc/template
@@ -1,7 +1,7 @@
 # Template file for 'ldc'
 pkgname=ldc
 version=1.28.0
-revision=1
+revision=2
 wrksrc="ldc-${version}-src"
 build_style=cmake
 configure_args="

From 542f5c5ee5d187c465a6490af05c1133fe701723 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 22:31:25 +0200
Subject: [PATCH 22/29] ldc: update to 1.29.0.

---
 srcpkgs/ldc/template | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/srcpkgs/ldc/template b/srcpkgs/ldc/template
index e21bc6555e38..1d72a8805eb6 100644
--- a/srcpkgs/ldc/template
+++ b/srcpkgs/ldc/template
@@ -1,7 +1,7 @@
 # Template file for 'ldc'
 pkgname=ldc
-version=1.28.0
-revision=2
+version=1.29.0
+revision=1
 wrksrc="ldc-${version}-src"
 build_style=cmake
 configure_args="
@@ -11,7 +11,7 @@ configure_args="
  -DBASH_COMPLETION_COMPLETIONSDIR=/usr/share/bash-completion
  -DC_SYSTEM_LIBS='unwind;m;pthread;rt;dl'"
 conf_files="/etc/ldc2.conf"
-hostmakedepends="dmd llvm12 perl pkg-config"
+hostmakedepends="dmd llvm14 perl pkg-config"
 makedepends="libcurl-devel libffi-devel ncurses-devel zlib-devel
  llvm-libunwind-devel"
 depends="ldc-runtime llvm-libunwind-devel"
@@ -22,7 +22,7 @@ license="BSD-3-Clause, BSL-1.0"
 homepage="https://wiki.dlang.org/LDC"
 changelog="https://raw.githubusercontent.com/ldc-developers/ldc/master/CHANGELOG.md"
 distfiles="https://github.com/ldc-developers/ldc/releases/download/v${version}/ldc-${version}-src.tar.gz"
-checksum=17fee8bb535bcb8cda0a45947526555c46c045f302a7349cc8711b254e54cf09
+checksum=d0c066eb965467625d9c5e75c00c583451b9ffa363601f9e37275ca8a8aea140
 nopie=yes
 nocross="dmd compilation fails on cross"
 # tests timeout on musl; also require unpackaged python3-lit

From aedbfa1967184744cf68b38bb9b61cc8c6df6c5c Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 23/29] include-what-you-use: update to 0.18.

---
 srcpkgs/include-what-you-use/template | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/include-what-you-use/template b/srcpkgs/include-what-you-use/template
index b13bb7ee56af..297669f60459 100644
--- a/srcpkgs/include-what-you-use/template
+++ b/srcpkgs/include-what-you-use/template
@@ -1,6 +1,6 @@
 # Template file for 'include-what-you-use'
 pkgname=include-what-you-use
-version=0.16
+version=0.18
 revision=1
 wrksrc="${pkgname}"
 build_style=cmake
@@ -12,7 +12,7 @@ maintainer="Leah Neukirchen <leah@vuxu.org>"
 license="NCSA"
 homepage="https://include-what-you-use.org/"
 distfiles="https://include-what-you-use.org/downloads/${pkgname}-${version}.src.tar.gz"
-checksum=8d6fc9b255343bc1e5ec459e39512df1d51c60e03562985e0076036119ff5a1c
+checksum=9102fc8419294757df86a89ce6ec305f8d90a818d1f2598a139d15eb1894b8f3
 python_version=3
 
 post_install() {

From 7bb7e0998594c0853e98c3bfe8857c1deb7f9e45 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:18:24 +0200
Subject: [PATCH 24/29] SPIRV-LLVM-Translator: update to 14.0.0.

---
 common/shlibs                          |  1 +
 srcpkgs/SPIRV-LLVM-Translator/template | 11 ++++++-----
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/common/shlibs b/common/shlibs
index 86f4c9060d3b..df3eb79f921c 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -983,6 +983,7 @@ libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
 libLLVM-14.so libllvm14-14.0.3_1
+libLLVMSPIRVLib.so.14 SPIRV-LLVM-Translator-14.0.0_1
 libisofs.so.6 libisofs-0.6.24_1
 libmpack.so.0 libmpack-1.0.5_1
 libGeoIP.so.1 libgeoip-1.4.8_1
diff --git a/srcpkgs/SPIRV-LLVM-Translator/template b/srcpkgs/SPIRV-LLVM-Translator/template
index 2504cabed367..2277d062d992 100644
--- a/srcpkgs/SPIRV-LLVM-Translator/template
+++ b/srcpkgs/SPIRV-LLVM-Translator/template
@@ -1,19 +1,20 @@
 # Template file for 'SPIRV-LLVM-Translator'
 pkgname=SPIRV-LLVM-Translator
-version=12.0.0
+version=14.0.0
 revision=1
 build_style=cmake
 make_build_args="llvm-spirv"
-configure_args="-Wno-dev -DLLVM_LINK_LLVM_DYLIB=ON -DCMAKE_SKIP_RPATH=ON
- -DLLVM_SPIRV_INCLUDE_TESTS=OFF -DBUILD_SHARED_LIBS=ON"
+configure_args="-DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release
+ -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_SKIP_RPATH=ON -DLLVM_INCLUDE_TESTS=OFF
+ -DLLVM_LINK_LLVM_DYLIB=ON -DLLVM_EXTERNAL_LIT=/usr/bin/lit -Wno-dev -DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=/usr/include/spirv/ "
 hostmakedepends="clang clang-tools-extra llvm"
-makedepends="llvm"
+makedepends="llvm SPIRV-Headers"
 short_desc="API and commands for processing SPIR-V modules"
 maintainer="Orphaned <orphan@voidlinux.org>"
 license="NCSA"
 homepage="https://github.com/KhronosGroup/SPIRV-LLVM-Translator"
 distfiles="https://github.com/KhronosGroup/${pkgname}/archive/refs/tags/v${version}.tar.gz"
-checksum=6e4fad04203f25fcde4c308c53e9f59bd05a390978992db3212d4b63aff62108
+checksum=1afc52bb4e39aeb9b5b69324a201c81bd986364f347b559995eff6fd6f013318
 make_check=no
 
 post_install() {

From cddfa00dd1ed830105ca6d8480e086782f74b795 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:17:29 +0200
Subject: [PATCH 25/29] SPIRV-Headers: update to 1.3.211.0.

---
 srcpkgs/SPIRV-Headers/template | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/SPIRV-Headers/template b/srcpkgs/SPIRV-Headers/template
index 5dcf457c04c7..ce8288174e48 100644
--- a/srcpkgs/SPIRV-Headers/template
+++ b/srcpkgs/SPIRV-Headers/template
@@ -1,11 +1,13 @@
 # Template file for 'SPIRV-Headers'
 pkgname=SPIRV-Headers
-version=1.5.4.raytracing.fixed
+version=1.3.211.0
 revision=1
+reverts="1.5.4.raytracing.fixed"
+wrksrc=${pkgname}-sdk-${version}
 build_style=cmake
 short_desc="Machine-readable files for the SPIR-V Registry"
 maintainer="Orphaned <orphan@voidlinux.org>"
 license="GPL-3.0-or-later"
 homepage="https://github.com/KhronosGroup/SPIRV-Headers"
-distfiles="https://github.com/KhronosGroup/SPIRV-Headers/archive/${version}.tar.gz"
-checksum=df2ad2520be4d95a479fa248921065885bbf435a658349a7fc164ad7b26b68c6
+distfiles="https://github.com/KhronosGroup/SPIRV-Headers/archive/sdk-${version}.tar.gz"
+checksum=30a78e61bd812c75e09fdc7a319af206b1044536326bc3e85fea818376a12568

From f65e289140bd47a492e88429be7f5bfc7d252135 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:35:43 +0200
Subject: [PATCH 26/29] ispc: update to 1.17.0.

---
 .../ispc/patches/cmake-build-type-none.patch  |   18 -
 srcpkgs/ispc/patches/llvm12-001.patch         |   57 -
 srcpkgs/ispc/patches/llvm12-002.patch         |  923 --------
 srcpkgs/ispc/patches/llvm12-003.patch         | 1504 ------------
 srcpkgs/ispc/patches/llvm12-004.patch         |   34 -
 srcpkgs/ispc/patches/llvm12-005.patch         |  372 ---
 srcpkgs/ispc/patches/llvm12-006.patch         |  126 -
 srcpkgs/ispc/patches/llvm12-007.patch         |  160 --
 srcpkgs/ispc/patches/llvm12-008.patch         |  149 --
 srcpkgs/ispc/patches/llvm12-009.patch         | 2109 -----------------
 srcpkgs/ispc/template                         |    6 +-
 11 files changed, 3 insertions(+), 5455 deletions(-)
 delete mode 100644 srcpkgs/ispc/patches/cmake-build-type-none.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-001.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-002.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-003.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-004.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-005.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-006.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-007.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-008.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-009.patch

diff --git a/srcpkgs/ispc/patches/cmake-build-type-none.patch b/srcpkgs/ispc/patches/cmake-build-type-none.patch
deleted file mode 100644
index 411e353c7314..000000000000
--- a/srcpkgs/ispc/patches/cmake-build-type-none.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Index: ispc-1.15.0/CMakeLists.txt
-===================================================================
---- ispc-1.15.0.orig/CMakeLists.txt
-+++ ispc-1.15.0/CMakeLists.txt
-@@ -157,13 +157,6 @@ set(OUTPUT_RELEASE Release/bin)
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin )
- 
- if(CMAKE_BUILD_TYPE)
--    # Validate build type
--    set(CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo")
--
--    string(FIND "${CONFIGURATION_TYPES}" "${CMAKE_BUILD_TYPE}" MATCHED_CONFIG)
--    if (${MATCHED_CONFIG} EQUAL -1)
--         message(FATAL_ERROR "CMAKE_BUILD_TYPE (${CMAKE_BUILD_TYPE}) allows only the following values: ${CONFIGURATION_TYPES}")
--    endif()
- else(NOT CMAKE_BUILD_TYPE)
-     set(CMAKE_BUILD_TYPE "Release")
-     message(STATUS "Build type not specified: Use Release by default.")
diff --git a/srcpkgs/ispc/patches/llvm12-001.patch b/srcpkgs/ispc/patches/llvm12-001.patch
deleted file mode 100644
index 5f2d3f5a409e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-001.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 1c0f89dccb774f216c7f6e76a99ee907a1e641cb Mon Sep 17 00:00:00 2001
-From: Dmitry Babokin <dmitry.y.babokin@intel.com>
-Date: Tue, 22 Dec 2020 17:03:59 -0800
-Subject: [PATCH] Fix to work with LLVM trunk after llvm/llvm-project@41c3b2713
-
----
- src/ctx.cpp | 18 ++++++++++++------
- 1 file changed, 12 insertions(+), 6 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 6fbb8b9cf..977e9d222 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1473,11 +1473,15 @@ void FunctionEmitContext::AddDebugPos(llvm::Value *value, const SourcePos *pos,
-     llvm::Instruction *inst = llvm::dyn_cast<llvm::Instruction>(value);
-     if (inst != NULL && m->diBuilder) {
-         SourcePos p = pos ? *pos : currentPos;
--        if (p.first_line != 0)
-+        if (p.first_line != 0) {
-             // If first_line == 0, then we're in the middle of setting up
-             // the standard library or the like; don't add debug positions
-             // for those functions
--            inst->setDebugLoc(llvm::DebugLoc::get(p.first_line, p.first_column, scope ? scope : GetDIScope()));
-+            scope = scope ? scope : GetDIScope();
-+            llvm::DebugLoc diLoc =
-+                llvm::DILocation::get(scope->getContext(), p.first_line, p.first_column, scope, nullptr, false);
-+            inst->setDebugLoc(diLoc);
-+        }
-     }
- }
- 
-@@ -1518,9 +1522,10 @@ void FunctionEmitContext::EmitVariableDebugInfo(Symbol *sym) {
-     llvm::DILocalVariable *var = m->diBuilder->createAutoVariable(
-         scope, sym->name, sym->pos.GetDIFile(), sym->pos.first_line, diType, true /* preserve through opts */);
- 
-+    llvm::DebugLoc diLoc =
-+        llvm::DILocation::get(scope->getContext(), sym->pos.first_line, sym->pos.first_column, scope, nullptr, false);
-     llvm::Instruction *declareInst =
--        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(),
--                                    llvm::DebugLoc::get(sym->pos.first_line, sym->pos.first_column, scope), bblock);
-+        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(), diLoc, bblock);
-     AddDebugPos(declareInst, &sym->pos, scope);
- }
- 
-@@ -1535,9 +1540,10 @@ void FunctionEmitContext::EmitFunctionParameterDebugInfo(Symbol *sym, int argNum
-         m->diBuilder->createParameterVariable(scope, sym->name, argNum + 1, sym->pos.GetDIFile(), sym->pos.first_line,
-                                               diType, true /* preserve through opts */, flags);
- 
-+    llvm::DebugLoc diLoc =
-+        llvm::DILocation::get(scope->getContext(), sym->pos.first_line, sym->pos.first_column, scope, nullptr, false);
-     llvm::Instruction *declareInst =
--        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(),
--                                    llvm::DebugLoc::get(sym->pos.first_line, sym->pos.first_column, scope), bblock);
-+        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(), diLoc, bblock);
-     AddDebugPos(declareInst, &sym->pos, scope);
- }
- 
diff --git a/srcpkgs/ispc/patches/llvm12-002.patch b/srcpkgs/ispc/patches/llvm12-002.patch
deleted file mode 100644
index 0903f30da10d..000000000000
--- a/srcpkgs/ispc/patches/llvm12-002.patch
+++ /dev/null
@@ -1,923 +0,0 @@
-From 0597a79d084c014780136da906afe21d15e982cb Mon Sep 17 00:00:00 2001
-From: DeepakRajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Tue, 5 Jan 2021 13:53:30 -0800
-Subject: [PATCH] Remove LLVM 8.0 and LLVM 9.0. (#1966)
-
----
- .appveyor.yml                        |  3 --
- .travis.yml                          |  7 ---
- CMakeLists.txt                       | 12 ++----
- src/ast.cpp                          |  4 --
- src/ctx.cpp                          | 30 -------------
- src/gen/GlobalsLocalization.cpp      |  4 --
- src/ispc.cpp                         | 20 ---------
- src/ispc.h                           |  3 +-
- src/ispc_version.h                   |  4 +-
- src/main.cpp                         | 13 ------
- src/module.cpp                       | 27 ------------
- src/module.h                         |  2 -
- src/opt.cpp                          | 64 ++--------------------------
- src/type.cpp                         | 10 ++---
- tests/lit-tests/1771.ispc            |  1 -
- tests/lit-tests/1844.ispc            |  3 --
- tests/lit-tests/1926.ispc            |  2 -
- tests/lit-tests/cpus_x86.ispc        |  2 +
- tests/lit-tests/cpus_x86_llvm10.ispc | 11 -----
- tests/lit-tests/lit.cfg              |  5 ---
- 20 files changed, 14 insertions(+), 213 deletions(-)
- delete mode 100644 tests/lit-tests/cpus_x86_llvm10.ispc
-
-diff --git a/.appveyor.yml b/.appveyor.yml
-index 451a7b3e0..7945cca2a 100644
---- a/.appveyor.yml
-+++ b/.appveyor.yml
-@@ -41,8 +41,6 @@ environment:
-       LLVM_VERSION: latest
-     - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
-       LLVM_VERSION: 10.0
--    - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
--      LLVM_VERSION: 9.0
- 
- for:
- -
-@@ -62,7 +60,6 @@ for:
-         if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2019" ( (set generator="Visual Studio 16") & (set vsversion=2019))
-         set LLVM_TAR=llvm-11.0.0-win.vs2019-Release+Asserts-x86.arm.wasm.7z
-         if "%LLVM_VERSION%"=="10.0" (set LLVM_TAR=llvm-10.0.1-win.vs2019-Release+Asserts-x86.arm.wasm.zip)
--        if "%LLVM_VERSION%"=="9.0" (set LLVM_TAR=llvm-9.0.1-win.vs2017-Release+Asserts-x86.arm.wasm.zip)
-   install:
-     - ps: choco install --no-progress winflexbison3 wget 7zip
-     - cmd: |-
-diff --git a/.travis.yml b/.travis.yml
-index 2e96017a6..3a6b85264 100644
---- a/.travis.yml
-+++ b/.travis.yml
-@@ -108,13 +108,6 @@ jobs:
-         - LLVM_TAR=llvm-10.0.1-ubuntu16.04-Release+Asserts-x86.arm.wasm.tar.xz
-         - LLVM_REPO=https://github.com/dbabokin/llvm-project
-         - ISPC_HOME=$TRAVIS_BUILD_DIR
--    # LLVM 9.0 + Ubuntu 16.04: build, lit tests, examples (build + run), benchmarks (build + trial run)
--    - <<: *my_tag
--      env:
--        - LLVM_VERSION=9.0 OS=Ubuntu16.04
--        - LLVM_TAR=llvm-9.0.1-ubuntu16.04-Release+Asserts-x86.arm.wasm.tar.xz
--        - LLVM_REPO=https://github.com/dbabokin/llvm-project
--        - ISPC_HOME=$TRAVIS_BUILD_DIR
-     # WASM enabled build
-     # LLVM 11.0 + Ubuntu 16.04: build, lit tests, examples (build), benchmarks (build + trial run)
-     - <<: *my_tag
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 5fa863fcf..a6b3ed251 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -241,10 +241,8 @@ if (X86_ENABLED)
-         avx2-i8x32 avx2-i16x16
-         avx2-i32x4 avx2-i32x8 avx2-i32x16 avx2-i64x4
-         avx512knl-i32x16
--        avx512skx-i32x16 avx512skx-i32x8)
--    if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "10.0.0")
--        list(APPEND ISPC_TARGETS avx512skx-i8x64 avx512skx-i16x32)
--    endif()
-+        avx512skx-i32x16 avx512skx-i32x8
-+        avx512skx-i8x64 avx512skx-i16x32)
- endif()
- if (ARM_ENABLED)
-     list(APPEND ISPC_TARGETS neon-i8x16 neon-i16x8 neon-i32x4 neon-i32x8)
-@@ -259,11 +257,7 @@ if (WASM_ENABLED)
- endif()
- 
- set(CLANG_LIBRARY_LIST clangFrontend clangDriver clangSerialization clangParse clangSema clangAnalysis clangAST clangBasic clangEdit clangLex)
--set(LLVM_COMPONENTS engine ipo bitreader bitwriter instrumentation linker option)
--
--if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "10.0.0")
--    list(APPEND LLVM_COMPONENTS frontendopenmp)
--endif()
-+set(LLVM_COMPONENTS engine ipo bitreader bitwriter instrumentation linker option frontendopenmp)
- 
- if (X86_ENABLED)
-     list(APPEND LLVM_COMPONENTS x86)
-diff --git a/src/ast.cpp b/src/ast.cpp
-index 20f75a29c..5a43c4854 100644
---- a/src/ast.cpp
-+++ b/src/ast.cpp
-@@ -44,9 +44,7 @@
- #include "sym.h"
- #include "util.h"
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/TimeProfiler.h>
--#endif
- ///////////////////////////////////////////////////////////////////////////
- // ASTNode
- 
-@@ -62,9 +60,7 @@ void AST::AddFunction(Symbol *sym, Stmt *code) {
- }
- 
- void AST::GenerateIR() {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope TimeScope("GenerateIR");
--#endif
-     for (unsigned int i = 0; i < functions.size(); ++i)
-         functions[i]->GenerateIR();
- }
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 977e9d222..42c4ea09d 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -309,21 +309,13 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym, llvm::F
-             char buf[256];
-             snprintf(buf, sizeof(buf), "__off_all_on_mask_%s", g->target->GetISAString());
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_8_0
--            llvm::Constant *offFunc = m->module->getOrInsertFunction(buf, LLVMTypes::VoidType);
--#else // LLVM 9.0+
-             llvm::FunctionCallee offFuncCallee = m->module->getOrInsertFunction(buf, LLVMTypes::VoidType);
-             llvm::Constant *offFunc = llvm::cast<llvm::Constant>(offFuncCallee.getCallee());
--#endif
-             AssertPos(currentPos, llvm::isa<llvm::Function>(offFunc));
-             llvm::BasicBlock *offBB = llvm::BasicBlock::Create(*g->ctx, "entry", (llvm::Function *)offFunc, 0);
-             llvm::StoreInst *inst = new llvm::StoreInst(LLVMMaskAllOff, globalAllOnMaskPtr, offBB);
-             if (g->opt.forceAlignedMemory) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-                 inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-             }
-             llvm::ReturnInst::Create(*g->ctx, offBB);
-         }
-@@ -2288,11 +2280,7 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
- #endif
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-     }
- 
-     AddDebugPos(inst);
-@@ -2431,11 +2419,7 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-                 // vs the proper alignment in practice.)
-                 int align = 1;
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                inst->setAlignment(align);
--#else // LLVM 10.0+
-                 inst->setAlignment(llvm::MaybeAlign(align).valueOrOne());
--#endif
-             }
- 
-             AddDebugPos(inst);
-@@ -2649,11 +2633,7 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-         align = g->target->getNativeVectorAlignment();
- 
-     if (align != 0) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(align);
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(align).valueOrOne());
--#endif
-     }
-     // Don't add debugging info to alloca instructions
-     return inst;
-@@ -2926,11 +2906,7 @@ void FunctionEmitContext::StoreInst(llvm::Value *value, llvm::Value *ptr, const
-     llvm::StoreInst *inst = new llvm::StoreInst(value, ptr, bblock);
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-     }
- 
- #ifdef ISPC_GENX_ENABLED
-@@ -3025,16 +3001,10 @@ void FunctionEmitContext::MemcpyInst(llvm::Value *dest, llvm::Value *src, llvm::
-     }
-     if (align == NULL)
-         align = LLVMInt32(1);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_8_0
--    llvm::Constant *mcFunc =
--        m->module->getOrInsertFunction("llvm.memcpy.p0i8.p0i8.i64", LLVMTypes::VoidType, LLVMTypes::VoidPointerType,
--                                       LLVMTypes::VoidPointerType, LLVMTypes::Int64Type, LLVMTypes::BoolType);
--#else // LLVM 9.0+
-     llvm::FunctionCallee mcFuncCallee =
-         m->module->getOrInsertFunction("llvm.memcpy.p0i8.p0i8.i64", LLVMTypes::VoidType, LLVMTypes::VoidPointerType,
-                                        LLVMTypes::VoidPointerType, LLVMTypes::Int64Type, LLVMTypes::BoolType);
-     llvm::Constant *mcFunc = llvm::cast<llvm::Constant>(mcFuncCallee.getCallee());
--#endif
-     AssertPos(currentPos, mcFunc != NULL);
-     AssertPos(currentPos, llvm::isa<llvm::Function>(mcFunc));
- 
-diff --git a/src/gen/GlobalsLocalization.cpp b/src/gen/GlobalsLocalization.cpp
-index 193a66289..a176e9462 100644
---- a/src/gen/GlobalsLocalization.cpp
-+++ b/src/gen/GlobalsLocalization.cpp
-@@ -470,11 +470,7 @@ void GlobalsLocalization::LocalizeGlobals(LocalizationInfo &LI) {
-         Instruction &FirstI = *Fn->getEntryBlock().begin();
-         Type *ElemTy = GV->getType()->getElementType();
-         AllocaInst *Alloca = new AllocaInst(ElemTy, 0, GV->getName() + ".local", &FirstI);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        Alloca->setAlignment(GV->getAlignment());
--#else // LLVM 10.0+
-         Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()));
--#endif
-         if (!isa<UndefValue>(GV->getInitializer()))
-             new StoreInst(GV->getInitializer(), Alloca, &FirstI);
- 
-diff --git a/src/ispc.cpp b/src/ispc.cpp
-index e2d0f206e..fac5233f7 100644
---- a/src/ispc.cpp
-+++ b/src/ispc.cpp
-@@ -272,9 +272,7 @@ typedef enum {
-     CPU_Silvermont,
- 
-     CPU_ICX,
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     CPU_TGL,
--#endif
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-     CPU_ADL,
-     CPU_SPR,
-@@ -365,10 +363,8 @@ class AllCPUs {
- 
-         names[CPU_ICX].push_back("icelake-server");
-         names[CPU_ICX].push_back("icx");
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         names[CPU_TGL].push_back("tigerlake");
-         names[CPU_TGL].push_back("tgl");
--#endif
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-         names[CPU_ADL].push_back("alderlake");
-         names[CPU_ADL].push_back("adl");
-@@ -411,11 +407,9 @@ class AllCPUs {
-         compat[CPU_ADL] = Set(CPU_ADL, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont,
-                               CPU_SandyBridge, CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_None);
- #endif
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         compat[CPU_TGL] =
-             Set(CPU_TGL, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont, CPU_SandyBridge,
-                 CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_SKX, CPU_ICL, CPU_ICX, CPU_None);
--#endif
-         compat[CPU_ICX] = Set(CPU_ICX, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont,
-                               CPU_SandyBridge, CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_SKX, CPU_ICL, CPU_None);
- 
-@@ -556,9 +550,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-         case CPU_SPR:
- #endif
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         case CPU_TGL:
--#endif
-         case CPU_ICX:
-         case CPU_ICL:
-         case CPU_SKX:
-@@ -916,7 +908,6 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         }
-         break;
-     case ISPCTarget::avx512skx_i8x64:
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0 // LLVM 10.0+
-         // This target is enabled only for LLVM 10.0 and later
-         // because LLVM requires a number of fixes, which are
-         // committed to LLVM 11.0 and can be applied to 10.0, but not
-@@ -937,12 +928,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         this->m_hasVecPrefetch = false;
-         CPUfromISA = CPU_SKX;
-         break;
--#else
--        unsupported_target = true;
--        break;
--#endif
-     case ISPCTarget::avx512skx_i16x32:
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0 // LLVM 10.0+
-         // This target is enabled only for LLVM 10.0 and later
-         // because LLVM requires a number of fixes, which are
-         // committed to LLVM 11.0 and can be applied to 10.0, but not
-@@ -963,10 +949,6 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         this->m_hasVecPrefetch = false;
-         CPUfromISA = CPU_SKX;
-         break;
--#else
--        unsupported_target = true;
--        break;
--#endif
- #ifdef ISPC_ARM_ENABLED
-     case ISPCTarget::neon_i8x16:
-         this->m_isa = Target::NEON;
-@@ -1662,11 +1644,9 @@ Globals::Globals() {
-     isMultiTargetCompilation = false;
-     errorLimit = -1;
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     enableTimeTrace = false;
-     // set default granularity to 500.
-     timeTraceGranularity = 500;
--#endif
-     target = NULL;
-     ctx = new llvm::LLVMContext;
- 
-diff --git a/src/ispc.h b/src/ispc.h
-index e25d8830e..de357a21c 100644
---- a/src/ispc.h
-+++ b/src/ispc.h
-@@ -695,13 +695,12 @@ struct Globals {
- 
-     /* Number of errors to show in ISPC. */
-     int errorLimit;
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-+
-     /* When true, enable compile time tracing. */
-     bool enableTimeTrace;
- 
-     /* When compile time tracing is enabled, set time granularity. */
-     int timeTraceGranularity;
--#endif
- };
- 
- enum {
-diff --git a/src/ispc_version.h b/src/ispc_version.h
-index d781347fd..434b2d678 100644
---- a/src/ispc_version.h
-+++ b/src/ispc_version.h
-@@ -44,13 +44,11 @@
- 
- #define ISPC_LLVM_VERSION (LLVM_VERSION_MAJOR * 10000 + LLVM_VERSION_MINOR * 100)
- 
--#define ISPC_LLVM_8_0 80000
--#define ISPC_LLVM_9_0 90000
- #define ISPC_LLVM_10_0 100000
- #define ISPC_LLVM_11_0 110000
- #define ISPC_LLVM_12_0 120000
- 
--#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_8_0
-+#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_10_0
- #define LATEST_SUPPORTED_LLVM ISPC_LLVM_12_0
- 
- #ifdef __ispc__xstr
-diff --git a/src/main.cpp b/src/main.cpp
-index 8f64330cc..5c920eabc 100644
---- a/src/main.cpp
-+++ b/src/main.cpp
-@@ -55,9 +55,7 @@
- #include <llvm/Support/Signals.h>
- #include <llvm/Support/TargetRegistry.h>
- #include <llvm/Support/TargetSelect.h>
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/ToolOutputFile.h>
--#endif
- 
- #ifdef ISPC_HOST_IS_WINDOWS
- #define strcasecmp stricmp
-@@ -181,11 +179,9 @@ static void lPrintVersion() {
-     snprintf(targetHelp, sizeof(targetHelp), "[--target-os=<os>]\t\t\tSelect target OS.  <os>={%s}",
-              g->target_registry->getSupportedOSes().c_str());
-     PrintWithWordBreaks(targetHelp, 24, TerminalWidth(), stdout);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     printf("    [--time-trace]\t\t\tTurn on time profiler. Generates JSON file based on output filename.\n");
-     printf("    [--time-trace-granularity=<value>\tMinimum time granularity (in microseconds) traced by time "
-            "profiler.\n");
--#endif
-     printf("    [--version]\t\t\t\tPrint ispc version\n");
- #ifdef ISPC_GENX_ENABLED
-     printf("    [--vc-options=<\"-option1 -option2...\">]\t\t\t\tPass additional options to Vector Compiler backend\n");
-@@ -462,7 +458,6 @@ static void setCallingConv(VectorCallStatus vectorCall, Arch arch) {
-     }
- }
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- static void writeCompileTimeFile(const char *outFileName) {
-     llvm::SmallString<128> jsonFileName(outFileName);
-     jsonFileName.append(".json");
-@@ -479,7 +474,6 @@ static void writeCompileTimeFile(const char *outFileName) {
-     of->keep();
-     return;
- }
--#endif
- 
- static std::set<int> ParsingPhases(char *stages, ArgErrors &errorHandler) {
-     constexpr int parsing_limit = 100;
-@@ -791,12 +785,10 @@ int main(int Argc, char *Argv[]) {
-             }
-         } else if (!strncmp(argv[i], "--force-alignment=", 18)) {
-             g->forceAlignment = atoi(argv[i] + 18);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         } else if (!strcmp(argv[i], "--time-trace")) {
-             g->enableTimeTrace = true;
-         } else if (!strncmp(argv[i], "--time-trace-granularity=", 25)) {
-             g->timeTraceGranularity = atoi(argv[i] + 25);
--#endif
-         } else if (!strcmp(argv[i], "--woff") || !strcmp(argv[i], "-woff")) {
-             g->disableWarnings = true;
-             g->emitPerfWarnings = false;
-@@ -1059,7 +1051,6 @@ int main(int Argc, char *Argv[]) {
- 
-     // This needs to happen after the TargetOS is decided.
-     setCallingConv(vectorCall, arch);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     if (g->enableTimeTrace) {
-         llvm::timeTraceProfilerInitialize(g->timeTraceGranularity, "ispc");
-     }
-@@ -1077,9 +1068,5 @@ int main(int Argc, char *Argv[]) {
-         }
-         llvm::timeTraceProfilerCleanup();
-     }
--#else
--    int ret = Module::CompileAndOutput(file, arch, cpu, targets, flags, ot, outFileName, headerFileName, depsFileName,
--                                       depsTargetName, hostStubFileName, devStubFileName);
--#endif
-     return ret;
- }
-diff --git a/src/module.cpp b/src/module.cpp
-index fe7452df1..a85fec77a 100644
---- a/src/module.cpp
-+++ b/src/module.cpp
-@@ -170,9 +170,7 @@ Module::Module(const char *fn) {
-     module->setDataLayout(g->target->getDataLayout()->getStringRepresentation());
- 
-     if (g->generateDebuggingSymbols) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Create Debug Data");
--#endif
-         // To enable debug information on Windows, we have to let llvm know, that
-         // debug information should be emitted in CodeView format.
-         if (g->target_os == TargetOS::windows) {
-@@ -226,10 +224,8 @@ extern YY_BUFFER_STATE yy_create_buffer(FILE *, int);
- extern void yy_delete_buffer(YY_BUFFER_STATE);
- 
- int Module::CompileFile() {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope CompileFileTimeScope(
-         "CompileFile", llvm::StringRef(filename + ("_" + std::string(g->target->GetISAString()))));
--#endif
-     extern void ParserInit();
-     ParserInit();
- 
-@@ -238,18 +234,14 @@ int Module::CompileFile() {
-     // variable 'm' to be initialized and available (which it isn't until
-     // the Module constructor returns...)
-     {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("DefineStdlib");
--#endif
-         DefineStdlib(symbolTable, g->ctx, module, g->includeStdlib);
-     }
- 
-     bool runPreprocessor = g->runCPP;
- 
-     if (runPreprocessor) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Frontend parser");
--#endif
-         if (!IsStdin(filename)) {
-             // Try to open the file first, since otherwise we crash in the
-             // preprocessor if the file doesn't exist.
-@@ -268,9 +260,7 @@ int Module::CompileFile() {
-         yyparse();
-         yy_delete_buffer(strbuf);
-     } else {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Frontend parser");
--#endif
-         // No preprocessor, just open up the file if it's not stdin..
-         FILE *f = NULL;
-         if (IsStdin(filename)) {
-@@ -297,9 +287,7 @@ int Module::CompileFile() {
- 
-     if (diBuilder)
-         diBuilder->finalize();
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope TimeScope("Optimize");
--#endif
-     if (errorCount == 0)
-         Optimize(module, g->opt.level);
- 
-@@ -1243,15 +1231,8 @@ bool Module::writeObjectFileOrAssembly(llvm::TargetMachine *targetMachine, llvm:
-                                        const char *outFileName) {
-     // Figure out if we're generating object file or assembly output, and
-     // set binary output for object files
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    Assert(!g->target->isGenXTarget());
--    llvm::TargetMachine::CodeGenFileType fileType =
--        (outputType == Object) ? llvm::TargetMachine::CGFT_ObjectFile : llvm::TargetMachine::CGFT_AssemblyFile;
--    bool binary = (fileType == llvm::TargetMachine::CGFT_ObjectFile);
--#else // LLVM 10.0+
-     llvm::CodeGenFileType fileType = (outputType == Object) ? llvm::CGFT_ObjectFile : llvm::CGFT_AssemblyFile;
-     bool binary = (fileType == llvm::CGFT_ObjectFile);
--#endif
- 
-     llvm::sys::fs::OpenFlags flags = binary ? llvm::sys::fs::F_None : llvm::sys::fs::F_Text;
- 
-@@ -2219,11 +2200,7 @@ void Module::execPreprocessor(const char *infilename, llvm::raw_string_ostream *
-     inst.setTarget(target);
-     inst.createSourceManager(inst.getFileManager());
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    clang::FrontendInputFile inputFile(infilename, clang::InputKind::Unknown);
--#else // LLVM 10.0+
-     clang::FrontendInputFile inputFile(infilename, clang::InputKind());
--#endif
- 
-     inst.InitializeSourceManager(inputFile);
- 
-@@ -2722,9 +2699,7 @@ int Module::CompileAndOutput(const char *srcFile, Arch arch, const char *cpu, st
- 
-         m = new Module(srcFile);
-         if (m->CompileFile() == 0) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-             llvm::TimeTraceScope TimeScope("Backend");
--#endif
- #ifdef ISPC_GENX_ENABLED
-             if (outputType == Asm || outputType == Object) {
-                 if (g->target->isGenXTarget()) {
-@@ -2855,9 +2830,7 @@ int Module::CompileAndOutput(const char *srcFile, Arch arch, const char *cpu, st
- 
-             m = new Module(srcFile);
-             int compileFileError = m->CompileFile();
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-             llvm::TimeTraceScope TimeScope("Backend");
--#endif
-             if (compileFileError == 0) {
-                 // Create the dispatch module, unless already created;
-                 // in the latter case, just do the checking
-diff --git a/src/module.h b/src/module.h
-index 61d3cfea0..603124d50 100644
---- a/src/module.h
-+++ b/src/module.h
-@@ -43,9 +43,7 @@
- 
- #include <llvm/IR/DebugInfo.h>
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/TimeProfiler.h>
--#endif
- 
- #ifdef ISPC_GENX_ENABLED
- #include "ocl_igc_interface/igc_ocl_device_ctx.h"
-diff --git a/src/opt.cpp b/src/opt.cpp
-index a655a8344..5b1ac7b63 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -66,6 +66,7 @@
- #include <llvm/IR/Instructions.h>
- #include <llvm/IR/IntrinsicInst.h>
- #include <llvm/IR/Intrinsics.h>
-+#include <llvm/IR/IntrinsicsX86.h>
- #include <llvm/IR/LegacyPassManager.h>
- #include <llvm/IR/Module.h>
- #include <llvm/IR/PatternMatch.h>
-@@ -85,9 +86,6 @@
- #include <llvm/Transforms/Scalar/InstSimplifyPass.h>
- #include <llvm/Transforms/Utils.h>
- #include <llvm/Transforms/Utils/BasicBlockUtils.h>
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
--#include <llvm/IR/IntrinsicsX86.h>
--#endif
- 
- #ifdef ISPC_HOST_IS_LINUX
- #include <alloca.h>
-@@ -1003,10 +1001,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
-                 name = LLVMGetName(callInst->getArgOperand(0), "_load");
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                llvm::Instruction *loadInst =
--                    new llvm::LoadInst(castPtr, name, false /* not volatile */, align, (llvm::Instruction *)NULL);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-                 llvm::Instruction *loadInst = new llvm::LoadInst(castPtr, name, false /* not volatile */,
-                                                                  llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
- #else
-@@ -1043,13 +1038,8 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedStore32 ? 4 : 8;
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                llvm::StoreInst *storeInst = new llvm::StoreInst(rvalue, castPtr, (llvm::Instruction *)NULL);
--                storeInst->setAlignment(align);
--#else
-                 llvm::StoreInst *storeInst = new llvm::StoreInst(rvalue, castPtr, (llvm::Instruction *)NULL,
-                                                                  llvm::MaybeAlign(align).valueOrOne());
--#endif
-                 lCopyMetadata(storeInst, callInst);
-                 llvm::ReplaceInstWithInst(callInst, storeInst);
- 
-@@ -1066,9 +1056,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool IntrinsicsOpt::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("IntrinsicsOpt::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -1239,9 +1227,7 @@ bool InstructionSimplifyPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool InstructionSimplifyPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("InstructionSimplifyPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -2974,16 +2960,10 @@ static bool lImproveMaskedStore(llvm::CallInst *callInst) {
- 
-             lvalue = new llvm::BitCastInst(lvalue, ptrType, "lvalue_to_ptr_type", callInst);
-             lCopyMetadata(lvalue, callInst);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--            store =
--                new llvm::StoreInst(rvalue, lvalue, false /* not volatile */,
--                                    g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align);
--#else
-             store = new llvm::StoreInst(
-                 rvalue, lvalue, false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-                     .valueOrOne());
--#endif
-         }
-         if (store != NULL) {
-             lCopyMetadata(store, callInst);
-@@ -3059,11 +3039,7 @@ static bool lImproveMaskedLoad(llvm::CallInst *callInst, llvm::BasicBlock::itera
-         {
-             llvm::Type *ptrType = llvm::PointerType::get(callInst->getType(), 0);
-             ptr = new llvm::BitCastInst(ptr, ptrType, "ptr_cast_for_load", callInst);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--            load = new llvm::LoadInst(ptr, callInst->getName(), false /* not volatile */,
--                                      g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align,
--                                      (llvm::Instruction *)NULL);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-             load = new llvm::LoadInst(
-                 ptr, callInst->getName(), false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-@@ -3129,9 +3105,7 @@ bool ImproveMemoryOpsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ImproveMemoryOpsPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ImproveMemoryOpsPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -3424,9 +3398,7 @@ llvm::Value *lGEPAndLoad(llvm::Value *basePtr, int64_t offset, int align, llvm::
-                          llvm::Type *type) {
-     llvm::Value *ptr = lGEPInst(basePtr, LLVMInt64(offset), "new_base", insertBefore);
-     ptr = new llvm::BitCastInst(ptr, llvm::PointerType::get(type, 0), "ptr_cast", insertBefore);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, align, insertBefore);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-     return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, llvm::MaybeAlign(align), insertBefore);
- #else // LLVM 11.0+
-     return new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-@@ -4135,9 +4107,7 @@ bool GatherCoalescePass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool GatherCoalescePass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("GatherCoalescePass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -4467,9 +4437,7 @@ bool ReplacePseudoMemoryOpsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplacePseudoMemoryOpsPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplacePseudoMemoryOpsPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -4573,9 +4541,7 @@ bool IsCompileTimeConstantPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool IsCompileTimeConstantPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("IsCompileTimeConstantPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5201,9 +5167,7 @@ bool PeepholePass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool PeepholePass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("PeepholePass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5299,9 +5263,7 @@ bool ReplaceStdlibShiftPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceStdlibShiftPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceStdlibShiftPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5399,9 +5361,7 @@ llvm::Instruction *FixBooleanSelectPass::fixSelect(llvm::SelectInst *sel, llvm::
- }
- 
- bool FixBooleanSelectPass::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("FixBooleanSelectPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
- 
-     return modifiedAny;
-@@ -5964,9 +5924,7 @@ bool GenXGatherCoalescing::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool GenXGatherCoalescing::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("GenXGatherCoalescing::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6113,9 +6071,7 @@ bool PromoteToPrivateMemoryPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool PromoteToPrivateMemoryPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("PromoteToPrivateMemoryPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6181,9 +6137,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceLLVMIntrinsics::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceLLVMIntrinsics::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6278,9 +6232,7 @@ bool ReplaceUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceUnsupportedInsts::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceUnsupportedInsts::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6369,9 +6321,7 @@ bool CheckUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool CheckUnsupportedInsts::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("CheckUnsupportedInsts::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6440,9 +6390,7 @@ bool MangleOpenCLBuiltins::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool MangleOpenCLBuiltins::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("MangleOpenCLBuiltins::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6828,9 +6776,7 @@ bool FixAddressSpace::runOnFunction(llvm::Function &F) {
-     // Transformations are correct when the function is not internal.
-     // This is due to address space calculation algorithm.
-     // TODO: problems can be met in case of Stack Calls
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("FixAddressSpace::runOnFunction", F.getName());
--#endif
-     if (F.getLinkage() == llvm::GlobalValue::LinkageTypes::InternalLinkage)
-         return false;
- 
-@@ -6854,9 +6800,7 @@ class DemotePHIs : public llvm::FunctionPass {
- char DemotePHIs::ID = 0;
- 
- bool DemotePHIs::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("DemotePHIs::runOnFunction", F.getName());
--#endif
-     if (F.isDeclaration() || skipFunction(F))
-         return false;
-     std::vector<llvm::Instruction *> WorkList;
-diff --git a/src/type.cpp b/src/type.cpp
-index 688a4e874..fa0cb04db 100644
---- a/src/type.cpp
-+++ b/src/type.cpp
-@@ -1822,14 +1822,10 @@ llvm::DIType *StructType::GetDIType(llvm::DIScope *scope) const {
-     llvm::DIFile *diFile = pos.GetDIFile();
-     llvm::DINamespace *diSpace = pos.GetDINamespace();
-     return m->diBuilder->createStructType(diSpace, GetString(), diFile,
--                                          pos.first_line,          // Line number
--                                          layout->getSizeInBits(), // Size in bits
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                                          layout->getAlignment() * 8, // Alignment in bits
--#else                                                                 // LLVM 10.0+
-+                                          pos.first_line,                     // Line number
-+                                          layout->getSizeInBits(),            // Size in bits
-                                           layout->getAlignment().value() * 8, // Alignment in bits
--#endif
--                                          llvm::DINode::FlagZero, // Flags
-+                                          llvm::DINode::FlagZero,             // Flags
-                                           NULL, elements);
- }
- 
-diff --git a/tests/lit-tests/1771.ispc b/tests/lit-tests/1771.ispc
-index 98064d84d..4feb73dd7 100644
---- a/tests/lit-tests/1771.ispc
-+++ b/tests/lit-tests/1771.ispc
-@@ -5,7 +5,6 @@
- // RUN: %{ispc} %s --target=sse4-i16x8 --emit-asm -o - | FileCheck %s -check-prefix=CHECKSSE4_I16X8
- // RUN: %{ispc} %s --target=sse4-i8x16 --emit-asm -o - | FileCheck %s -check-prefix=CHECKSSE4_I8X16
- 
--// REQUIRES: LLVM_10_0+
- // REQUIRES: X86_ENABLED
- 
- // CHECKAVX2_I32X8: {{[a-z]*xor[a-z]*}}  %xmm0, %xmm0, %xmm0
-diff --git a/tests/lit-tests/1844.ispc b/tests/lit-tests/1844.ispc
-index 793a8866c..189edf4c3 100644
---- a/tests/lit-tests/1844.ispc
-+++ b/tests/lit-tests/1844.ispc
-@@ -6,9 +6,6 @@
- 
- // REQUIRES: X86_ENABLED
- 
--// It doesn't work for anything earlier than 10.0, but it will not be fixed, so don't run.
--// REQUIRES: LLVM_10_0+
--
- extern uniform unsigned int64 var_6;
- extern uniform unsigned int16 var_11;
- extern uniform bool arr_201 [1] [15] [20];
-diff --git a/tests/lit-tests/1926.ispc b/tests/lit-tests/1926.ispc
-index 70f7cc3c2..7921c91a6 100644
---- a/tests/lit-tests/1926.ispc
-+++ b/tests/lit-tests/1926.ispc
-@@ -2,8 +2,6 @@
- // RUN: cat %T/1926.o.json \
- // RUN:   | FileCheck %s
- 
--// REQUIRES: LLVM_10_0+
--
- // CHECK: "traceEvents"
- // CHECK: "detail"
- export uniform int foo(uniform int a[], uniform int count) {
-diff --git a/tests/lit-tests/cpus_x86.ispc b/tests/lit-tests/cpus_x86.ispc
-index 516efdd4c..4d60186f6 100644
---- a/tests/lit-tests/cpus_x86.ispc
-+++ b/tests/lit-tests/cpus_x86.ispc
-@@ -24,6 +24,8 @@
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icl
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icelake-server
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icx
-+//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tigerlake
-+//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tgl
- 
- // REQUIRES: X86_ENABLED
- 
-diff --git a/tests/lit-tests/cpus_x86_llvm10.ispc b/tests/lit-tests/cpus_x86_llvm10.ispc
-deleted file mode 100644
-index ef00000e5..000000000
---- a/tests/lit-tests/cpus_x86_llvm10.ispc
-+++ /dev/null
-@@ -1,11 +0,0 @@
--// The test checks that cpu definitions (including all synonyms) are successfully consumed by compiler.
--
--//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tigerlake
--//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tgl
--
--// REQUIRES: X86_ENABLED
--// REQUIRES: LLVM_10_0+
--
--uniform int i;
--
--void foo() {}
-diff --git a/tests/lit-tests/lit.cfg b/tests/lit-tests/lit.cfg
-index 17016579d..045e69437 100644
---- a/tests/lit-tests/lit.cfg
-+++ b/tests/lit-tests/lit.cfg
-@@ -30,11 +30,6 @@ print("Config:")
- 
- # LLVM version
- llvm_version = LooseVersion(ispc_llvm_version_number)
--if llvm_version >= LooseVersion("10.0.0"):
--    print("LLVM_10_0+: YES")
--    config.available_features.add("LLVM_10_0+")
--else:
--    print("LLVM_10_0+: NO")
- 
- if llvm_version >= LooseVersion("12.0.0"):
-     print("LLVM_12_0+: YES")
diff --git a/srcpkgs/ispc/patches/llvm12-003.patch b/srcpkgs/ispc/patches/llvm12-003.patch
deleted file mode 100644
index 0423afc9e3f9..000000000000
--- a/srcpkgs/ispc/patches/llvm12-003.patch
+++ /dev/null
@@ -1,1504 +0,0 @@
-From 1851d18b213dbad169937076176b2d5509733c76 Mon Sep 17 00:00:00 2001
-From: Deepak Rajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Tue, 12 Jan 2021 22:15:12 -0800
-Subject: [PATCH] fixes #1821 - Removing LLVMGetName() and switching to
- LLVM::Twine.
-
----
- src/ctx.cpp      | 304 ++++++++++++++++++++++-------------------------
- src/ctx.h        |  72 +++++------
- src/expr.cpp     |  36 +++---
- src/llvmutil.cpp |  17 ---
- src/llvmutil.h   |   5 -
- src/opt.cpp      | 103 +++++++++-------
- 6 files changed, 255 insertions(+), 282 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 42c4ea09d..ded524b71 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1020,8 +1020,8 @@ void FunctionEmitContext::EmitCaseLabel(int value, bool checkMask, SourcePos pos
-     llvm::BasicBlock *bbCaseImpl = NULL;
-     if (emitGenXHardwareMask()) {
-         // Create basic block with actual case implementation
--        std::string bbName = bbCase->getName().str() + "_impl";
--        bbCaseImpl = CreateBasicBlock(bbName.c_str(), bbCase);
-+        llvm::Twine bbName = llvm::Twine(bbCase->getName()) + "_impl";
-+        bbCaseImpl = CreateBasicBlock(bbName, bbCase);
-     }
- #endif
- 
-@@ -1185,7 +1185,7 @@ bool FunctionEmitContext::initLabelBBlocks(ASTNode *node, void *data) {
-     if (ctx->labelMap.find(ls->name) != ctx->labelMap.end())
-         Error(ls->pos, "Multiple labels named \"%s\" in function.", ls->name.c_str());
-     else {
--        llvm::BasicBlock *bb = ctx->CreateBasicBlock(ls->name.c_str());
-+        llvm::BasicBlock *bb = ctx->CreateBasicBlock(ls->name);
-         ctx->labelMap[ls->name] = bb;
-     }
-     return true;
-@@ -1299,7 +1299,7 @@ llvm::Value *FunctionEmitContext::Any(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_any"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_any");
- }
- 
- llvm::Value *FunctionEmitContext::All(llvm::Value *mask) {
-@@ -1315,7 +1315,7 @@ llvm::Value *FunctionEmitContext::All(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_all"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_all");
- }
- 
- llvm::Value *FunctionEmitContext::None(llvm::Value *mask) {
-@@ -1331,7 +1331,7 @@ llvm::Value *FunctionEmitContext::None(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_none"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_none");
- }
- 
- llvm::Value *FunctionEmitContext::LaneMask(llvm::Value *v) {
-@@ -1349,7 +1349,7 @@ llvm::Value *FunctionEmitContext::LaneMask(llvm::Value *v) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, v, LLVMGetName(v, "_movmsk"));
-+    return CallInst(fmm, NULL, v, llvm::Twine(v->getName()) + "_movmsk");
- }
- 
- llvm::Value *FunctionEmitContext::MasksAllEqual(llvm::Value *v1, llvm::Value *v2) {
-@@ -1364,11 +1364,12 @@ llvm::Value *FunctionEmitContext::MasksAllEqual(llvm::Value *v1, llvm::Value *v2
- #else
-     if (g->target->getArch() == Arch::wasm32) {
-         llvm::Function *fmm = m->module->getFunction("__wasm_cmp_msk_eq");
--        return CallInst(fmm, NULL, {v1, v2}, LLVMGetName("wasm_cmp_msk_eq", v1, v2));
-+        return CallInst(fmm, NULL, {v1, v2}, ((llvm::Twine("wasm_cmp_msk_eq_") + v1->getName()) + "_") + v2->getName());
-     }
-     llvm::Value *mm1 = LaneMask(v1);
-     llvm::Value *mm2 = LaneMask(v2);
--    return CmpInst(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_EQ, mm1, mm2, LLVMGetName("equal", v1, v2));
-+    return CmpInst(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_EQ, mm1, mm2,
-+                   ((llvm::Twine("equal_") + v1->getName()) + "_") + v2->getName());
- #endif
- }
- 
-@@ -1392,7 +1393,7 @@ llvm::Value *FunctionEmitContext::GetStringPtr(const std::string &str) {
-     return new llvm::BitCastInst(lstrPtr, LLVMTypes::VoidPointerType, "str_void_ptr", bblock);
- }
- 
--llvm::BasicBlock *FunctionEmitContext::CreateBasicBlock(const char *name, llvm::BasicBlock *insertAfter) {
-+llvm::BasicBlock *FunctionEmitContext::CreateBasicBlock(const llvm::Twine &name, llvm::BasicBlock *insertAfter) {
-     llvm::BasicBlock *newBB = llvm::BasicBlock::Create(*g->ctx, name, llvmFunction);
-     if (insertAfter)
-         newBB->moveAfter(insertAfter);
-@@ -1416,14 +1417,15 @@ llvm::Value *FunctionEmitContext::I1VecToBoolVec(llvm::Value *b) {
- 
-         for (unsigned int i = 0; i < at->getNumElements(); ++i) {
-             llvm::Value *elt = ExtractInst(b, i);
--            llvm::Value *sext = SwitchBoolSize(elt, LLVMTypes::BoolVectorStorageType, LLVMGetName(elt, "_to_boolvec"));
-+            llvm::Value *sext =
-+                SwitchBoolSize(elt, LLVMTypes::BoolVectorStorageType, llvm::Twine(elt->getName()) + "_to_boolvec");
-             ret = InsertInst(ret, sext, i);
-         }
-         return ret;
-     } else {
-         // For non-array types, convert to 'LLVMTypes::BoolVectorType' if
-         // necessary.
--        return SwitchBoolSize(b, LLVMTypes::BoolVectorType, LLVMGetName(b, "_to_boolvec"));
-+        return SwitchBoolSize(b, LLVMTypes::BoolVectorType, llvm::Twine(b->getName()) + "_to_boolvec");
-     }
- }
- 
-@@ -1563,7 +1565,7 @@ static int lArrayVectorWidth(llvm::Type *t) {
- }
- 
- llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps inst, llvm::Value *v0, llvm::Value *v1,
--                                                 const char *name) {
-+                                                 const llvm::Twine &name) {
-     if (v0 == NULL || v1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1573,7 +1575,7 @@ llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps in
-     llvm::Type *type = v0->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *bop = llvm::BinaryOperator::Create(inst, v0, v1, name ? name : "", bblock);
-+        llvm::Instruction *bop = llvm::BinaryOperator::Create(inst, v0, v1, name, bblock);
-         AddDebugPos(bop);
-         return bop;
-     } else {
-@@ -1591,7 +1593,7 @@ llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps in
-     }
- }
- 
--llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const char *name) {
-+llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const llvm::Twine &name) {
-     if (v == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1603,14 +1605,14 @@ llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const char *name)
-     llvm::Type *type = v->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *binst = llvm::BinaryOperator::CreateNot(v, name ? name : "not", bblock);
-+        llvm::Instruction *binst = llvm::BinaryOperator::CreateNot(v, name.isTriviallyEmpty() ? "not" : name, bblock);
-         AddDebugPos(binst);
-         return binst;
-     } else {
-         llvm::Value *ret = llvm::UndefValue::get(type);
-         for (int i = 0; i < arraySize; ++i) {
-             llvm::Value *a = ExtractInst(v, i);
--            llvm::Value *op = llvm::BinaryOperator::CreateNot(a, name ? name : "not", bblock);
-+            llvm::Value *op = llvm::BinaryOperator::CreateNot(a, name.isTriviallyEmpty() ? "not" : name, bblock);
-             AddDebugPos(op);
-             ret = InsertInst(ret, op, i);
-         }
-@@ -1638,7 +1640,7 @@ static llvm::Type *lGetMatchingBoolVectorType(llvm::Type *type) {
- }
- 
- llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm::CmpInst::Predicate pred,
--                                          llvm::Value *v0, llvm::Value *v1, const char *name) {
-+                                          llvm::Value *v0, llvm::Value *v1, const llvm::Twine &name) {
-     if (v0 == NULL || v1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1648,7 +1650,8 @@ llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm
-     llvm::Type *type = v0->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *ci = llvm::CmpInst::Create(inst, pred, v0, v1, name ? name : "cmp", bblock);
-+        llvm::Instruction *ci =
-+            llvm::CmpInst::Create(inst, pred, v0, v1, name.isTriviallyEmpty() ? "cmp" : name, bblock);
-         AddDebugPos(ci);
-         return ci;
-     } else {
-@@ -1657,14 +1660,14 @@ llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm
-         for (int i = 0; i < arraySize; ++i) {
-             llvm::Value *a = ExtractInst(v0, i);
-             llvm::Value *b = ExtractInst(v1, i);
--            llvm::Value *op = CmpInst(inst, pred, a, b, name);
-+            llvm::Value *op = CmpInst(inst, pred, a, b, name.isTriviallyEmpty() ? "cmp" : name);
-             ret = InsertInst(ret, op, i);
-         }
-         return ret;
-     }
- }
- 
--llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const char *name) {
-+llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1704,21 +1707,19 @@ llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const char *n
-     return ret;
- }
- 
--llvm::Value *FunctionEmitContext::BitCastInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Value *FunctionEmitContext::BitCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_bitcast");
--
--    llvm::Instruction *inst = new llvm::BitCastInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::BitCastInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_bitcast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const char *name) {
-+llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1728,23 +1729,19 @@ llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const char *n
-         // no-op for varying pointers; they're already vectors of ints
-         return value;
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_ptr2int");
-     llvm::Type *type = LLVMTypes::PointerIntType;
--    llvm::Instruction *inst = new llvm::PtrToIntInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::PtrToIntInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_ptr2int");
--
-     llvm::Type *fromType = value->getType();
-     if (llvm::isa<llvm::VectorType>(fromType)) {
-         // varying pointer
-@@ -1752,27 +1749,26 @@ llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *t
-             // already the right type--done
-             return value;
-         else if (fromType->getScalarSizeInBits() > toType->getScalarSizeInBits())
--            return TruncInst(value, toType, name);
-+            return TruncInst(value, toType,
-+                             name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name);
-         else {
-             AssertPos(currentPos, fromType->getScalarSizeInBits() < toType->getScalarSizeInBits());
--            return ZExtInst(value, toType, name);
-+            return ZExtInst(value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name);
-         }
-     }
- 
--    llvm::Instruction *inst = new llvm::PtrToIntInst(value, toType, name, bblock);
-+    llvm::Instruction *inst = new llvm::PtrToIntInst(
-+        value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_int2ptr");
--
-     llvm::Type *fromType = value->getType();
-     if (llvm::isa<llvm::VectorType>(fromType)) {
-         // varying pointer
-@@ -1780,95 +1776,87 @@ llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *t
-             // done
-             return value;
-         else if (fromType->getScalarSizeInBits() > toType->getScalarSizeInBits())
--            return TruncInst(value, toType, name);
-+            return TruncInst(value, toType,
-+                             name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name);
-         else {
-             AssertPos(currentPos, fromType->getScalarSizeInBits() < toType->getScalarSizeInBits());
--            return ZExtInst(value, toType, name);
-+            return ZExtInst(value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name);
-         }
-     }
- 
--    llvm::Instruction *inst = new llvm::IntToPtrInst(value, toType, name, bblock);
-+    llvm::Instruction *inst = new llvm::IntToPtrInst(
-+        value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::TruncInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::TruncInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_trunc");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::TruncInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::TruncInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_trunc" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
- llvm::Instruction *FunctionEmitContext::CastInst(llvm::Instruction::CastOps op, llvm::Value *value, llvm::Type *type,
--                                                 const char *name) {
-+                                                 const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_cast");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = llvm::CastInst::Create(op, value, type, name, bblock);
-+    llvm::Instruction *inst = llvm::CastInst::Create(
-+        op, value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_cast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::FPCastInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::FPCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_cast");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = llvm::CastInst::CreateFPCast(value, type, name, bblock);
-+    llvm::Instruction *inst = llvm::CastInst::CreateFPCast(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_cast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::SExtInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::SExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_sext");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::SExtInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::SExtInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_sext" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::ZExtInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::ZExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_zext");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::ZExtInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::ZExtInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_zext" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
-@@ -1913,14 +1901,15 @@ llvm::Value *FunctionEmitContext::applyVaryingGEP(llvm::Value *basePtr, llvm::Va
-         scale = SmearUniform(scale);
-         Assert(index != NULL);
-         // offset = index * scale
--        offset = BinaryOperator(llvm::Instruction::Mul, scale, index, LLVMGetName("mul", scale, index));
-+        offset = BinaryOperator(llvm::Instruction::Mul, scale, index,
-+                                ((llvm::Twine("mul_") + scale->getName()) + "_") + index->getName());
-     }
- 
-     // For 64-bit targets, if we've been doing our offset calculations in
-     // 32 bits, we still have to convert to a 64-bit value before we
-     // actually add the offset to the pointer.
-     if (g->target->is32Bit() == false && g->opt.force32BitAddressing == true)
--        offset = SExtInst(offset, LLVMTypes::Int64VectorType, LLVMGetName(offset, "_to_64"));
-+        offset = SExtInst(offset, LLVMTypes::Int64VectorType, llvm::Twine(offset->getName()) + "_to_64");
- 
-     // Smear out the pointer to be varying; either the base pointer or the
-     // index must be varying for this method to be called.
-@@ -1929,7 +1918,7 @@ llvm::Value *FunctionEmitContext::applyVaryingGEP(llvm::Value *basePtr, llvm::Va
-     llvm::Value *varyingPtr = baseIsUniform ? SmearUniform(basePtr) : basePtr;
- 
-     // newPtr = ptr + offset
--    return BinaryOperator(llvm::Instruction::Add, varyingPtr, offset, LLVMGetName(basePtr, "_offset"));
-+    return BinaryOperator(llvm::Instruction::Add, varyingPtr, offset, llvm::Twine(basePtr->getName()) + "_offset");
- }
- 
- void FunctionEmitContext::MatchIntegerTypes(llvm::Value **v0, llvm::Value **v1) {
-@@ -2006,13 +1995,13 @@ llvm::Value *FunctionEmitContext::MakeSlicePointer(llvm::Value *ptr, llvm::Value
-     llvm::StructType *st = llvm::StructType::get(*g->ctx, eltTypes);
- 
-     llvm::Value *ret = llvm::UndefValue::get(st);
--    ret = InsertInst(ret, ptr, 0, LLVMGetName(ret, "_slice_ptr"));
--    ret = InsertInst(ret, offset, 1, LLVMGetName(ret, "_slice_offset"));
-+    ret = InsertInst(ret, ptr, 0, llvm::Twine(ret->getName()) + "_slice_ptr");
-+    ret = InsertInst(ret, offset, 1, llvm::Twine(ret->getName()) + "_slice_offset");
-     return ret;
- }
- 
- llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index, const Type *ptrRefType,
--                                                    const char *name) {
-+                                                    const llvm::Twine &name) {
-     if (basePtr == NULL || index == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2065,8 +2054,8 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
-         // uniform, so just emit the regular LLVM GEP instruction
-         llvm::Value *ind[1] = {index};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&ind[0], &ind[1]);
--        llvm::Instruction *inst =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "gep", bblock);
-+        llvm::Instruction *inst = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                                  name.isTriviallyEmpty() ? "gep" : name, bblock);
-         AddDebugPos(inst);
-         return inst;
-     } else
-@@ -2074,7 +2063,7 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
- }
- 
- llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0, llvm::Value *index1,
--                                                    const Type *ptrRefType, const char *name) {
-+                                                    const Type *ptrRefType, const llvm::Twine &name) {
-     if (basePtr == NULL || index0 == NULL || index1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2114,8 +2103,8 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
-         // uniform, so just emit the regular LLVM GEP instruction
-         llvm::Value *indices[2] = {index0, index1};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&indices[0], &indices[2]);
--        llvm::Instruction *inst =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "gep", bblock);
-+        llvm::Instruction *inst = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                                  name.isTriviallyEmpty() ? "gep" : name, bblock);
-         AddDebugPos(inst);
-         return inst;
-     } else {
-@@ -2138,7 +2127,7 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
- }
- 
- llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int elementNum, const Type *ptrRefType,
--                                                   const char *name, const PointerType **resultPtrType) {
-+                                                   const llvm::Twine &name, const PointerType **resultPtrType) {
-     if (resultPtrType != NULL)
-         AssertPos(currentPos, ptrRefType != NULL);
- 
-@@ -2195,8 +2184,8 @@ llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int
-         // If the pointer is uniform, we can use the regular LLVM GEP.
-         llvm::Value *offsets[2] = {LLVMInt32(0), LLVMInt32(elementNum)};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&offsets[0], &offsets[2]);
--        resultPtr =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "struct_offset", bblock);
-+        resultPtr = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                    name.isTriviallyEmpty() ? "struct_offset" : name, bblock);
-     } else {
-         // Otherwise do the math to find the offset and add it to the given
-         // varying pointers
-@@ -2237,7 +2226,7 @@ llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int
-         return resultPtr;
- }
- 
--llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if ((value == NULL) || (toType == NULL)) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2248,20 +2237,18 @@ llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type
-     llvm::Value *newBool = value;
-     if (g->target->getDataLayout()->getTypeSizeInBits(fromType) >
-         g->target->getDataLayout()->getTypeSizeInBits(toType)) {
--        if (name == NULL)
--            name = LLVMGetName(value, "_switchBool");
--        newBool = TruncInst(value, toType, name);
-+        newBool =
-+            TruncInst(value, toType, name.isTriviallyEmpty() ? (llvm::Twine(value->getName()) + "_switchBool") : name);
-     } else if (g->target->getDataLayout()->getTypeSizeInBits(fromType) <
-                g->target->getDataLayout()->getTypeSizeInBits(toType)) {
--        if (name == NULL)
--            name = LLVMGetName(value, "_switchBool");
--        newBool = SExtInst(value, toType, name);
-+        newBool =
-+            SExtInst(value, toType, name.isTriviallyEmpty() ? (llvm::Twine(value->getName()) + "_switchBool") : name);
-     }
- 
-     return newBool;
- }
- 
--llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, const char *name) {
-+llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, const llvm::Twine &name) {
-     if (ptr == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2270,13 +2257,13 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
-     llvm::PointerType *pt = llvm::dyn_cast<llvm::PointerType>(ptr->getType());
-     AssertPos(currentPos, pt != NULL);
- 
--    if (name == NULL)
--        name = LLVMGetName(ptr, "_load");
--
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    llvm::LoadInst *inst = new llvm::LoadInst(pt->getPointerElementType(), ptr, name, bblock);
-+    llvm::LoadInst *inst =
-+        new llvm::LoadInst(pt->getPointerElementType(), ptr,
-+                           name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name, bblock);
- #else
--    llvm::LoadInst *inst = new llvm::LoadInst(ptr, name, bblock);
-+    llvm::LoadInst *inst =
-+        new llvm::LoadInst(ptr, name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name, bblock);
- #endif
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
-@@ -2307,8 +2294,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
- static llvm::Value *lFinalSliceOffset(FunctionEmitContext *ctx, llvm::Value *ptr, const PointerType **ptrType) {
-     Assert(CastType<PointerType>(*ptrType) != NULL);
- 
--    llvm::Value *slicePtr = ctx->ExtractInst(ptr, 0, LLVMGetName(ptr, "_ptr"));
--    llvm::Value *sliceOffset = ctx->ExtractInst(ptr, 1, LLVMGetName(ptr, "_offset"));
-+    llvm::Value *slicePtr = ctx->ExtractInst(ptr, 0, llvm::Twine(ptr->getName()) + "_ptr");
-+    llvm::Value *sliceOffset = ctx->ExtractInst(ptr, 1, llvm::Twine(ptr->getName()) + "_offset");
- 
-     // slicePtr should be a pointer to an soa-width wide array of the
-     // final atomic/enum/pointer type
-@@ -2327,14 +2314,14 @@ static llvm::Value *lFinalSliceOffset(FunctionEmitContext *ctx, llvm::Value *ptr
-         slicePtr = ctx->BitCastInst(slicePtr, (*ptrType)->LLVMType(g->ctx));
- 
-     // And finally index based on the slice offset
--    return ctx->GetElementPtrInst(slicePtr, sliceOffset, *ptrType, LLVMGetName(slicePtr, "_final_gep"));
-+    return ctx->GetElementPtrInst(slicePtr, sliceOffset, *ptrType, llvm::Twine(slicePtr->getName()) + "_final_gep");
- }
- 
- /** Utility routine that loads from a uniform pointer to soa<> data,
-     returning a regular uniform (non-SOA result).
-  */
- llvm::Value *FunctionEmitContext::loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType,
--                                                     const char *name) {
-+                                                     const llvm::Twine &name) {
-     const Type *unifType = ptrType->GetBaseType()->GetAsUniformType();
- 
-     const CollectionType *ct = CastType<CollectionType>(ptrType->GetBaseType());
-@@ -2363,7 +2350,7 @@ llvm::Value *FunctionEmitContext::loadUniformFromSOA(llvm::Value *ptr, llvm::Val
- }
- 
- llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrRefType,
--                                           const char *name, bool one_elem) {
-+                                           const llvm::Twine &name, bool one_elem) {
-     if (ptr == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2371,9 +2358,6 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
- 
-     AssertPos(currentPos, ptrRefType != NULL && mask != NULL);
- 
--    if (name == NULL)
--        name = LLVMGetName(ptr, "_load");
--
-     const PointerType *ptrType;
-     const Type *elType;
-     if (CastType<ReferenceType>(ptrRefType) != NULL) {
-@@ -2393,7 +2377,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
- 
-     if (ptrType->IsUniformType()) {
-         if (ptrType->IsSlice()) {
--            return loadUniformFromSOA(ptr, mask, ptrType, name);
-+            return loadUniformFromSOA(ptr, mask, ptrType,
-+                                      name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name);
-         } else {
-             // FIXME: same issue as above load inst regarding alignment...
-             //
-@@ -2405,11 +2390,15 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-             const AtomicType *atomicType = CastType<AtomicType>(ptrType->GetBaseType());
- 
- #if ISPC_LLVM_VERSION <= ISPC_LLVM_10_0
--            llvm::LoadInst *inst = new llvm::LoadInst(ptr, name, false /* not volatile */, bblock);
-+            llvm::LoadInst *inst =
-+                new llvm::LoadInst(ptr, name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name,
-+                                   false /* not volatile */, bblock);
- #else // LLVM 11.0+
-             llvm::PointerType *ptr_type = llvm::dyn_cast<llvm::PointerType>(ptr->getType());
-             llvm::LoadInst *inst =
--                new llvm::LoadInst(ptr_type->getPointerElementType(), ptr, name, false /* not volatile */, bblock);
-+                new llvm::LoadInst(ptr_type->getPointerElementType(), ptr,
-+                                   name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name,
-+                                   false /* not volatile */, bblock);
- #endif
- 
-             if (atomicType != NULL && atomicType->IsVaryingType()) {
-@@ -2433,7 +2422,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-     } else {
-         // Otherwise we should have a varying ptr and it's time for a
-         // gather.
--        llvm::Value *gather_result = gather(ptr, ptrType, GetFullMask(), name);
-+        llvm::Value *gather_result = gather(ptr, ptrType, GetFullMask(),
-+                                            name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name);
-         if (!one_elem)
-             return gather_result;
- 
-@@ -2453,19 +2443,19 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-         // We can actually call either one, since both are i32s as far as
-         // LLVM's type system is concerned...
-         llvm::Function *fmm = mm[0]->function;
--        llvm::Value *int_mask = CallInst(fmm, NULL, mask, LLVMGetName(mask, "_movmsk"));
-+        llvm::Value *int_mask = CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_movmsk");
-         std::vector<Symbol *> lz;
-         m->symbolTable->LookupFunction("__count_trailing_zeros_i64", &lz);
-         llvm::Function *flz = lz[0]->function;
--        llvm::Value *elem_idx = CallInst(flz, NULL, int_mask, LLVMGetName(mask, "_clz"));
--        llvm::Value *elem = llvm::ExtractElementInst::Create(gather_result, elem_idx,
--                                                             LLVMGetName(gather_result, "_umasked_elem"), bblock);
-+        llvm::Value *elem_idx = CallInst(flz, NULL, int_mask, llvm::Twine(mask->getName()) + "_clz");
-+        llvm::Value *elem = llvm::ExtractElementInst::Create(
-+            gather_result, elem_idx, llvm::Twine(gather_result->getName()) + "_umasked_elem", bblock);
-         return elem;
-     }
- }
- 
- llvm::Value *FunctionEmitContext::gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask,
--                                         const char *name) {
-+                                         const llvm::Twine &name) {
-     // We should have a varying pointer if we get here...
-     AssertPos(currentPos, ptrType->IsVaryingType());
- 
-@@ -2602,7 +2592,8 @@ void FunctionEmitContext::addGSMetadata(llvm::Value *v, SourcePos pos) {
-     inst->setMetadata("last_column", md);
- }
- 
--llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *name, int align, bool atEntryBlock) {
-+llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const llvm::Twine &name, int align,
-+                                             bool atEntryBlock) {
-     if (llvmType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2615,12 +2606,12 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-         llvm::Instruction *retInst = allocaBlock->getTerminator();
-         AssertPos(currentPos, retInst);
-         unsigned AS = llvmFunction->getParent()->getDataLayout().getAllocaAddrSpace();
--        inst = new llvm::AllocaInst(llvmType, AS, name ? name : "", retInst);
-+        inst = new llvm::AllocaInst(llvmType, AS, name, retInst);
-     } else {
-         // Unless the caller overrode the default and wants it in the
-         // current basic block
-         unsigned AS = llvmFunction->getParent()->getDataLayout().getAllocaAddrSpace();
--        inst = new llvm::AllocaInst(llvmType, AS, name ? name : "", bblock);
-+        inst = new llvm::AllocaInst(llvmType, AS, name, bblock);
-     }
- 
-     // If no alignment was specified but we have an array of a uniform
-@@ -2639,7 +2630,8 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::AllocaInst(const Type *ptrType, const char *name, int align, bool atEntryBlock) {
-+llvm::Value *FunctionEmitContext::AllocaInst(const Type *ptrType, const llvm::Twine &name, int align,
-+                                             bool atEntryBlock) {
-     if (ptrType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3075,66 +3067,59 @@ llvm::Instruction *FunctionEmitContext::BranchInst(llvm::BasicBlock *trueBlock,
-     return b;
- }
- 
--llvm::Value *FunctionEmitContext::ExtractInst(llvm::Value *v, int elt, const char *name) {
-+llvm::Value *FunctionEmitContext::ExtractInst(llvm::Value *v, int elt, const llvm::Twine &name) {
-     if (v == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_extract_%d", elt);
--        name = LLVMGetName(v, buf);
--    }
-     llvm::Instruction *ei = NULL;
-     if (llvm::isa<llvm::VectorType>(v->getType()))
--        ei = llvm::ExtractElementInst::Create(v, LLVMInt32(elt), name, bblock);
-+        ei = llvm::ExtractElementInst::Create(
-+            v, LLVMInt32(elt),
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_extract_") + llvm::Twine(elt)) : name, bblock);
-     else
--        ei = llvm::ExtractValueInst::Create(v, elt, name, bblock);
-+        ei = llvm::ExtractValueInst::Create(
-+            v, elt, name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_extract_") + llvm::Twine(elt)) : name,
-+            bblock);
-     AddDebugPos(ei);
-     return ei;
- }
- 
--llvm::Value *FunctionEmitContext::InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const char *name) {
-+llvm::Value *FunctionEmitContext::InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const llvm::Twine &name) {
-     if (v == NULL || eltVal == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_insert_%d", elt);
--        name = LLVMGetName(v, buf);
--    }
--
-     llvm::Instruction *ii = NULL;
-     if (llvm::isa<llvm::VectorType>(v->getType()))
--        ii = llvm::InsertElementInst::Create(v, eltVal, LLVMInt32(elt), name, bblock);
-+        ii = llvm::InsertElementInst::Create(
-+            v, eltVal, LLVMInt32(elt),
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_insert_") + llvm::Twine(elt)) : name, bblock);
-     else
--        ii = llvm::InsertValueInst::Create(v, eltVal, elt, name, bblock);
-+        ii = llvm::InsertValueInst::Create(
-+            v, eltVal, elt,
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_insert_") + llvm::Twine(elt)) : name, bblock);
-     AddDebugPos(ii);
-     return ii;
- }
- 
--llvm::Value *FunctionEmitContext::ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const char *name) {
-+llvm::Value *FunctionEmitContext::ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask,
-+                                              const llvm::Twine &name) {
-     if (v1 == NULL || v2 == NULL || mask == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_shuffle");
--        name = LLVMGetName(v1, buf);
--    }
--
--    llvm::Instruction *ii = new llvm::ShuffleVectorInst(v1, v2, mask, name, bblock);
-+    llvm::Instruction *ii = new llvm::ShuffleVectorInst(
-+        v1, v2, mask, name.isTriviallyEmpty() ? (llvm::Twine(v1->getName()) + "_shuffle") : name, bblock);
- 
-     AddDebugPos(ii);
-     return ii;
- }
- 
--llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vecType, const char *name) {
-+llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vecType, const llvm::Twine &name) {
-     if (v == NULL || vecType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3148,12 +3133,6 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     Assert(ty && ty->getVectorElementType() == v->getType());
- #endif
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_broadcast");
--        name = LLVMGetName(v, buf);
--    }
--
-     // Generate the following sequence:
-     //   %name_init.i = insertelement <4 x i32> undef, i32 %val, i32 0
-     //   %name.i = shufflevector <4 x i32> %name_init.i, <4 x i32> undef,
-@@ -3163,7 +3142,7 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     llvm::Value *undef2 = llvm::UndefValue::get(vecType);
- 
-     // InsertElement
--    llvm::Twine tw = llvm::Twine(name) + llvm::Twine("_init");
-+    llvm::Twine tw = name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + llvm::Twine("_init");
-     llvm::Value *insert = InsertInst(undef1, v, 0, tw.str().c_str());
- 
-     // ShuffleVector
-@@ -3179,28 +3158,27 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-         llvm::ConstantVector::getSplat(llvm::ElementCount::get(static_cast<unsigned int>(ty->getNumElements()), false),
-                                        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
- #endif
--    llvm::Value *ret = ShuffleInst(insert, undef2, zeroVec, name);
-+    llvm::Value *ret = ShuffleInst(insert, undef2, zeroVec,
-+                                   name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name);
- 
-     return ret;
- }
- 
--llvm::PHINode *FunctionEmitContext::PhiNode(llvm::Type *type, int count, const char *name) {
--    llvm::PHINode *pn = llvm::PHINode::Create(type, count, name ? name : "phi", bblock);
-+llvm::PHINode *FunctionEmitContext::PhiNode(llvm::Type *type, int count, const llvm::Twine &name) {
-+    llvm::PHINode *pn = llvm::PHINode::Create(type, count, name.isTriviallyEmpty() ? "phi" : name, bblock);
-     AddDebugPos(pn);
-     return pn;
- }
- 
- llvm::Instruction *FunctionEmitContext::SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1,
--                                                   const char *name) {
-+                                                   const llvm::Twine &name) {
-     if (test == NULL || val0 == NULL || val1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(test, "_select");
--
--    llvm::Instruction *inst = llvm::SelectInst::Create(test, val0, val1, name, bblock);
-+    llvm::Instruction *inst = llvm::SelectInst::Create(
-+        test, val0, val1, name.isTriviallyEmpty() ? (llvm::Twine(test->getName()) + "_select") : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
-@@ -3226,7 +3204,7 @@ static unsigned int lCalleeArgCount(llvm::Value *callee, const FunctionType *fun
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType,
--                                           const std::vector<llvm::Value *> &args, const char *name) {
-+                                           const std::vector<llvm::Value *> &args, const llvm::Twine &name) {
-     if (func == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3258,9 +3236,9 @@ llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-         llvm::PointerType *func_ptr_type = llvm::dyn_cast<llvm::PointerType>(func->getType());
-         llvm::FunctionType *func_type = llvm::dyn_cast<llvm::FunctionType>(func_ptr_type->getPointerElementType());
--        llvm::CallInst *callinst = llvm::CallInst::Create(func_type, func, argVals, name ? name : "", bblock);
-+        llvm::CallInst *callinst = llvm::CallInst::Create(func_type, func, argVals, name, bblock);
- #else
--        llvm::CallInst *callinst = llvm::CallInst::Create(func, argVals, name ? name : "", bblock);
-+        llvm::CallInst *callinst = llvm::CallInst::Create(func, argVals, name, bblock);
- #endif
- 
-         // We could be dealing with a function pointer in which case this will not be a 'llvm::Function'.
-@@ -3464,14 +3442,14 @@ llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg,
--                                           const char *name) {
-+                                           const llvm::Twine &name) {
-     std::vector<llvm::Value *> args;
-     args.push_back(arg);
-     return CallInst(func, funcType, args, name);
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg0,
--                                           llvm::Value *arg1, const char *name) {
-+                                           llvm::Value *arg1, const llvm::Twine &name) {
-     std::vector<llvm::Value *> args;
-     args.push_back(arg0);
-     args.push_back(arg1);
-diff --git a/src/ctx.h b/src/ctx.h
-index 6e5ad74ba..48b3bb826 100644
---- a/src/ctx.h
-+++ b/src/ctx.h
-@@ -302,7 +302,7 @@ class FunctionEmitContext {
-     llvm::Value *GetStringPtr(const std::string &str);
- 
-     /** Create a new basic block with given name */
--    llvm::BasicBlock *CreateBasicBlock(const char *name, llvm::BasicBlock *insertAfter = NULL);
-+    llvm::BasicBlock *CreateBasicBlock(const llvm::Twine &name, llvm::BasicBlock *insertAfter = NULL);
- 
-     /** Given a vector with element type i1, return a vector of type
-         LLVMTypes::BoolVectorType.  This method handles the conversion for
-@@ -380,33 +380,33 @@ class FunctionEmitContext {
-         this also handles applying the given operation to the vector
-         elements. */
-     llvm::Value *BinaryOperator(llvm::Instruction::BinaryOps inst, llvm::Value *v0, llvm::Value *v1,
--                                const char *name = NULL);
-+                                const llvm::Twine &name = "");
- 
-     /** Emit the "not" operator.  Like BinaryOperator(), this also handles
-         a VectorType-based operand. */
--    llvm::Value *NotOperator(llvm::Value *v, const char *name = NULL);
-+    llvm::Value *NotOperator(llvm::Value *v, const llvm::Twine &name = "");
- 
-     /** Emit a comparison instruction.  If the operands are VectorTypes,
-         then a value for the corresponding boolean VectorType is
-         returned. */
-     llvm::Value *CmpInst(llvm::Instruction::OtherOps inst, llvm::CmpInst::Predicate pred, llvm::Value *v0,
--                         llvm::Value *v1, const char *name = NULL);
-+                         llvm::Value *v1, const llvm::Twine &name = "");
- 
-     /** Given a scalar value, return a vector of the same type (or an
-         array, for pointer types). */
--    llvm::Value *SmearUniform(llvm::Value *value, const char *name = NULL);
-+    llvm::Value *SmearUniform(llvm::Value *value, const llvm::Twine &name = "");
- 
--    llvm::Value *BitCastInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Value *PtrToIntInst(llvm::Value *value, const char *name = NULL);
--    llvm::Value *PtrToIntInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Value *IntToPtrInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+    llvm::Value *BitCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Value *PtrToIntInst(llvm::Value *value, const llvm::Twine &name = "");
-+    llvm::Value *PtrToIntInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Value *IntToPtrInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
- 
--    llvm::Instruction *TruncInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+    llvm::Instruction *TruncInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-     llvm::Instruction *CastInst(llvm::Instruction::CastOps op, llvm::Value *value, llvm::Type *type,
--                                const char *name = NULL);
--    llvm::Instruction *FPCastInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Instruction *SExtInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Instruction *ZExtInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+                                const llvm::Twine &name = "");
-+    llvm::Instruction *FPCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Instruction *SExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Instruction *ZExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
- 
-     /** Given two integer-typed values (but possibly one vector and the
-         other not, and or of possibly-different bit-widths), update their
-@@ -426,9 +426,9 @@ class FunctionEmitContext {
-         pointers.  The underlying type of the base pointer must be provided
-         via the ptrType parameter */
-     llvm::Value *GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index, const Type *ptrType,
--                                   const char *name = NULL);
-+                                   const llvm::Twine &name = "");
-     llvm::Value *GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0, llvm::Value *index1, const Type *ptrType,
--                                   const char *name = NULL);
-+                                   const llvm::Twine &name = "");
- 
-     /** This method returns a new pointer that represents offsetting the
-         given base pointer to point at the given element number of the
-@@ -436,26 +436,26 @@ class FunctionEmitContext {
-         pointer must be a pointer to a structure type.  The ptrType gives
-         the type of the pointer, though it may be NULL if the base pointer
-         is uniform. */
--    llvm::Value *AddElementOffset(llvm::Value *basePtr, int elementNum, const Type *ptrType, const char *name = NULL,
--                                  const PointerType **resultPtrType = NULL);
-+    llvm::Value *AddElementOffset(llvm::Value *basePtr, int elementNum, const Type *ptrType,
-+                                  const llvm::Twine &name = "", const PointerType **resultPtrType = NULL);
- 
-     /** Bool is stored as i8 and <WIDTH x i8> but represented in IR as i1 and
-      * <WIDTH x MASK>. This is a helper function to match bool size at storage
-      * interface. */
--    llvm::Value *SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const char *name = NULL);
-+    llvm::Value *SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name = "");
-     /** Load from the memory location(s) given by lvalue, using the given
-         mask.  The lvalue may be varying, in which case this corresponds to
-         a gather from the multiple memory locations given by the array of
-         pointer values given by the lvalue.  If the lvalue is not varying,
-         then both the mask pointer and the type pointer may be NULL. */
--    llvm::Value *LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrType, const char *name = NULL,
-+    llvm::Value *LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrType, const llvm::Twine &name = "",
-                           bool one_elem = false);
- 
-     /* Load from memory location(s) given.
-      * 'type' needs to be provided when storage type is different from IR type. For example,
-      * 'unform bool' is 'i1' in IR but stored as 'i8'.
-      * Otherwise leave this as NULL. */
--    llvm::Value *LoadInst(llvm::Value *ptr, const Type *type = NULL, const char *name = NULL);
-+    llvm::Value *LoadInst(llvm::Value *ptr, const Type *type = NULL, const llvm::Twine &name = "");
- 
-     /** Emits an alloca instruction to allocate stack storage for the given
-         type.  If a non-zero alignment is specified, the object is also
-@@ -463,7 +463,8 @@ class FunctionEmitContext {
-         instruction is added at the start of the function in the entry
-         basic block; if it should be added to the current basic block, then
-         the atEntryBlock parameter should be false. */
--    llvm::Value *AllocaInst(llvm::Type *llvmType, const char *name = NULL, int align = 0, bool atEntryBlock = true);
-+    llvm::Value *AllocaInst(llvm::Type *llvmType, const llvm::Twine &name = "", int align = 0,
-+                            bool atEntryBlock = true);
- 
-     /** Emits an alloca instruction to allocate stack storage for the given
-         type.  If a non-zero alignment is specified, the object is also
-@@ -474,7 +475,7 @@ class FunctionEmitContext {
-         This implementation is preferred when possible. It is needed when
-         storage type is different from IR type. For example,
-         'unform bool' is 'i1' in IR but stored as 'i8'. */
--    llvm::Value *AllocaInst(const Type *ptrType, const char *name = NULL, int align = 0, bool atEntryBlock = true);
-+    llvm::Value *AllocaInst(const Type *ptrType, const llvm::Twine &name = "", int align = 0, bool atEntryBlock = true);
- 
-     /** Standard store instruction; for this variant, the lvalue must be a
-         single pointer, not a varying lvalue.
-@@ -502,39 +503,41 @@ class FunctionEmitContext {
-     /** This convenience method maps to an llvm::ExtractElementInst if the
-         given value is a llvm::VectorType, and to an llvm::ExtractValueInst
-         otherwise. */
--    llvm::Value *ExtractInst(llvm::Value *v, int elt, const char *name = NULL);
-+    llvm::Value *ExtractInst(llvm::Value *v, int elt, const llvm::Twine &name = "");
- 
-     /** This convenience method maps to an llvm::InsertElementInst if the
-         given value is a llvm::VectorType, and to an llvm::InsertValueInst
-         otherwise. */
--    llvm::Value *InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const char *name = NULL);
-+    llvm::Value *InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const llvm::Twine &name = "");
- 
-     /** This convenience method maps to an llvm::ShuffleVectorInst. */
--    llvm::Value *ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const char *name = NULL);
-+    llvm::Value *ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const llvm::Twine &name = "");
- 
-     /** This convenience method to generate broadcast pattern. It takes a value
-         and a vector type. Type of the value must match element type of the
-         vector. */
--    llvm::Value *BroadcastValue(llvm::Value *v, llvm::Type *vecType, const char *name = NULL);
-+    llvm::Value *BroadcastValue(llvm::Value *v, llvm::Type *vecType, const llvm::Twine &name = "");
- 
--    llvm::PHINode *PhiNode(llvm::Type *type, int count, const char *name = NULL);
--    llvm::Instruction *SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1, const char *name = NULL);
-+    llvm::PHINode *PhiNode(llvm::Type *type, int count, const llvm::Twine &name = "");
-+    llvm::Instruction *SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1,
-+                                  const llvm::Twine &name = "");
- 
-     /** Emits IR to do a function call with the given arguments.  If the
-         function type is a varying function pointer type, its full type
-         must be provided in funcType.  funcType can be NULL if func is a
-         uniform function pointer. */
-     llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, const std::vector<llvm::Value *> &args,
--                          const char *name = NULL);
-+                          const llvm::Twine &name = "");
- 
-     /** This is a convenience method that issues a call instruction to a
-         function that takes just a single argument. */
--    llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg, const char *name = NULL);
-+    llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg,
-+                          const llvm::Twine &name = "");
- 
-     /** This is a convenience method that issues a call instruction to a
-         function that takes two arguments. */
-     llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg0, llvm::Value *arg1,
--                          const char *name = NULL);
-+                          const llvm::Twine &name = "");
- 
-     /** Launch an asynchronous task to run the given function, passing it
-         he given argument values. */
-@@ -756,9 +759,10 @@ class FunctionEmitContext {
-     void maskedStore(llvm::Value *value, llvm::Value *ptr, const Type *ptrType, llvm::Value *mask);
-     void storeUniformToSOA(llvm::Value *value, llvm::Value *ptr, llvm::Value *mask, const Type *valueType,
-                            const PointerType *ptrType);
--    llvm::Value *loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType, const char *name);
-+    llvm::Value *loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType,
-+                                    const llvm::Twine &name = "");
- 
--    llvm::Value *gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask, const char *name);
-+    llvm::Value *gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask, const llvm::Twine &name = "");
- 
-     llvm::Value *addVaryingOffsetsIfNeeded(llvm::Value *ptr, const Type *ptrType);
- };
-diff --git a/src/expr.cpp b/src/expr.cpp
-index 80cc3020a..6d38d1889 100644
---- a/src/expr.cpp
-+++ b/src/expr.cpp
-@@ -1021,11 +1021,11 @@ static llvm::Value *lEmitNegate(Expr *arg, SourcePos pos, FunctionEmitContext *c
-     ctx->SetDebugPos(pos);
-     if (type->IsFloatType()) {
-         llvm::Value *zero = llvm::ConstantFP::getZeroValueForNegation(type->LLVMType(g->ctx));
--        return ctx->BinaryOperator(llvm::Instruction::FSub, zero, argVal, LLVMGetName(argVal, "_negate"));
-+        return ctx->BinaryOperator(llvm::Instruction::FSub, zero, argVal, llvm::Twine(argVal->getName()) + "_negate");
-     } else {
-         llvm::Value *zero = lLLVMConstantValue(type, g->ctx, 0.);
-         AssertPos(pos, type->IsIntType());
--        return ctx->BinaryOperator(llvm::Instruction::Sub, zero, argVal, LLVMGetName(argVal, "_negate"));
-+        return ctx->BinaryOperator(llvm::Instruction::Sub, zero, argVal, llvm::Twine(argVal->getName()) + "_negate");
-     }
- }
- 
-@@ -1047,11 +1047,11 @@ llvm::Value *UnaryExpr::GetValue(FunctionEmitContext *ctx) const {
-         return lEmitNegate(expr, pos, ctx);
-     case LogicalNot: {
-         llvm::Value *argVal = expr->GetValue(ctx);
--        return ctx->NotOperator(argVal, LLVMGetName(argVal, "_logicalnot"));
-+        return ctx->NotOperator(argVal, llvm::Twine(argVal->getName()) + "_logicalnot");
-     }
-     case BitNot: {
-         llvm::Value *argVal = expr->GetValue(ctx);
--        return ctx->NotOperator(argVal, LLVMGetName(argVal, "_bitnot"));
-+        return ctx->NotOperator(argVal, llvm::Twine(argVal->getName()) + "_bitnot");
-     }
-     default:
-         FATAL("logic error");
-@@ -1518,7 +1518,8 @@ static llvm::Value *lEmitBinaryArith(BinaryExpr::Op op, llvm::Value *value0, llv
-             return NULL;
-         }
- 
--        return ctx->BinaryOperator(inst, value0, value1, LLVMGetName(opName, value0, value1));
-+        return ctx->BinaryOperator(inst, value0, value1,
-+                                   (((llvm::Twine(opName) + "_") + value0->getName()) + "_") + value1->getName());
-     }
- }
- 
-@@ -1563,7 +1564,7 @@ static llvm::Value *lEmitBinaryCmp(BinaryExpr::Op op, llvm::Value *e0Val, llvm::
-     }
- 
-     llvm::Value *cmp = ctx->CmpInst(isFloatOp ? llvm::Instruction::FCmp : llvm::Instruction::ICmp, pred, e0Val, e1Val,
--                                    LLVMGetName(opName, e0Val, e1Val));
-+                                    (((llvm::Twine(opName) + "_") + e0Val->getName()) + "_") + e1Val->getName());
-     // This is a little ugly: CmpInst returns i1 values, but we use vectors
-     // of i32s for varying bool values; type convert the result here if
-     // needed.
-@@ -4177,7 +4178,7 @@ static llvm::Value *lConvertToSlicePointer(FunctionEmitContext *ctx, llvm::Value
-     // offsets
-     llvm::Value *result = llvm::Constant::getNullValue(sliceStructType);
-     // And replace the pointer in the struct with the given pointer
--    return ctx->InsertInst(result, ptr, 0, LLVMGetName(ptr, "_slice"));
-+    return ctx->InsertInst(result, ptr, 0, llvm::Twine(ptr->getName()) + "_slice");
- }
- 
- /** If the given array index is a compile time constant, check to see if it
-@@ -4258,8 +4259,8 @@ llvm::Value *IndexExpr::GetLValue(FunctionEmitContext *ctx) const {
-         // Convert to a slice pointer if we're indexing into SOA data
-         basePtrValue = lConvertPtrToSliceIfNeeded(ctx, basePtrValue, &baseExprType);
- 
--        llvm::Value *ptr =
--            ctx->GetElementPtrInst(basePtrValue, indexValue, baseExprType, LLVMGetName(basePtrValue, "_offset"));
-+        llvm::Value *ptr = ctx->GetElementPtrInst(basePtrValue, indexValue, baseExprType,
-+                                                  llvm::Twine(basePtrValue->getName()) + "_offset");
-         return lAddVaryingOffsetsIfNeeded(ctx, ptr, GetLValueType());
-     }
- 
-@@ -4290,8 +4291,8 @@ llvm::Value *IndexExpr::GetLValue(FunctionEmitContext *ctx) const {
-     ctx->SetDebugPos(pos);
- 
-     // And do the actual indexing calculation..
--    llvm::Value *ptr =
--        ctx->GetElementPtrInst(basePtr, LLVMInt32(0), indexValue, basePtrType, LLVMGetName(basePtr, "_offset"));
-+    llvm::Value *ptr = ctx->GetElementPtrInst(basePtr, LLVMInt32(0), indexValue, basePtrType,
-+                                              llvm::Twine(basePtr->getName()) + "_offset");
-     return lAddVaryingOffsetsIfNeeded(ctx, ptr, GetLValueType());
- }
- 
-@@ -4788,15 +4789,14 @@ llvm::Value *VectorMemberExpr::GetValue(FunctionEmitContext *ctx) const {
-         for (size_t i = 0; i < identifier.size(); ++i) {
-             char idStr[2] = {identifier[i], '\0'};
-             llvm::Value *elementPtr =
--                ctx->AddElementOffset(basePtr, indices[i], basePtrType, LLVMGetName(basePtr, idStr));
-+                ctx->AddElementOffset(basePtr, indices[i], basePtrType, llvm::Twine(basePtr->getName()) + idStr);
-             llvm::Value *elementValue = ctx->LoadInst(elementPtr, elementMask, elementPtrType);
- 
--            const char *resultName = LLVMGetName(resultPtr, idStr);
--            llvm::Value *ptmp = ctx->AddElementOffset(resultPtr, i, NULL, resultName);
-+            llvm::Value *ptmp = ctx->AddElementOffset(resultPtr, i, NULL, llvm::Twine(resultPtr->getName()) + idStr);
-             ctx->StoreInst(elementValue, ptmp, elementPtrType, expr->GetType()->IsUniformType());
-         }
- 
--        return ctx->LoadInst(resultPtr, memberType, LLVMGetName(basePtr, "_swizzle"));
-+        return ctx->LoadInst(resultPtr, memberType, llvm::Twine(basePtr->getName()) + "_swizzle");
-     }
- }
- 
-@@ -4932,7 +4932,7 @@ llvm::Value *MemberExpr::GetValue(FunctionEmitContext *ctx) const {
- 
-     ctx->SetDebugPos(pos);
-     std::string suffix = std::string("_") + identifier;
--    return ctx->LoadInst(lvalue, mask, lvalueType, LLVMGetName(lvalue, suffix.c_str()));
-+    return ctx->LoadInst(lvalue, mask, lvalueType, llvm::Twine(lvalue->getName()) + suffix);
- }
- 
- const Type *MemberExpr::GetType() const { return NULL; }
-@@ -6502,7 +6502,7 @@ static llvm::Value *lTypeConvAtomic(FunctionEmitContext *ctx, llvm::Value *exprV
-                 // does for everyone else...
-                 Assert(cast);
-                 cast = ctx->SwitchBoolSize(cast, LLVMTypes::BoolVectorType->getElementType(),
--                                           LLVMGetName(cast, "to_i_bool"));
-+                                           llvm::Twine(cast->getName()) + "to_i_bool");
-             }
-         } else {
-             // fromType->IsVaryingType())
-@@ -8246,7 +8246,7 @@ llvm::Value *NewExpr::GetValue(FunctionEmitContext *ctx) const {
-         // pointer of the return type and to run the code for initializers,
-         // if present.
-         llvm::Type *ptrType = retType->LLVMType(g->ctx);
--        ptrValue = ctx->BitCastInst(ptrValue, ptrType, LLVMGetName(ptrValue, "_cast_ptr"));
-+        ptrValue = ctx->BitCastInst(ptrValue, ptrType, llvm::Twine(ptrValue->getName()) + "_cast_ptr");
- 
-         if (initExpr != NULL)
-             InitSymbol(ptrValue, allocType, initExpr, ctx, pos);
-diff --git a/src/llvmutil.cpp b/src/llvmutil.cpp
-index 970175dbf..d0becb9f5 100644
---- a/src/llvmutil.cpp
-+++ b/src/llvmutil.cpp
-@@ -1605,23 +1605,6 @@ llvm::Value *LLVMShuffleVectors(llvm::Value *v1, llvm::Value *v2, int32_t shuf[]
-     return new llvm::ShuffleVectorInst(v1, v2, vec, "shuffle", insertBefore);
- }
- 
--const char *LLVMGetName(llvm::Value *v, const char *s) {
--    if (v == NULL)
--        return s;
--    std::string ret = std::string(v->getName());
--    ret += s;
--    return strdup(ret.c_str());
--}
--
--const char *LLVMGetName(const char *op, llvm::Value *v1, llvm::Value *v2) {
--    std::string r = op;
--    r += "_";
--    r += v1->getName().str();
--    r += "_";
--    r += v2->getName().str();
--    return strdup(r.c_str());
--}
--
- #ifdef ISPC_GENX_ENABLED
- bool lIsSVMLoad(llvm::Instruction *inst) {
-     Assert(inst);
-diff --git a/src/llvmutil.h b/src/llvmutil.h
-index 42cce4d83..07d089bb4 100644
---- a/src/llvmutil.h
-+++ b/src/llvmutil.h
-@@ -328,11 +328,6 @@ extern llvm::Value *LLVMConcatVectors(llvm::Value *v1, llvm::Value *v2, llvm::In
- extern llvm::Value *LLVMShuffleVectors(llvm::Value *v1, llvm::Value *v2, int32_t shuf[], int shufSize,
-                                        llvm::Instruction *insertBefore);
- 
--/** Utility routines to concat strings with the names of existing values to
--    create meaningful new names for instruction values.
--*/
--extern const char *LLVMGetName(llvm::Value *v, const char *);
--extern const char *LLVMGetName(const char *op, llvm::Value *v1, llvm::Value *v2);
- #ifdef ISPC_GENX_ENABLED
- enum AddressSpace { Local, Global, External };
- 
-diff --git a/src/opt.cpp b/src/opt.cpp
-index 5b1ac7b63..9d6cae058 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -257,7 +257,7 @@ static bool lGetSourcePosFromMetadata(const llvm::Instruction *inst, SourcePos *
-     return true;
- }
- 
--static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, const char *name,
-+static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[2] = {arg0, arg1};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[2]);
-@@ -265,21 +265,22 @@ static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llv
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    const char *name, llvm::Instruction *insertBefore = NULL) {
-+                                    const llvm::Twine &name, llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[3] = {arg0, arg1, arg2};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[3]);
-     return llvm::CallInst::Create(func, newArgArray, name, insertBefore);
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, const char *name, llvm::Instruction *insertBefore = NULL) {
-+                                    llvm::Value *arg3, const llvm::Twine &name,
-+                                    llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[4] = {arg0, arg1, arg2, arg3};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[4]);
-     return llvm::CallInst::Create(func, newArgArray, name, insertBefore);
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, llvm::Value *arg4, const char *name,
-+                                    llvm::Value *arg3, llvm::Value *arg4, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[5] = {arg0, arg1, arg2, arg3, arg4};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[5]);
-@@ -287,7 +288,7 @@ static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llv
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, llvm::Value *arg4, llvm::Value *arg5, const char *name,
-+                                    llvm::Value *arg3, llvm::Value *arg4, llvm::Value *arg5, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[6] = {arg0, arg1, arg2, arg3, arg4, arg5};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[6]);
-@@ -991,23 +992,24 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 llvm::Type *returnType = callInst->getType();
-                 Assert(llvm::isa<llvm::VectorType>(returnType));
-                 // cast the i8 * to the appropriate type
--                const char *name = LLVMGetName(callInst->getArgOperand(0), "_cast");
--                llvm::Value *castPtr = new llvm::BitCastInst(callInst->getArgOperand(0),
--                                                             llvm::PointerType::get(returnType, 0), name, callInst);
-+                llvm::Value *castPtr =
-+                    new llvm::BitCastInst(callInst->getArgOperand(0), llvm::PointerType::get(returnType, 0),
-+                                          llvm::Twine(callInst->getArgOperand(0)->getName()) + "_cast", callInst);
-                 lCopyMetadata(castPtr, callInst);
-                 int align;
-                 if (g->opt.forceAlignedMemory)
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
--                name = LLVMGetName(callInst->getArgOperand(0), "_load");
- #if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
--                llvm::Instruction *loadInst = new llvm::LoadInst(castPtr, name, false /* not volatile */,
--                                                                 llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
-+                llvm::Instruction *loadInst =
-+                    new llvm::LoadInst(castPtr, llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load",
-+                                       false /* not volatile */, llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
- #else
-                 llvm::Instruction *loadInst = new llvm::LoadInst(
--                    llvm::dyn_cast<llvm::PointerType>(castPtr->getType())->getPointerElementType(), castPtr, name,
--                    false /* not volatile */, llvm::MaybeAlign(align).valueOrOne(), (llvm::Instruction *)NULL);
-+                    llvm::dyn_cast<llvm::PointerType>(castPtr->getType())->getPointerElementType(), castPtr,
-+                    llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load", false /* not volatile */,
-+                    llvm::MaybeAlign(align).valueOrOne(), (llvm::Instruction *)NULL);
- #endif
-                 lCopyMetadata(loadInst, callInst);
-                 llvm::ReplaceInstWithInst(callInst, loadInst);
-@@ -1028,9 +1030,9 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 // all lanes storing, so replace with a regular store
-                 llvm::Value *rvalue = callInst->getArgOperand(2);
-                 llvm::Type *storeType = rvalue->getType();
--                const char *name = LLVMGetName(callInst->getArgOperand(0), "_ptrcast");
--                llvm::Value *castPtr = new llvm::BitCastInst(callInst->getArgOperand(0),
--                                                             llvm::PointerType::get(storeType, 0), name, callInst);
-+                llvm::Value *castPtr =
-+                    new llvm::BitCastInst(callInst->getArgOperand(0), llvm::PointerType::get(storeType, 0),
-+                                          llvm::Twine(callInst->getArgOperand(0)->getName()) + "_ptrcast", callInst);
-                 lCopyMetadata(castPtr, callInst);
- 
-                 int align;
-@@ -1339,8 +1341,8 @@ static llvm::Value *lGetBasePointer(llvm::Value *v, llvm::Instruction *insertBef
-         if (t == NULL) {
-             return NULL;
-         } else {
--            return llvm::CastInst::Create(ci->getOpcode(), t, ci->getType()->getScalarType(), LLVMGetName(t, "_cast"),
--                                          insertBefore);
-+            return llvm::CastInst::Create(ci->getOpcode(), t, ci->getType()->getScalarType(),
-+                                          llvm::Twine(t->getName()) + "_cast", insertBefore);
-         }
-     }
- 
-@@ -1583,13 +1585,13 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-         if (co == NULL)
-             *constOffset = NULL;
-         else
--            *constOffset =
--                llvm::CastInst::Create(cast->getOpcode(), co, cast->getType(), LLVMGetName(co, "_cast"), insertBefore);
-+            *constOffset = llvm::CastInst::Create(cast->getOpcode(), co, cast->getType(),
-+                                                  llvm::Twine(co->getName()) + "_cast", insertBefore);
-         if (vo == NULL)
-             *variableOffset = NULL;
-         else
--            *variableOffset =
--                llvm::CastInst::Create(cast->getOpcode(), vo, cast->getType(), LLVMGetName(vo, "_cast"), insertBefore);
-+            *variableOffset = llvm::CastInst::Create(cast->getOpcode(), vo, cast->getType(),
-+                                                     llvm::Twine(vo->getName()) + "_cast", insertBefore);
-         return;
-     }
- 
-@@ -1608,16 +1610,18 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-             else if (c1 == NULL || llvm::isa<llvm::ConstantAggregateZero>(c1))
-                 *constOffset = c0;
-             else
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, c0, c1, LLVMGetName("add", c0, c1),
--                                                            insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, c0, c1, ((llvm::Twine("add_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
- 
-             if (v0 == NULL || llvm::isa<llvm::ConstantAggregateZero>(v0))
-                 *variableOffset = v1;
-             else if (v1 == NULL || llvm::isa<llvm::ConstantAggregateZero>(v1))
-                 *variableOffset = v0;
-             else
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, v0, v1,
--                                                               LLVMGetName("add", v0, v1), insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, v0, v1, ((llvm::Twine("add_") + v0->getName()) + "_") + v1->getName(),
-+                    insertBefore);
-             return;
-         } else if (bop->getOpcode() == llvm::Instruction::Shl) {
-             lExtractConstantOffset(op0, &c0, &v0, insertBefore);
-@@ -1633,10 +1637,12 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-                 *constOffset = vec;
-                 *variableOffset = NULL;
-             } else {
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Shl, c0, c1, LLVMGetName("shl", c0, c1),
--                                                            insertBefore);
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Shl, v0, c1,
--                                                               LLVMGetName("shl", v0, c1), insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Shl, c0, c1, ((llvm::Twine("shl_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Shl, v0, c1, ((llvm::Twine("shl_") + v0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-             }
-             return;
-         } else if (bop->getOpcode() == llvm::Instruction::Mul) {
-@@ -1648,25 +1654,30 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-             // Note that the first term is a constant and the last three are
-             // variable.
-             if (c0 != NULL && c1 != NULL)
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, c1, LLVMGetName("mul", c0, c1),
--                                                            insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Mul, c0, c1, ((llvm::Twine("mul_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-             else
-                 *constOffset = NULL;
- 
-             llvm::Value *va = NULL, *vb = NULL, *vc = NULL;
-             if (v0 != NULL && c1 != NULL)
--                va = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, c1, LLVMGetName("mul", v0, c1),
-+                va = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, c1,
-+                                                  ((llvm::Twine("mul_") + v0->getName()) + "_") + c1->getName(),
-                                                   insertBefore);
-             if (c0 != NULL && v1 != NULL)
--                vb = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, v1, LLVMGetName("mul", c0, v1),
-+                vb = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, v1,
-+                                                  ((llvm::Twine("mul_") + c0->getName()) + "_") + v1->getName(),
-                                                   insertBefore);
-             if (v0 != NULL && v1 != NULL)
--                vc = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, v1, LLVMGetName("mul", v0, v1),
-+                vc = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, v1,
-+                                                  ((llvm::Twine("mul_") + v0->getName()) + "_") + v1->getName(),
-                                                   insertBefore);
- 
-             llvm::Value *vab = NULL;
-             if (va != NULL && vb != NULL)
--                vab = llvm::BinaryOperator::Create(llvm::Instruction::Add, va, vb, LLVMGetName("add", va, vb),
-+                vab = llvm::BinaryOperator::Create(llvm::Instruction::Add, va, vb,
-+                                                   ((llvm::Twine("add_") + va->getName()) + "_") + vb->getName(),
-                                                    insertBefore);
-             else if (va != NULL)
-                 vab = va;
-@@ -1674,8 +1685,9 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-                 vab = vb;
- 
-             if (vab != NULL && vc != NULL)
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, vab, vc,
--                                                               LLVMGetName("add", vab, vc), insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, vab, vc, ((llvm::Twine("add_") + vab->getName()) + "_") + vc->getName(),
-+                    insertBefore);
-             else if (vab != NULL)
-                 *variableOffset = vab;
-             else
-@@ -1943,7 +1955,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-             // all zeros (i.e. a ConstantAggregateZero, but just in case,
-             // do the more general check with lVectorIs32BitInts().
-             variableOffset = new llvm::TruncInst(variableOffset, LLVMTypes::Int32VectorType,
--                                                 LLVMGetName(variableOffset, "_trunc"), insertBefore);
-+                                                 llvm::Twine(variableOffset->getName()) + "_trunc", insertBefore);
-         else
-             return false;
-     }
-@@ -1952,7 +1964,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-         if (lVectorIs32BitInts(constOffset)) {
-             // Truncate them so we have a 32-bit vector type for them.
-             constOffset = new llvm::TruncInst(constOffset, LLVMTypes::Int32VectorType,
--                                              LLVMGetName(constOffset, "_trunc"), insertBefore);
-+                                              llvm::Twine(constOffset->getName()) + "_trunc", insertBefore);
-         } else {
-             // FIXME: otherwise we just assume that all constant offsets
-             // can actually always fit into 32-bits...  (This could be
-@@ -1963,7 +1975,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-             // llvm::ConstantFoldInstruction() doesn't seem to be doing
-             // enough for us in some cases if we call it from here.
-             constOffset = new llvm::TruncInst(constOffset, LLVMTypes::Int32VectorType,
--                                              LLVMGetName(constOffset, "_trunc"), insertBefore);
-+                                              llvm::Twine(constOffset->getName()) + "_trunc", insertBefore);
-         }
-     }
- 
-@@ -2012,8 +2024,8 @@ static bool lOffsets32BitSafe(llvm::Value **offsetPtr, llvm::Instruction *insert
- 
-         // Alternatively, offset could be a sequence of adds terminating
-         // in safe constant vectors or a SExt.
--        *offsetPtr =
--            new llvm::TruncInst(offset, LLVMTypes::Int32VectorType, LLVMGetName(offset, "_trunc"), insertBefore);
-+        *offsetPtr = new llvm::TruncInst(offset, LLVMTypes::Int32VectorType, llvm::Twine(offset->getName()) + "_trunc",
-+                                         insertBefore);
-         return true;
-     } else
-         return false;
-@@ -2229,7 +2241,8 @@ static bool lGSToGSBaseOffsets(llvm::CallInst *callInst) {
-     }
-     // Cast the base pointer to a void *, since that's what the
-     // __pseudo_*_base_offsets_* functions want.
--    basePtr = new llvm::IntToPtrInst(basePtr, LLVMTypes::VoidPointerType, LLVMGetName(basePtr, "_2void"), callInst);
-+    basePtr = new llvm::IntToPtrInst(basePtr, LLVMTypes::VoidPointerType, llvm::Twine(basePtr->getName()) + "_2void",
-+                                     callInst);
-     lCopyMetadata(basePtr, callInst);
-     llvm::Function *gatherScatterFunc = info->baseOffsetsFunc;
- 
-@@ -2803,7 +2816,7 @@ static bool lGSToLoadStore(llvm::CallInst *callInst) {
-                 lCopyMetadata(ptr, callInst);
-                 Debug(pos, "Transformed gather to unaligned vector load!");
-                 llvm::Instruction *newCall =
--                    lCallInst(gatherInfo->loadMaskedFunc, ptr, mask, LLVMGetName(ptr, "_masked_load"));
-+                    lCallInst(gatherInfo->loadMaskedFunc, ptr, mask, llvm::Twine(ptr->getName()) + "_masked_load");
-                 lCopyMetadata(newCall, callInst);
-                 llvm::ReplaceInstWithInst(callInst, newCall);
-                 return true;
diff --git a/srcpkgs/ispc/patches/llvm12-004.patch b/srcpkgs/ispc/patches/llvm12-004.patch
deleted file mode 100644
index 3a94d8443a5e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-004.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From c03a5142444476a1caa5c2ba7fa2d92d7793d6f1 Mon Sep 17 00:00:00 2001
-From: Deepak Rajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Mon, 25 Jan 2021 09:22:49 -0800
-Subject: [PATCH] Fixing build on llvm trunk.
-
----
- src/ctx.cpp | 7 +++----
- 1 file changed, 3 insertions(+), 4 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index ded524b71..b60e6fe84 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1020,8 +1020,7 @@ void FunctionEmitContext::EmitCaseLabel(int value, bool checkMask, SourcePos pos
-     llvm::BasicBlock *bbCaseImpl = NULL;
-     if (emitGenXHardwareMask()) {
-         // Create basic block with actual case implementation
--        llvm::Twine bbName = llvm::Twine(bbCase->getName()) + "_impl";
--        bbCaseImpl = CreateBasicBlock(bbName, bbCase);
-+        bbCaseImpl = CreateBasicBlock(llvm::Twine(bbCase->getName()) + "_impl", bbCase);
-     }
- #endif
- 
-@@ -3142,8 +3141,8 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     llvm::Value *undef2 = llvm::UndefValue::get(vecType);
- 
-     // InsertElement
--    llvm::Twine tw = name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + llvm::Twine("_init");
--    llvm::Value *insert = InsertInst(undef1, v, 0, tw.str().c_str());
-+    llvm::Value *insert =
-+        InsertInst(undef1, v, 0, name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + "_init");
- 
-     // ShuffleVector
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
diff --git a/srcpkgs/ispc/patches/llvm12-005.patch b/srcpkgs/ispc/patches/llvm12-005.patch
deleted file mode 100644
index e3e96b00abfa..000000000000
--- a/srcpkgs/ispc/patches/llvm12-005.patch
+++ /dev/null
@@ -1,372 +0,0 @@
-From c1d0a51bf8416d42144de9e2bdd59825eaeff1ac Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Fri, 8 Jan 2021 14:13:49 -0800
-Subject: [PATCH] LLVM 11 support for gen code
-
----
- src/ctx.cpp                     |  13 ++-
- src/gen/GlobalsLocalization.cpp |   9 +-
- src/opt.cpp                     | 143 ++++++++++++++++++++++++--------
- 3 files changed, 124 insertions(+), 41 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index b60e6fe84..2a72e6837 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1,5 +1,5 @@
- /*
--  Copyright (c) 2010-2020, Intel Corporation
-+  Copyright (c) 2010-2021, Intel Corporation
-   All rights reserved.
- 
-   Redistribution and use in source and binary forms, with or without
-@@ -3685,8 +3685,17 @@ llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::
-     AssertPos(currentPos, llvm::isa<llvm::VectorType>(value->getType()));
-     llvm::VectorType *vt = llvm::dyn_cast<llvm::VectorType>(value->getType());
-     if (defaults == NULL) {
--        defaults = llvm::ConstantVector::getSplat(value->getType()->getVectorNumElements(),
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+        defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-+                                                  llvm::Constant::getNullValue(vt->getElementType()));
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+        defaults = llvm::ConstantVector::getSplat({static_cast<unsigned int>(vt->getNumElements()), false},
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
-+#else
-+        defaults = llvm::ConstantVector::getSplat(
-+            llvm::ElementCount::get(static_cast<unsigned int>(vt->getNumElements()), false),
-+            llvm::Constant::getNullValue(vt->getElementType()));
-+#endif
-     }
- 
-     auto Fn = llvm::GenXIntrinsic::getGenXDeclaration(m->module, llvm::GenXIntrinsic::genx_simdcf_predicate,
-diff --git a/src/gen/GlobalsLocalization.cpp b/src/gen/GlobalsLocalization.cpp
-index a176e9462..41f3b00e2 100644
---- a/src/gen/GlobalsLocalization.cpp
-+++ b/src/gen/GlobalsLocalization.cpp
-@@ -1,5 +1,5 @@
- /*
--  Copyright (c) 2014, 2016-2020, Intel Corporation
-+  Copyright (c) 2014, 2016-2021, Intel Corporation
-   All rights reserved.
- 
-   Redistribution and use in source and binary forms, with or without
-@@ -53,8 +53,10 @@
- #include <llvm/GenXIntrinsics/GenXIntrOpts.h>
- #include <llvm/GenXIntrinsics/GenXIntrinsics.h>
- #include <llvm/GenXIntrinsics/GenXMetadata.h>
--#include <llvm/IR/CFG.h>
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
- #include <llvm/IR/CallSite.h>
-+#endif
-+#include <llvm/IR/CFG.h>
- #include <llvm/IR/DebugInfo.h>
- #include <llvm/IR/Dominators.h>
- #include <llvm/IR/Function.h>
-@@ -470,7 +472,8 @@ void GlobalsLocalization::LocalizeGlobals(LocalizationInfo &LI) {
-         Instruction &FirstI = *Fn->getEntryBlock().begin();
-         Type *ElemTy = GV->getType()->getElementType();
-         AllocaInst *Alloca = new AllocaInst(ElemTy, 0, GV->getName() + ".local", &FirstI);
--        Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()));
-+        Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()).valueOrOne());
-+
-         if (!isa<UndefValue>(GV->getInitializer()))
-             new StoreInst(GV->getInitializer(), Alloca, &FirstI);
- 
-diff --git a/src/opt.cpp b/src/opt.cpp
-index d58d77f73..1789b8476 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -2899,15 +2899,17 @@ static llvm::Function *lGenXMaskedInt8Inst(llvm::Instruction *inst, bool isStore
- static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::Instruction *inst) {
-     Assert(g->target->isGenXTarget());
-     Assert(llvm::isa<llvm::VectorType>(val->getType()));
--    Assert(llvm::isPowerOf2_32(val->getType()->getVectorNumElements()));
--    Assert(val->getType()->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-+
-+    llvm::VectorType *valVecType = llvm::dyn_cast<llvm::VectorType>(val->getType());
-+    Assert(llvm::isPowerOf2_32(valVecType->getNumElements()));
-+    Assert(valVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
- 
-     // The data write of svm store must have a size that is a power of two from 16 to 128
-     // bytes. However for int8 type and simd width = 8, the data write size is 8.
-     // So we use masked store function here instead of svm store which process int8 type
-     // correctly.
--    if (val->getType()->getPrimitiveSizeInBits() / 8 < 16) {
--        Assert(val->getType()->getScalarType() == LLVMTypes::Int8Type);
-+    if (valVecType->getPrimitiveSizeInBits() / 8 < 16) {
-+        Assert(valVecType->getScalarType() == LLVMTypes::Int8Type);
-         if (llvm::Function *maskedFunc = lGenXMaskedInt8Inst(inst, true))
-             return llvm::dyn_cast<llvm::CallInst>(lCallInst(maskedFunc, ptr, val, LLVMMaskAllOn, ""));
-         else {
-@@ -2923,15 +2925,17 @@ static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::
- 
- static llvm::CallInst *lGenXLoadInst(llvm::Value *ptr, llvm::Type *retType, llvm::Instruction *inst) {
-     Assert(llvm::isa<llvm::VectorType>(retType));
--    Assert(llvm::isPowerOf2_32(retType->getVectorNumElements()));
--    Assert(retType->getPrimitiveSizeInBits());
--    Assert(retType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-+
-+    llvm::VectorType *retVecType = llvm::dyn_cast<llvm::VectorType>(retType);
-+    Assert(llvm::isPowerOf2_32(retVecType->getNumElements()));
-+    Assert(retVecType->getPrimitiveSizeInBits());
-+    Assert(retVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-     // The data read of svm load must have a size that is a power of two from 16 to 128
-     // bytes. However for int8 type and simd width = 8, the data read size is 8.
-     // So we use masked load function here instead of svm load which process int8 type
-     // correctly.
--    if (retType->getPrimitiveSizeInBits() / 8 < 16) {
--        Assert(retType->getScalarType() == LLVMTypes::Int8Type);
-+    if (retVecType->getPrimitiveSizeInBits() / 8 < 16) {
-+        Assert(retVecType->getScalarType() == LLVMTypes::Int8Type);
-         if (llvm::Function *maskedFunc = lGenXMaskedInt8Inst(inst, false))
-             return llvm::dyn_cast<llvm::CallInst>(lCallInst(maskedFunc, ptr, LLVMMaskAllOn, ""));
-         else {
-@@ -5622,15 +5626,24 @@ static bool lVectorizeGEPs(llvm::Value *ptr, std::vector<PtrUse> &ptrUses, std::
-         llvm::PtrToIntInst *ptrToInt =
-             new llvm::PtrToIntInst(ptr, LLVMTypes::Int64Type, "vectorized_ptrtoint", insertBefore);
-         llvm::Instruction *addr = llvm::BinaryOperator::CreateAdd(ptrToInt, offset, "vectorized_address", insertBefore);
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        llvm::Type *retType = llvm::FixedVectorType::get(scalar_type, reqSize / t_size);
-+#else
-         llvm::Type *retType = llvm::VectorType::get(scalar_type, reqSize / t_size);
-+#endif
-         llvm::Function *fn = llvm::GenXIntrinsic::getGenXDeclaration(
-             m->module, llvm::GenXIntrinsic::genx_svm_block_ld_unaligned, {retType, addr->getType()});
-         llvm::Instruction *ld = llvm::CallInst::Create(fn, {addr}, "vectorized_ld", insertBefore);
- 
-         if (loadingPtr) {
-             // Cast int to ptr via inttoptr
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            ld = new llvm::IntToPtrInst(ld, llvm::FixedVectorType::get(originalType, reqSize / t_size),
-+                                        "vectorized_inttoptr", insertBefore);
-+#else
-             ld = new llvm::IntToPtrInst(ld, llvm::VectorType::get(originalType, reqSize / t_size),
-                                         "vectorized_inttoptr", insertBefore);
-+#endif
-         }
- 
-         // Scalar extracts for all loaded elements
-@@ -6160,19 +6173,34 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-         llvm::Instruction *inst = &*I;
-         if (llvm::CallInst *ci = llvm::dyn_cast<llvm::CallInst>(inst)) {
-             llvm::Function *func = ci->getCalledFunction();
--            if (func && func->getName() == "llvm.trap") {
-+            if (func && func->getName().equals("llvm.trap")) {
-                 llvm::Type *argTypes[] = {LLVMTypes::Int1VectorType, LLVMTypes::Int16VectorType};
-                 // Description of parameters for genx_raw_send_noresult can be found in target-genx.ll
-                 auto Fn = +llvm::GenXIntrinsic::getGenXDeclaration(
-                     m->module, llvm::GenXIntrinsic::genx_raw_send_noresult, argTypes);
-                 llvm::SmallVector<llvm::Value *, 8> Args;
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 0));
--                Args.push_back(llvm::ConstantVector::getSplat(g->target->getNativeVectorWidth(),
--                                                              llvm::ConstantInt::getTrue(*g->ctx)));
-+                Args.push_back(llvm::ConstantVector::getSplat(
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+                    g->target->getNativeVectorWidth(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+                    {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
-+#else // LLVM 12.0+
-+                    llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-+#endif
-+                    llvm::ConstantInt::getTrue(*g->ctx)));
-+
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 39));
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 33554448));
-                 llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
--                    g->target->getNativeVectorWidth(), llvm::Constant::getNullValue(llvm::Type::getInt16Ty(*g->ctx)));
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+                    g->target->getNativeVectorWidth(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+                    {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
-+#else // LLVM 12.0+
-+                    llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-+#endif
-+                    llvm::Constant::getNullValue(llvm::Type::getInt16Ty(*g->ctx)));
-                 Args.push_back(zeroMask);
- 
-                 llvm::Instruction *newInst = llvm::CallInst::Create(Fn, Args, ci->getName());
-@@ -6181,7 +6209,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     modifiedAny = true;
-                     goto restart;
-                 }
--            } else if (func && func->getName() == "llvm.assume") {
-+            } else if (func && func->getName().equals("llvm.assume")) {
-                 ci->eraseFromParent();
-                 modifiedAny = true;
-                 goto restart;
-@@ -6335,7 +6363,7 @@ bool CheckUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 continue;
-             for (int i = 0; i < unsupportedFuncs.size(); i++) {
-                 std::smatch match;
--                std::string funcName = func->getName();
-+                std::string funcName = func->getName().str();
-                 if (std::regex_match(funcName, match, unsupportedFuncs[i])) {
-                     // We found unsupported function. Generate error and stop compilation.
-                     SourcePos pos;
-@@ -6418,12 +6446,14 @@ bool MangleOpenCLBuiltins::runOnBasicBlock(llvm::BasicBlock &bb) {
-             if (func->getName().startswith("__spirv_ocl")) {
-                 std::string mangledName;
-                 llvm::Type *retType = func->getReturnType();
--                std::string funcName = func->getName();
-+                std::string funcName = func->getName().str();
-                 std::vector<llvm::Type *> ArgTy;
-                 // spirv OpenCL builtins are used for double types only
--                Assert(retType->isVectorTy() && retType->getVectorElementType()->isDoubleTy() ||
-+                Assert(retType->isVectorTy() &&
-+                           llvm::dyn_cast<llvm::VectorType>(retType)->getElementType()->isDoubleTy() ||
-                        retType->isSingleValueType() && retType->isDoubleTy());
--                if (retType->isVectorTy() && retType->getVectorElementType()->isDoubleTy()) {
-+                if (retType->isVectorTy() &&
-+                    llvm::dyn_cast<llvm::VectorType>(retType)->getElementType()->isDoubleTy()) {
-                     ArgTy.push_back(LLVMTypes::DoubleVectorType);
-                     // _DvWIDTH suffix is used in target file to differentiate scalar
-                     // and vector versions of intrinsics. Here we remove this
-@@ -6511,8 +6541,15 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- 
-     // Cast offsets to int64
-     Offsets = new llvm::ZExtInst(
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        Offsets,
-+        llvm::FixedVectorType::get(LLVMTypes::Int64Type,
-+                                   llvm::dyn_cast<llvm::VectorType>(Offsets->getType())->getNumElements()),
-+        "svm_offset_zext", InsertBefore);
-+#else
-         Offsets, llvm::VectorType::get(LLVMTypes::Int64Type, Offsets->getType()->getVectorNumElements()),
-         "svm_offset_zext", InsertBefore);
-+#endif
- 
-     if (!llvm::isa<llvm::ConstantPointerNull>(Ptr)) {
-         // Cast ptr to int64
-@@ -6520,13 +6557,31 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- 
-         // Vectorize ptr
-         llvm::Value *undefInsertValue =
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            llvm::UndefValue::get(llvm::FixedVectorType::get(
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+#else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
-+#endif
-         address = llvm::InsertElementInst::Create(undefInsertValue, address, LLVMInt32(0), "svm_ptr_iei", InsertBefore);
-         llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+            {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
-+#else
-+        llvm::ElementCount::get(
-+                                llvm::dyn_cast<llvm::FixedVectorType>(addressType->getNumElements(), false),
-+#endif
-             llvm::Constant::getNullValue(llvm::Type::getInt32Ty(InsertBefore->getContext())));
-+
-         llvm::Value *undefShuffleValue =
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            llvm::UndefValue::get(llvm::FixedVectorType::get(
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+#else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
-+#endif
-         address = new llvm::ShuffleVectorInst(address, undefShuffleValue, zeroVec, "svm_ptr_svi", InsertBefore);
- 
-         // Calculate address
-@@ -6553,9 +6608,12 @@ llvm::Instruction *FixAddressSpace::processVectorLoad(llvm::LoadInst *LI) {
-     if (retType->getScalarType()->isPointerTy()) {
-         isPtrLoad = true;
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        retType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(retType)->getNumElements());
-+#else
-         retType = llvm::VectorType::get(scalarType, retType->getVectorNumElements());
-+#endif
-     }
--
-     llvm::Instruction *res = lGenXLoadInst(ptr, retType, llvm::dyn_cast<llvm::Instruction>(LI));
-     Assert(res);
- 
-@@ -6580,11 +6638,16 @@ llvm::Instruction *FixAddressSpace::processSVMVectorLoad(llvm::Instruction *CI)
-     ptr = new llvm::IntToPtrInst(ptr, llvm::PointerType::get(retType, 0), CI->getName() + "_inttoptr", CI);
-     llvm::Instruction *loadInst = NULL;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    loadInst = new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), loadInst,
--                                  CI->getName(), (llvm::Instruction *)NULL);
-+    loadInst = new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-+                                  CI->getName(), false /* not volatile */,
-+                                  llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne(),
-+                                  (llvm::Instruction *)NULL);
- #else
--    loadInst = new llvm::LoadInst(ptr, CI->getName(), (llvm::Instruction *)NULL);
-+    loadInst = new llvm::LoadInst(ptr, CI->getName(), false,
-+                                  llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne(),
-+                                  (llvm::Instruction *)NULL);
- #endif
-+
-     Assert(loadInst);
-     return loadInst;
- }
-@@ -6606,7 +6669,11 @@ llvm::Instruction *FixAddressSpace::processVectorStore(llvm::StoreInst *SI) {
-     // Note: it doesn't look like a normal case for GenX target
-     if (valType->getScalarType()->isPointerTy()) {
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        valType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(valType)->getNumElements());
-+#else
-         valType = llvm::VectorType::get(scalarType, valType->getVectorNumElements());
-+#endif
-         val = new llvm::PtrToIntInst(val, valType, "svm_st_val_ptrtoint", SI);
-     }
- 
-@@ -6631,12 +6698,8 @@ llvm::Instruction *FixAddressSpace::processSVMVectorStore(llvm::Instruction *CI)
-     ptr = new llvm::IntToPtrInst(ptr, llvm::PointerType::get(valType, 0), CI->getName() + "_inttoptr", CI);
- 
-     llvm::Instruction *storeInst = NULL;
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    loadInst = new llvm::StoreInst(val, llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(),
--                                   storeInst, CI->getName(), (llvm::Instruction *)NULL);
--#else
--    storeInst = new llvm::StoreInst(val, ptr, (llvm::Instruction *)NULL);
--#endif
-+    storeInst = new llvm::StoreInst(val, ptr, (llvm::Instruction *)NULL,
-+                                    llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
-     Assert(storeInst);
-     return storeInst;
- }
-@@ -6645,15 +6708,18 @@ llvm::Instruction *FixAddressSpace::createInt8WrRegion(llvm::Value *Val, llvm::V
-     int width = g->target->getVectorWidth();
- 
-     llvm::Value *Args[8];
--
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Args[0] = llvm::UndefValue::get(llvm::FixedVectorType::get(LLVMTypes::Int8Type, width * 4)); // old value
-+#else
-     Args[0] = llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int8Type, width * 4)); // old value
--    Args[1] = Val;                                                                          // value to store
--    Args[2] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);                              // vstride
--    Args[3] = llvm::ConstantInt::get(LLVMTypes::Int32Type, width);                          // width
--    Args[4] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 4);                              // stride
--    Args[5] = llvm::ConstantInt::get(LLVMTypes::Int16Type, 0);                              // offsets
--    Args[6] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);                              // parent width (ignored)
--    Args[7] = Mask;                                                                         // mask
-+#endif
-+    Args[1] = Val;                                                 // value to store
-+    Args[2] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);     // vstride
-+    Args[3] = llvm::ConstantInt::get(LLVMTypes::Int32Type, width); // width
-+    Args[4] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 4);     // stride
-+    Args[5] = llvm::ConstantInt::get(LLVMTypes::Int16Type, 0);     // offsets
-+    Args[6] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);     // parent width (ignored)
-+    Args[7] = Mask;                                                // mask
- 
-     llvm::Type *Tys[4];
- 
-@@ -6708,7 +6774,12 @@ llvm::Instruction *FixAddressSpace::processGatherScatterPrivate(llvm::CallInst *
-         return NULL;
- 
-     llvm::Value *address = calculateGatherScatterAddress(ptr, offsets, CI);
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    llvm::Type *i8VecType = llvm::FixedVectorType::get(LLVMTypes::Int8Type, width * 4);
-+#else
-     llvm::Type *i8VecType = llvm::VectorType::get(LLVMTypes::Int8Type, width * 4);
-+#endif
-+
-     bool isInt8 = (value->getType()->getScalarType() == LLVMTypes::Int8Type);
- 
-     Assert(address && "Bad gather/scatter address!");
diff --git a/srcpkgs/ispc/patches/llvm12-006.patch b/srcpkgs/ispc/patches/llvm12-006.patch
deleted file mode 100644
index a829ea48391e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-006.patch
+++ /dev/null
@@ -1,126 +0,0 @@
-From bb3f493d1fbd45c79e1d9dee67a0430ba313eaad Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 19 Jan 2021 11:07:33 -0800
-Subject: [PATCH] Fixed ifdefs for LLVM_11
-
----
- src/ctx.cpp |  6 +++---
- src/opt.cpp | 18 +++++++++---------
- 2 files changed, 12 insertions(+), 12 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 2a72e6837..527a02f30 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1691,7 +1691,7 @@ llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const llvm::T
-     if (llvm::Constant *const_val = llvm::dyn_cast<llvm::Constant>(value)) {
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         ret = llvm::ConstantVector::getSplat(g->target->getVectorWidth(), const_val);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-         ret =
-             llvm::ConstantVector::getSplat({static_cast<unsigned int>(g->target->getVectorWidth()), false}, const_val);
- #else // LLVM 12.0+
-@@ -3148,7 +3148,7 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-     llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
-         vecType->getVectorNumElements(), llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-     llvm::Constant *zeroVec =
-         llvm::ConstantVector::getSplat({static_cast<unsigned int>(ty->getNumElements()), false},
-                                        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
-@@ -3688,7 +3688,7 @@ llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-         defaults = llvm::ConstantVector::getSplat({static_cast<unsigned int>(vt->getNumElements()), false},
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
- #else
-diff --git a/src/opt.cpp b/src/opt.cpp
-index 1789b8476..3ff191a0a 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -1045,7 +1045,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                 llvm::Instruction *loadInst =
-                     new llvm::LoadInst(castPtr, llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load",
-                                        false /* not volatile */, llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
-@@ -1472,7 +1472,7 @@ static llvm::Value *lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offse
-                     llvm::Value *zeroMask =
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                         llvm::ConstantVector::getSplat(cv->getType()->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                         llvm::ConstantVector::getSplat(
-                             {llvm::dyn_cast<llvm::VectorType>(cv->getType())->getNumElements(), false},
- #else // LLVM 12.0+
-@@ -1495,7 +1495,7 @@ static llvm::Value *lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offse
-                         llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                             bop_var_type->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                             {llvm::dyn_cast<llvm::VectorType>(bop_var_type)->getNumElements(), false},
- #else // LLVM 12.0+
-                             llvm::ElementCount::get(
-@@ -2803,7 +2803,7 @@ static bool lGSToLoadStore(llvm::CallInst *callInst) {
-             llvm::Value *zeroMask =
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                 llvm::ConstantVector::getSplat(callInst->getType()->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                 llvm::ConstantVector::getSplat(
-                     {llvm::dyn_cast<llvm::VectorType>(callInst->getType())->getNumElements(), false},
- 
-@@ -3100,7 +3100,7 @@ static bool lImproveMaskedLoad(llvm::CallInst *callInst, llvm::BasicBlock::itera
-         {
-             llvm::Type *ptrType = llvm::PointerType::get(callInst->getType(), 0);
-             ptr = new llvm::BitCastInst(ptr, ptrType, "ptr_cast_for_load", callInst);
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             load = new llvm::LoadInst(
-                 ptr, callInst->getName(), false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-@@ -3459,7 +3459,7 @@ llvm::Value *lGEPAndLoad(llvm::Value *basePtr, int64_t offset, int align, llvm::
-                          llvm::Type *type) {
-     llvm::Value *ptr = lGEPInst(basePtr, LLVMInt64(offset), "new_base", insertBefore);
-     ptr = new llvm::BitCastInst(ptr, llvm::PointerType::get(type, 0), "ptr_cast", insertBefore);
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-     return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, llvm::MaybeAlign(align), insertBefore);
- #else // LLVM 11.0+
-     return new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-@@ -6183,7 +6183,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 Args.push_back(llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                     g->target->getNativeVectorWidth(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                     {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
- #else // LLVM 12.0+
-                     llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-@@ -6195,7 +6195,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                     g->target->getNativeVectorWidth(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                     {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
- #else // LLVM 12.0+
-                     llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-@@ -6567,7 +6567,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
-         llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-             {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
- #else
-         llvm::ElementCount::get(
diff --git a/srcpkgs/ispc/patches/llvm12-007.patch b/srcpkgs/ispc/patches/llvm12-007.patch
deleted file mode 100644
index 1b975f896c7e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-007.patch
+++ /dev/null
@@ -1,160 +0,0 @@
-From 62f5a6c37bf26fc25a7cf81868052d3472874610 Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 23 Mar 2021 23:07:30 -0700
-Subject: [PATCH] Do not generate function mask when it is not required
-
----
- src/ctx.cpp                    | 39 ++++++++++++++-------
- tests/lit-tests/full_mask.ispc | 63 ++++++++++++++++++++++++++++++++++
- 2 files changed, 90 insertions(+), 12 deletions(-)
- create mode 100644 tests/lit-tests/full_mask.ispc
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 527a02f30..9e775fc5c 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -231,10 +231,18 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym, llvm::F
-     internalMaskPointer = AllocaInst(LLVMTypes::MaskType, "internal_mask_memory");
-     StoreInst(LLVMMaskAllOn, internalMaskPointer);
- 
--    functionMaskValue = LLVMMaskAllOn;
--
--    fullMaskPointer = AllocaInst(LLVMTypes::MaskType, "full_mask_memory");
--    StoreInst(LLVMMaskAllOn, fullMaskPointer);
-+    // If the function doesn't have __mask in parameters, there is no need to
-+    // have function mask
-+    if ((func->GetType()->isExported &&
-+         (lf->getFunctionType()->getNumParams() == func->GetType()->GetNumParameters())) ||
-+        (func->GetType()->isUnmasked) || (func->GetType()->isTask)) {
-+        functionMaskValue = NULL;
-+        fullMaskPointer = NULL;
-+    } else {
-+        functionMaskValue = LLVMMaskAllOn;
-+        fullMaskPointer = AllocaInst(LLVMTypes::MaskType, "full_mask_memory");
-+        StoreInst(LLVMMaskAllOn, fullMaskPointer);
-+    }
- 
-     blockEntryMask = NULL;
-     breakLanesPtr = continueLanesPtr = NULL;
-@@ -389,20 +397,26 @@ llvm::BasicBlock *FunctionEmitContext::GetCurrentBasicBlock() { return bblock; }
- 
- void FunctionEmitContext::SetCurrentBasicBlock(llvm::BasicBlock *bb) { bblock = bb; }
- 
--llvm::Value *FunctionEmitContext::GetFunctionMask() { return functionMaskValue; }
-+llvm::Value *FunctionEmitContext::GetFunctionMask() { return fullMaskPointer ? functionMaskValue : LLVMMaskAllOn; }
- 
- llvm::Value *FunctionEmitContext::GetInternalMask() { return LoadInst(internalMaskPointer, NULL, "load_mask"); }
- 
- llvm::Value *FunctionEmitContext::GetFullMask() {
--    return BinaryOperator(llvm::Instruction::And, GetInternalMask(), functionMaskValue, "internal_mask&function_mask");
-+    return fullMaskPointer ? BinaryOperator(llvm::Instruction::And, GetInternalMask(), functionMaskValue,
-+                                            "internal_mask&function_mask")
-+                           : GetInternalMask();
- }
- 
--llvm::Value *FunctionEmitContext::GetFullMaskPointer() { return fullMaskPointer; }
-+llvm::Value *FunctionEmitContext::GetFullMaskPointer() {
-+    return fullMaskPointer ? fullMaskPointer : internalMaskPointer;
-+}
- 
- void FunctionEmitContext::SetFunctionMask(llvm::Value *value) {
--    functionMaskValue = value;
--    if (bblock != NULL)
--        StoreInst(GetFullMask(), fullMaskPointer);
-+    if (fullMaskPointer != NULL) {
-+        functionMaskValue = value;
-+        if (bblock != NULL)
-+            StoreInst(GetFullMask(), fullMaskPointer);
-+    }
- }
- 
- void FunctionEmitContext::SetBlockEntryMask(llvm::Value *value) { blockEntryMask = value; }
-@@ -410,7 +424,8 @@ void FunctionEmitContext::SetBlockEntryMask(llvm::Value *value) { blockEntryMask
- void FunctionEmitContext::SetInternalMask(llvm::Value *value) {
-     StoreInst(value, internalMaskPointer);
-     // kludge so that __mask returns the right value in ispc code.
--    StoreInst(GetFullMask(), fullMaskPointer);
-+    if (fullMaskPointer)
-+        StoreInst(GetFullMask(), fullMaskPointer);
- }
- 
- void FunctionEmitContext::SetInternalMaskAnd(llvm::Value *oldMask, llvm::Value *test) {
-@@ -1265,7 +1280,7 @@ void FunctionEmitContext::CurrentLanesReturned(Expr *expr, bool doCoherenceCheck
-         // lanes have returned
-         if (doCoherenceCheck) {
-             // if newReturnedLanes == functionMaskValue, get out of here!
--            llvm::Value *cmp = MasksAllEqual(functionMaskValue, newReturnedLanes);
-+            llvm::Value *cmp = MasksAllEqual(GetFunctionMask(), newReturnedLanes);
-             llvm::BasicBlock *bDoReturn = CreateBasicBlock("do_return");
-             llvm::BasicBlock *bNoReturn = CreateBasicBlock("no_return");
-             BranchInst(bDoReturn, bNoReturn, cmp);
-diff --git a/tests/lit-tests/full_mask.ispc b/tests/lit-tests/full_mask.ispc
-new file mode 100644
-index 000000000..ac0b0bca3
---- /dev/null
-+++ b/tests/lit-tests/full_mask.ispc
-@@ -0,0 +1,63 @@
-+// RUN: %{ispc} %s -DISPC_EXPORT --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_EXPORT %s
-+
-+// RUN: %{ispc} %s -DISPC_UNMASKED --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_UNMASKED %s
-+
-+// RUN: %{ispc} %s -DISPC_NOQUALIF --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_NOQUALIF %s
-+
-+// RUN: %{ispc} %s -DISPC_TASK --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_TASK %s
-+
-+struct Parameters {
-+    float *vout;
-+    int param;
-+};
-+
-+#ifdef ISPC_EXPORT
-+// CHECK_ISPC_EXPORT: define void @simple_export___
-+// CHECK_ISPC_EXPORT: %full_mask_memory = alloca
-+// CHECK_ISPC_EXPORT: define void @simple_export(
-+// CHECK_ISPC_EXPORT-NOT: %full_mask_memory = alloca
-+export void simple_export(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_UNMASKED
-+// CHECK_ISPC_UNMASKED: define void @simple_unmasked
-+// CHECK_ISPC_UNMASKED-NOT: %full_mask_memory = alloca
-+unmasked void simple_unmasked(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_NOQUALIF
-+// CHECK_ISPC_NOQUALIF: define void @simple
-+// CHECK_ISPC_NOQUALIF: %full_mask_memory = alloca
-+void simple(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_TASK
-+
-+// CHECK_ISPC_TASK: define void @simple_task
-+// CHECK_ISPC_TASK-NOT: %full_mask_memory = alloca
-+// CHECK_ISPC_TASK: define void @simple_entry_point__
-+// CHECK_ISPC_TASK: %full_mask_memory = alloca
-+// CHECK_ISPC_TASK: define void @simple_entry_point(
-+// CHECK_ISPC_TASK-NOT: %full_mask_memory = alloca
-+task void simple_task(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+export void simple_entry_point(void *uniform parameters, uniform int dim0, uniform int dim1, uniform int dim2) {
-+    launch[dim0, dim1, dim2] simple_task(parameters);
-+}
-+#endif
-\ No newline at end of file
diff --git a/srcpkgs/ispc/patches/llvm12-008.patch b/srcpkgs/ispc/patches/llvm12-008.patch
deleted file mode 100644
index c8413d8b7887..000000000000
--- a/srcpkgs/ispc/patches/llvm12-008.patch
+++ /dev/null
@@ -1,149 +0,0 @@
-From afad14227d9204a3c8a626ca608f5b43c3218fe9 Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 4 May 2021 11:43:52 -0700
-Subject: [PATCH] Fixed ISPC gen build for LLVM12
-
----
- src/ctx.cpp |  4 ++++
- src/opt.cpp | 43 +++++++++++++++++++++++++++++--------------
- 2 files changed, 33 insertions(+), 14 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 0c7050591..f7dc06939 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -3738,7 +3738,11 @@ llvm::Value *FunctionEmitContext::GenXSimdCFAny(llvm::Value *value) {
- 
- llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::Value *defaults) {
-     AssertPos(currentPos, llvm::isa<llvm::VectorType>(value->getType()));
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    llvm::FixedVectorType *vt = llvm::dyn_cast<llvm::FixedVectorType>(value->getType());
-+#else
-     llvm::VectorType *vt = llvm::dyn_cast<llvm::VectorType>(value->getType());
-+#endif
-     if (defaults == NULL) {
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-diff --git a/src/opt.cpp b/src/opt.cpp
-index cea4afa23..4e33d6b1a 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -2916,9 +2916,13 @@ static llvm::Function *lGenXMaskedInt8Inst(llvm::Instruction *inst, bool isStore
- 
- static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::Instruction *inst) {
-     Assert(g->target->isGenXTarget());
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Assert(llvm::isa<llvm::FixedVectorType>(val->getType()));
-+    llvm::FixedVectorType *valVecType = llvm::dyn_cast<llvm::FixedVectorType>(val->getType());
-+#else
-     Assert(llvm::isa<llvm::VectorType>(val->getType()));
--
-     llvm::VectorType *valVecType = llvm::dyn_cast<llvm::VectorType>(val->getType());
-+#endif
-     Assert(llvm::isPowerOf2_32(valVecType->getNumElements()));
-     Assert(valVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
- 
-@@ -2942,9 +2946,13 @@ static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::
- }
- 
- static llvm::CallInst *lGenXLoadInst(llvm::Value *ptr, llvm::Type *retType, llvm::Instruction *inst) {
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Assert(llvm::isa<llvm::FixedVectorType>(retType));
-+    llvm::FixedVectorType *retVecType = llvm::dyn_cast<llvm::FixedVectorType>(retType);
-+#else
-     Assert(llvm::isa<llvm::VectorType>(retType));
--
-     llvm::VectorType *retVecType = llvm::dyn_cast<llvm::VectorType>(retType);
-+#endif
-     Assert(llvm::isPowerOf2_32(retVecType->getNumElements()));
-     Assert(retVecType->getPrimitiveSizeInBits());
-     Assert(retVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-@@ -5485,8 +5493,13 @@ static void lCreateBlockLDUse(llvm::Instruction *currInst, std::vector<llvm::Ext
-         } else if (auto gather = lGetPseudoGather(llvm::dyn_cast<llvm::Instruction>(ui->getUser()))) {
-             // Collect idxs from gather and fix users
-             llvm::Value *res = llvm::UndefValue::get(gather->getType());
--            for (unsigned i = 0, end = llvm::dyn_cast<llvm::VectorType>(res->getType())->getNumElements(); i < end;
--                 ++i) {
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            for (unsigned i = 0, end = llvm::dyn_cast<llvm::FixedVectorType>(res->getType())->getNumElements(); i < end;
-+                 ++i)
-+#else
-+            for (unsigned i = 0, end = llvm::dyn_cast<llvm::VectorType>(res->getType())->getNumElements(); i < end; ++i)
-+#endif
-+            {
-                 // Get element via IEI
-                 res = llvm::InsertElementInst::Create(res, EEIs[ptrUse.idxs[curr_idx++]],
-                                                       llvm::ConstantInt::get(LLVMTypes::Int32Type, i),
-@@ -5522,10 +5535,11 @@ static bool lVectorizeGEPs(llvm::Value *ptr, std::vector<PtrUse> &ptrUses, std::
- 
-     // Adjust values for vector load
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    if (auto vecTy = llvm::dyn_cast<llvm::FixedVectorType>(type)) {
-+    if (auto vecTy = llvm::dyn_cast<llvm::FixedVectorType>(type))
- #else
--    if (auto vecTy = llvm::dyn_cast<llvm::VectorType>(type)) {
-+    if (auto vecTy = llvm::dyn_cast<llvm::VectorType>(type))
- #endif
-+    {
-         // Get single element size
-         t_size /= vecTy->getNumElements();
-         // Get single element type
-@@ -6477,7 +6491,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-         Offsets,
-         llvm::FixedVectorType::get(LLVMTypes::Int64Type,
--                                   llvm::dyn_cast<llvm::VectorType>(Offsets->getType())->getNumElements()),
-+                                   llvm::dyn_cast<llvm::FixedVectorType>(Offsets->getType())->getNumElements()),
-         "svm_offset_zext", InsertBefore);
- #else
-         Offsets, llvm::VectorType::get(LLVMTypes::Int64Type, Offsets->getType()->getVectorNumElements()),
-@@ -6492,7 +6506,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
-         llvm::Value *undefInsertValue =
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-             llvm::UndefValue::get(llvm::FixedVectorType::get(
--                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements()));
- #else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
- #endif
-@@ -6501,17 +6515,16 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
- #elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
--            {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
-+            {llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements(), false},
- #else
--        llvm::ElementCount::get(
--                                llvm::dyn_cast<llvm::FixedVectorType>(addressType->getNumElements(), false),
-+            llvm::ElementCount::get(llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements(), false),
- #endif
-             llvm::Constant::getNullValue(llvm::Type::getInt32Ty(InsertBefore->getContext())));
- 
-         llvm::Value *undefShuffleValue =
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-             llvm::UndefValue::get(llvm::FixedVectorType::get(
--                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements()));
- #else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
- #endif
-@@ -6542,7 +6555,8 @@ llvm::Instruction *FixAddressSpace::processVectorLoad(llvm::LoadInst *LI) {
-         isPtrLoad = true;
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--        retType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(retType)->getNumElements());
-+        retType =
-+            llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::FixedVectorType>(retType)->getNumElements());
- #else
-         retType = llvm::VectorType::get(scalarType, retType->getVectorNumElements());
- #endif
-@@ -6604,7 +6618,8 @@ llvm::Instruction *FixAddressSpace::processVectorStore(llvm::StoreInst *SI) {
-     if (valType->getScalarType()->isPointerTy()) {
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--        valType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(valType)->getNumElements());
-+        valType =
-+            llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::FixedVectorType>(valType)->getNumElements());
- #else
-         valType = llvm::VectorType::get(scalarType, valType->getVectorNumElements());
- #endif
diff --git a/srcpkgs/ispc/patches/llvm12-009.patch b/srcpkgs/ispc/patches/llvm12-009.patch
deleted file mode 100644
index d3ea67828582..000000000000
--- a/srcpkgs/ispc/patches/llvm12-009.patch
+++ /dev/null
@@ -1,2109 +0,0 @@
-From 97b13c32132e2704a5e3e7b2eae49d854d087e3e Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 4 May 2021 11:31:55 -0700
-Subject: [PATCH] Updated builtins-cm* for switch to LLVM12
-
----
- builtins/builtins-cm-32.ll | 234 ++++++++++++++++++-------------------
- builtins/builtins-cm-64.ll | 232 ++++++++++++++++++------------------
- 2 files changed, 233 insertions(+), 233 deletions(-)
-
-diff --git a/builtins/builtins-cm-32.ll b/builtins/builtins-cm-32.ll
-index 32debf32e..481bbdc48 100644
---- a/builtins/builtins-cm-32.ll
-+++ b/builtins/builtins-cm-32.ll
-@@ -557,7 +557,7 @@ $_ZN13VaryingWriter12WriteVecElemIPvEEvv = comdat any
- @.str.10 = private unnamed_addr constant [5 x i8] c"%08X\00", align 1
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -618,7 +618,7 @@ define internal <1 x i8> @_ZN7details13__impl_divremILi1EEEu2CMvbT__cS1_S1_u2CMv
- declare <1 x i8> @llvm.genx.rdregioni.v1i8.v1i8.i16(<1 x i8>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -634,7 +634,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -680,7 +680,7 @@ define internal <2 x i8> @_ZN7details13__impl_divremILi2EEEu2CMvbT__cS1_S1_u2CMv
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -818,7 +818,7 @@ define internal <16 x i8> @_ZN7details13__impl_divremILi16EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -864,7 +864,7 @@ define internal <32 x i8> @_ZN7details13__impl_divremILi32EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -890,7 +890,7 @@ define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -904,7 +904,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -918,7 +918,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -932,7 +932,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -946,7 +946,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -960,7 +960,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -974,7 +974,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1058,7 +1058,7 @@ define internal <1 x i16> @_ZN7details13__impl_divremILi1EEEu2CMvbT__sS1_S1_u2CM
- declare <1 x i16> @llvm.genx.rdregioni.v1i16.v1i16.i16(<1 x i16>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1074,7 +1074,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1143,7 +1143,7 @@ define internal <2 x i16> @_ZN7details13__impl_divremILi2EEEu2CMvbT__sS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1350,7 +1350,7 @@ define internal <16 x i16> @_ZN7details13__impl_divremILi16EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1419,7 +1419,7 @@ define internal <32 x i16> @_ZN7details13__impl_divremILi32EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1445,7 +1445,7 @@ define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 si
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1459,7 +1459,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1473,7 +1473,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1487,7 +1487,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -1501,7 +1501,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -1515,7 +1515,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1529,7 +1529,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1730,7 +1730,7 @@ define internal <1 x i32> @_ZN7details13__impl_divremILi1EEEu2CMvbT__iS1_S1_u2CM
- declare <1 x i32> @llvm.genx.rdregioni.v1i32.v1i32.i16(<1 x i32>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1746,7 +1746,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -1932,7 +1932,7 @@ define internal <2 x i32> @_ZN7details13__impl_divremILi2EEEu2CMvbT__iS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2490,7 +2490,7 @@ define internal <16 x i32> @_ZN7details13__impl_divremILi16EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2676,7 +2676,7 @@ define internal <32 x i32> @_ZN7details13__impl_divremILi32EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2702,7 +2702,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2716,7 +2716,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -2730,7 +2730,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2744,7 +2744,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -2758,7 +2758,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -2772,7 +2772,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2786,7 +2786,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2844,7 +2844,7 @@ define internal <1 x i8> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2860,7 +2860,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -2906,7 +2906,7 @@ define internal <2 x i8> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3044,7 +3044,7 @@ define internal <16 x i8> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3090,7 +3090,7 @@ define internal <32 x i8> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3116,7 +3116,7 @@ define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3130,7 +3130,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -3144,7 +3144,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3158,7 +3158,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -3172,7 +3172,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -3186,7 +3186,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3200,7 +3200,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3278,7 +3278,7 @@ define internal <1 x i16> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3294,7 +3294,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3360,7 +3360,7 @@ define internal <2 x i16> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3558,7 +3558,7 @@ define internal <16 x i16> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3624,7 +3624,7 @@ define internal <32 x i16> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3650,7 +3650,7 @@ define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 ze
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3664,7 +3664,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3678,7 +3678,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3692,7 +3692,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -3706,7 +3706,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -3720,7 +3720,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3734,7 +3734,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3892,7 +3892,7 @@ define internal <1 x i32> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3908,7 +3908,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4054,7 +4054,7 @@ define internal <2 x i32> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4492,7 +4492,7 @@ define internal <16 x i32> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4638,7 +4638,7 @@ define internal <32 x i32> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4664,7 +4664,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4678,7 +4678,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4692,7 +4692,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4706,7 +4706,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -4720,7 +4720,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -4734,7 +4734,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4748,7 +4748,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-+define internal void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-   %8 = alloca i8*, align 4
-   %9 = alloca i8*, align 4
-   %10 = alloca i32, align 4
-@@ -4988,7 +4988,7 @@ define internal void @_ZN7details16_cm_print_formatILi128EEEv15cm_surfaceindexju
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i32) #26 !dbg !117 {
-+define internal void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i32) #26 !dbg !117 {
-   %10 = alloca i32, align 4
-   %11 = alloca i8*, align 4
-   %12 = alloca i32, align 4
-@@ -5069,7 +5069,7 @@ define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i3
-   %67 = load i64, i64* %13, align 8, !dbg !159, !tbaa !19
-   %68 = load <5 x i32>, <5 x i32>* %21, align 32, !dbg !160, !tbaa !7
-   call void @_ZN13VaryingWriterC2ERjRPKjiyu2CMvb5_i(%class.VaryingWriter* %23, i32* dereferenceable(4) %19, i32** dereferenceable(4) %14, i32 %66, i64 %67, <5 x i32> %68), !dbg !161
--  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval align 32 %22, %class.VaryingWriter* byval align 32 %23), !dbg !162
-+  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval(%class.UniformWriter) align 32 %22, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %23), !dbg !162
-   br label %70, !dbg !163
- 
- ; <label>:70:                                     ; preds = %60
-@@ -5187,7 +5187,7 @@ define internal <5 x i32> @_Z17get_auxiliary_strv() #28 comdat !dbg !178 {
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %class.VaryingWriter* byval align 32) #25 comdat !dbg !191 {
-+define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !191 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %class.VaryingWriter, align 32
-@@ -5196,7 +5196,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %8 = bitcast %class.UniformWriter* %5 to i8*, !dbg !196
-   %9 = bitcast %class.UniformWriter* %1 to i8*, !dbg !196
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %8, i8* align 32 %9, i32 64, i1 false), !dbg !196, !tbaa.struct !197
--  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval align 32 %5), !dbg !198
-+  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5), !dbg !198
-   br i1 %10, label %16, label %11, !dbg !199
- 
- ; <label>:11:                                     ; preds = %3
-@@ -5204,7 +5204,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %13 = bitcast %class.VaryingWriter* %6 to i8*, !dbg !201
-   %14 = bitcast %class.VaryingWriter* %2 to i8*, !dbg !201
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %13, i8* align 32 %14, i32 64, i1 false), !dbg !201, !tbaa.struct !197
--  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval align 32 %6), !dbg !202
-+  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %6), !dbg !202
-   br label %16, !dbg !199
- 
- ; <label>:16:                                     ; preds = %11, %3
-@@ -5279,7 +5279,7 @@ define internal void @_ZN13VaryingWriterC2ERjRPKjiyu2CMvb5_i(%class.VaryingWrite
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @__num_cores() #29 !dbg !236 {
-+define internal i32 @__num_cores() #29 !dbg !236 {
-   ret i32 -1, !dbg !237
- }
- 
-@@ -8860,7 +8860,7 @@ declare dso_local void @_ZN7details37__cm_intrinsic_impl_svm_scatter_writeIiLi1E
- declare void @llvm.genx.svm.scatter.v1i1.v1i64.v1i32(<1 x i1>, i32, <1 x i64>, <1 x i32>) #27
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval align 32) #25 comdat !dbg !1645 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32) #25 comdat !dbg !1645 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.UniformWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8869,7 +8869,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
-   %7 = bitcast %class.UniformWriter* %4 to i8*, !dbg !1647
-   %8 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1647
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %7, i8* align 32 %8, i32 64, i1 false), !dbg !1647, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %5), !dbg !1648
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval(%class.UniformWriter) align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %5), !dbg !1648
-   ret i1 %9, !dbg !1649
- }
- 
-@@ -8877,7 +8877,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
- declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture readonly, i32, i1) #32
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval align 32) #25 comdat !dbg !1650 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !1650 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.VaryingWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -8886,12 +8886,12 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWrite
-   %7 = bitcast %class.VaryingWriter* %4 to i8*, !dbg !1652
-   %8 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !1652
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %7, i8* align 32 %8, i32 64, i1 false), !dbg !1652, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %5), !dbg !1653
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %5), !dbg !1653
-   ret i1 %9, !dbg !1654
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1655 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1655 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8914,7 +8914,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %22 = bitcast %class.UniformWriter* %5 to i8*, !dbg !1657
-   %23 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1657
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %22, i8* align 32 %23, i32 64, i1 false), !dbg !1657, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %6), !dbg !1658
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %6), !dbg !1658
-   br i1 %24, label %60, label %25, !dbg !1659
- 
- ; <label>:25:                                     ; preds = %3
-@@ -8922,7 +8922,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %27 = bitcast %class.UniformWriter* %7 to i8*, !dbg !1661
-   %28 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1661
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %27, i8* align 32 %28, i32 64, i1 false), !dbg !1661, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %8), !dbg !1662
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval(%class.UniformWriter) align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %8), !dbg !1662
-   br i1 %29, label %60, label %30, !dbg !1663
- 
- ; <label>:30:                                     ; preds = %25
-@@ -8930,7 +8930,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %32 = bitcast %class.UniformWriter* %9 to i8*, !dbg !1665
-   %33 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1665
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %32, i8* align 32 %33, i32 64, i1 false), !dbg !1665, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %10), !dbg !1666
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval(%class.UniformWriter) align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %10), !dbg !1666
-   br i1 %34, label %60, label %35, !dbg !1667
- 
- ; <label>:35:                                     ; preds = %30
-@@ -8938,7 +8938,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %37 = bitcast %class.UniformWriter* %11 to i8*, !dbg !1669
-   %38 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1669
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %37, i8* align 32 %38, i32 64, i1 false), !dbg !1669, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %12), !dbg !1670
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval(%class.UniformWriter) align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %12), !dbg !1670
-   br i1 %39, label %60, label %40, !dbg !1671
- 
- ; <label>:40:                                     ; preds = %35
-@@ -8946,7 +8946,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %42 = bitcast %class.UniformWriter* %13 to i8*, !dbg !1673
-   %43 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1673
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %42, i8* align 32 %43, i32 64, i1 false), !dbg !1673, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %14), !dbg !1674
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval(%class.UniformWriter) align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %14), !dbg !1674
-   br i1 %44, label %60, label %45, !dbg !1675
- 
- ; <label>:45:                                     ; preds = %40
-@@ -8954,7 +8954,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %47 = bitcast %class.UniformWriter* %15 to i8*, !dbg !1677
-   %48 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1677
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %47, i8* align 32 %48, i32 64, i1 false), !dbg !1677, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %16), !dbg !1678
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval(%class.UniformWriter) align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %16), !dbg !1678
-   br i1 %49, label %60, label %50, !dbg !1679
- 
- ; <label>:50:                                     ; preds = %45
-@@ -8962,7 +8962,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %52 = bitcast %class.UniformWriter* %17 to i8*, !dbg !1681
-   %53 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1681
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %52, i8* align 32 %53, i32 64, i1 false), !dbg !1681, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %18), !dbg !1682
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval(%class.UniformWriter) align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %18), !dbg !1682
-   br i1 %54, label %60, label %55, !dbg !1683
- 
- ; <label>:55:                                     ; preds = %50
-@@ -8970,7 +8970,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %57 = bitcast %class.UniformWriter* %19 to i8*, !dbg !1685
-   %58 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1685
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %57, i8* align 32 %58, i32 64, i1 false), !dbg !1685, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %20), !dbg !1686
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval(%class.UniformWriter) align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %20), !dbg !1686
-   br label %60, !dbg !1683
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -8979,7 +8979,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1688 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1688 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9005,7 +9005,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1697 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1697 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9031,7 +9031,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1706 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1706 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9057,7 +9057,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1715 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1715 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9083,7 +9083,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1724 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1724 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9109,7 +9109,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1733 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1733 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9135,7 +9135,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1742 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1742 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9161,7 +9161,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1751 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1751 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9984,7 +9984,7 @@ define internal i32 @_ZN7details18_cm_print_type_oclIPvEENS_18SHADER_PRINTF_TYPE
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2055 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2055 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.VaryingWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -10007,7 +10007,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %22 = bitcast %class.VaryingWriter* %5 to i8*, !dbg !2057
-   %23 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2057
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %22, i8* align 32 %23, i32 64, i1 false), !dbg !2057, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %6), !dbg !2058
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %6), !dbg !2058
-   br i1 %24, label %60, label %25, !dbg !2059
- 
- ; <label>:25:                                     ; preds = %3
-@@ -10015,7 +10015,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %27 = bitcast %class.VaryingWriter* %7 to i8*, !dbg !2061
-   %28 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2061
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %27, i8* align 32 %28, i32 64, i1 false), !dbg !2061, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %8), !dbg !2062
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %8), !dbg !2062
-   br i1 %29, label %60, label %30, !dbg !2063
- 
- ; <label>:30:                                     ; preds = %25
-@@ -10023,7 +10023,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %32 = bitcast %class.VaryingWriter* %9 to i8*, !dbg !2065
-   %33 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2065
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %32, i8* align 32 %33, i32 64, i1 false), !dbg !2065, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %10), !dbg !2066
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %10), !dbg !2066
-   br i1 %34, label %60, label %35, !dbg !2067
- 
- ; <label>:35:                                     ; preds = %30
-@@ -10031,7 +10031,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %37 = bitcast %class.VaryingWriter* %11 to i8*, !dbg !2069
-   %38 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2069
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %37, i8* align 32 %38, i32 64, i1 false), !dbg !2069, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %12), !dbg !2070
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %12), !dbg !2070
-   br i1 %39, label %60, label %40, !dbg !2071
- 
- ; <label>:40:                                     ; preds = %35
-@@ -10039,7 +10039,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %42 = bitcast %class.VaryingWriter* %13 to i8*, !dbg !2073
-   %43 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2073
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %42, i8* align 32 %43, i32 64, i1 false), !dbg !2073, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %14), !dbg !2074
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %14), !dbg !2074
-   br i1 %44, label %60, label %45, !dbg !2075
- 
- ; <label>:45:                                     ; preds = %40
-@@ -10047,7 +10047,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %47 = bitcast %class.VaryingWriter* %15 to i8*, !dbg !2077
-   %48 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2077
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %47, i8* align 32 %48, i32 64, i1 false), !dbg !2077, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %16), !dbg !2078
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %16), !dbg !2078
-   br i1 %49, label %60, label %50, !dbg !2079
- 
- ; <label>:50:                                     ; preds = %45
-@@ -10055,7 +10055,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %52 = bitcast %class.VaryingWriter* %17 to i8*, !dbg !2081
-   %53 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2081
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %52, i8* align 32 %53, i32 64, i1 false), !dbg !2081, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %18), !dbg !2082
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %18), !dbg !2082
-   br i1 %54, label %60, label %55, !dbg !2083
- 
- ; <label>:55:                                     ; preds = %50
-@@ -10063,7 +10063,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %57 = bitcast %class.VaryingWriter* %19 to i8*, !dbg !2085
-   %58 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2085
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %57, i8* align 32 %58, i32 64, i1 false), !dbg !2085, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %20), !dbg !2086
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %20), !dbg !2086
-   br label %60, !dbg !2083
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -10072,7 +10072,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2088 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2088 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10098,7 +10098,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2097 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2097 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10124,7 +10124,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2106 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2106 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10150,7 +10150,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2115 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2115 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10176,7 +10176,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2124 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2124 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10202,7 +10202,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2133 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2133 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10228,7 +10228,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2142 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2142 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10254,7 +10254,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2151 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2151 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-diff --git a/builtins/builtins-cm-64.ll b/builtins/builtins-cm-64.ll
-index 39a2dd8be..375d01bed 100644
---- a/builtins/builtins-cm-64.ll
-+++ b/builtins/builtins-cm-64.ll
-@@ -557,7 +557,7 @@ $_ZN13VaryingWriter12WriteVecElemIPvEEvv = comdat any
- @.str.10 = private unnamed_addr constant [8 x i8] c"%016llX\00", align 1
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -618,7 +618,7 @@ define internal <1 x i8> @_ZN7details13__impl_divremILi1EEEu2CMvbT__cS1_S1_u2CMv
- declare <1 x i8> @llvm.genx.rdregioni.v1i8.v1i8.i16(<1 x i8>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -634,7 +634,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -680,7 +680,7 @@ define internal <2 x i8> @_ZN7details13__impl_divremILi2EEEu2CMvbT__cS1_S1_u2CMv
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -818,7 +818,7 @@ define internal <16 x i8> @_ZN7details13__impl_divremILi16EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -864,7 +864,7 @@ define internal <32 x i8> @_ZN7details13__impl_divremILi32EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -890,7 +890,7 @@ define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -904,7 +904,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -918,7 +918,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -932,7 +932,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -946,7 +946,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -960,7 +960,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -974,7 +974,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1058,7 +1058,7 @@ define internal <1 x i16> @_ZN7details13__impl_divremILi1EEEu2CMvbT__sS1_S1_u2CM
- declare <1 x i16> @llvm.genx.rdregioni.v1i16.v1i16.i16(<1 x i16>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1074,7 +1074,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1143,7 +1143,7 @@ define internal <2 x i16> @_ZN7details13__impl_divremILi2EEEu2CMvbT__sS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1350,7 +1350,7 @@ define internal <16 x i16> @_ZN7details13__impl_divremILi16EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1419,7 +1419,7 @@ define internal <32 x i16> @_ZN7details13__impl_divremILi32EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1445,7 +1445,7 @@ define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 si
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1459,7 +1459,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1473,7 +1473,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1487,7 +1487,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -1501,7 +1501,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -1515,7 +1515,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1529,7 +1529,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1730,7 +1730,7 @@ define internal <1 x i32> @_ZN7details13__impl_divremILi1EEEu2CMvbT__iS1_S1_u2CM
- declare <1 x i32> @llvm.genx.rdregioni.v1i32.v1i32.i16(<1 x i32>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1746,7 +1746,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -1932,7 +1932,7 @@ define internal <2 x i32> @_ZN7details13__impl_divremILi2EEEu2CMvbT__iS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2490,7 +2490,7 @@ define internal <16 x i32> @_ZN7details13__impl_divremILi16EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2676,7 +2676,7 @@ define internal <32 x i32> @_ZN7details13__impl_divremILi32EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2702,7 +2702,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2716,7 +2716,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -2730,7 +2730,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2744,7 +2744,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -2758,7 +2758,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -2772,7 +2772,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2786,7 +2786,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2844,7 +2844,7 @@ define internal <1 x i8> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2860,7 +2860,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -2906,7 +2906,7 @@ define internal <2 x i8> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3044,7 +3044,7 @@ define internal <16 x i8> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3090,7 +3090,7 @@ define internal <32 x i8> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3116,7 +3116,7 @@ define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3130,7 +3130,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -3144,7 +3144,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3158,7 +3158,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -3172,7 +3172,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -3186,7 +3186,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3200,7 +3200,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3278,7 +3278,7 @@ define internal <1 x i16> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3294,7 +3294,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3360,7 +3360,7 @@ define internal <2 x i16> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3558,7 +3558,7 @@ define internal <16 x i16> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3624,7 +3624,7 @@ define internal <32 x i16> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3650,7 +3650,7 @@ define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 ze
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3664,7 +3664,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3678,7 +3678,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3692,7 +3692,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -3706,7 +3706,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -3720,7 +3720,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3734,7 +3734,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3892,7 +3892,7 @@ define internal <1 x i32> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3908,7 +3908,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4054,7 +4054,7 @@ define internal <2 x i32> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4492,7 +4492,7 @@ define internal <16 x i32> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4638,7 +4638,7 @@ define internal <32 x i32> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4664,7 +4664,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4678,7 +4678,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4692,7 +4692,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4706,7 +4706,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -4720,7 +4720,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -4734,7 +4734,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4748,7 +4748,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-+define internal void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-   %8 = alloca i8*, align 8
-   %9 = alloca i8*, align 8
-   %10 = alloca i32, align 4
-@@ -5070,7 +5070,7 @@ define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i3
-   %67 = load i64, i64* %13, align 8, !dbg !159, !tbaa !19
-   %68 = load <5 x i32>, <5 x i32>* %21, align 32, !dbg !160, !tbaa !7
-   call void @_ZN13VaryingWriterC2ERyRPKjiyu2CMvb5_i(%class.VaryingWriter* %23, i64* dereferenceable(8) %19, i32** dereferenceable(8) %14, i32 %66, i64 %67, <5 x i32> %68), !dbg !161
--  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval align 32 %22, %class.VaryingWriter* byval align 32 %23), !dbg !162
-+  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval(%class.UniformWriter) align 32 %22, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %23), !dbg !162
-   br label %70, !dbg !163
- 
- ; <label>:70:                                     ; preds = %60
-@@ -5188,7 +5188,7 @@ define internal <5 x i32> @_Z17get_auxiliary_strv() #28 comdat !dbg !178 {
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %class.VaryingWriter* byval align 32) #25 comdat !dbg !191 {
-+define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !191 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %class.VaryingWriter, align 32
-@@ -5197,7 +5197,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %8 = bitcast %class.UniformWriter* %5 to i8*, !dbg !196
-   %9 = bitcast %class.UniformWriter* %1 to i8*, !dbg !196
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %8, i8* align 32 %9, i64 64, i1 false), !dbg !196, !tbaa.struct !197
--  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval align 32 %5), !dbg !198
-+  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5), !dbg !198
-   br i1 %10, label %16, label %11, !dbg !199
- 
- ; <label>:11:                                     ; preds = %3
-@@ -5205,7 +5205,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %13 = bitcast %class.VaryingWriter* %6 to i8*, !dbg !201
-   %14 = bitcast %class.VaryingWriter* %2 to i8*, !dbg !201
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %13, i8* align 32 %14, i64 64, i1 false), !dbg !201, !tbaa.struct !197
--  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval align 32 %6), !dbg !202
-+  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %6), !dbg !202
-   br label %16, !dbg !199
- 
- ; <label>:16:                                     ; preds = %11, %3
-@@ -5280,7 +5280,7 @@ define internal void @_ZN13VaryingWriterC2ERyRPKjiyu2CMvb5_i(%class.VaryingWrite
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @__num_cores() #29 !dbg !236 {
-+define internal i32 @__num_cores() #29 !dbg !236 {
-   ret i32 -1, !dbg !237
- }
- 
-@@ -8870,7 +8870,7 @@ declare dso_local void @_ZN7details37__cm_intrinsic_impl_svm_scatter_writeIiLi1E
- declare void @llvm.genx.svm.scatter.v1i1.v1i64.v1i32(<1 x i1>, i32, <1 x i64>, <1 x i32>) #27
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval align 32) #25 comdat !dbg !1645 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32) #25 comdat !dbg !1645 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.UniformWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8879,7 +8879,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
-   %7 = bitcast %class.UniformWriter* %4 to i8*, !dbg !1647
-   %8 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1647
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %7, i8* align 32 %8, i64 64, i1 false), !dbg !1647, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %5), !dbg !1648
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval(%class.UniformWriter) align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %5), !dbg !1648
-   ret i1 %9, !dbg !1649
- }
- 
-@@ -8887,7 +8887,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
- declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1) #32
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval align 32) #25 comdat !dbg !1650 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !1650 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.VaryingWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -8896,12 +8896,12 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWrite
-   %7 = bitcast %class.VaryingWriter* %4 to i8*, !dbg !1652
-   %8 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !1652
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %7, i8* align 32 %8, i64 64, i1 false), !dbg !1652, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %5), !dbg !1653
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %5), !dbg !1653
-   ret i1 %9, !dbg !1654
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1655 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1655 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8924,7 +8924,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %22 = bitcast %class.UniformWriter* %5 to i8*, !dbg !1657
-   %23 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1657
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %22, i8* align 32 %23, i64 64, i1 false), !dbg !1657, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %6), !dbg !1658
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %6), !dbg !1658
-   br i1 %24, label %60, label %25, !dbg !1659
- 
- ; <label>:25:                                     ; preds = %3
-@@ -8932,7 +8932,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %27 = bitcast %class.UniformWriter* %7 to i8*, !dbg !1661
-   %28 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1661
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %27, i8* align 32 %28, i64 64, i1 false), !dbg !1661, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %8), !dbg !1662
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval(%class.UniformWriter) align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %8), !dbg !1662
-   br i1 %29, label %60, label %30, !dbg !1663
- 
- ; <label>:30:                                     ; preds = %25
-@@ -8940,7 +8940,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %32 = bitcast %class.UniformWriter* %9 to i8*, !dbg !1665
-   %33 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1665
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %32, i8* align 32 %33, i64 64, i1 false), !dbg !1665, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %10), !dbg !1666
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval(%class.UniformWriter) align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %10), !dbg !1666
-   br i1 %34, label %60, label %35, !dbg !1667
- 
- ; <label>:35:                                     ; preds = %30
-@@ -8948,7 +8948,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %37 = bitcast %class.UniformWriter* %11 to i8*, !dbg !1669
-   %38 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1669
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %37, i8* align 32 %38, i64 64, i1 false), !dbg !1669, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %12), !dbg !1670
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval(%class.UniformWriter) align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %12), !dbg !1670
-   br i1 %39, label %60, label %40, !dbg !1671
- 
- ; <label>:40:                                     ; preds = %35
-@@ -8956,7 +8956,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %42 = bitcast %class.UniformWriter* %13 to i8*, !dbg !1673
-   %43 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1673
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %42, i8* align 32 %43, i64 64, i1 false), !dbg !1673, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %14), !dbg !1674
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval(%class.UniformWriter) align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %14), !dbg !1674
-   br i1 %44, label %60, label %45, !dbg !1675
- 
- ; <label>:45:                                     ; preds = %40
-@@ -8964,7 +8964,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %47 = bitcast %class.UniformWriter* %15 to i8*, !dbg !1677
-   %48 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1677
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %47, i8* align 32 %48, i64 64, i1 false), !dbg !1677, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %16), !dbg !1678
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval(%class.UniformWriter) align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %16), !dbg !1678
-   br i1 %49, label %60, label %50, !dbg !1679
- 
- ; <label>:50:                                     ; preds = %45
-@@ -8972,7 +8972,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %52 = bitcast %class.UniformWriter* %17 to i8*, !dbg !1681
-   %53 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1681
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %52, i8* align 32 %53, i64 64, i1 false), !dbg !1681, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %18), !dbg !1682
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval(%class.UniformWriter) align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %18), !dbg !1682
-   br i1 %54, label %60, label %55, !dbg !1683
- 
- ; <label>:55:                                     ; preds = %50
-@@ -8980,7 +8980,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %57 = bitcast %class.UniformWriter* %19 to i8*, !dbg !1685
-   %58 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1685
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %57, i8* align 32 %58, i64 64, i1 false), !dbg !1685, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %20), !dbg !1686
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval(%class.UniformWriter) align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %20), !dbg !1686
-   br label %60, !dbg !1683
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -8989,7 +8989,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1688 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1688 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9015,7 +9015,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1697 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1697 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9041,7 +9041,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1706 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1706 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9067,7 +9067,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1715 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1715 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9093,7 +9093,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1724 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1724 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9119,7 +9119,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1733 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1733 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9145,7 +9145,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1742 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1742 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9171,7 +9171,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1751 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1751 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10013,7 +10013,7 @@ define internal i32 @_ZN7details18_cm_print_type_oclIPvEENS_18SHADER_PRINTF_TYPE
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2061 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2061 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.VaryingWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -10036,7 +10036,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %22 = bitcast %class.VaryingWriter* %5 to i8*, !dbg !2063
-   %23 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2063
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %22, i8* align 32 %23, i64 64, i1 false), !dbg !2063, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %6), !dbg !2064
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %6), !dbg !2064
-   br i1 %24, label %60, label %25, !dbg !2065
- 
- ; <label>:25:                                     ; preds = %3
-@@ -10044,7 +10044,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %27 = bitcast %class.VaryingWriter* %7 to i8*, !dbg !2067
-   %28 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2067
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %27, i8* align 32 %28, i64 64, i1 false), !dbg !2067, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %8), !dbg !2068
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %8), !dbg !2068
-   br i1 %29, label %60, label %30, !dbg !2069
- 
- ; <label>:30:                                     ; preds = %25
-@@ -10052,7 +10052,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %32 = bitcast %class.VaryingWriter* %9 to i8*, !dbg !2071
-   %33 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2071
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %32, i8* align 32 %33, i64 64, i1 false), !dbg !2071, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %10), !dbg !2072
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %10), !dbg !2072
-   br i1 %34, label %60, label %35, !dbg !2073
- 
- ; <label>:35:                                     ; preds = %30
-@@ -10060,7 +10060,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %37 = bitcast %class.VaryingWriter* %11 to i8*, !dbg !2075
-   %38 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2075
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %37, i8* align 32 %38, i64 64, i1 false), !dbg !2075, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %12), !dbg !2076
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %12), !dbg !2076
-   br i1 %39, label %60, label %40, !dbg !2077
- 
- ; <label>:40:                                     ; preds = %35
-@@ -10068,7 +10068,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %42 = bitcast %class.VaryingWriter* %13 to i8*, !dbg !2079
-   %43 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2079
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %42, i8* align 32 %43, i64 64, i1 false), !dbg !2079, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %14), !dbg !2080
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %14), !dbg !2080
-   br i1 %44, label %60, label %45, !dbg !2081
- 
- ; <label>:45:                                     ; preds = %40
-@@ -10076,7 +10076,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %47 = bitcast %class.VaryingWriter* %15 to i8*, !dbg !2083
-   %48 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2083
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %47, i8* align 32 %48, i64 64, i1 false), !dbg !2083, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %16), !dbg !2084
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %16), !dbg !2084
-   br i1 %49, label %60, label %50, !dbg !2085
- 
- ; <label>:50:                                     ; preds = %45
-@@ -10084,7 +10084,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %52 = bitcast %class.VaryingWriter* %17 to i8*, !dbg !2087
-   %53 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2087
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %52, i8* align 32 %53, i64 64, i1 false), !dbg !2087, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %18), !dbg !2088
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %18), !dbg !2088
-   br i1 %54, label %60, label %55, !dbg !2089
- 
- ; <label>:55:                                     ; preds = %50
-@@ -10092,7 +10092,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %57 = bitcast %class.VaryingWriter* %19 to i8*, !dbg !2091
-   %58 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2091
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %57, i8* align 32 %58, i64 64, i1 false), !dbg !2091, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %20), !dbg !2092
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %20), !dbg !2092
-   br label %60, !dbg !2089
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -10101,7 +10101,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2094 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2094 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10127,7 +10127,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2103 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2103 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10153,7 +10153,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2112 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2112 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10179,7 +10179,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2121 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2121 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10205,7 +10205,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2130 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2130 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10231,7 +10231,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2139 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2139 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10257,7 +10257,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2148 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2148 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10283,7 +10283,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2157 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2157 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
diff --git a/srcpkgs/ispc/template b/srcpkgs/ispc/template
index 9c3acb42a9cf..3a85ff2605af 100644
--- a/srcpkgs/ispc/template
+++ b/srcpkgs/ispc/template
@@ -1,7 +1,7 @@
 # Template file for 'ispc'
 pkgname=ispc
-version=1.15.0
-revision=2
+version=1.17.0
+revision=1
 archs="x86_64*"
 build_style=cmake
 configure_args="-DISPC_NO_DUMPS=ON -DARM_ENABLED=OFF"
@@ -12,7 +12,7 @@ maintainer="Andrea Brancaleoni <abc@pompel.me>"
 license="BSD-3-Clause"
 homepage="https://ispc.github.io"
 distfiles="https://github.com/ispc/ispc/archive/v${version}.tar.gz"
-checksum=2658ff00dc045ac9fcefbf6bd26dffaf723b059a942a27df91bbb61bc503a285
+checksum=37fb1055d6c6b232e112d8d50145d726824ed4d8da93a7396315dceba6c76e62
 nocross=yes
 nopie=yes
 

From 10a88bd0ffd79badb198e4ab66db1f7edef2db44 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Tue, 3 May 2022 01:20:03 +0200
Subject: [PATCH 27/29] llvm14: switch to runtimes build.

https://reviews.llvm.org/rGac7031b2b2fa
https://reviews.llvm.org/D110338#3022952
---
 srcpkgs/llvm14/template | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
index 3e7e6ab2c00b..e731aa76130a 100644
--- a/srcpkgs/llvm14/template
+++ b/srcpkgs/llvm14/template
@@ -51,7 +51,8 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
-_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
+_enabled_projects="clang;clang-tools-extra;lld"
+_enabled_runtimes="compiler-rt;libcxx;libcxxabi;libunwind"
 
 _lldb_enable=yes
 _libomp_enable=no
@@ -67,9 +68,8 @@ esac
 
 subpackages="clang-tools-extra"
 
-# must go before clang
 if [ "$_libomp_enable" = "yes" ]; then
-	_enabled_projects+=";openmp"
+	_enabled_runtimes+=";openmp"
 	subpackages+=" libomp libomp-devel"
 	# because of cmake nonsense referencing libomptarget.so.*
 	depends+=" libomp>=${version}_${revision}"
@@ -88,6 +88,7 @@ fi
 subpackages+=" lld lld-devel"
 
 configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+configure_args+=" -DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}"
 
 post_patch() {
 	if [ "$_lldb_enable" = "yes" ]; then
@@ -156,7 +157,8 @@ pre_configure() {
 		CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
 			CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
-			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
+			-DLLVM_ENABLE_PROJECTS=${_enabled_projects} \
+			-DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}
 		make ${makejobs} -C utils/TableGen
 		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen

From 4ca4a34e7c790fc4365277a73eb321f85432206c Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 03:39:58 +0200
Subject: [PATCH 28/29] llvm14: fix build.

---
 srcpkgs/llvm14/files/llvm-Config-llvm-config.h | 9 +++++++++
 srcpkgs/llvm14/template                        | 3 +++
 2 files changed, 12 insertions(+)
 create mode 100644 srcpkgs/llvm14/files/llvm-Config-llvm-config.h

diff --git a/srcpkgs/llvm14/files/llvm-Config-llvm-config.h b/srcpkgs/llvm14/files/llvm-Config-llvm-config.h
new file mode 100644
index 000000000000..2fa08c9be696
--- /dev/null
+++ b/srcpkgs/llvm14/files/llvm-Config-llvm-config.h
@@ -0,0 +1,9 @@
+#include <bits/wordsize.h>
+
+#if __WORDSIZE == 32
+#include "llvm-config-32.h"
+#elif __WORDSIZE == 64
+#include "llvm-config-64.h"
+#else
+#error "Unknown word size"
+#endif
diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
index e731aa76130a..b21cff99e4d4 100644
--- a/srcpkgs/llvm14/template
+++ b/srcpkgs/llvm14/template
@@ -168,6 +168,9 @@ pre_configure() {
 		cd ../..
 	fi
 
+	mkdir -p gnu
+	touch gnu/stubs-32.h
+
 	case "$XBPS_TARGET_MACHINE" in
 		i686*) _arch="X86";;
 		x86_64*) _arch="X86";;

From 6dbe6640b3d6426f34baa67163750c76f6bc5eb0 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 14:07:14 +0200
Subject: [PATCH 29/29] zig: fix build.

---
 srcpkgs/zig/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/zig/template b/srcpkgs/zig/template
index 728c5a64e9df..c175de62c5f7 100644
--- a/srcpkgs/zig/template
+++ b/srcpkgs/zig/template
@@ -5,7 +5,7 @@ revision=2
 archs="x86_64* aarch64*"
 build_style=cmake
 make_cmd=make
-makedepends="clang llvm12 lld-devel"
+makedepends="clang12 llvm12 lld12-devel"
 short_desc="Programming language designed for robustness, optimality, and clarity"
 maintainer="Isaac Freund <mail@isaacfreund.com>"
 license="MIT"

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: [PR PATCH] [Updated] Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (3 preceding siblings ...)
  2022-05-04 17:10 ` prez
@ 2022-05-04 20:26 ` prez
  2022-05-04 20:50 ` prez
                   ` (64 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-05-04 20:26 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 667 bytes --]

There is an updated pull request by prez against master on the void-packages repository

https://github.com/prez/void-packages llvm
https://github.com/void-linux/void-packages/pull/36962

Llvm14
Supersedes https://github.com/void-linux/void-packages/pull/36229, https://github.com/void-linux/void-packages/pull/34800 - thank you @motorto and @DBLouis.

Updated patches, ping @q66 .

@ifreund todo: zig. Since it depends on `lld-devel`, I guess we need to split out `lld12`? Would appreciate your help with this, I don't want to wait for the next zig version.

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/36962.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-llvm-36962.patch --]
[-- Type: text/x-diff, Size: 540678 bytes --]

From af3214d006e7bc77ca1201c220be4ce4b8bebd34 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:15:06 +0200
Subject: [PATCH 01/29] New package: llvm14-14.0.3

---
 common/shlibs                                 |  16 +-
 srcpkgs/clang                                 |   2 +-
 srcpkgs/clang-analyzer                        |   2 +-
 srcpkgs/clang-tools-extra                     |   2 +-
 srcpkgs/libclang                              |   2 +-
 srcpkgs/libclang-cpp                          |   2 +-
 srcpkgs/libcxx                                |   2 +-
 srcpkgs/libcxx-devel                          |   2 +-
 srcpkgs/libcxxabi                             |   2 +-
 srcpkgs/libcxxabi-devel                       |   2 +-
 srcpkgs/libllvm14                             |   1 +
 srcpkgs/libomp                                |   2 +-
 srcpkgs/libomp-devel                          |   2 +-
 srcpkgs/lld                                   |   2 +-
 srcpkgs/lld-devel                             |   2 +-
 srcpkgs/lldb                                  |   2 +-
 srcpkgs/lldb-devel                            |   2 +-
 srcpkgs/llvm-libunwind                        |   2 +-
 srcpkgs/llvm-libunwind-devel                  |   2 +-
 .../patches/clang-002-add-musl-triples.patch  | 110 +++++
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 +
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ++
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 ++
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 +++
 srcpkgs/llvm14/patches/libcxx-musl.patch      |  26 ++
 srcpkgs/llvm14/patches/libcxx-ppc.patch       |  22 +
 .../llvm14/patches/libcxx-ssp-nonshared.patch |  11 +
 srcpkgs/llvm14/patches/libcxxabi-dl.patch     |  25 ++
 srcpkgs/llvm14/patches/lldb-musl.patch        |  31 ++
 srcpkgs/llvm14/patches/llvm-001-musl.patch    |  57 +++
 .../patches/llvm-002-musl-ppc64-elfv2.patch   |  30 ++
 .../patches/llvm-003-ppc-secureplt.patch      |  11 +
 .../patches/llvm-004-override-opt.patch       |  18 +
 .../llvm14/patches/llvm-005-ppc-bigpic.patch  |  36 ++
 .../patches/llvm-006-aarch64-mf_exec.patch    |  25 ++
 srcpkgs/llvm14/template                       | 424 ++++++++++++++++++
 srcpkgs/llvm14/update                         |   3 +
 37 files changed, 1018 insertions(+), 20 deletions(-)
 create mode 120000 srcpkgs/libllvm14
 create mode 100644 srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
 create mode 100644 srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
 create mode 100644 srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
 create mode 100644 srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-ppc.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxxabi-dl.patch
 create mode 100644 srcpkgs/llvm14/patches/lldb-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-001-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-004-override-opt.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
 create mode 100644 srcpkgs/llvm14/template
 create mode 100644 srcpkgs/llvm14/update

diff --git a/common/shlibs b/common/shlibs
index 4114151662fb..81acc39defb4 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -975,11 +975,12 @@ libuchardet.so.0 uchardet-0.0.6_1
 libgtksourceviewmm-3.0.so.0 gtksourceviewmm-3.2.0_1
 libyajl.so.2 yajl-2.0.1_1
 libconfuse.so.2 confuse-3.2.1_1
-liblldb.so.12 lldb-12.0.0_1
-libclang.so.12 libclang-12.0.0_1
-libclang-cpp.so.12 libclang-cpp-12.0.0_1
+liblldb.so.14 lldb-14.0.3_1
+libclang.so.14 libclang-14.0.3_1
+libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
+libLLVM-14.so libllvm14-14.0.3_1
 libisofs.so.6 libisofs-0.6.24_1
 libmpack.so.0 libmpack-1.0.5_1
 libGeoIP.so.1 libgeoip-1.4.8_1
@@ -4152,3 +4153,12 @@ librz_bin.so.0.3.4 rizin-0.3.4_1
 libaravis-0.8.so.0 libaravis-0.8.21_1
 libLimeSuite.so.20.10-1 LimeSuite-20.10.0_1
 libnvme.so.1 libnvme-1.0_1
+libomp.so libomp-14.0.3_1
+libomptarget.rtl.amdgpu.so libomp-14.0.3_1
+libomptarget.rtl.cuda.so libomp-14.0.3_1
+libomptarget.rtl.x86_64.so libomp-14.0.3_1
+libarcher.so libomp-14.0.3_1
+libomptarget.so libomp-14.0.3_1
+liblldbIntelFeatures.so.14 lldb-14.0.3_1
+libLTO.so.14 llvm14-14.0.3_1
+libRemarks.so.14 llvm14-14.0.3_1
diff --git a/srcpkgs/clang b/srcpkgs/clang
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang
+++ b/srcpkgs/clang
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/clang-analyzer b/srcpkgs/clang-analyzer
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang-analyzer
+++ b/srcpkgs/clang-analyzer
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/clang-tools-extra b/srcpkgs/clang-tools-extra
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang-tools-extra
+++ b/srcpkgs/clang-tools-extra
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libclang b/srcpkgs/libclang
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libclang
+++ b/srcpkgs/libclang
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libclang-cpp b/srcpkgs/libclang-cpp
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libclang-cpp
+++ b/srcpkgs/libclang-cpp
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxx b/srcpkgs/libcxx
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxx
+++ b/srcpkgs/libcxx
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxx-devel b/srcpkgs/libcxx-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxx-devel
+++ b/srcpkgs/libcxx-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxxabi b/srcpkgs/libcxxabi
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxxabi
+++ b/srcpkgs/libcxxabi
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxxabi-devel b/srcpkgs/libcxxabi-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxxabi-devel
+++ b/srcpkgs/libcxxabi-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libllvm14 b/srcpkgs/libllvm14
new file mode 120000
index 000000000000..1d42ed7632a6
--- /dev/null
+++ b/srcpkgs/libllvm14
@@ -0,0 +1 @@
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libomp b/srcpkgs/libomp
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libomp
+++ b/srcpkgs/libomp
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libomp-devel b/srcpkgs/libomp-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libomp-devel
+++ b/srcpkgs/libomp-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lld b/srcpkgs/lld
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lld
+++ b/srcpkgs/lld
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lld-devel b/srcpkgs/lld-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lld-devel
+++ b/srcpkgs/lld-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lldb b/srcpkgs/lldb
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lldb
+++ b/srcpkgs/lldb
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lldb-devel b/srcpkgs/lldb-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lldb-devel
+++ b/srcpkgs/lldb-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm-libunwind b/srcpkgs/llvm-libunwind
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/llvm-libunwind
+++ b/srcpkgs/llvm-libunwind
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm-libunwind-devel b/srcpkgs/llvm-libunwind-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/llvm-libunwind-devel
+++ b/srcpkgs/llvm-libunwind-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
new file mode 100644
index 000000000000..7b640e102bed
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
@@ -0,0 +1,110 @@
+--- a/clang/lib/Driver/ToolChains/Gnu.cpp
++++ b/clang/lib/Driver/ToolChains/Gnu.cpp
+@@ -2083,7 +2083,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
+                                              "armv7hl-redhat-linux-gnueabi",
+                                              "armv6hl-suse-linux-gnueabi",
+-                                             "armv7hl-suse-linux-gnueabi"};
++                                             "armv7hl-suse-linux-gnueabi",
++                                             "armv7l-linux-gnueabihf"};
+   static const char *const ARMebLibDirs[] = {"/lib"};
+   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi"};
+   static const char *const ARMebHFTriples[] = {
+@@ -2151,8 +2152,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
+   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
+   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
+-                                             "powerpcle-unknown-linux-gnu",
+-                                             "powerpcle-linux-musl"};
++                                             "powerpcle-unknown-linux-gnu"};
+
+   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
+   static const char *const PPC64Triples[] = {
+@@ -2231,6 +2231,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+     return;
+   }
+
++  if (TargetTriple.isMusl()) {
++    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
++    static const char *const ARMHFMuslTriples[] = {
++        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
++    };
++    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
++    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
++    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
++    static const char *const MIPSMuslTriples[] = {
++        "mips-linux-musl", "mipsel-linux-musl",
++        "mipsel-linux-muslhf", "mips-linux-muslhf"
++    };
++    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
++    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
++    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
++    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
++
++    switch (TargetTriple.getArch()) {
++    case llvm::Triple::aarch64:
++      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      break;
++    case llvm::Triple::arm:
++      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
++      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
++        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
++      } else {
++        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
++      }
++      break;
++    case llvm::Triple::x86_64:
++      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      break;
++    case llvm::Triple::x86:
++      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      break;
++    case llvm::Triple::mips:
++      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
++      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
++      break;
++    case llvm::Triple::ppc:
++      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      break;
++    case llvm::Triple::ppcle:
++      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      break;
++    case llvm::Triple::ppc64:
++      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      break;
++    case llvm::Triple::ppc64le:
++      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      break;
++    default:
++      break;
++    }
++    TripleAliases.push_back(TargetTriple.str());
++    if (TargetTriple.str() != BiarchTriple.str())
++      BiarchTripleAliases.push_back(BiarchTriple.str());
++    return;
++  }
++
+   // Android targets should not use GNU/Linux tools or libraries.
+   if (TargetTriple.isAndroid()) {
+     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
new file mode 100644
index 000000000000..47128af79b7f
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
@@ -0,0 +1,13 @@
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -490,10 +490,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+     Loader = "ld.so.1";
+     break;
+   case llvm::Triple::ppc64:
+-    LibDir = "lib64";
+-    Loader =
+-        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
+-    break;
+   case llvm::Triple::ppc64le:
+     LibDir = "lib64";
+     Loader =
diff --git a/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
new file mode 100644
index 000000000000..21fc8003c5f1
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
@@ -0,0 +1,48 @@
+--- a/clang/lib/Basic/Targets/PPC.h
++++ b/clang/lib/Basic/Targets/PPC.h
+@@ -415,11 +415,10 @@ public:
+       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
+     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
+       DataLayout = "e-m:e-i64:64-n32:64";
+-      ABI = "elfv2";
+     } else {
+       DataLayout = "E-m:e-i64:64-n32:64";
+-      ABI = "elfv1";
+     }
++    ABI = "elfv2";
+ 
+     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
+       LongDoubleWidth = LongDoubleAlign = 64;
+--- a/clang/lib/CodeGen/TargetInfo.cpp
++++ b/clang/lib/CodeGen/TargetInfo.cpp
+@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
+       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
+ 
+     if (Triple.isOSBinFormatELF()) {
+-      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
+-      if (getTarget().getABI() == "elfv2")
+-        Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      if (getTarget().getABI() == "elfv1")
++        Kind = PPC64_SVR4_ABIInfo::ELFv1;
+       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
+ 
+       return SetCGInfo(
+--- a/clang/lib/Driver/ToolChains/Clang.cpp
++++ b/clang/lib/Driver/ToolChains/Clang.cpp
+@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
+   const llvm::Triple &T = getToolChain().getTriple();
+   if (T.isOSBinFormatELF()) {
+     switch (getToolChain().getArch()) {
+-    case llvm::Triple::ppc64: {
+-      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
+-          T.isOSOpenBSD() || T.isMusl())
+-        ABIName = "elfv2";
+-      else
+-        ABIName = "elfv1";
+-      break;
+-    }
++    case llvm::Triple::ppc64:
+     case llvm::Triple::ppc64le:
+       ABIName = "elfv2";
+       break;
diff --git a/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch b/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
new file mode 100644
index 000000000000..4135bfd4486a
--- /dev/null
+++ b/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
@@ -0,0 +1,35 @@
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
+@@ -74,6 +74,10 @@
+ #include <sys/utsname.h>
+ #endif
+
++#if SANITIZER_LINUX && defined(__powerpc__)
++#include <asm/ptrace.h>
++#endif
++
+ #if SANITIZER_LINUX && !SANITIZER_ANDROID
+ #include <sys/personality.h>
+ #endif
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
+@@ -92,7 +92,7 @@
+ # include <utime.h>
+ # include <sys/ptrace.h>
+ #    if defined(__mips64) || defined(__aarch64__) || defined(__arm__) || \
+-        defined(__hexagon__) || SANITIZER_RISCV64
++        defined(__hexagon__) || defined(__powerpc__) || SANITIZER_RISCV64
+ #      include <asm/ptrace.h>
+ #      ifdef __arm__
+ typedef struct user_fpregs elf_fpregset_t;
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
+@@ -31,7 +31,7 @@
+ #include <sys/types.h> // for pid_t
+ #include <sys/uio.h> // for iovec
+ #include <elf.h> // for NT_PRSTATUS
+-#if (defined(__aarch64__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
++#if (defined(__aarch64__) || defined(__powerpc__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
+ // GLIBC 2.20+ sys/user does not include asm/ptrace.h
+ # include <asm/ptrace.h>
+ #endif
diff --git a/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch b/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
new file mode 100644
index 000000000000..d0b61c80c897
--- /dev/null
+++ b/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
@@ -0,0 +1,62 @@
+--- a/compiler-rt/lib/xray/xray_powerpc64.inc
++++ b/compiler-rt/lib/xray/xray_powerpc64.inc
+@@ -12,7 +12,13 @@
+ 
+ #include <cstdint>
+ #include <mutex>
++#ifdef __GLIBC__
+ #include <sys/platform/ppc.h>
++#else
++#include <cctype>
++#include <cstring>
++#include <cstdlib>
++#endif
+ 
+ #include "xray_defs.h"
+ 
+@@ -20,13 +26,45 @@ namespace __xray {
+ 
+ ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
+   CPU = 0;
++#ifdef __GLIBC__
+   return __ppc_get_timebase();
++#else
++  return __builtin_ppc_get_timebase();
++#endif
+ }
+ 
+ inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
+   static std::mutex M;
+   std::lock_guard<std::mutex> Guard(M);
++#ifdef __GLIBC__
+   return __ppc_get_timebase_freq();
++#else
++  /* FIXME: a less dirty implementation? */
++  static uint64_t base;
++  if (!base) {
++    FILE *f = fopen("/proc/cpuinfo", "rb");
++    if (f) {
++      ssize_t nr;
++      /* virtually always big enough to hold the line */
++      char buf[512];
++      while (fgets(buf, sizeof(buf), f)) {
++        char *ret = strstr(buf, "timebase");
++        if (!ret) {
++          continue;
++        }
++        ret += sizeof("timebase") - 1;
++        ret = strchr(ret, ':');
++        if (!ret) {
++          continue;
++        }
++        base = strtoul(ret + 1, nullptr, 10);
++        break;
++      }
++      fclose(f);
++    }
++  }
++  return base;
++#endif
+ }
+ 
+ inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
diff --git a/srcpkgs/llvm14/patches/libcxx-musl.patch b/srcpkgs/llvm14/patches/libcxx-musl.patch
new file mode 100644
index 000000000000..bbd31ffc2cb1
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-musl.patch
@@ -0,0 +1,26 @@
+--- a/libcxx/include/locale
++++ b/libcxx/include/locale
+@@ -742,7 +742,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
+         typename remove_reference<decltype(errno)>::type __save_errno = errno;
+         errno = 0;
+         char *__p2;
++#if defined(__linux__) && !defined(__GLIBC__)
++        long long __ll = strtoll(__a, &__p2, __base);
++#else
+         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
++#endif
+         typename remove_reference<decltype(errno)>::type __current_errno = errno;
+         if (__current_errno == 0)
+             errno = __save_errno;
+@@ -782,7 +786,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
+         typename remove_reference<decltype(errno)>::type __save_errno = errno;
+         errno = 0;
+         char *__p2;
++#if defined(__linux__) && !defined(__GLIBC__)
++        unsigned long long __ll = strtoull(__a, &__p2, __base);
++#else
+         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
++#endif
+         typename remove_reference<decltype(errno)>::type __current_errno = errno;
+         if (__current_errno == 0)
+             errno = __save_errno;
diff --git a/srcpkgs/llvm14/patches/libcxx-ppc.patch b/srcpkgs/llvm14/patches/libcxx-ppc.patch
new file mode 100644
index 000000000000..7a92f8004e1c
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-ppc.patch
@@ -0,0 +1,22 @@
+This ensures `is_iec559` is defined correctly under all long double ABIs,
+including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__`
+is not defined on gcc.
+
+--- a/libcxx/include/limits
++++ b/libcxx/include/limits
+@@ -426,8 +426,14 @@ protected:
+     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
+     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
+ 
+-#if (defined(__ppc__) || defined(__ppc64__))
++#if defined(__powerpc__) || defined(__powerpc64__)
++#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__)
++    /* IEEE 754 quadruple or double precision */
++    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
++#else
++    /* 128-bit IBM double-double */
+     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
++#endif
+ #else
+     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
+ #endif
diff --git a/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch b/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
new file mode 100644
index 000000000000..70292beb2fcd
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
@@ -0,0 +1,11 @@
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -769,6 +769,8 @@ function(cxx_link_system_libraries target)
+     target_link_libraries(${target} PRIVATE atomic)
+   endif()
+ 
++#ssp  target_link_libraries(${target} PRIVATE ssp_nonshared)
++
+   if (MINGW)
+     target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
+   endif()
diff --git a/srcpkgs/llvm14/patches/libcxxabi-dl.patch b/srcpkgs/llvm14/patches/libcxxabi-dl.patch
new file mode 100644
index 000000000000..3a15f9db8c98
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxxabi-dl.patch
@@ -0,0 +1,25 @@
+Also link to -ldl to prevent undefined references.
+
+--- a/libcxxabi/src/CMakeLists.txt
++++ b/libcxxabi/src/CMakeLists.txt
+@@ -73,6 +73,7 @@
+   endif()
+ 
+   add_library_flags_if(LIBCXXABI_HAS_C_LIB c)
++  add_library_flags_if(LIBCXXABI_HAS_C_LIB dl)
+ endif()
+ 
+ if (LIBCXXABI_USE_LLVM_UNWINDER)
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -745,6 +745,10 @@
+     target_link_libraries(${target} PRIVATE m)
+   endif()
+ 
++  if (LIBCXX_HAS_C_LIB)
++    target_link_libraries(${target} PRIVATE dl)
++  endif()
++
+   if (LIBCXX_HAS_RT_LIB)
+     target_link_libraries(${target} PRIVATE rt)
+   endif()
diff --git a/srcpkgs/llvm14/patches/lldb-musl.patch b/srcpkgs/llvm14/patches/lldb-musl.patch
new file mode 100644
index 000000000000..601c0d138523
--- /dev/null
+++ b/srcpkgs/llvm14/patches/lldb-musl.patch
@@ -0,0 +1,31 @@
+--- a/lldb/source/Plugins/Process/Linux/Procfs.h
++++ b/lldb/source/Plugins/Process/Linux/Procfs.h
+@@ -10,21 +10,12 @@
+ // sys/procfs.h on Android/Linux for all supported architectures.
+ 
+ #include <sys/ptrace.h>
++#include <asm/ptrace.h>
+ 
+-#ifdef __ANDROID__
+-#if defined(__arm64__) || defined(__aarch64__)
+-typedef unsigned long elf_greg_t;
+-typedef elf_greg_t
+-    elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
+-typedef struct user_fpsimd_state elf_fpregset_t;
+-#ifndef NT_FPREGSET
+-#define NT_FPREGSET NT_PRFPREG
+-#endif // NT_FPREGSET
+-#elif defined(__mips__)
+-#ifndef NT_FPREGSET
+-#define NT_FPREGSET NT_PRFPREG
+-#endif // NT_FPREGSET
+-#endif
+-#else // __ANDROID__
++#if !defined(__GLIBC__) && defined(__powerpc__)
++#define pt_regs musl_pt_regs
++#include <sys/procfs.h>
++#undef pt_regs
++#else
+ #include <sys/procfs.h>
+-#endif // __ANDROID__
++#endif
diff --git a/srcpkgs/llvm14/patches/llvm-001-musl.patch b/srcpkgs/llvm14/patches/llvm-001-musl.patch
new file mode 100644
index 000000000000..f2a3f8d62813
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-001-musl.patch
@@ -0,0 +1,57 @@
+From faca3fbd15d0c3108493c3c54cd93138e049ac43 Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe@gmail.com>
+Date: Tue, 8 Sep 2015 22:03:02 +0200
+Subject: [PATCH 3/3] musl
+
+---
+ include/llvm/Analysis/TargetLibraryInfo.h | 9 +++++++++
+ lib/Support/DynamicLibrary.cpp            | 2 +-
+ lib/Support/Unix/Signals.inc              | 6 +++---
+ utils/unittest/googletest/src/gtest.cc    | 1 +
+ 5 files changed, 17 insertions(+), 6 deletions(-)
+
+diff --git a/include/llvm/Analysis/TargetLibraryInfo.h b/include/llvm/Analysis/TargetLibraryInfo.h
+index 34a8a1e3..1214ece5 100644
+--- a/llvm/include/llvm/Analysis/TargetLibraryInfo.h
++++ b/llvm/include/llvm/Analysis/TargetLibraryInfo.h
+@@ -18,6 +18,15 @@
+ #include "llvm/IR/PassManager.h"
+ #include "llvm/Pass.h"
+ 
++#undef fopen64
++#undef fseeko64
++#undef fstat64
++#undef fstatvfs64
++#undef ftello64
++#undef lstat64
++#undef stat64
++#undef tmpfile64
++
+ namespace llvm {
+ template <typename T> class ArrayRef;
+ class Triple;
+diff --git a/lib/Support/Unix/DynamicLibrary.inc b/lib/Support/Unix/DynamicLibrary.inc
+index a2a37996..2f86c470 100644
+--- a/llvm/lib/Support/Unix/DynamicLibrary.inc
++++ b/llvm/lib/Support/Unix/DynamicLibrary.inc
+@@ -102,7 +102,7 @@ static void *DoSearch(const char* SymbolName) {
+ 
+ // This macro returns the address of a well-known, explicit symbol
+ #define EXPLICIT_SYMBOL(SYM) \
+-   if (!strcmp(SymbolName, #SYM)) return &SYM
++   if (!strcmp(SymbolName, #SYM)) return (void *)&SYM
+ 
+ // Under glibc we have a weird situation. The stderr/out/in symbols are both
+ // macros and global variables because of standards requirements. So, we
+diff --git a/utils/unittest/googletest/src/gtest.cc b/utils/unittest/googletest/src/gtest.cc
+index d882ab2e..f1fb12d0 100644
+--- a/llvm/utils/unittest/googletest/src/gtest.cc
++++ b/llvm/utils/unittest/googletest/src/gtest.cc
+@@ -128,6 +128,7 @@
+ 
+ #if GTEST_CAN_STREAM_RESULTS_
+ # include <arpa/inet.h>  // NOLINT
++# include <sys/socket.h>  // NOLINT
+ # include <netdb.h>  // NOLINT
+ # include <sys/socket.h>  // NOLINT
+ # include <sys/types.h>  // NOLINT
diff --git a/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch b/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
new file mode 100644
index 000000000000..0071d964bd37
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
@@ -0,0 +1,30 @@
+This patches LLVM to use ELFv2 on ppc64 unconditionally unless overridden. We
+need this because unlike most distros we use ELFv2 for both glibc and musl
+on big endian ppc64.
+
+diff --git a/lib/Target/PowerPC/PPCTargetMachine.cpp b/lib/Target/PowerPC/PPCTargetMachine.cpp
+index 0634833e..b7cbc2e7 100644
+--- a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
++++ b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
+@@ -222,9 +222,8 @@ static PPCTargetMachine::PPCABI computeTargetABI(const Triple &TT,
+ 
+   switch (TT.getArch()) {
+   case Triple::ppc64le:
+-    return PPCTargetMachine::PPC_ABI_ELFv2;
+   case Triple::ppc64:
+-    return PPCTargetMachine::PPC_ABI_ELFv1;
++    return PPCTargetMachine::PPC_ABI_ELFv2;
+   default:
+     return PPCTargetMachine::PPC_ABI_UNKNOWN;
+   }
+diff --git a/test/CodeGen/PowerPC/ppc64-elf-abi.ll b/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+index 8b1cf6b5..296a2afa 100644
+--- a/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
++++ b/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+@@ -1,4 +1,5 @@
+-; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv1
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-musl < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv1 < %s | FileCheck %s -check-prefix=CHECK-ELFv1
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv2 < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
diff --git a/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch b/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
new file mode 100644
index 000000000000..b5d15974375d
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
@@ -0,0 +1,11 @@
+--- a/llvm/lib/Target/PowerPC/PPCSubtarget.cpp
++++ b/llvm/lib/Target/PowerPC/PPCSubtarget.cpp
+@@ -165,7 +165,7 @@ void PPCSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) {
+ 
+   if ((TargetTriple.isOSFreeBSD() && TargetTriple.getOSMajorVersion() >= 13) ||
+       TargetTriple.isOSNetBSD() || TargetTriple.isOSOpenBSD() ||
+-      TargetTriple.isMusl())
++      isTargetLinux())
+     SecurePlt = true;
+ 
+   if (HasSPE && IsPPC64)
diff --git a/srcpkgs/llvm14/patches/llvm-004-override-opt.patch b/srcpkgs/llvm14/patches/llvm-004-override-opt.patch
new file mode 100644
index 000000000000..51d0e4b31b32
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-004-override-opt.patch
@@ -0,0 +1,18 @@
+This allows us to override the optimization level as not all platforms can
+deal with -O3.
+
+--- a/llvm/CMakeLists.txt
++++ b/llvm/CMakeLists.txt
+@@ -918,6 +918,12 @@ if( MINGW AND NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" )
+   llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "-O2")
+ endif()
+ 
++set(VOID_CXX_OPT_FLAGS "" CACHE STRING "Optimization level to use")
++
++if (NOT VOID_CXX_OPT_FLAGS STREQUAL "")
++    llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "${VOID_CXX_OPT_FLAGS}")
++endif()
++
+ # Put this before tblgen. Else we have a circular dependence.
+ add_subdirectory(lib/Demangle)
+ add_subdirectory(lib/Support)
diff --git a/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch b/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
new file mode 100644
index 000000000000..d332687b9d92
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
@@ -0,0 +1,36 @@
+From f3dbdd49c06bfafc1d6138094cf42889c14d38b6 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Sun, 3 Nov 2019 10:57:27 -0600
+Subject: [PATCH] [LLVM][PowerPC] Assume BigPIC if no PIC level is specified
+
+---
+ llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp  | 2 +-
+ llvm/lib/Target/PowerPC/PPCMCInstLower.cpp | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/Target/PowerPC/PPCAsmPrinter.cpp b/lib/Target/PowerPC/PPCAsmPrinter.cpp
+index cce21f32..87ca5f9b 100644
+--- a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
++++ b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
+@@ -520,7 +520,7 @@ void PPCAsmPrinter::EmitTlsCall(const MachineInstr *MI,
+ 
+   // Add 32768 offset to the symbol so we follow up the latest GOT/PLT ABI.
+   if (Kind == MCSymbolRefExpr::VK_PLT && Subtarget->isSecurePlt() &&
+-      M->getPICLevel() == PICLevel::BigPIC)
++      M->getPICLevel() != PICLevel::SmallPIC)
+     TlsRef = MCBinaryExpr::createAdd(
+         TlsRef, MCConstantExpr::create(32768, OutContext), OutContext);
+   const MachineOperand &MO = MI->getOperand(2);
+diff --git a/lib/Target/PowerPC/PPCMCInstLower.cpp b/lib/Target/PowerPC/PPCMCInstLower.cpp
+index 5cc180d7..a5b02565 100644
+--- a/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
++++ b/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
+@@ -117,7 +117,7 @@ static MCOperand GetSymbolRef(const MachineOperand &MO, const MCSymbol *Symbol,
+   const MCExpr *Expr = MCSymbolRefExpr::create(Symbol, RefKind, Ctx);
+   // If -msecure-plt -fPIC, add 32768 to symbol.
+   if (Subtarget->isSecurePlt() && TM.isPositionIndependent() &&
+-      M->getPICLevel() == PICLevel::BigPIC &&
++      M->getPICLevel() != PICLevel::SmallPIC &&
+       MO.getTargetFlags() == PPCII::MO_PLT)
+     Expr =
+         MCBinaryExpr::createAdd(Expr, MCConstantExpr::create(32768, Ctx), Ctx);
diff --git a/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch b/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
new file mode 100644
index 000000000000..a00abd216665
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
@@ -0,0 +1,25 @@
+Fix failures in AllocationTests/MappedMemoryTest.* on aarch64:
+
+    Failing Tests (8):
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.AllocAndRelease/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.DuplicateNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.EnabledWrite/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.MultipleAllocAndRelease/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.SuccessiveNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.UnalignedNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.ZeroNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.ZeroSizeNear/3
+
+Upstream-Issue: https://bugs.llvm.org/show_bug.cgi?id=14278#c10
+
+--- a/llvm/lib/Support/Unix/Memory.inc
++++ b/llvm/lib/Support/Unix/Memory.inc
+@@ -58,7 +58,7 @@ static int getPosixProtectionFlags(unsigned Flags) {
+     return PROT_READ | PROT_WRITE | PROT_EXEC;
+   case llvm::sys::Memory::MF_EXEC:
+ #if (defined(__FreeBSD__) || defined(__POWERPC__) || defined (__ppc__) || \
+-     defined(_POWER) || defined(_ARCH_PPC))
++     defined(_POWER) || defined(_ARCH_PPC) || (defined(__linux__) && defined(__aarch64__)))
+     // On PowerPC, having an executable page that has no read permission
+     // can have unintended consequences.  The function InvalidateInstruction-
+     // Cache uses instructions dcbf and icbi, both of which are treated by
diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
new file mode 100644
index 000000000000..3e7e6ab2c00b
--- /dev/null
+++ b/srcpkgs/llvm14/template
@@ -0,0 +1,424 @@
+# Template file for 'llvm14'
+pkgname=llvm14
+version=14.0.3
+revision=1
+wrksrc="llvm-project-${version}.src"
+build_wrksrc=llvm
+build_style=cmake
+configure_args="
+ -DCMAKE_BUILD_TYPE=Release -Wno-dev
+ -DENABLE_LINKER_BUILD_ID=YES
+ -DLLDB_USE_SYSTEM_SIX=YES
+ -DLIBCXX_CXX_ABI=libcxxabi
+ -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
+ -DLIBCXXABI_USE_LLVM_UNWINDER=YES
+ -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
+ -DLIBOMP_ENABLE_SHARED=YES
+ -DLIBOMP_INSTALL_ALIASES=NO
+ -DLLVM_INCLUDE_DOCS=YES
+ -DLLVM_BUILD_DOCS=YES
+ -DLLVM_ENABLE_SPHINX=YES
+ -DSPHINX_WARNINGS_AS_ERRORS=NO
+ -DLLVM_INSTALL_UTILS=YES
+ -DLLVM_BUILD_LLVM_DYLIB=YES
+ -DLLVM_LINK_LLVM_DYLIB=YES
+ -DLLVM_ENABLE_RTTI=YES
+ -DLLVM_ENABLE_FFI=YES
+ -DLLVM_BINUTILS_INCDIR=/usr/include"
+hostmakedepends="perl python3 zlib-devel libffi-devel swig python3-Sphinx
+ python3-recommonmark python3-sphinx-automodapi"
+makedepends="python3-devel zlib-devel elfutils-devel libffi-devel libedit-devel
+ libxml2-devel binutils-devel libatomic-devel"
+depends="libllvm14>=${version}_${revision}"
+short_desc="Low Level Virtual Machine"
+maintainer="q66 <daniel@octaforge.org>"
+license="Apache-2.0"
+homepage="https://www.llvm.org"
+distfiles="https://github.com/llvm/llvm-project/releases/download/llvmorg-${version}/llvm-project-${version}.src.tar.xz"
+checksum=44d3e7a784d5cf805e72853bb03f218bd1058d448c03ca883dabbebc99204e0c
+lib32disabled=yes
+python_version=3
+
+if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+	configure_args+=" -DLIBCXX_HAS_MUSL_LIBC=YES"
+	makedepends+=" libexecinfo-devel"
+	depends+=" libexecinfo-devel"
+fi
+
+# "operand out of range" assembler failures
+case "$XBPS_TARGET_MACHINE" in
+	ppc64*) ;;
+	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
+esac
+
+_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
+
+_lldb_enable=yes
+_libomp_enable=no
+
+case "$XBPS_TARGET_MACHINE" in
+	ppc64le*) ;;
+	ppc*|i686*) _lldb_enable=no ;;
+esac
+
+case "$XBPS_TARGET_MACHINE" in
+	x86_64*|aarch64*|ppc64*) _libomp_enable=yes;;
+esac
+
+subpackages="clang-tools-extra"
+
+# must go before clang
+if [ "$_libomp_enable" = "yes" ]; then
+	_enabled_projects+=";openmp"
+	subpackages+=" libomp libomp-devel"
+	# because of cmake nonsense referencing libomptarget.so.*
+	depends+=" libomp>=${version}_${revision}"
+fi
+
+subpackages+=" clang clang-analyzer libclang libclang-cpp
+ llvm-libunwind llvm-libunwind-devel libcxx libcxx-devel
+ libcxxabi libcxxabi-devel libllvm14"
+
+if [ "$_lldb_enable" = "yes" ]; then
+	# XXX fails to cross compile due to python
+	_enabled_projects+=";lldb"
+	subpackages+=" lldb lldb-devel"
+fi
+
+subpackages+=" lld lld-devel"
+
+configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+
+post_patch() {
+	if [ "$_lldb_enable" = "yes" ]; then
+		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+			vsed -i 's|__ptrace_request|int|g' \
+				${wrksrc}/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
+		fi
+		# disable docs for lldb as they fail to generate
+		vsed -i '/add_subdirectory(docs)/d' \
+			${wrksrc}/lldb/CMakeLists.txt
+	fi
+
+	# update config.guess for better platform detection
+	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
+		${wrksrc}/llvm/cmake
+
+	# fix linker failures on some archs
+	vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
+		${wrksrc}/libcxxabi/cmake/config-ix.cmake
+	vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
+		${wrksrc}/libcxxabi/cmake/config-ix.cmake
+
+	# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*) ;;
+		ppc*-musl|i686-musl|mips*-musl)
+			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
+				${wrksrc}/libunwind/src/CMakeLists.txt
+			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
+				${wrksrc}/libcxxabi/src/CMakeLists.txt
+			vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
+			;;
+	esac
+
+	case "$XBPS_TARGET_MACHINE" in
+		x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
+			vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
+				${wrksrc}/compiler-rt/CMakeLists.txt
+			;;
+		arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
+			vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
+				${wrksrc}/compiler-rt/cmake/config-ix.cmake
+			;;
+	esac
+}
+
+pre_configure() {
+	local triplet
+
+	# Vastly reduce size of debugging symbols:
+	CFLAGS=${CFLAGS/ -g/ -g1}
+	CXXFLAGS=${CXXFLAGS/ -g/ -g1}
+
+	# since gcc9, the build likes to blow up for ppc32 apparently because
+	# of clang being too large for a 24-bit relative call to the PLT, so
+	# optimize for size instead
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*) ;;
+		mips*-musl|ppc*) configure_args+=" -DVOID_CXX_OPT_FLAGS=-Os" ;;
+	esac
+
+	if [ "$CROSS_BUILD" ]; then
+		msg_normal "Building host tblgen\n"
+		mkdir -p build/HOST
+		cd build/HOST
+		CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
+			CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
+			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
+			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
+		make ${makejobs} -C utils/TableGen
+		make ${makejobs} -C tools/clang/utils/TableGen
+		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
+		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
+		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
+		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
+		cd ../..
+	fi
+
+	case "$XBPS_TARGET_MACHINE" in
+		i686*) _arch="X86";;
+		x86_64*) _arch="X86";;
+		armv5*) _arch="Armv5te";;
+		armv6*) _arch="Armv6";;
+		armv7*) _arch="Armv7";;
+		aarch64*) _arch="AArch64";;
+		mips*) _arch="Mips";;
+		ppc*) _arch="PowerPC";;
+		riscv64*) _arch="RISCV64";;
+	esac
+
+	triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
+
+	configure_args+=" -DLLVM_TARGET_ARCH=${_arch}"
+	configure_args+=" -DLLVM_HOST_TRIPLE=${triplet}"
+	configure_args+=" -DLLVM_DEFAULT_TARGET_TRIPLE=${triplet}"
+}
+
+do_install() {
+	cd build
+	cmake -DCMAKE_INSTALL_PREFIX=${DESTDIR}/usr -P cmake_install.cmake
+
+	# Required for multilib.
+	if [ "$XBPS_TARGET_MACHINE" = "x86_64" ]; then
+		for _header in llvm-config; do
+			mv ${DESTDIR}/usr/include/llvm/Config/${_header}{,-64}.h
+			vinstall ${FILESDIR}/llvm-Config-${_header}.h 644 \
+				usr/include/llvm/Config ${_header}.h
+		done
+	fi
+
+	# Remove llvm-config-host in cross builds.
+	if [ "$CROSS_BUILD" ]; then
+		rm -f ${DESTDIR}/usr/bin/llvm-config-host
+	fi
+
+	# Install libcxxabi headers
+	vinstall ${wrksrc}/libcxxabi/include/__cxxabi_config.h 644 usr/include
+	vinstall ${wrksrc}/libcxxabi/include/cxxabi.h 644 usr/include
+
+	# Install libunwind headers
+	vinstall ${wrksrc}/libunwind/include/__libunwind_config.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/libunwind.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/unwind.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/mach-o/compact_unwind_encoding.h \
+		644 usr/include/mach-o
+}
+
+clang-analyzer_package() {
+	pycompile_dirs="usr/share/scan-view"
+	depends="clang-${version}_${revision} python3 perl"
+	short_desc+=" - A source code analysis framework"
+	homepage="https://clang-analyzer.llvm.org/"
+	pkg_install() {
+		vmove usr/share/man/man1/scan-build.1
+		vmove "/usr/bin/scan-*"
+		vmove "/usr/share/scan-*"
+		vmove "/usr/libexec/*analyzer"
+	}
+}
+
+clang-tools-extra_package() {
+	lib32disabled=yes
+	depends="clang-${version}_${revision} python3"
+	short_desc+=" - Extra Clang tools"
+	homepage="https://clang.llvm.org/extra/"
+	pkg_install() {
+		vmove usr/include/clang-tidy
+		vmove usr/bin/clang-apply-replacements
+		vmove usr/bin/clang-query
+		vmove usr/bin/clang-rename
+		vmove usr/bin/clang-tidy
+		vmove usr/bin/diagtool
+		vmove usr/bin/find-all-symbols
+		vmove usr/bin/hmaptool
+		vmove usr/bin/modularize
+		vmove usr/bin/pp-trace
+		vmove usr/bin/sancov
+		vmove "usr/lib/libclangApplyReplacements*"
+		vmove "usr/lib/libclangQuery*"
+		vmove "usr/lib/libclangTidy*"
+		vmove "usr/share/clang/*tidy*"
+		vmove usr/share/doc/clang-tools
+		vmove usr/share/man/man1/extraclangtools.1
+		vmove usr/share/man/man1/diagtool.1
+	}
+}
+
+clang_package() {
+	lib32disabled=yes
+	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
+	 libclang-${version}_${revision}"
+	short_desc+=" - C language family frontend"
+	homepage="https://clang.llvm.org/"
+	pkg_install() {
+		vmove usr/include/clang
+		vmove usr/include/clang-c
+		vmove "usr/bin/*clang*"
+		vmove usr/bin/c-index-test
+		vmove usr/lib/clang
+		vmove usr/lib/cmake/clang
+		vmove "usr/lib/libclang*.a"
+		vmove "usr/lib/libclang*.so"
+		vmove usr/share/clang
+		vmove usr/share/doc/clang
+		vmove usr/share/man/man1/clang.1
+	}
+}
+
+libclang_package() {
+	short_desc+=" - C frontend runtime library"
+	pkg_install() {
+		vmove "usr/lib/libclang.so.*"
+	}
+}
+
+libclang-cpp_package() {
+	short_desc+=" - C frontend runtime library (C++ interface)"
+	pkg_install() {
+		vmove "usr/lib/libclang-cpp.so.*"
+	}
+}
+
+lld_package() {
+	lib32disabled=yes
+	short_desc+=" - linker"
+	homepage="https://lld.llvm.org"
+	pkg_install() {
+		vmove usr/bin/lld*
+		vmove usr/bin/wasm-ld
+		vmove usr/bin/ld.lld*
+		vmove usr/bin/ld64.lld*
+		vmove usr/share/doc/lld
+	}
+}
+
+lld-devel_package() {
+	lib32disabled=yes
+	short_desc+=" - linker - development files"
+	homepage="https://lld.llvm.org"
+	depends="lld>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include/lld
+		vmove usr/lib/cmake/lld
+		vmove "usr/lib/liblld*a"
+	}
+}
+
+lldb_package() {
+	lib32disabled=yes
+	depends+=" python3-six"
+	short_desc+=" - LLDB debugger"
+	homepage="https://lldb.llvm.org/"
+	pkg_install() {
+		vmove usr/bin/*lldb*
+		vmove usr/lib/liblldb*so.*
+		vmove /usr/lib/python*
+	}
+}
+
+lldb-devel_package() {
+	lib32disabled=yes
+	depends="lldb>=${version}_${revision}"
+	short_desc+=" - LLDB debugger - development files"
+	pkg_install() {
+		vmove usr/include/lldb
+		vmove "usr/lib/liblldb*.so"
+	}
+}
+
+llvm-libunwind_package() {
+	short_desc+=" - libunwind"
+	pkg_install() {
+		vmove "usr/lib/libunwind.so.*"
+	}
+}
+
+llvm-libunwind-devel_package() {
+	short_desc+=" - libunwind - development files"
+	depends="llvm-libunwind>=${version}_${revision}"
+	conflicts="libunwind-devel>=0"
+	pkg_install() {
+		vmove usr/lib/libunwind.so
+		vmove usr/lib/libunwind.a
+		vmove "usr/include/*unwind*"
+		vmove usr/include/mach-o
+		vmove usr/share/doc/libunwind
+	}
+}
+
+libcxxabi_package() {
+	short_desc+=" - low level support for libc++"
+	pkg_install() {
+		vmove "usr/lib/libc++abi.so.*"
+	}
+}
+
+libcxxabi-devel_package() {
+	short_desc+=" - low level support for libc++ - development files"
+	depends="libcxxabi>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/lib/libc++abi.so
+		vmove usr/lib/libc++abi.a
+		vmove "usr/include/*cxxabi*"
+	}
+}
+
+libcxx_package() {
+	short_desc+=" - C++ standard library"
+	pkg_install() {
+		vmove "usr/lib/libc++.so.*"
+	}
+}
+
+libcxx-devel_package() {
+	short_desc+=" - C++ standard library - development files"
+	depends="libcxx>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/lib/libc++.so
+		vmove usr/lib/libc++.a
+		vmove usr/lib/libc++experimental.a
+		vmove usr/include/c++
+		vmove usr/share/doc/libcxx
+	}
+}
+
+libomp_package() {
+	short_desc+=" - Clang OpenMP support library"
+	pkg_install() {
+		vmove usr/lib/libomp.so
+		vmove "usr/lib/libomptarget.rtl.*.so"
+		vmove usr/lib/libarcher.so
+		vmove "usr/lib/libomp*.so.*"
+	}
+}
+
+libomp-devel_package() {
+	short_desc+=" - Clang OpenMP support library - development files"
+	depends="libomp>=${version}_${revision}"
+	pkg_install() {
+		vmove "usr/lib/libomp*.so"
+		vmove "usr/lib/libarcher*"
+		vmove "usr/include/omp*.h"
+		vmove "usr/lib/clang/${version}/include/omp*.h"
+		vmove usr/share/man/man1/llvmopenmp.1
+		vmove usr/share/doc/openmp
+	}
+}
+
+libllvm14_package() {
+	short_desc+=" - runtime library"
+	pkg_install() {
+		vmove "usr/lib/libLLVM-*.so*"
+	}
+}
diff --git a/srcpkgs/llvm14/update b/srcpkgs/llvm14/update
new file mode 100644
index 000000000000..e95cf26b3586
--- /dev/null
+++ b/srcpkgs/llvm14/update
@@ -0,0 +1,3 @@
+site="https://github.com/llvm/llvm-project/releases"
+pattern="llvmorg-\K(\d+.){2}\d+(-rc\d+)?"
+ignore="*-rc*"

From 8438d62e818f41e2c2663bb6ed0e30d730118cad Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:16:07 +0200
Subject: [PATCH 02/29] llvm: update to 14.0.3.

---
 srcpkgs/llvm/template | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/llvm/template b/srcpkgs/llvm/template
index a92db6f94f9f..d226c61c734e 100644
--- a/srcpkgs/llvm/template
+++ b/srcpkgs/llvm/template
@@ -1,10 +1,10 @@
 # Template file for 'llvm'
 pkgname=llvm
-version=12.0.0
+version=14.0.3
 revision=1
 build_style=meta
-depends="llvm12"
-replaces="llvm11>=0 llvm10>=0 llvm9>=0 llvm8>=0 llvm7>=0 llvm6.0>=0 llvm3.9>=0"
+depends="llvm14"
+replaces="llvm13>=0 llvm12>=0 llvm11>=0 llvm10>=0 llvm9>=0 llvm8>=0 llvm7>=0 llvm6.0>=0 llvm3.9>=0"
 short_desc="LLVM meta package"
 maintainer="Enno Boland <gottox@voidlinux.org>"
 license="Public Domain"

From 92edaa1759b7b52e98fd6a3adf5a761334849304 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:36:32 +0200
Subject: [PATCH 03/29] llvm12: drop non-llvm components

---
 ...clang-001-fix-unwind-chain-inclusion.patch |  44 ---
 .../patches/clang-002-add-musl-triples.patch  | 110 -------
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 -
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ---
 .../compiler-rt-aarch64-ucontext.patch        |  11 -
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 --
 .../llvm12/patches/compiler-rt-size_t.patch   |  10 -
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 ----
 srcpkgs/llvm12/patches/libcxx-musl.patch      |  26 --
 srcpkgs/llvm12/patches/libcxx-ppc.patch       |  22 --
 .../llvm12/patches/libcxx-ssp-nonshared.patch |  11 -
 srcpkgs/llvm12/patches/libcxxabi-dl.patch     |  25 --
 srcpkgs/llvm12/patches/libunwind-ppc32.patch  |  63 ----
 srcpkgs/llvm12/patches/lldb-musl.patch        |  31 --
 .../llvm12/patches/ppc32-compiler-rt.patch    |  21 --
 srcpkgs/llvm12/template                       | 301 +-----------------
 16 files changed, 1 insertion(+), 832 deletions(-)
 delete mode 100644 srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-size_t.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-ppc.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxxabi-dl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libunwind-ppc32.patch
 delete mode 100644 srcpkgs/llvm12/patches/lldb-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/ppc32-compiler-rt.patch

diff --git a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
deleted file mode 100644
index e4eaa7783e7a..000000000000
--- a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 352974169f0d2b5da3d5321f588f5e3b5941330e Mon Sep 17 00:00:00 2001
-From: Andrea Brancaleoni <miwaxe@gmail.com>
-Date: Tue, 8 Sep 2015 22:14:57 +0200
-Subject: [PATCH 2/7] fix unwind chain inclusion
-
----
- lib/Headers/unwind.h | 9 +++++----
- 1 file changed, 5 insertions(+), 4 deletions(-)
-
-diff --git a/lib/Headers/unwind.h b/lib/Headers/unwind.h
-index 303d792..44e10cc 100644
---- a/clang/lib/Headers/unwind.h
-+++ b/clang/lib/Headers/unwind.h
-@@ -9,9 +9,6 @@
- 
- /* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/
- 
--#ifndef __CLANG_UNWIND_H
--#define __CLANG_UNWIND_H
--
- #if defined(__APPLE__) && __has_include_next(<unwind.h>)
- /* Darwin (from 11.x on) provide an unwind.h. If that's available,
-  * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE,
-@@ -39,6 +36,9 @@
- # endif
- #else
- 
-+#ifndef __CLANG_UNWIND_H
-+#define __CLANG_UNWIND_H
-+
- #include <stdint.h>
- 
- #ifdef __cplusplus
-@@ -322,6 +322,7 @@ _Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *);
- }
- #endif
- 
-+#endif /* __CLANG_UNWIND_H */
-+
- #endif
- 
--#endif /* __CLANG_UNWIND_H */
--- 
-2.5.1
diff --git a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
deleted file mode 100644
index 25688d40dbc2..000000000000
--- a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
+++ /dev/null
@@ -1,110 +0,0 @@
---- a/clang/lib/Driver/ToolChains/Gnu.cpp
-+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
-@@ -2086,7 +2086,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
-                                              "armv7hl-redhat-linux-gnueabi",
-                                              "armv6hl-suse-linux-gnueabi",
--                                             "armv7hl-suse-linux-gnueabi"};
-+                                             "armv7hl-suse-linux-gnueabi",
-+                                             "armv7l-linux-gnueabihf"};
-   static const char *const ARMebLibDirs[] = {"/lib"};
-   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
-                                              "armeb-linux-androideabi"};
-@@ -2153,8 +2154,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
-   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
-   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
--                                             "powerpcle-unknown-linux-gnu",
--                                             "powerpcle-linux-musl"};
-+                                             "powerpcle-unknown-linux-gnu"};
- 
-   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
-   static const char *const PPC64Triples[] = {
-@@ -2235,6 +2235,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-     return;
-   }
- 
-+  if (TargetTriple.isMusl()) {
-+    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
-+    static const char *const ARMHFMuslTriples[] = {
-+        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
-+    };
-+    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
-+    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
-+    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
-+    static const char *const MIPSMuslTriples[] = {
-+        "mips-linux-musl", "mipsel-linux-musl",
-+        "mipsel-linux-muslhf", "mips-linux-muslhf"
-+    };
-+    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
-+    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
-+    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
-+    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
-+
-+    switch (TargetTriple.getArch()) {
-+    case llvm::Triple::aarch64:
-+      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
-+      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
-+      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
-+      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
-+      break;
-+    case llvm::Triple::arm:
-+      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
-+      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
-+        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
-+      } else {
-+        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
-+      }
-+      break;
-+    case llvm::Triple::x86_64:
-+      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-+      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
-+      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-+      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
-+      break;
-+    case llvm::Triple::x86:
-+      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-+      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
-+      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-+      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
-+      break;
-+    case llvm::Triple::mips:
-+      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
-+      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
-+      break;
-+    case llvm::Triple::ppc:
-+      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
-+      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
-+      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
-+      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
-+      break;
-+    case llvm::Triple::ppcle:
-+      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
-+      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
-+      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
-+      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
-+      break;
-+    case llvm::Triple::ppc64:
-+      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
-+      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
-+      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
-+      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
-+      break;
-+    case llvm::Triple::ppc64le:
-+      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
-+      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
-+      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
-+      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
-+      break;
-+    default:
-+      break;
-+    }
-+    TripleAliases.push_back(TargetTriple.str());
-+    if (TargetTriple.str() != BiarchTriple.str())
-+      BiarchTripleAliases.push_back(BiarchTriple.str());
-+    return;
-+  }
-+
-   // Android targets should not use GNU/Linux tools or libraries.
-   if (TargetTriple.isAndroid()) {
-     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
deleted file mode 100644
index 4ad6412d1e6c..000000000000
--- a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/clang/lib/Driver/ToolChains/Linux.cpp
-+++ b/clang/lib/Driver/ToolChains/Linux.cpp
-@@ -504,10 +504,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
-     Loader = "ld.so.1";
-     break;
-   case llvm::Triple::ppc64:
--    LibDir = "lib64";
--    Loader =
--        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
--    break;
-   case llvm::Triple::ppc64le:
-     LibDir = "lib64";
-     Loader =
diff --git a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
deleted file mode 100644
index 21fc8003c5f1..000000000000
--- a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
+++ /dev/null
@@ -1,48 +0,0 @@
---- a/clang/lib/Basic/Targets/PPC.h
-+++ b/clang/lib/Basic/Targets/PPC.h
-@@ -415,11 +415,10 @@ public:
-       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
-     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
-       DataLayout = "e-m:e-i64:64-n32:64";
--      ABI = "elfv2";
-     } else {
-       DataLayout = "E-m:e-i64:64-n32:64";
--      ABI = "elfv1";
-     }
-+    ABI = "elfv2";
- 
-     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
-       LongDoubleWidth = LongDoubleAlign = 64;
---- a/clang/lib/CodeGen/TargetInfo.cpp
-+++ b/clang/lib/CodeGen/TargetInfo.cpp
-@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
-       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
- 
-     if (Triple.isOSBinFormatELF()) {
--      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
--      if (getTarget().getABI() == "elfv2")
--        Kind = PPC64_SVR4_ABIInfo::ELFv2;
-+      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
-+      if (getTarget().getABI() == "elfv1")
-+        Kind = PPC64_SVR4_ABIInfo::ELFv1;
-       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
- 
-       return SetCGInfo(
---- a/clang/lib/Driver/ToolChains/Clang.cpp
-+++ b/clang/lib/Driver/ToolChains/Clang.cpp
-@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
-   const llvm::Triple &T = getToolChain().getTriple();
-   if (T.isOSBinFormatELF()) {
-     switch (getToolChain().getArch()) {
--    case llvm::Triple::ppc64: {
--      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
--          T.isOSOpenBSD() || T.isMusl())
--        ABIName = "elfv2";
--      else
--        ABIName = "elfv1";
--      break;
--    }
-+    case llvm::Triple::ppc64:
-     case llvm::Triple::ppc64le:
-       ABIName = "elfv2";
-       break;
diff --git a/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch b/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
deleted file mode 100644
index 893c059d7b8d..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp.orig
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-@@ -1799,7 +1799,7 @@
- 
- static bool Aarch64GetESR(ucontext_t *ucontext, u64 *esr) {
-   static const u32 kEsrMagic = 0x45535201;
--  u8 *aux = ucontext->uc_mcontext.__reserved;
-+  u8 *aux = reinterpret_cast<u8 *>(ucontext->uc_mcontext.__reserved);
-   while (true) {
-     _aarch64_ctx *ctx = (_aarch64_ctx *)aux;
-     if (ctx->size == 0) break;
diff --git a/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch b/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
deleted file mode 100644
index 35f16d24f340..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
+++ /dev/null
@@ -1,35 +0,0 @@
---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-@@ -74,6 +74,10 @@
- #include <sys/utsname.h>
- #endif
- 
-+#if SANITIZER_LINUX && defined(__powerpc__)
-+#include <asm/ptrace.h>
-+#endif
-+
- #if SANITIZER_LINUX && !SANITIZER_ANDROID
- #include <sys/personality.h>
- #endif
---- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
-@@ -92,7 +92,7 @@
- # include <utime.h>
- # include <sys/ptrace.h>
- #if defined(__mips64) || defined(__aarch64__) || defined(__arm__) || \
--    SANITIZER_RISCV64
-+    defined(__powerpc__) || SANITIZER_RISCV64
- #  include <asm/ptrace.h>
- #  ifdef __arm__
- typedef struct user_fpregs elf_fpregset_t;
---- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
-@@ -31,7 +31,7 @@
- #include <sys/types.h> // for pid_t
- #include <sys/uio.h> // for iovec
- #include <elf.h> // for NT_PRSTATUS
--#if (defined(__aarch64__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
-+#if (defined(__aarch64__) || defined(__powerpc__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
- // GLIBC 2.20+ sys/user does not include asm/ptrace.h
- # include <asm/ptrace.h>
- #endif
diff --git a/srcpkgs/llvm12/patches/compiler-rt-size_t.patch b/srcpkgs/llvm12/patches/compiler-rt-size_t.patch
deleted file mode 100644
index 2c63063a5e9e..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-size_t.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/compiler-rt/lib/fuzzer/FuzzerInterceptors.cpp.orig
-+++ b/compiler-rt/lib/fuzzer/FuzzerInterceptors.cpp
-@@ -25,6 +25,7 @@
-   }
- 
- #include <cassert>
-+#include <cstddef>
- #include <cstdint>
- #include <dlfcn.h> // for dlsym()
- 
diff --git a/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch b/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
deleted file mode 100644
index d0b61c80c897..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
+++ /dev/null
@@ -1,62 +0,0 @@
---- a/compiler-rt/lib/xray/xray_powerpc64.inc
-+++ b/compiler-rt/lib/xray/xray_powerpc64.inc
-@@ -12,7 +12,13 @@
- 
- #include <cstdint>
- #include <mutex>
-+#ifdef __GLIBC__
- #include <sys/platform/ppc.h>
-+#else
-+#include <cctype>
-+#include <cstring>
-+#include <cstdlib>
-+#endif
- 
- #include "xray_defs.h"
- 
-@@ -20,13 +26,45 @@ namespace __xray {
- 
- ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
-   CPU = 0;
-+#ifdef __GLIBC__
-   return __ppc_get_timebase();
-+#else
-+  return __builtin_ppc_get_timebase();
-+#endif
- }
- 
- inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
-   static std::mutex M;
-   std::lock_guard<std::mutex> Guard(M);
-+#ifdef __GLIBC__
-   return __ppc_get_timebase_freq();
-+#else
-+  /* FIXME: a less dirty implementation? */
-+  static uint64_t base;
-+  if (!base) {
-+    FILE *f = fopen("/proc/cpuinfo", "rb");
-+    if (f) {
-+      ssize_t nr;
-+      /* virtually always big enough to hold the line */
-+      char buf[512];
-+      while (fgets(buf, sizeof(buf), f)) {
-+        char *ret = strstr(buf, "timebase");
-+        if (!ret) {
-+          continue;
-+        }
-+        ret += sizeof("timebase") - 1;
-+        ret = strchr(ret, ':');
-+        if (!ret) {
-+          continue;
-+        }
-+        base = strtoul(ret + 1, nullptr, 10);
-+        break;
-+      }
-+      fclose(f);
-+    }
-+  }
-+  return base;
-+#endif
- }
- 
- inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
diff --git a/srcpkgs/llvm12/patches/libcxx-musl.patch b/srcpkgs/llvm12/patches/libcxx-musl.patch
deleted file mode 100644
index bbd31ffc2cb1..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-musl.patch
+++ /dev/null
@@ -1,26 +0,0 @@
---- a/libcxx/include/locale
-+++ b/libcxx/include/locale
-@@ -742,7 +742,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
-         typename remove_reference<decltype(errno)>::type __save_errno = errno;
-         errno = 0;
-         char *__p2;
-+#if defined(__linux__) && !defined(__GLIBC__)
-+        long long __ll = strtoll(__a, &__p2, __base);
-+#else
-         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
-+#endif
-         typename remove_reference<decltype(errno)>::type __current_errno = errno;
-         if (__current_errno == 0)
-             errno = __save_errno;
-@@ -782,7 +786,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
-         typename remove_reference<decltype(errno)>::type __save_errno = errno;
-         errno = 0;
-         char *__p2;
-+#if defined(__linux__) && !defined(__GLIBC__)
-+        unsigned long long __ll = strtoull(__a, &__p2, __base);
-+#else
-         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
-+#endif
-         typename remove_reference<decltype(errno)>::type __current_errno = errno;
-         if (__current_errno == 0)
-             errno = __save_errno;
diff --git a/srcpkgs/llvm12/patches/libcxx-ppc.patch b/srcpkgs/llvm12/patches/libcxx-ppc.patch
deleted file mode 100644
index 7a92f8004e1c..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-ppc.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-This ensures `is_iec559` is defined correctly under all long double ABIs,
-including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__`
-is not defined on gcc.
-
---- a/libcxx/include/limits
-+++ b/libcxx/include/limits
-@@ -426,8 +426,14 @@ protected:
-     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
-     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
- 
--#if (defined(__ppc__) || defined(__ppc64__))
-+#if defined(__powerpc__) || defined(__powerpc64__)
-+#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__)
-+    /* IEEE 754 quadruple or double precision */
-+    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
-+#else
-+    /* 128-bit IBM double-double */
-     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
-+#endif
- #else
-     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
- #endif
diff --git a/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch b/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
deleted file mode 100644
index 70292beb2fcd..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/libcxx/CMakeLists.txt
-+++ b/libcxx/CMakeLists.txt
-@@ -769,6 +769,8 @@ function(cxx_link_system_libraries target)
-     target_link_libraries(${target} PRIVATE atomic)
-   endif()
- 
-+#ssp  target_link_libraries(${target} PRIVATE ssp_nonshared)
-+
-   if (MINGW)
-     target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
-   endif()
diff --git a/srcpkgs/llvm12/patches/libcxxabi-dl.patch b/srcpkgs/llvm12/patches/libcxxabi-dl.patch
deleted file mode 100644
index 3a15f9db8c98..000000000000
--- a/srcpkgs/llvm12/patches/libcxxabi-dl.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-Also link to -ldl to prevent undefined references.
-
---- a/libcxxabi/src/CMakeLists.txt
-+++ b/libcxxabi/src/CMakeLists.txt
-@@ -73,6 +73,7 @@
-   endif()
- 
-   add_library_flags_if(LIBCXXABI_HAS_C_LIB c)
-+  add_library_flags_if(LIBCXXABI_HAS_C_LIB dl)
- endif()
- 
- if (LIBCXXABI_USE_LLVM_UNWINDER)
---- a/libcxx/CMakeLists.txt
-+++ b/libcxx/CMakeLists.txt
-@@ -745,6 +745,10 @@
-     target_link_libraries(${target} PRIVATE m)
-   endif()
- 
-+  if (LIBCXX_HAS_C_LIB)
-+    target_link_libraries(${target} PRIVATE dl)
-+  endif()
-+
-   if (LIBCXX_HAS_RT_LIB)
-     target_link_libraries(${target} PRIVATE rt)
-   endif()
diff --git a/srcpkgs/llvm12/patches/libunwind-ppc32.patch b/srcpkgs/llvm12/patches/libunwind-ppc32.patch
deleted file mode 100644
index 74aa7576ecf9..000000000000
--- a/srcpkgs/llvm12/patches/libunwind-ppc32.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-This fixes build at least with gcc9 which does not define `__ppc__`.
-
---- a/libunwind/include/__libunwind_config.h
-+++ b/libunwind/include/__libunwind_config.h
-@@ -49,7 +49,7 @@
- #  define _LIBUNWIND_CONTEXT_SIZE 167
- #  define _LIBUNWIND_CURSOR_SIZE 179
- #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64
--# elif defined(__ppc__)
-+# elif defined(__powerpc__)
- #  define _LIBUNWIND_TARGET_PPC 1
- #  define _LIBUNWIND_CONTEXT_SIZE 117
- #  define _LIBUNWIND_CURSOR_SIZE 124
---- a/libunwind/src/UnwindRegistersRestore.S
-+++ b/libunwind/src/UnwindRegistersRestore.S
-@@ -392,7 +392,7 @@ Lnovec:
-   PPC64_LR(3)
-   bctr
- 
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- 
- DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind13Registers_ppc6jumptoEv)
- //
---- a/libunwind/src/UnwindRegistersSave.S
-+++ b/libunwind/src/UnwindRegistersSave.S
-@@ -554,7 +554,7 @@ DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext)
-   blr
- 
- 
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- 
- //
- // extern int unw_getcontext(unw_context_t* thread_state)
---- a/libunwind/src/config.h
-+++ b/libunwind/src/config.h
-@@ -95,12 +95,12 @@
- #define _LIBUNWIND_BUILD_SJLJ_APIS
- #endif
- 
--#if defined(__i386__) || defined(__x86_64__) || defined(__ppc__) || defined(__ppc64__) || defined(__powerpc64__)
-+#if defined(__i386__) || defined(__x86_64__) || defined(__powerpc__) || defined(__powerpc64__)
- #define _LIBUNWIND_SUPPORT_FRAME_APIS
- #endif
- 
- #if defined(__i386__) || defined(__x86_64__) ||                                \
--    defined(__ppc__) || defined(__ppc64__) || defined(__powerpc64__) ||        \
-+    defined(__powerpc__) || defined(__powerpc64__) ||                          \
-     (!defined(__APPLE__) && defined(__arm__)) ||                               \
-     (defined(__arm64__) || defined(__aarch64__)) ||                            \
-     defined(__mips__)
---- a/libunwind/src/libunwind.cpp
-+++ b/libunwind/src/libunwind.cpp
-@@ -42,7 +42,7 @@ _LIBUNWIND_HIDDEN int __unw_init_local(unw_cursor_t *cursor,
- # define REGISTER_KIND Registers_x86_64
- #elif defined(__powerpc64__)
- # define REGISTER_KIND Registers_ppc64
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- # define REGISTER_KIND Registers_ppc
- #elif defined(__aarch64__)
- # define REGISTER_KIND Registers_arm64
diff --git a/srcpkgs/llvm12/patches/lldb-musl.patch b/srcpkgs/llvm12/patches/lldb-musl.patch
deleted file mode 100644
index 601c0d138523..000000000000
--- a/srcpkgs/llvm12/patches/lldb-musl.patch
+++ /dev/null
@@ -1,31 +0,0 @@
---- a/lldb/source/Plugins/Process/Linux/Procfs.h
-+++ b/lldb/source/Plugins/Process/Linux/Procfs.h
-@@ -10,21 +10,12 @@
- // sys/procfs.h on Android/Linux for all supported architectures.
- 
- #include <sys/ptrace.h>
-+#include <asm/ptrace.h>
- 
--#ifdef __ANDROID__
--#if defined(__arm64__) || defined(__aarch64__)
--typedef unsigned long elf_greg_t;
--typedef elf_greg_t
--    elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
--typedef struct user_fpsimd_state elf_fpregset_t;
--#ifndef NT_FPREGSET
--#define NT_FPREGSET NT_PRFPREG
--#endif // NT_FPREGSET
--#elif defined(__mips__)
--#ifndef NT_FPREGSET
--#define NT_FPREGSET NT_PRFPREG
--#endif // NT_FPREGSET
--#endif
--#else // __ANDROID__
-+#if !defined(__GLIBC__) && defined(__powerpc__)
-+#define pt_regs musl_pt_regs
-+#include <sys/procfs.h>
-+#undef pt_regs
-+#else
- #include <sys/procfs.h>
--#endif // __ANDROID__
-+#endif
diff --git a/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch b/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch
deleted file mode 100644
index 8e0a9a779d1b..000000000000
--- a/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-commit ba4ede595ff9599232f5dd2b4384c243137b53fc
-Author: Daniel Kolesa <daniel@octaforge.org>
-Date:   Tue Jun 22 23:40:54 2021 +0200
-
-    enable compiler-rt support for ppc32
-
-diff --git a/compiler-rt/cmake/base-config-ix.cmake b/compiler-rt/cmake/base-config-ix.cmake
-index 1edab43..5c0c8a2 100644
---- a/compiler-rt/cmake/base-config-ix.cmake
-+++ b/compiler-rt/cmake/base-config-ix.cmake
-@@ -182,9 +182,7 @@ macro(test_targets)
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc64le")
-       test_target_arch(powerpc64le "" "-m64")
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc")
--      if(CMAKE_SYSTEM_NAME MATCHES "AIX")
--        test_target_arch(powerpc "" "-m32")
--      endif()
-+      test_target_arch(powerpc "" "-m32")
-       test_target_arch(powerpc64 "" "-m64")
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "s390x")
-       test_target_arch(s390x "" "")
diff --git a/srcpkgs/llvm12/template b/srcpkgs/llvm12/template
index 7ce18028e4a3..7b361bbbf5bc 100644
--- a/srcpkgs/llvm12/template
+++ b/srcpkgs/llvm12/template
@@ -1,25 +1,17 @@
 # Template file for 'llvm12'
 pkgname=llvm12
 version=12.0.1
-revision=2
+revision=3
 wrksrc="llvm-project-${version}.src"
 build_wrksrc=llvm
 build_style=cmake
 configure_args="
  -DCMAKE_BUILD_TYPE=Release -Wno-dev
  -DENABLE_LINKER_BUILD_ID=YES
- -DLLDB_USE_SYSTEM_SIX=YES
- -DLIBCXX_CXX_ABI=libcxxabi
- -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
- -DLIBCXXABI_USE_LLVM_UNWINDER=YES
- -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
- -DLIBOMP_ENABLE_SHARED=YES
- -DLIBOMP_INSTALL_ALIASES=NO
  -DLLVM_INCLUDE_DOCS=YES
  -DLLVM_BUILD_DOCS=YES
  -DLLVM_ENABLE_SPHINX=YES
  -DSPHINX_WARNINGS_AS_ERRORS=NO
- -DLLVM_INSTALL_UTILS=YES
  -DLLVM_BUILD_LLVM_DYLIB=YES
  -DLLVM_LINK_LLVM_DYLIB=YES
  -DLLVM_ENABLE_RTTI=YES
@@ -51,87 +43,10 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
-_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
-
-_lldb_enable=yes
-_libomp_enable=no
-
-case "$XBPS_TARGET_MACHINE" in
-	ppc64le*) ;;
-	ppc*|i686*) _lldb_enable=no ;;
-esac
-
-case "$XBPS_TARGET_MACHINE" in
-	x86_64*|aarch64*|ppc64*) _libomp_enable=yes;;
-esac
-
-subpackages="clang-tools-extra"
-
-# must go before clang
-if [ "$_libomp_enable" = "yes" ]; then
-	_enabled_projects+=";openmp"
-	subpackages+=" libomp libomp-devel"
-	# because of cmake nonsense referencing libomptarget.so.*
-	depends+=" libomp>=${version}_${revision}"
-fi
-
-subpackages+=" clang clang-analyzer libclang libclang-cpp
- llvm-libunwind llvm-libunwind-devel libcxx libcxx-devel
- libcxxabi libcxxabi-devel libllvm12"
-
-if [ "$_lldb_enable" = "yes" ]; then
-	# XXX fails to cross compile due to python
-	_enabled_projects+=";lldb"
-	subpackages+=" lldb lldb-devel"
-fi
-
-subpackages+=" lld lld-devel"
-
-configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
-
 post_patch() {
-	if [ "$_lldb_enable" = "yes" ]; then
-		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
-			vsed -i 's|__ptrace_request|int|g' \
-				${wrksrc}/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
-		fi
-		# disable docs for lldb as they fail to generate
-		vsed -i '/add_subdirectory(docs)/d' \
-			${wrksrc}/lldb/CMakeLists.txt
-	fi
-
 	# update config.guess for better platform detection
 	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
 		${wrksrc}/llvm/cmake
-
-	# fix linker failures on some archs
-	vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
-		${wrksrc}/libcxxabi/cmake/config-ix.cmake
-	vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
-		${wrksrc}/libcxxabi/cmake/config-ix.cmake
-
-	# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
-	case "$XBPS_TARGET_MACHINE" in
-		ppc64*) ;;
-		ppc*-musl|i686-musl|mips*-musl)
-			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
-				${wrksrc}/libunwind/src/CMakeLists.txt
-			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
-				${wrksrc}/libcxxabi/src/CMakeLists.txt
-			vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
-			;;
-	esac
-
-	case "$XBPS_TARGET_MACHINE" in
-		x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
-			vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
-				${wrksrc}/compiler-rt/CMakeLists.txt
-			;;
-		arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
-			vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
-				${wrksrc}/compiler-rt/cmake/config-ix.cmake
-			;;
-	esac
 }
 
 pre_configure() {
@@ -158,10 +73,8 @@ pre_configure() {
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
 			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
 		make ${makejobs} -C utils/TableGen
-		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
 		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
-		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
 		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
 		cd ../..
 	fi
@@ -202,218 +115,6 @@ do_install() {
 	if [ "$CROSS_BUILD" ]; then
 		rm -f ${DESTDIR}/usr/bin/llvm-config-host
 	fi
-
-	# Install libcxxabi headers
-	vinstall ${wrksrc}/libcxxabi/include/__cxxabi_config.h 644 usr/include
-	vinstall ${wrksrc}/libcxxabi/include/cxxabi.h 644 usr/include
-
-	# Install libunwind headers
-	vinstall ${wrksrc}/libunwind/include/__libunwind_config.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/libunwind.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/unwind.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/mach-o/compact_unwind_encoding.h \
-		644 usr/include/mach-o
-}
-
-clang-analyzer_package() {
-	pycompile_dirs="usr/share/scan-view"
-	depends="clang-${version}_${revision} python3 perl"
-	short_desc+=" - A source code analysis framework"
-	homepage="https://clang-analyzer.llvm.org/"
-	pkg_install() {
-		vmove usr/share/man/man1/scan-build.1
-		vmove "/usr/bin/scan-*"
-		vmove "/usr/share/scan-*"
-		vmove "/usr/libexec/*analyzer"
-	}
-}
-
-clang-tools-extra_package() {
-	lib32disabled=yes
-	depends="clang-${version}_${revision} python3"
-	short_desc+=" - Extra Clang tools"
-	homepage="https://clang.llvm.org/extra/"
-	pkg_install() {
-		vmove usr/include/clang-tidy
-		vmove usr/bin/clang-apply-replacements
-		vmove usr/bin/clang-query
-		vmove usr/bin/clang-rename
-		vmove usr/bin/clang-tidy
-		vmove usr/bin/diagtool
-		vmove usr/bin/find-all-symbols
-		vmove usr/bin/hmaptool
-		vmove usr/bin/modularize
-		vmove usr/bin/pp-trace
-		vmove usr/bin/sancov
-		vmove "usr/lib/libclangApplyReplacements*"
-		vmove "usr/lib/libclangQuery*"
-		vmove "usr/lib/libclangTidy*"
-		vmove "usr/share/clang/*tidy*"
-		vmove usr/share/doc/clang-tools
-		vmove usr/share/man/man1/extraclangtools.1
-		vmove usr/share/man/man1/diagtool.1
-	}
-}
-
-clang_package() {
-	lib32disabled=yes
-	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
-	 libclang-${version}_${revision}"
-	short_desc+=" - C language family frontend"
-	homepage="https://clang.llvm.org/"
-	pkg_install() {
-		vmove usr/include/clang
-		vmove usr/include/clang-c
-		vmove "usr/bin/*clang*"
-		vmove usr/bin/c-index-test
-		vmove usr/lib/clang
-		vmove usr/lib/cmake/clang
-		vmove "usr/lib/libclang*.a"
-		vmove "usr/lib/libclang*.so"
-		vmove usr/share/clang
-		vmove usr/share/doc/clang
-		vmove usr/share/man/man1/clang.1
-	}
-}
-
-libclang_package() {
-	short_desc+=" - C frontend runtime library"
-	pkg_install() {
-		vmove "usr/lib/libclang.so.*"
-	}
-}
-
-libclang-cpp_package() {
-	short_desc+=" - C frontend runtime library (C++ interface)"
-	pkg_install() {
-		vmove "usr/lib/libclang-cpp.so.*"
-	}
-}
-
-lld_package() {
-	lib32disabled=yes
-	short_desc+=" - linker"
-	homepage="https://lld.llvm.org"
-	pkg_install() {
-		vmove usr/bin/lld*
-		vmove usr/bin/wasm-ld
-		vmove usr/bin/ld.lld*
-		vmove usr/bin/ld64.lld*
-		vmove usr/share/doc/lld
-	}
-}
-
-lld-devel_package() {
-	lib32disabled=yes
-	short_desc+=" - linker - development files"
-	homepage="https://lld.llvm.org"
-	depends="lld>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/include/lld
-		vmove usr/lib/cmake/lld
-		vmove "usr/lib/liblld*a"
-	}
-}
-
-lldb_package() {
-	lib32disabled=yes
-	depends+=" python3-six"
-	short_desc+=" - LLDB debugger"
-	homepage="https://lldb.llvm.org/"
-	pkg_install() {
-		vmove usr/bin/*lldb*
-		vmove usr/lib/liblldb*so.*
-		vmove /usr/lib/python*
-	}
-}
-
-lldb-devel_package() {
-	lib32disabled=yes
-	depends="lldb>=${version}_${revision}"
-	short_desc+=" - LLDB debugger - development files"
-	pkg_install() {
-		vmove usr/include/lldb
-		vmove "usr/lib/liblldb*.so"
-	}
-}
-
-llvm-libunwind_package() {
-	short_desc+=" - libunwind"
-	pkg_install() {
-		vmove "usr/lib/libunwind.so.*"
-	}
-}
-
-llvm-libunwind-devel_package() {
-	short_desc+=" - libunwind - development files"
-	depends="llvm-libunwind>=${version}_${revision}"
-	conflicts="libunwind-devel>=0"
-	pkg_install() {
-		vmove usr/lib/libunwind.so
-		vmove usr/lib/libunwind.a
-		vmove "usr/include/*unwind*"
-		vmove usr/include/mach-o
-		vmove usr/share/doc/libunwind
-	}
-}
-
-libcxxabi_package() {
-	short_desc+=" - low level support for libc++"
-	pkg_install() {
-		vmove "usr/lib/libc++abi.so.*"
-	}
-}
-
-libcxxabi-devel_package() {
-	short_desc+=" - low level support for libc++ - development files"
-	depends="libcxxabi>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/lib/libc++abi.so
-		vmove usr/lib/libc++abi.a
-		vmove "usr/include/*cxxabi*"
-	}
-}
-
-libcxx_package() {
-	short_desc+=" - C++ standard library"
-	pkg_install() {
-		vmove "usr/lib/libc++.so.*"
-	}
-}
-
-libcxx-devel_package() {
-	short_desc+=" - C++ standard library - development files"
-	depends="libcxx>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/lib/libc++.so
-		vmove usr/lib/libc++.a
-		vmove usr/lib/libc++experimental.a
-		vmove usr/include/c++
-		vmove usr/share/doc/libcxx
-	}
-}
-
-libomp_package() {
-	short_desc+=" - Clang OpenMP support library"
-	pkg_install() {
-		vmove usr/lib/libomp.so
-		vmove "usr/lib/libomptarget.rtl.*.so"
-		vmove usr/lib/libarcher.so
-		vmove "usr/lib/libomp*.so.*"
-	}
-}
-
-libomp-devel_package() {
-	short_desc+=" - Clang OpenMP support library - development files"
-	depends="libomp>=${version}_${revision}"
-	pkg_install() {
-		vmove "usr/lib/libomp*.so"
-		vmove "usr/lib/libarcher*"
-		vmove "usr/include/omp*.h"
-		vmove "usr/lib/clang/${version}/include/omp*.h"
-		vmove usr/share/man/man1/llvmopenmp.1
-		vmove usr/share/doc/openmp
-	}
 }
 
 libllvm12_package() {

From dd0a815073454885bd6e389186b3464ba9a421a9 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 14:00:28 +0200
Subject: [PATCH 04/29] New packages: clang12, libclang12, libclang12-cpp,
 lld12, lld12-devel.

---
 common/shlibs                                 |   2 +
 srcpkgs/clang12                               |   1 +
 srcpkgs/libclang12                            |   1 +
 srcpkgs/libclang12-cpp                        |   1 +
 srcpkgs/lld12                                 |   1 +
 srcpkgs/lld12-devel                           |   1 +
 ...clang-001-fix-unwind-chain-inclusion.patch |  44 +++++++
 .../patches/clang-002-add-musl-triples.patch  | 110 ++++++++++++++++++
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 +++
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ++++++++
 srcpkgs/llvm12/template                       |  71 +++++++++++
 11 files changed, 293 insertions(+)
 create mode 120000 srcpkgs/clang12
 create mode 120000 srcpkgs/libclang12
 create mode 120000 srcpkgs/libclang12-cpp
 create mode 120000 srcpkgs/lld12
 create mode 120000 srcpkgs/lld12-devel
 create mode 100644 srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch

diff --git a/common/shlibs b/common/shlibs
index 81acc39defb4..86f4c9060d3b 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -975,6 +975,8 @@ libuchardet.so.0 uchardet-0.0.6_1
 libgtksourceviewmm-3.0.so.0 gtksourceviewmm-3.2.0_1
 libyajl.so.2 yajl-2.0.1_1
 libconfuse.so.2 confuse-3.2.1_1
+libclang.so.12 libclang12-12.0.0_1
+libclang-cpp.so.12 libclang12-cpp-12.0.0_1
 liblldb.so.14 lldb-14.0.3_1
 libclang.so.14 libclang-14.0.3_1
 libclang-cpp.so.14 libclang-cpp-14.0.3_1
diff --git a/srcpkgs/clang12 b/srcpkgs/clang12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/clang12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/libclang12 b/srcpkgs/libclang12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/libclang12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/libclang12-cpp b/srcpkgs/libclang12-cpp
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/libclang12-cpp
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/lld12 b/srcpkgs/lld12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/lld12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/lld12-devel b/srcpkgs/lld12-devel
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/lld12-devel
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
new file mode 100644
index 000000000000..e4eaa7783e7a
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
@@ -0,0 +1,44 @@
+From 352974169f0d2b5da3d5321f588f5e3b5941330e Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe@gmail.com>
+Date: Tue, 8 Sep 2015 22:14:57 +0200
+Subject: [PATCH 2/7] fix unwind chain inclusion
+
+---
+ lib/Headers/unwind.h | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/lib/Headers/unwind.h b/lib/Headers/unwind.h
+index 303d792..44e10cc 100644
+--- a/clang/lib/Headers/unwind.h
++++ b/clang/lib/Headers/unwind.h
+@@ -9,9 +9,6 @@
+ 
+ /* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/
+ 
+-#ifndef __CLANG_UNWIND_H
+-#define __CLANG_UNWIND_H
+-
+ #if defined(__APPLE__) && __has_include_next(<unwind.h>)
+ /* Darwin (from 11.x on) provide an unwind.h. If that's available,
+  * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE,
+@@ -39,6 +36,9 @@
+ # endif
+ #else
+ 
++#ifndef __CLANG_UNWIND_H
++#define __CLANG_UNWIND_H
++
+ #include <stdint.h>
+ 
+ #ifdef __cplusplus
+@@ -322,6 +322,7 @@ _Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *);
+ }
+ #endif
+ 
++#endif /* __CLANG_UNWIND_H */
++
+ #endif
+ 
+-#endif /* __CLANG_UNWIND_H */
+-- 
+2.5.1
diff --git a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
new file mode 100644
index 000000000000..25688d40dbc2
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
@@ -0,0 +1,110 @@
+--- a/clang/lib/Driver/ToolChains/Gnu.cpp
++++ b/clang/lib/Driver/ToolChains/Gnu.cpp
+@@ -2086,7 +2086,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
+                                              "armv7hl-redhat-linux-gnueabi",
+                                              "armv6hl-suse-linux-gnueabi",
+-                                             "armv7hl-suse-linux-gnueabi"};
++                                             "armv7hl-suse-linux-gnueabi",
++                                             "armv7l-linux-gnueabihf"};
+   static const char *const ARMebLibDirs[] = {"/lib"};
+   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
+                                              "armeb-linux-androideabi"};
+@@ -2153,8 +2154,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
+   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
+   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
+-                                             "powerpcle-unknown-linux-gnu",
+-                                             "powerpcle-linux-musl"};
++                                             "powerpcle-unknown-linux-gnu"};
+ 
+   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
+   static const char *const PPC64Triples[] = {
+@@ -2235,6 +2235,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+     return;
+   }
+ 
++  if (TargetTriple.isMusl()) {
++    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
++    static const char *const ARMHFMuslTriples[] = {
++        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
++    };
++    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
++    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
++    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
++    static const char *const MIPSMuslTriples[] = {
++        "mips-linux-musl", "mipsel-linux-musl",
++        "mipsel-linux-muslhf", "mips-linux-muslhf"
++    };
++    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
++    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
++    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
++    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
++
++    switch (TargetTriple.getArch()) {
++    case llvm::Triple::aarch64:
++      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      break;
++    case llvm::Triple::arm:
++      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
++      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
++        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
++      } else {
++        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
++      }
++      break;
++    case llvm::Triple::x86_64:
++      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      break;
++    case llvm::Triple::x86:
++      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      break;
++    case llvm::Triple::mips:
++      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
++      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
++      break;
++    case llvm::Triple::ppc:
++      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      break;
++    case llvm::Triple::ppcle:
++      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      break;
++    case llvm::Triple::ppc64:
++      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      break;
++    case llvm::Triple::ppc64le:
++      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      break;
++    default:
++      break;
++    }
++    TripleAliases.push_back(TargetTriple.str());
++    if (TargetTriple.str() != BiarchTriple.str())
++      BiarchTripleAliases.push_back(BiarchTriple.str());
++    return;
++  }
++
+   // Android targets should not use GNU/Linux tools or libraries.
+   if (TargetTriple.isAndroid()) {
+     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
new file mode 100644
index 000000000000..4ad6412d1e6c
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
@@ -0,0 +1,13 @@
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -504,10 +504,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+     Loader = "ld.so.1";
+     break;
+   case llvm::Triple::ppc64:
+-    LibDir = "lib64";
+-    Loader =
+-        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
+-    break;
+   case llvm::Triple::ppc64le:
+     LibDir = "lib64";
+     Loader =
diff --git a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
new file mode 100644
index 000000000000..21fc8003c5f1
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
@@ -0,0 +1,48 @@
+--- a/clang/lib/Basic/Targets/PPC.h
++++ b/clang/lib/Basic/Targets/PPC.h
+@@ -415,11 +415,10 @@ public:
+       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
+     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
+       DataLayout = "e-m:e-i64:64-n32:64";
+-      ABI = "elfv2";
+     } else {
+       DataLayout = "E-m:e-i64:64-n32:64";
+-      ABI = "elfv1";
+     }
++    ABI = "elfv2";
+ 
+     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
+       LongDoubleWidth = LongDoubleAlign = 64;
+--- a/clang/lib/CodeGen/TargetInfo.cpp
++++ b/clang/lib/CodeGen/TargetInfo.cpp
+@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
+       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
+ 
+     if (Triple.isOSBinFormatELF()) {
+-      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
+-      if (getTarget().getABI() == "elfv2")
+-        Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      if (getTarget().getABI() == "elfv1")
++        Kind = PPC64_SVR4_ABIInfo::ELFv1;
+       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
+ 
+       return SetCGInfo(
+--- a/clang/lib/Driver/ToolChains/Clang.cpp
++++ b/clang/lib/Driver/ToolChains/Clang.cpp
+@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
+   const llvm::Triple &T = getToolChain().getTriple();
+   if (T.isOSBinFormatELF()) {
+     switch (getToolChain().getArch()) {
+-    case llvm::Triple::ppc64: {
+-      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
+-          T.isOSOpenBSD() || T.isMusl())
+-        ABIName = "elfv2";
+-      else
+-        ABIName = "elfv1";
+-      break;
+-    }
++    case llvm::Triple::ppc64:
+     case llvm::Triple::ppc64le:
+       ABIName = "elfv2";
+       break;
diff --git a/srcpkgs/llvm12/template b/srcpkgs/llvm12/template
index 7b361bbbf5bc..274b57183654 100644
--- a/srcpkgs/llvm12/template
+++ b/srcpkgs/llvm12/template
@@ -43,6 +43,12 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
+_enabled_projects="clang;lld"
+
+subpackages+=" clang12 libclang12 libclang12-cpp libllvm12 lld12 lld12-devel"
+
+configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+
 post_patch() {
 	# update config.guess for better platform detection
 	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
@@ -73,8 +79,10 @@ pre_configure() {
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
 			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
 		make ${makejobs} -C utils/TableGen
+		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
 		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
+		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
 		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
 		cd ../..
 	fi
@@ -117,6 +125,69 @@ do_install() {
 	fi
 }
 
+clang12_package() {
+	conflicts="clang"
+	lib32disabled=yes
+	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
+	 libclang12-${version}_${revision}"
+	short_desc+=" - C language family frontend"
+	homepage="https://clang.llvm.org/"
+	pkg_install() {
+		vmove usr/include/clang
+		vmove usr/include/clang-c
+		vmove "usr/bin/*clang*"
+		vmove usr/bin/c-index-test
+		vmove usr/lib/clang
+		vmove usr/lib/cmake/clang
+		vmove "usr/lib/libclang*.a"
+		vmove "usr/lib/libclang*.so"
+		vmove usr/share/clang
+		vmove usr/share/doc/clang
+		vmove usr/share/man/man1/clang.1
+	}
+}
+
+libclang12_package() {
+	short_desc+=" - C frontend runtime library"
+	pkg_install() {
+		vmove "usr/lib/libclang.so.*"
+	}
+}
+
+libclang12-cpp_package() {
+	short_desc+=" - C frontend runtime library (C++ interface)"
+	pkg_install() {
+		vmove "usr/lib/libclang-cpp.so.*"
+	}
+}
+
+lld12_package() {
+	conflicts="lld"
+	lib32disabled=yes
+	short_desc+=" - linker"
+	homepage="https://lld.llvm.org"
+	pkg_install() {
+		vmove usr/bin/lld*
+		vmove usr/bin/wasm-ld
+		vmove usr/bin/ld.lld*
+		vmove usr/bin/ld64.lld*
+		vmove usr/share/doc/lld
+	}
+}
+
+lld12-devel_package() {
+	conflicts="lld-devel"
+	lib32disabled=yes
+	short_desc+=" - linker - development files"
+	homepage="https://lld.llvm.org"
+	depends="lld12>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include/lld
+		vmove usr/lib/cmake/lld
+		vmove "usr/lib/liblld*a"
+	}
+}
+
 libllvm12_package() {
 	short_desc+=" - runtime library"
 	pkg_install() {

From 78d156cc0e8cbf8d6628dc316523878417e952be Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 05/29] chromium: update for llvm14

---
 srcpkgs/chromium/template | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/srcpkgs/chromium/template b/srcpkgs/chromium/template
index 0dce8772fdb8..8b604a349229 100644
--- a/srcpkgs/chromium/template
+++ b/srcpkgs/chromium/template
@@ -2,7 +2,7 @@
 pkgname=chromium
 # See https://chromiumdash.appspot.com/releases?platform=Linux for the latest version
 version=101.0.4951.41
-revision=1
+revision=2
 archs="i686* x86_64* aarch64* armv7l* ppc64le*"
 short_desc="Google's attempt at creating a safer, faster, and more stable browser"
 maintainer="Duncaen <duncaen@voidlinux.org>"
@@ -20,7 +20,7 @@ desc_option_debug="Build with debug symbols"
 desc_option_js_optimize="Optimize the JS used for Chromium's UI"
 desc_option_pipewire="Enable support for screen sharing for WebRTC via PipeWire"
 
-hostmakedepends="$(vopt_if clang "clang lld llvm12") python python3 pkgconf perl gperf bison ninja nodejs hwids
+hostmakedepends="$(vopt_if clang "clang lld llvm14") python python3 pkgconf perl gperf bison ninja nodejs hwids
  libatomic-devel libevent-devel libglib-devel $(vopt_if js_optimize openjdk) wayland-devel libepoxy-devel"
 makedepends="libpng-devel gtk+-devel gtk+3-devel nss-devel pciutils-devel
  libXi-devel libgcrypt-devel libgnome-keyring-devel cups-devel elfutils-devel
@@ -266,12 +266,6 @@ do_configure() {
 		'disable_fieldtrial_testing_config=true'
 
 		'is_official_build=true'
-
-		# segfaults with llvm-12.0.1
-		'is_cfi=false'
-		'use_thin_lto=false'
-		'use_cfi_icall=false'
-		'chrome_pgo_phase=0'
 	)
 
 	if [ "$CROSS_BUILD" ]; then

From bc3cf98e2b9f6019b8ca00c820a3b358b091d1a9 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 06/29] ghdl: update for llvm14

---
 srcpkgs/ghdl/patches/{llvm12.patch => llvm.patch} | 2 ++
 srcpkgs/ghdl/template                             | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)
 rename srcpkgs/ghdl/patches/{llvm12.patch => llvm.patch} (82%)

diff --git a/srcpkgs/ghdl/patches/llvm12.patch b/srcpkgs/ghdl/patches/llvm.patch
similarity index 82%
rename from srcpkgs/ghdl/patches/llvm12.patch
rename to srcpkgs/ghdl/patches/llvm.patch
index 8d2f76bfda06..9201816ae053 100644
--- a/srcpkgs/ghdl/patches/llvm12.patch
+++ b/srcpkgs/ghdl/patches/llvm.patch
@@ -7,6 +7,8 @@ index c1c1a6d..dad7c38 100755
         check_version 10.0 $llvm_version ||
         check_version 11.0 $llvm_version ||
 +       check_version 12.0 $llvm_version ||
++       check_version 13.0 $llvm_version ||
++       check_version 14.0 $llvm_version ||
         false; then
      echo "Debugging is enabled with llvm $llvm_version"
    else
diff --git a/srcpkgs/ghdl/template b/srcpkgs/ghdl/template
index e756d8c3cd87..9ca1169b22bd 100644
--- a/srcpkgs/ghdl/template
+++ b/srcpkgs/ghdl/template
@@ -7,7 +7,7 @@
 pkgname=ghdl
 reverts="20181129_1"
 version=1.0.0
-revision=1
+revision=2
 build_style=configure
 configure_args="--prefix=/usr --srcdir=.. --incdir=lib/ghdl/include"
 makedepends="zlib-devel"

From 8744d7d79b7b6f2bdf5e89453a5f8584fdb99df8 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 07/29] qt5: rebuild for llvm14

---
 srcpkgs/qt5/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index ee788fad2019..25f15583a42d 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -3,7 +3,7 @@ pkgname=qt5
 version=5.15.3+20220222
 # commit fcca82ca40a5d8a02a4ddd90846d070f2c58cfad
 # base repo: https://invent.kde.org/qt/qt/qt5
-revision=3
+revision=4
 build_style=meta
 hostmakedepends="cmake clang flex perl glib-devel pkg-config
  python re2c ruby which"

From fdc1b9b45f51d61cb9e93148eb181103a6188f85 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 08/29] tilix: rebuild for llvm14

---
 srcpkgs/tilix/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/tilix/template b/srcpkgs/tilix/template
index d8f014bc78c5..ac1bf7dd3bdd 100644
--- a/srcpkgs/tilix/template
+++ b/srcpkgs/tilix/template
@@ -1,7 +1,7 @@
 # Template file for 'tilix'
 pkgname=tilix
 version=1.9.4
-revision=3
+revision=4
 build_style=meson
 configure_args="-Db_lto=false"
 hostmakedepends="automake gettext-devel gdk-pixbuf glib-devel ldc po4a pkg-config

From 5a1cbff7e2cb513167841e803e7f1f4d905842b4 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 09/29] shiboken2: rebuild for llvm14

---
 srcpkgs/shiboken2/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/shiboken2/template b/srcpkgs/shiboken2/template
index b56613229c13..ab9d2c4cb8f9 100644
--- a/srcpkgs/shiboken2/template
+++ b/srcpkgs/shiboken2/template
@@ -1,7 +1,7 @@
 # Template file for 'shiboken2'
 pkgname=shiboken2
 version=5.15.2
-revision=4
+revision=5
 _pkgname="pyside-setup-opensource-src-${version}"
 wrksrc="${_pkgname/%5.14.2.1/5.14.2}"
 build_wrksrc="sources/shiboken2"

From c448e99709e362dd785b7348faec90e85e0ea8ab Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 10/29] gnome-builder: rebuild for llvm14

---
 srcpkgs/gnome-builder/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/gnome-builder/template b/srcpkgs/gnome-builder/template
index 93559b21774f..5a5a51893ae8 100644
--- a/srcpkgs/gnome-builder/template
+++ b/srcpkgs/gnome-builder/template
@@ -1,7 +1,7 @@
 # Template file for 'gnome-builder'
 pkgname=gnome-builder
 version=41.3
-revision=1
+revision=2
 build_style=meson
 build_helper=qemu
 configure_args="-Dhelp=true -Dnetwork_tests=false"

From c580f7815d7a81d7c4bd56bd27ebcd22b82635d6 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 11/29] bcc: rebuild for llvm14

---
 srcpkgs/bcc/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/bcc/template b/srcpkgs/bcc/template
index 54509b63d5a7..2cfa0a2977d0 100644
--- a/srcpkgs/bcc/template
+++ b/srcpkgs/bcc/template
@@ -1,7 +1,7 @@
 # Template file for 'bcc'
 pkgname=bcc
 version=0.24.0
-revision=1
+revision=2
 wrksrc="bcc"
 build_style=cmake
 configure_args="-DREVISION=${version} -DENABLE_LLVM_SHARED=1"

From 46690d5c043d37c6b3209ce8098e1a7cd85ab123 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 12/29] mesa: rebuild for llvm14

---
 srcpkgs/mesa/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/mesa/template b/srcpkgs/mesa/template
index c90500de7416..8f08262fb135 100644
--- a/srcpkgs/mesa/template
+++ b/srcpkgs/mesa/template
@@ -1,7 +1,7 @@
 # Template file for 'mesa'
 pkgname=mesa
 version=21.3.7
-revision=1
+revision=2
 build_style=meson
 configure_args="-Dglvnd=true -Dshared-glapi=enabled -Dgbm=enabled -Degl=enabled
  -Dosmesa=true -Dgles1=enabled -Dgles2=enabled -Dglx=dri -Ddri3=enabled

From 127a0bb67ac383aecbbe9025649c63cc2ae4a743 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 13/29] juCi++: rebuild for llvm14

---
 srcpkgs/juCi++/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/juCi++/template b/srcpkgs/juCi++/template
index 1a7604b44a00..5103324dec20 100644
--- a/srcpkgs/juCi++/template
+++ b/srcpkgs/juCi++/template
@@ -1,7 +1,7 @@
 # Template file for 'juCi++'
 pkgname=juCi++
 version=1.6.2
-revision=2
+revision=3
 _libclangmm_commit="b342f4dd6de4fe509a692a4b4fcfc7e24aae9590"
 _tiny_commit="c9c8bf810ddad8cd17882b9a9ee628a690e779f5"
 wrksrc="jucipp-v${version}"

From 394ee70e8242cfee71f4afee3dc30ef81f0e7cff Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 14/29] kdevelop: rebuild for llvm14

---
 srcpkgs/kdevelop/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/kdevelop/template b/srcpkgs/kdevelop/template
index 010185849d80..abf08c313071 100644
--- a/srcpkgs/kdevelop/template
+++ b/srcpkgs/kdevelop/template
@@ -1,7 +1,7 @@
 # Template file for 'kdevelop'
 pkgname=kdevelop
 version=21.12.3
-revision=1
+revision=2
 build_style=cmake
 configure_args="-DBUILD_TESTING=OFF"
 hostmakedepends="extra-cmake-modules qt5-qmake qt5-host-tools qt5-tools

From b8e909079e1f1f70b87876da73ad6b1718f2a24d Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 15/29] codelite: rebuild for llvm14

---
 srcpkgs/codelite/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/codelite/template b/srcpkgs/codelite/template
index 3a993a2c0cfb..24e2c879dd45 100644
--- a/srcpkgs/codelite/template
+++ b/srcpkgs/codelite/template
@@ -1,7 +1,7 @@
 # Template file for 'codelite'
 pkgname=codelite
 version=15.0.6
-revision=1
+revision=2
 build_style=cmake
 build_helper=cmake-wxWidgets-gtk3
 configure_args="-DWITH_PCH=0 -DWITH_WX_CONFIG=wx-config-gtk3

From 72aad906e80a17ccc97398f1324176e9d0cf3857 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 16/29] ccls: rebuild for llvm14

---
 srcpkgs/ccls/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/ccls/template b/srcpkgs/ccls/template
index fbb7c6847bc1..40aba3b55bfe 100644
--- a/srcpkgs/ccls/template
+++ b/srcpkgs/ccls/template
@@ -1,7 +1,7 @@
 # Template file for 'ccls'
 pkgname=ccls
 version=0.20210330
-revision=2
+revision=3
 build_style=cmake
 hostmakedepends="clang-tools-extra"
 makedepends="llvm ncurses-devel rapidjson zlib-devel clang-tools-extra"

From 313b9dcaed208ddc1198390cdf5d0f60e01c00c1 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 17/29] clazy: rebuild for llvm14

---
 srcpkgs/clazy/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/clazy/template b/srcpkgs/clazy/template
index 11f3bab55aef..f81de08ab836 100644
--- a/srcpkgs/clazy/template
+++ b/srcpkgs/clazy/template
@@ -1,7 +1,7 @@
 # Template file for 'clazy'
 pkgname=clazy
 version=1.11
-revision=1
+revision=2
 build_style=cmake
 build_helper=qemu
 hostmakedepends="llvm"

From 4550c56aeda7a1fb90cc0c8f1b584a2d1c2ea400 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 18/29] bpftrace: rebuild for llvm14

---
 srcpkgs/bpftrace/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/bpftrace/template b/srcpkgs/bpftrace/template
index 28ab3c626399..eb2480d2230e 100644
--- a/srcpkgs/bpftrace/template
+++ b/srcpkgs/bpftrace/template
@@ -1,7 +1,7 @@
 # Template file for 'bpftrace'
 pkgname=bpftrace
 version=0.14.1
-revision=1
+revision=2
 archs="x86_64* aarch64* ppc64*"
 build_style=cmake
 configure_args="-DBUILD_TESTING=OFF"  # needs root to run

From bd26ab8eff3ab9fc7c1450122507057bda8429fb Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 19/29] rtags: rebuild for llvm14

---
 srcpkgs/rtags/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/rtags/template b/srcpkgs/rtags/template
index b496a1b0e721..9b161e690d76 100644
--- a/srcpkgs/rtags/template
+++ b/srcpkgs/rtags/template
@@ -1,7 +1,7 @@
 # Template file for 'rtags'
 pkgname=rtags
 version=2.38
-revision=5
+revision=6
 build_style=cmake
 # Don't run tests in do_install, please.
 configure_args="-DSKIP_CTEST=TRUE"

From 85c1d5ed55c9cfec26fb359efdf77773f30bc64c Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:07:19 +0200
Subject: [PATCH 20/29] beignet: remove package

---
 srcpkgs/beignet/patches/cl_uint.patch         |  22 -
 ...419a0008e38ef2d9d255d9e9c74e9fba084b.patch | 134 ---
 srcpkgs/beignet/patches/llvm06.patch          |  33 -
 srcpkgs/beignet/patches/llvm08.patch          |  56 --
 srcpkgs/beignet/patches/llvm09.patch          | 111 ---
 srcpkgs/beignet/patches/llvm10.patch          | 347 -------
 srcpkgs/beignet/patches/llvm11.patch          | 937 ------------------
 srcpkgs/beignet/patches/llvm12.patch          | 115 ---
 srcpkgs/beignet/patches/musl.patch            |  11 -
 srcpkgs/beignet/template                      |  22 -
 srcpkgs/beignet/update                        |   1 -
 srcpkgs/removed-packages/template             |   3 +-
 12 files changed, 2 insertions(+), 1790 deletions(-)
 delete mode 100644 srcpkgs/beignet/patches/cl_uint.patch
 delete mode 100644 srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm06.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm08.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm09.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm10.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm11.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm12.patch
 delete mode 100644 srcpkgs/beignet/patches/musl.patch
 delete mode 100644 srcpkgs/beignet/template
 delete mode 100644 srcpkgs/beignet/update

diff --git a/srcpkgs/beignet/patches/cl_uint.patch b/srcpkgs/beignet/patches/cl_uint.patch
deleted file mode 100644
index 86ba00f04e95..000000000000
--- a/srcpkgs/beignet/patches/cl_uint.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/src/cl_api_kernel.c	2017-09-22 10:05:22.000000000 +0200
-+++ b/src/cl_api_kernel.c	2020-03-24 18:27:40.186485887 +0100
-@@ -151,7 +151,7 @@
-         fixed_local_sz[0] = 16;
-         fixed_local_sz[1] = 1;
-       } else {
--        uint j, maxDimSize = 64 /* from 64? */, maxGroupSize = 256; //MAX_WORK_GROUP_SIZE may too large
-+        cl_uint j, maxDimSize = 64 /* from 64? */, maxGroupSize = 256; //MAX_WORK_GROUP_SIZE may too large
-         size_t realGroupSize = 1;
-         for (i = 0; i < work_dim; i++) {
-           for (j = maxDimSize; j > 1; j--) {
---- a/src/cl_enqueue.c	2017-09-22 10:05:22.000000000 +0200
-+++ b/src/cl_enqueue.c	2020-03-24 18:30:12.031479833 +0100
-@@ -494,7 +494,7 @@
- cl_int cl_enqueue_svm_free(enqueue_data *data, cl_int status) {
-   int i;
-   void **pointers = data->pointers;
--  uint num_svm_ptrs = data->size;
-+  cl_uint num_svm_ptrs = data->size;
-   cl_int err = CL_SUCCESS;
- 
-   if (status != CL_COMPLETE)
diff --git a/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch b/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
deleted file mode 100644
index 8de9e6e2f093..000000000000
--- a/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
+++ /dev/null
@@ -1,134 +0,0 @@
-From e1b2419a0008e38ef2d9d255d9e9c74e9fba084b Mon Sep 17 00:00:00 2001
-From: "Rebecca N. Palmer" <rebecca_palmer@zoho.com>
-Date: Sat, 21 Jul 2018 20:05:54 +0100
-Subject: Add preliminary LLVM 7 support
-
-This is preliminary because LLVM 7 has not been released yet:
-it was tested with the snapshot from Debian experimental (svn336894).
-
-1.Change linking order, as clangCodeGen now links to clangFrontend
-2.Pass references not pointers to WriteBitcodeToFile and CloneModule
-3.Add the headers that LoopSimplifyID, LCSSAID and
-some create*Pass have moved to
-4.Define our DEBUG whether or not we just undefined LLVM's
-(theirs is now LLVM_DEBUG, but we never actually use it)
-
-Signed-off-by: Rebecca N. Palmer <rebecca_palmer@zoho.com>
-Reviewed-by: Yang Rong <rong.r.yang@intel.com>
----
- CMake/FindLLVM.cmake                     | 2 +-
- backend/src/backend/gen_program.cpp      | 8 ++++++++
- backend/src/backend/program.cpp          | 4 ++++
- backend/src/llvm/ExpandLargeIntegers.cpp | 2 +-
- backend/src/llvm/llvm_bitcode_link.cpp   | 4 ++++
- backend/src/llvm/llvm_includes.hpp       | 4 ++++
- 6 files changed, 22 insertions(+), 2 deletions(-)
-
-diff --git a/CMake/FindLLVM.cmake b/CMake/FindLLVM.cmake
-index 5457f24..f882589 100644
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -113,10 +113,10 @@ macro(add_one_lib name)
- endmacro()
- 
- #Assume clang lib path same as llvm lib path
-+add_one_lib("clangCodeGen")
- add_one_lib("clangFrontend")
- add_one_lib("clangSerialization")
- add_one_lib("clangDriver")
--add_one_lib("clangCodeGen")
- add_one_lib("clangSema")
- add_one_lib("clangStaticAnalyzerFrontend")
- add_one_lib("clangStaticAnalyzerCheckers")
-diff --git a/backend/src/backend/gen_program.cpp b/backend/src/backend/gen_program.cpp
-index 274c99c..4159234 100644
---- a/backend/src/backend/gen_program.cpp
-+++ b/backend/src/backend/gen_program.cpp
-@@ -454,7 +454,11 @@ namespace gbe {
- #ifdef GBE_COMPILER_AVAILABLE
-       std::string str;
-       llvm::raw_string_ostream OS(str);
-+#if LLVM_VERSION_MAJOR >= 7
-+      llvm::WriteBitcodeToFile(*((llvm::Module*)prog->module), OS);
-+#else
-       llvm::WriteBitcodeToFile((llvm::Module*)prog->module, OS);
-+#endif
-       std::string& bin_str = OS.str();
-       int llsz = bin_str.size();
-       *binary = (char *)malloc(sizeof(char) * (llsz+1) );
-@@ -545,7 +549,11 @@ namespace gbe {
-                                     &modRef);
-         src = llvm::unwrap(modRef);
-       }
-+#if LLVM_VERSION_MAJOR >= 7
-+      llvm::Module* clone = llvm::CloneModule(*src).release();
-+#else
-       llvm::Module* clone = llvm::CloneModule(src).release();
-+#endif
-       if (LLVMLinkModules2(wrap(dst), wrap(clone))) {
- #elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-       if (LLVMLinkModules(wrap(dst), wrap(src), LLVMLinkerPreserveSource_Removed, &errMsg)) {
-diff --git a/backend/src/backend/program.cpp b/backend/src/backend/program.cpp
-index c37c595..b36f7b4 100644
---- a/backend/src/backend/program.cpp
-+++ b/backend/src/backend/program.cpp
-@@ -794,7 +794,11 @@ namespace gbe {
-       llvm::raw_fd_ostream ostream (dumpSPIRBinaryName.c_str(),
-                                     err, llvm::sys::fs::F_None);
-       if (!err)
-+#if LLVM_VERSION_MAJOR<7
-         llvm::WriteBitcodeToFile(*out_module, ostream);
-+#else
-+        llvm::WriteBitcodeToFile(**out_module, ostream);
-+#endif
-     }
- #endif
-     return true;
-diff --git a/backend/src/llvm/ExpandLargeIntegers.cpp b/backend/src/llvm/ExpandLargeIntegers.cpp
-index 8515dc1..4aec44e 100644
---- a/backend/src/llvm/ExpandLargeIntegers.cpp
-+++ b/backend/src/llvm/ExpandLargeIntegers.cpp
-@@ -99,8 +99,8 @@ using namespace llvm;
- 
- #ifdef DEBUG
-   #undef DEBUG
--  #define DEBUG(...)
- #endif
-+#define DEBUG(...)
- // Break instructions up into no larger than 64-bit chunks.
- static const unsigned kChunkBits = 64;
- static const unsigned kChunkBytes = kChunkBits / CHAR_BIT;
-diff --git a/backend/src/llvm/llvm_bitcode_link.cpp b/backend/src/llvm/llvm_bitcode_link.cpp
-index ef56e4c..4c3e20e 100644
---- a/backend/src/llvm/llvm_bitcode_link.cpp
-+++ b/backend/src/llvm/llvm_bitcode_link.cpp
-@@ -340,7 +340,11 @@ namespace gbe
-     /* We use beignet's bitcode as dst because it will have a lot of
-        lazy functions which will not be loaded. */
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 39
-+#if LLVM_VERSION_MAJOR >= 7
-+    llvm::Module * linked_module = llvm::CloneModule(*(llvm::Module*)mod).release();
-+#else
-     llvm::Module * linked_module = llvm::CloneModule((llvm::Module*)mod).release();
-+#endif
-     if(LLVMLinkModules2(wrap(clonedLib), wrap(linked_module))) {
- #else
-     char* errorMsg;
-diff --git a/backend/src/llvm/llvm_includes.hpp b/backend/src/llvm/llvm_includes.hpp
-index 184553a..ffccf02 100644
---- a/backend/src/llvm/llvm_includes.hpp
-+++ b/backend/src/llvm/llvm_includes.hpp
-@@ -89,6 +89,10 @@
- #include "llvm/CodeGen/IntrinsicLowering.h"
- 
- #include "llvm/Transforms/Scalar.h"
-+#if LLVM_VERSION_MAJOR >= 7
-+#include "llvm/Transforms/Utils.h"
-+#include "llvm/Transforms/InstCombine/InstCombine.h"
-+#endif
- #include "llvm/MC/MCAsmInfo.h"
- #include "llvm/MC/MCContext.h"
- #include "llvm/MC/MCInstrInfo.h"
--- 
-cgit v1.1
-
diff --git a/srcpkgs/beignet/patches/llvm06.patch b/srcpkgs/beignet/patches/llvm06.patch
deleted file mode 100644
index 3389e66c82df..000000000000
--- a/srcpkgs/beignet/patches/llvm06.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-Source: Arch Linux
-Upstream: unknown
-Reason: fixes llvm6 compilation
-
---- a/backend/src/llvm/llvm_to_gen.cpp	2017-10-24 09:04:48.000000000 +0300
-+++ b/backend/src/llvm/llvm_to_gen.cpp	2018-03-16 16:08:54.669963824 +0200
-@@ -322,7 +322,11 @@ namespace gbe
-     DataLayout DL(&mod);
-     
-     gbeDiagnosticContext dc;
-+#if LLVM_VERSION_MAJOR >= 6
-+    mod.getContext().setDiagnosticHandlerCallBack(&gbeDiagnosticHandler,&dc);
-+#else
-     mod.getContext().setDiagnosticHandler(&gbeDiagnosticHandler,&dc);
-+#endif
- 
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-     mod.setDataLayout(DL);
---- a/backend/src/llvm/llvm_unroll.cpp	2017-10-24 09:04:48.000000000 +0300
-+++ b/backend/src/llvm/llvm_unroll.cpp	2018-03-16 16:09:47.736403557 +0200
-@@ -205,7 +205,9 @@ namespace gbe {
-           if (parentTripCount != 0 && currTripCount * parentTripCount > 32) {
-             //Don't change the unrollID if doesn't force unroll.
-             //setUnrollID(parentL, false);
--#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-+#if LLVM_VERSION_MAJOR >= 6
-+            loopInfo.erase(parentL);
-+#elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-             loopInfo.markAsRemoved(parentL);
- #else
-             LPM.deleteLoopFromQueue(parentL);
-Only in Beignet-1.3.2-Source: build
-
diff --git a/srcpkgs/beignet/patches/llvm08.patch b/srcpkgs/beignet/patches/llvm08.patch
deleted file mode 100644
index a0c5e7a7c4f7..000000000000
--- a/srcpkgs/beignet/patches/llvm08.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 75c152599a7c1739e6dadcdb9b377acf7e44d9cf Mon Sep 17 00:00:00 2001
-From: Jan Beich <jbeich@FreeBSD.org>
-Date: Wed, 30 Jan 2019 12:42:34 +0000
-Subject: [PATCH] lang/beignet: unbreak with llvm80
-
-Regressed by https://github.com/llvm/llvm-project/commit/721d95713a9e
-
-unable to load /usr/local/lib/beignet//libgbeinterp.so which is part of the driver, please check!
-ld-elf.so.1: /usr/local/lib/beignet//libgbeinterp.so: Undefined symbol "_ZN4llvm24DisableABIBreakingChecksE"
-
-Regressed by https://github.com/llvm/llvm-project/commit/4a2d58e16acc
-
-backend/src/llvm/llvm_gen_backend.cpp:3076:5: error:
-      unknown type name 'TerminatorInst'
-    TerminatorInst *term = bb->getTerminator();
-    ^
-backend/src/llvm/llvm_gen_backend.cpp:3083:5: error:
-      unknown type name 'TerminatorInst'
-    TerminatorInst *term = bb->getTerminator();
-    ^
-
---- a/backend/src/CMakeLists.txt	2017-09-22 08:05:22 UTC
-+++ b/backend/src/CMakeLists.txt
-@@ -168,6 +168,7 @@ add_dependencies(gbe beignet_bitcode)
- endif (NOT (USE_STANDALONE_GBE_COMPILER STREQUAL "true"))
- 
- add_library(gbeinterp SHARED gbe_bin_interpreter.cpp)
-+target_link_libraries(gbeinterp ${LLVM_MODULE_LIBS})
- 
- if (LLVM_VERSION_NODOT VERSION_EQUAL 34)
-   find_library(TERMINFO NAMES tinfo ncurses)
---- a/backend/src/llvm/llvm_gen_backend.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -3073,14 +3073,22 @@ namespace gbe
- 
- 
-   static unsigned getChildNo(BasicBlock *bb) {
-+#if LLVM_VERSION_MAJOR < 8
-     TerminatorInst *term = bb->getTerminator();
-+#else
-+    Instruction *term = bb->getTerminator();
-+#endif
-     return term->getNumSuccessors();
-   }
- 
-   // return NULL if index out-range of children number
-   static BasicBlock *getChildPossible(BasicBlock *bb, unsigned index) {
- 
-+#if LLVM_VERSION_MAJOR < 8
-     TerminatorInst *term = bb->getTerminator();
-+#else
-+    Instruction *term = bb->getTerminator();
-+#endif
-     unsigned childNo = term->getNumSuccessors();
-     BasicBlock *child = NULL;
-     if(index < childNo) {
diff --git a/srcpkgs/beignet/patches/llvm09.patch b/srcpkgs/beignet/patches/llvm09.patch
deleted file mode 100644
index acaeceabb6dd..000000000000
--- a/srcpkgs/beignet/patches/llvm09.patch
+++ /dev/null
@@ -1,111 +0,0 @@
-Source: FreeBSD + q66
-
-Mostly FreeBSD other than FindLLVM.cmake changes.
-Linking against clang-cpp does not work for us.
-
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -140,6 +140,7 @@ add_one_lib("clangStaticAnalyzerCore")
- add_one_lib("clangAnalysis")
- add_one_lib("clangEdit")
- add_one_lib("clangAST")
-+add_one_lib("clangASTMatchers")
- add_one_lib("clangParse")
- add_one_lib("clangSema")
- add_one_lib("clangLex")
---- a/backend/src/llvm/llvm_intrinsic_lowering.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_intrinsic_lowering.cpp
-@@ -77,7 +77,11 @@ namespace gbe {
-         std::vector<Type *> ParamTys;
-         for (Value** I = ArgBegin; I != ArgEnd; ++I)
-           ParamTys.push_back((*I)->getType());
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+        FunctionCallee FCache = M->getOrInsertFunction(NewFn,
-+#else
-         Constant* FCache = M->getOrInsertFunction(NewFn,
-+#endif
-                                         FunctionType::get(RetTy, ParamTys, false));
- 
-         IRBuilder<> Builder(CI->getParent(), BasicBlock::iterator(CI));
---- a/backend/src/llvm/llvm_sampler_fix.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp
-@@ -82,7 +82,11 @@ namespace gbe {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-           Module *M = I->getParent()->getParent()->getParent();
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+          FunctionCallee samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#endif
- #else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType(), nullptr);
- #endif
-@@ -124,7 +128,11 @@ namespace gbe {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-           Module *M = I->getParent()->getParent()->getParent();
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+          FunctionCallee samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#endif
- #else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType(), nullptr);
- #endif
---- a/backend/src/llvm/llvm_profiling.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_profiling.cpp
-@@ -163,10 +163,18 @@ namespace gbe
-       // __gen_ocl_store_timestamp(int nth, int type);
-       Value *Args[2] = {ConstantInt::get(intTy, pointNum++), ConstantInt::get(intTy, profilingType)};
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+      builder->CreateCall(module->getOrInsertFunction(
-+#else
-       builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-+#endif
-               "__gen_ocl_calc_timestamp", Type::getVoidTy(module->getContext()),
-               IntegerType::getInt32Ty(module->getContext()),
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+              IntegerType::getInt32Ty(module->getContext())),
-+#else
-               IntegerType::getInt32Ty(module->getContext()))),
-+#endif
-               ArrayRef<Value*>(Args));
- #else
-       builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-@@ -185,10 +193,18 @@ namespace gbe
-     Value *Args2[2] = {profilingBuf, ConstantInt::get(intTy, profilingType)};
- 
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+    builder->CreateCall(module->getOrInsertFunction(
-+#else
-     builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-+#endif
-             "__gen_ocl_store_profiling", Type::getVoidTy(module->getContext()),
-             ptrTy,
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+            IntegerType::getInt32Ty(module->getContext())),
-+#else
-             IntegerType::getInt32Ty(module->getContext()))),
-+#endif
-             ArrayRef<Value*>(Args2));
- #else
-     builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
---- a/backend/src/llvm/llvm_device_enqueue.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_device_enqueue.cpp
-@@ -398,8 +398,13 @@ namespace gbe {
-               std::vector<Type *> ParamTys;
-               for (Value** iter = args.begin(); iter != args.end(); ++iter)
-                 ParamTys.push_back((*iter)->getType());
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+              CallInst* newCI = builder.CreateCall(mod->getOrInsertFunction(
-+                              "__gen_enqueue_kernel_slm", FunctionType::get(intTy, ParamTys, false)), args);
-+#else
-               CallInst* newCI = builder.CreateCall(cast<llvm::Function>(mod->getOrInsertFunction(
-                               "__gen_enqueue_kernel_slm", FunctionType::get(intTy, ParamTys, false))), args);
-+#endif
-               CI->replaceAllUsesWith(newCI);
-               deadInsnSet.insert(CI);
-             }
diff --git a/srcpkgs/beignet/patches/llvm10.patch b/srcpkgs/beignet/patches/llvm10.patch
deleted file mode 100644
index 8aafe48a240d..000000000000
--- a/srcpkgs/beignet/patches/llvm10.patch
+++ /dev/null
@@ -1,347 +0,0 @@
-diff --git CMake/FindLLVM.cmake CMake/FindLLVM.cmake
-index 0a59e47..6e90923 100644
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -104,28 +104,16 @@ string(REGEX REPLACE " *\n" "" LLVM_SYSTEM_LIBS ${LLVM_SYSTEM_LIBS_ORIG})
- endif (LLVM_SYSTEM_LIBS_ORIG)
- endif (LLVM_VERSION_NODOT VERSION_GREATER 34)
- 
-+#something harmless because whitespace at start is an error
-+set(CLANG_LIBRARIES "-ldl")
- macro(add_one_lib name)
-   FIND_LIBRARY(CLANG_LIB
-     NAMES ${name}
-     PATHS ${LLVM_LIBRARY_DIR} NO_DEFAULT_PATH)
--  set(CLANG_LIBRARIES ${CLANG_LIBRARIES} ${CLANG_LIB})
-+  set(CLANG_LIBRARIES "${CLANG_LIBRARIES} ${CLANG_LIB}")
-+  message(STATUS "clanglibs name ${name} this ${CLANG_LIB} all ${CLANG_LIBRARIES} ")
- 	unset(CLANG_LIB CACHE)
- endmacro()
- 
- #Assume clang lib path same as llvm lib path
--add_one_lib("clangCodeGen")
--add_one_lib("clangFrontend")
--add_one_lib("clangSerialization")
--add_one_lib("clangDriver")
--add_one_lib("clangSema")
--add_one_lib("clangStaticAnalyzerFrontend")
--add_one_lib("clangStaticAnalyzerCheckers")
--add_one_lib("clangStaticAnalyzerCore")
--add_one_lib("clangAnalysis")
--add_one_lib("clangEdit")
--add_one_lib("clangAST")
--add_one_lib("clangASTMatchers")
--add_one_lib("clangParse")
--add_one_lib("clangSema")
--add_one_lib("clangLex")
--add_one_lib("clangBasic")
-+add_one_lib("clang-cpp")
-diff --git CMakeLists.txt CMakeLists.txt
-index c11acbb..08f427d 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -79,7 +79,7 @@ elseif (COMPILER STREQUAL "CLANG")
- elseif (COMPILER STREQUAL "ICC")
-   set (CMAKE_C_CXX_FLAGS "${CMAKE_C_CXX_FLAGS}  -wd2928 -Wall -fPIC -fstrict-aliasing -fp-model fast -msse4.1 -Wl,-E")
- endif ()
--set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
-+set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof")
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
- set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
- set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
-diff --git backend/src/backend/program.cpp backend/src/backend/program.cpp
-index b36f7b4..e666031 100644
---- a/backend/src/backend/program.cpp
-+++ b/backend/src/backend/program.cpp
-@@ -694,9 +694,9 @@ namespace gbe {
- #endif
-                 );
- 
-+    llvm::cl::ResetAllOptionOccurrences();
-     clang::CompilerInvocation::CreateFromArgs(*CI,
--                                              &args[0],
--                                              &args[0] + args.size(),
-+                                              clang::ArrayRef<const char*>(args),
-                                               Diags);
-     // Create the compiler instance
-     clang::CompilerInstance Clang;
-@@ -1242,8 +1242,7 @@ EXTEND_QUOTE:
-       // Create the compiler invocation
-       std::unique_ptr<clang::CompilerInvocation> CI(new clang::CompilerInvocation);
-       return clang::CompilerInvocation::CreateFromArgs(*CI,
--                                                       &args[0],
--                                                       &args[0] + args.size(),
-+                                                       clang::ArrayRef<const char*>(args),
-                                                        Diags);
-     }
- #endif
-diff --git backend/src/llvm/llvm_gen_backend.cpp backend/src/llvm/llvm_gen_backend.cpp
-index c6fc30d..82441d8 100644
---- a/backend/src/llvm/llvm_gen_backend.cpp
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -575,10 +575,12 @@ namespace gbe
-         has_errors(false),
-         legacyMode(true)
-     {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-       initializeLoopInfoWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeLoopInfoPass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-       pass = PASS_EMIT_REGISTERS;
-     }
-diff --git backend/src/llvm/llvm_gen_backend.hpp backend/src/llvm/llvm_gen_backend.hpp
-index b4715b1..8e74f7a 100644
---- a/backend/src/llvm/llvm_gen_backend.hpp
-+++ b/backend/src/llvm/llvm_gen_backend.hpp
-@@ -130,10 +130,10 @@ namespace gbe
-   llvm::FunctionPass *createGenPass(ir::Unit &unit);
- 
-   /*! Remove the GEP instructions */
--  llvm::BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit);
-+  llvm::FunctionPass *createRemoveGEPPass(const ir::Unit &unit);
- 
-   /*! Merge load/store if possible */
--  llvm::BasicBlockPass *createLoadStoreOptimizationPass();
-+  llvm::FunctionPass *createLoadStoreOptimizationPass();
- 
-   /*! Scalarize all vector op instructions */
-   llvm::FunctionPass* createScalarizePass();
-@@ -141,7 +141,7 @@ namespace gbe
-   llvm::ModulePass* createBarrierNodupPass(bool);
- 
-   /*! Convert the Intrinsic call to gen function */
--  llvm::BasicBlockPass *createIntrinsicLoweringPass();
-+  llvm::FunctionPass *createIntrinsicLoweringPass();
- 
-   /*! Passer the printf function call. */
-   llvm::FunctionPass* createPrintfParserPass(ir::Unit &unit);
-diff --git backend/src/llvm/llvm_intrinsic_lowering.cpp backend/src/llvm/llvm_intrinsic_lowering.cpp
-index 94f0ce6..b5539e9 100644
---- a/backend/src/llvm/llvm_intrinsic_lowering.cpp
-+++ b/backend/src/llvm/llvm_intrinsic_lowering.cpp
-@@ -29,12 +29,12 @@
- using namespace llvm;
- 
- namespace gbe {
--    class InstrinsicLowering : public BasicBlockPass
-+    class InstrinsicLowering : public FunctionPass
-     {
-     public:
-       static char ID;
-       InstrinsicLowering() :
--        BasicBlockPass(ID) {}
-+        FunctionPass(ID) {}
- 
-       void getAnalysisUsage(AnalysisUsage &AU) const {
- 
-@@ -93,9 +93,9 @@ namespace gbe {
-         CI->eraseFromParent();
-         return NewCI;
-       }
--      virtual bool runOnBasicBlock(BasicBlock &BB)
-+      virtual bool runOnFunction(Function &F)
-       {
--        bool changedBlock = false;
-+        for (BasicBlock &BB : F) {
-         Module *M = BB.getParent()->getParent();
- 
-         DataLayout TD(M);
-@@ -159,13 +159,14 @@ namespace gbe {
-             }
-           }
-         }
--        return changedBlock;
-+        }
-+        return true;
-       }
-     };
- 
-     char InstrinsicLowering::ID = 0;
- 
--    BasicBlockPass *createIntrinsicLoweringPass() {
-+    FunctionPass *createIntrinsicLoweringPass() {
-       return new InstrinsicLowering();
-     }
- } // end namespace
-diff --git backend/src/llvm/llvm_loadstore_optimization.cpp backend/src/llvm/llvm_loadstore_optimization.cpp
-index 5aa38be..e314302 100644
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
-@@ -26,13 +26,13 @@
- 
- using namespace llvm;
- namespace gbe {
--  class GenLoadStoreOptimization : public BasicBlockPass {
-+  class GenLoadStoreOptimization : public FunctionPass {
- 
-   public:
-     static char ID;
-     ScalarEvolution *SE;
-     const DataLayout *TD;
--    GenLoadStoreOptimization() : BasicBlockPass(ID) {}
-+    GenLoadStoreOptimization() : FunctionPass(ID) {}
- 
-     void getAnalysisUsage(AnalysisUsage &AU) const {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-@@ -45,7 +45,9 @@ namespace gbe {
-       AU.setPreservesCFG();
-     }
- 
--    virtual bool runOnBasicBlock(BasicBlock &BB) {
-+    virtual bool runOnFunction(Function &F) {
-+        bool changedAnyBlock = false;
-+        for (BasicBlock &BB : F) {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-       SE = &getAnalysis<ScalarEvolutionWrapperPass>().getSE();
- #else
-@@ -59,7 +61,9 @@ namespace gbe {
-       #else
-         TD = getAnalysisIfAvailable<DataLayout>();
-       #endif
--      return optimizeLoadStore(BB);
-+           changedAnyBlock = optimizeLoadStore(BB) | changedAnyBlock;
-+        }
-+        return changedAnyBlock;
-     }
-     Type    *getValueType(Value *insn);
-     Value   *getPointerOperand(Value *I);
-@@ -148,7 +152,7 @@ namespace gbe {
-       values.push_back(merged[i]);
-     }
-     LoadInst *ld = cast<LoadInst>(merged[0]);
--    unsigned align = ld->getAlignment();
-+    MaybeAlign align = ld->getAlign();
-     unsigned addrSpace = ld->getPointerAddressSpace();
-     // insert before first load
-     Builder.SetInsertPoint(ld);
-@@ -231,7 +235,7 @@ namespace gbe {
- 
-     unsigned addrSpace = st->getPointerAddressSpace();
- 
--    unsigned align = st->getAlignment();
-+    MaybeAlign align = st->getAlign();
-     // insert before the last store
-     Builder.SetInsertPoint(merged[size-1]);
- 
-@@ -325,7 +329,7 @@ namespace gbe {
-     return changed;
-   }
- 
--  BasicBlockPass *createLoadStoreOptimizationPass() {
-+  FunctionPass *createLoadStoreOptimizationPass() {
-     return new GenLoadStoreOptimization();
-   }
- };
-diff --git backend/src/llvm/llvm_passes.cpp backend/src/llvm/llvm_passes.cpp
-index 10752a3..b8f2282 100644
---- a/backend/src/llvm/llvm_passes.cpp
-+++ b/backend/src/llvm/llvm_passes.cpp
-@@ -37,7 +37,7 @@
- #include "sys/map.hpp"
- 
- using namespace llvm;
--
-+template class cfg::Update<BasicBlock *>;
- namespace gbe
- {
-   bool isKernelFunction(const llvm::Function &F) {
-@@ -219,13 +219,13 @@ namespace gbe
-     return offset;
-   }
- 
--  class GenRemoveGEPPasss : public BasicBlockPass
-+  class GenRemoveGEPPasss : public FunctionPass
-   {
- 
-    public:
-     static char ID;
-     GenRemoveGEPPasss(const ir::Unit &unit) :
--      BasicBlockPass(ID),
-+      FunctionPass(ID),
-       unit(unit) {}
-     const ir::Unit &unit;
-     void getAnalysisUsage(AnalysisUsage &AU) const {
-@@ -242,16 +242,18 @@ namespace gbe
- 
-     bool simplifyGEPInstructions(GetElementPtrInst* GEPInst);
- 
--    virtual bool runOnBasicBlock(BasicBlock &BB)
-+    virtual bool runOnFunction(Function &F)
-     {
--      bool changedBlock = false;
-+      bool changedAnyBlock = false;
-+        for (BasicBlock &BB : F) {
-       iplist<Instruction>::iterator I = BB.getInstList().begin();
-       for (auto nextI = I, E = --BB.getInstList().end(); I != E; I = nextI) {
-         iplist<Instruction>::iterator I = nextI++;
-         if(GetElementPtrInst* gep = dyn_cast<GetElementPtrInst>(&*I))
--          changedBlock = (simplifyGEPInstructions(gep) || changedBlock);
-+          changedAnyBlock = (simplifyGEPInstructions(gep) | changedAnyBlock);
-       }
--      return changedBlock;
-+        }
-+      return changedAnyBlock;
-     }
-   };
- 
-@@ -367,7 +369,7 @@ namespace gbe
-     return true;
-   }
- 
--  BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit) {
-+  FunctionPass *createRemoveGEPPass(const ir::Unit &unit) {
-     return new GenRemoveGEPPasss(unit);
-   }
- } /* namespace gbe */
-diff --git backend/src/llvm/llvm_sampler_fix.cpp backend/src/llvm/llvm_sampler_fix.cpp
-index 2a097c8..863be6d 100644
---- a/backend/src/llvm/llvm_sampler_fix.cpp
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp
-@@ -33,10 +33,12 @@ namespace gbe {
-   class SamplerFix : public FunctionPass {
-   public:
-     SamplerFix() : FunctionPass(ID) {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
-       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-     }
- 
-diff --git backend/src/llvm/llvm_scalarize.cpp backend/src/llvm/llvm_scalarize.cpp
-index e9a2a66..e9d2ee4 100644
---- a/backend/src/llvm/llvm_scalarize.cpp
-+++ b/backend/src/llvm/llvm_scalarize.cpp
-@@ -96,10 +96,12 @@ namespace gbe {
- 
-     Scalarize() : FunctionPass(ID)
-     {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
-       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-     }
- 
-diff --git utests/CMakeLists.txt utests/CMakeLists.txt
-index 300d87a..64179c7 100644
---- a/utests/CMakeLists.txt
-+++ b/utests/CMakeLists.txt
-@@ -26,8 +26,8 @@ if (NOT NOT_BUILD_STAND_ALONE_UTEST)
-   # Threads
-   Find_Package(Threads)
- 
--  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
--  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
-+  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof -ffloat-store -fno-strict-aliasing")
-+  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS} -ffloat-store -fno-strict-aliasing") #compiler_{degrees,radians,function_argument2} use equality comparison of floats, compiler_long_bitcast uses aliasing
-   set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
-   set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
-   set (CMAKE_CXX_FLAGS_MINSIZEREL     "-Os -DNDEBUG -DGBE_DEBUG=0")
diff --git a/srcpkgs/beignet/patches/llvm11.patch b/srcpkgs/beignet/patches/llvm11.patch
deleted file mode 100644
index 2c3a4278943c..000000000000
--- a/srcpkgs/beignet/patches/llvm11.patch
+++ /dev/null
@@ -1,937 +0,0 @@
-Source: Snektron
-
-There were a few changes required for LLVM 11:
-* llvm::StringRef requires .str(), implicit conversion was removed
-* llvm::CallSite was removed, but the required methods are available on llvm::CallInst
-* VectorTyID was split into FixedVectorTyID and ScalableVectorTyID, FixedVectorTyID was used
-* CallInst::getCalledValue() was renamed to CallInst::getCalledOperand()
-* Implicit conversion from MaybeAlign to Align was removed, so MaybeAlign::valueOrOne was used instead.
-
---- a/backend/src/llvm/StripAttributes.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/StripAttributes.cpp	2020-11-09 19:04:19.641897141 +0100
-@@ -107,9 +107,8 @@
-        BB != E; ++BB) {
-     for (BasicBlock::iterator Inst = BB->begin(), E = BB->end();
-          Inst != E; ++Inst) {
--      CallSite Call(&*Inst);
--      if (Call)
--        Call.setCallingConv(CallingConv::C);
-+      if (CallInst* callInst = dyn_cast<CallInst>(&*Inst))
-+        callInst->setCallingConv(CallingConv::C);
-     }
-   }
-
---- a/backend/src/llvm/llvm_bitcode_link.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_bitcode_link.cpp	2020-11-09 17:04:09.633753428 +0100
-@@ -98,7 +98,7 @@
-         if (callFunc && callFunc->getIntrinsicID() != 0)
-           continue;
-
--        std::string fnName = call->getCalledValue()->stripPointerCasts()->getName();
-+        std::string fnName = call->getCalledOperand()->stripPointerCasts()->getName().str();
-
-         if (!MFS.insert(fnName).second) {
-           continue;
---- a/backend/src/llvm/llvm_device_enqueue.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_device_enqueue.cpp	2020-11-09 19:01:49.201915008 +0100
-@@ -45,7 +45,7 @@
-       return NULL;
-
-     /* This is a fake, to check the function bitcast is for block or not */
--    std::string fnName = Fn->getName();
-+    std::string fnName = Fn->getName().str();
-     if(fnName.find("_invoke") == std::string::npos)
-       return NULL;
-
-@@ -119,18 +119,18 @@
-       ParamTys.push_back(ty);
-     }
-     FunctionType* NewFT = FunctionType::get(Fn->getReturnType(), ParamTys, false);
--    Function* NewFn = Function::Create(NewFT, Function::ExternalLinkage, Fn->getName());
-+    Function* NewFn = Function::Create(NewFT, Function::ExternalLinkage, Fn->getName().str());
-     SmallVector<ReturnInst*, 8> Returns;
-
-     Function::arg_iterator NewFnArgIt = NewFn->arg_begin();
-     for (Function::arg_iterator I = Fn->arg_begin(), E = Fn->arg_end(); I != E; ++I) {
--      std::string ArgName = I->getName();
-+      std::string ArgName = I->getName().str();
-       NewFnArgIt->setName(ArgName);
-       VMap[&*I] = &(*NewFnArgIt++);
-     }
-     CloneFunctionInto(NewFn, Fn, VMap, /*ModuleLevelChanges=*/true, Returns);
-
--    Fn->setName("__d" + Fn->getName());
-+    Fn->setName("__d" + Fn->getName().str());
-     mod->getFunctionList().push_back(NewFn);
-     //mod->getOrInsertFunction(NewFn->getName(), NewFn->getFunctionType(),
-     //                         NewFn->getAttributes());
-@@ -147,7 +147,7 @@
-       argTypeNames.push_back(llvm::MDString::get(Context, "char*"));
-       argBaseTypeNames.push_back(llvm::MDString::get(Context, "char*"));
-       argTypeQuals.push_back(llvm::MDString::get(Context, ""));
--      argNames.push_back(llvm::MDString::get(Context, I->getName()));
-+      argNames.push_back(llvm::MDString::get(Context, I->getName().str()));
-     }
-
-     //If run to here, llvm version always > 3.9, add the version check just for build.
-@@ -198,7 +198,7 @@
-            * invoke pointer to store the index in the unit's block functions index.*/
-           Function *Fn = dyn_cast<Function>(bt->getOperand(0));
-
--          std::string fnName = Fn->getName();
-+          std::string fnName = Fn->getName().str();
-           int index = -1;
-           for(size_t i=0; i<unit.blockFuncs.size(); i++) {
-             if(unit.blockFuncs[i] == fnName) {
-@@ -241,7 +241,7 @@
-             //unnamed call function, parse the use to find the define of called function
-             SmallVector<Value*, 16> args(CI->op_begin(), CI->op_end()-1);
-
--            Value *v = CI->getCalledValue();
-+            Value *v = CI->getCalledOperand();
-             BitCastInst* bt = dyn_cast<BitCastInst>(v);
-             if(bt == NULL)
-               continue;
-@@ -316,7 +316,7 @@
-                   ConstantExpr *expr = dyn_cast<ConstantExpr>(c->getOperand(3));
-                   BitCastInst *bt = dyn_cast<BitCastInst>(expr->getAsInstruction());
-                   Function* f = dyn_cast<Function>(bt->getOperand(0));
--                  blocks[v] = f->getName();
-+                  blocks[v] = f->getName().str();
-                 }
-               }
-
-@@ -332,7 +332,7 @@
-           } else {
-             //handle enqueue_kernel function call
-             Function *fn = CI->getCalledFunction();
--            if (fn->getName().find("enqueue_kernel") == std::string::npos)
-+            if (fn->getName().str().find("enqueue_kernel") == std::string::npos)
-               continue;
-
-             //block parameter's index, 3 or 6
-@@ -361,7 +361,7 @@
-                   ConstantExpr *expr = dyn_cast<ConstantExpr>(c->getOperand(3));
-                   BitCastInst *bt = dyn_cast<BitCastInst>(expr->getAsInstruction());
-                   Function* f = dyn_cast<Function>(bt->getOperand(0));
--                  blocks[v] = f->getName();
-+                  blocks[v] = f->getName().str();
-                 }
-               }
-             } else if(isa<AllocaInst>(block)) {
---- a/backend/src/llvm/llvm_gen_backend.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_gen_backend.cpp	2020-11-09 18:33:50.919114327 +0100
-@@ -376,7 +376,7 @@
-           GBE_ASSERT(index == 0);
-           return this->_newScalar(value, key, type, index, uniform);
-           break;
--        case Type::VectorTyID:
-+        case Type::FixedVectorTyID:
-         {
-           auto vectorType = cast<VectorType>(type);
-           auto elementType = vectorType->getElementType();
-@@ -743,20 +743,20 @@
- #undef DECL_VISIT_FN
-
-     // Emit rounding instructions from gen native function
--    void emitRoundingCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode);
-+    void emitRoundingCallInst(CallInst &I, ir::Opcode opcode);
-     // Emit unary instructions from gen native function
--    void emitUnaryCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode, ir::Type = ir::TYPE_FLOAT);
-+    void emitUnaryCallInst(CallInst &I, ir::Opcode opcode, ir::Type = ir::TYPE_FLOAT);
-     // Emit unary instructions from gen native function
--    void emitAtomicInst(CallInst &I, CallSite &CS, ir::AtomicOps opcode);
-+    void emitAtomicInst(CallInst &I, ir::AtomicOps opcode);
-     // Emit workgroup instructions
--    void emitWorkGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode);
-+    void emitWorkGroupInst(CallInst &I, ir::WorkGroupOps opcode);
-     // Emit subgroup instructions
--    void emitSubGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode);
-+    void emitSubGroupInst(CallInst &I, ir::WorkGroupOps opcode);
-     // Emit subgroup instructions
--    void emitBlockReadWriteMemInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
--    void emitBlockReadWriteImageInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-+    void emitBlockReadWriteMemInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-+    void emitBlockReadWriteImageInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-
--    uint8_t appendSampler(CallSite::arg_iterator AI);
-+    uint8_t appendSampler(User::op_iterator AI);
-     uint8_t getImageID(CallInst &I);
-
-     // These instructions are not supported at all
-@@ -1320,13 +1320,13 @@
- #endif
-
-       if(typeNameNode) {
--        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
-+        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-       }
-       if(typeBaseNameNode) {
--        llvmInfo.typeBaseName= (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString();
-+        llvmInfo.typeBaseName= (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString().str();
-       }
--      llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
--      llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString();
-+      llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-+      llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString().str();
-       bool isImage = llvmInfo.isImageType();
-       bool isPipe = llvmInfo.isPipeType();
-       if (I->getType()->isPointerTy() || isImage || isPipe) {
-@@ -1531,7 +1531,7 @@
-             EltTy = getEltType(EltTy, TypeIndex);
-         }
-
--        ir::Constant cc = unit.getConstantSet().getConstant(pointer->getName());
-+        ir::Constant cc = unit.getConstantSet().getConstant(pointer->getName().str());
-         unsigned int defOffset = cc.getOffset();
-         relocs.push_back(ir::RelocEntry(offset, defOffset + constantOffset));
-
-@@ -1546,7 +1546,7 @@
-       return;
-     }
-     if (isa<GlobalVariable>(c)) {
--      ir::Constant cc = unit.getConstantSet().getConstant(c->getName());
-+      ir::Constant cc = unit.getConstantSet().getConstant(c->getName().str());
-       unsigned int defOffset = cc.getOffset();
-
-       relocs.push_back(ir::RelocEntry(offset, defOffset));
-@@ -1609,7 +1609,7 @@
-           }
-           break;
-         }
--      case Type::TypeID::VectorTyID:
-+      case Type::TypeID::FixedVectorTyID:
-         {
-           const ConstantDataSequential *cds = dyn_cast<ConstantDataSequential>(c);
-           const VectorType *vecTy = cast<VectorType>(type);
-@@ -1936,7 +1936,7 @@
-       case Type::PointerTyID:
-         regTranslator.newScalar(value, key, 0, uniform);
-         break;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         auto vectorType = cast<VectorType>(type);
-         const uint32_t elemNum = vectorType->getNumElements();
-@@ -2395,7 +2395,7 @@
- #endif
-         }
-         if(typeNameNode) {
--          llvmInfo.typeName = (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
-+          llvmInfo.typeName = (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-           //LLVM 3.9 image's type name include access qual, don't match OpenCL spec, erase them.
-           std::vector<std::string> filters = {"__read_only ", "__write_only "};
-           for (uint32_t i = 0; i < filters.size(); i++) {
-@@ -2406,16 +2406,16 @@
-           }
-         }
-         if(typeBaseNameNode){
--          llvmInfo.typeBaseName = (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString();
-+          llvmInfo.typeBaseName = (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString().str();
-         }
-         if(accessQualNode) {
--          llvmInfo.accessQual = (cast<MDString>(accessQualNode->getOperand(opID)))->getString();
-+          llvmInfo.accessQual = (cast<MDString>(accessQualNode->getOperand(opID)))->getString().str();
-         }
-         if(typeQualNode) {
--          llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString();
-+          llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString().str();
-         }
-         if(argNameNode){
--          llvmInfo.argName = (cast<MDString>(argNameNode->getOperand(opID)))->getString();
-+          llvmInfo.argName = (cast<MDString>(argNameNode->getOperand(opID)))->getString().str();
-         }
-
-         // function arguments are uniform values.
-@@ -3010,7 +3010,7 @@
-         } else {
-           this->newRegister(const_cast<GlobalVariable*>(&v));
-           ir::Register reg = regTranslator.getScalar(const_cast<GlobalVariable*>(&v), 0);
--          ir::Constant &con = unit.getConstantSet().getConstant(v.getName());
-+          ir::Constant &con = unit.getConstantSet().getConstant(v.getName().str());
-           if (!legacyMode) {
-             ir::Register regload = ctx.reg(getFamily(getType(ctx, v.getType())));
-             ctx.LOADI(getType(ctx, v.getType()), regload, ctx.newIntegerImmediate(con.getOffset(), getType(ctx, v.getType())));
-@@ -3212,7 +3212,7 @@
-         GBE_ASSERTM(false, "Unsupported calling convention");
-     }
-
--    ctx.startFunction(F.getName());
-+    ctx.startFunction(F.getName().str());
-
-     ir::Function &fn = ctx.getFunction();
-     this->regTranslator.clear();
-@@ -3810,9 +3810,9 @@
-
-   void GenWriter::regAllocateCallInst(CallInst &I) {
-     Value *dst = &I;
--    Value *Callee = I.getCalledValue();
-+    Value *Callee = I.getCalledOperand();
-     GBE_ASSERT(ctx.getFunction().getProfile() == ir::PROFILE_OCL);
--    GBE_ASSERT(isa<InlineAsm>(I.getCalledValue()) == false);
-+    GBE_ASSERT(isa<InlineAsm>(I.getCalledOperand()) == false);
-     if(I.getNumArgOperands()) GBE_ASSERT(I.hasStructRetAttr() == false);
-
-     // We only support a small number of intrinsics right now
-@@ -3870,7 +3870,7 @@
-       }
-     }
-     // Get the name of the called function and handle it
--    const std::string fnName = Callee->stripPointerCasts()->getName();
-+    const std::string fnName = Callee->stripPointerCasts()->getName().str();
-     auto genIntrinsicID = intrinsicMap.find(fnName);
-     switch (genIntrinsicID) {
-       case GEN_OCL_GET_GROUP_ID0:
-@@ -4166,7 +4166,7 @@
-     };
-   }
-
--  void GenWriter::emitRoundingCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode) {
-+  void GenWriter::emitRoundingCallInst(CallInst &I, ir::Opcode opcode) {
-     if (I.getType()->isHalfTy()) {
-       const ir::Register src = this->getRegister(I.getOperand(0));
-       const ir::Register srcFloat = ctx.reg(ir::FAMILY_DWORD);
-@@ -4177,14 +4177,14 @@
-       ctx.F32TO16(ir::TYPE_U16, ir::TYPE_FLOAT, dst, dstFloat);
-     } else {
-       GBE_ASSERT(I.getType()->isFloatTy());
--      this->emitUnaryCallInst(I,CS,opcode);
-+      this->emitUnaryCallInst(I,opcode);
-     }
-   }
-
--  void GenWriter::emitUnaryCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
-+  void GenWriter::emitUnaryCallInst(CallInst &I, ir::Opcode opcode, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--    CallSite::arg_iterator AE = CS.arg_end();
-+    User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-     GBE_ASSERT(AI != AE);
-     const ir::Register src = this->getRegister(*AI);
-@@ -4293,9 +4293,9 @@
-     this->emitAtomicInstHelper(opcode, type, dst, llvmPtr, payloadTuple);
-   }
-
--  void GenWriter::emitAtomicInst(CallInst &I, CallSite &CS, ir::AtomicOps opcode) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitAtomicInst(CallInst &I, ir::AtomicOps opcode) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-     Value *llvmPtr = *AI;
-     ir::AddressSpace addrSpace = addressSpaceLLVMToGen(llvmPtr->getType()->getPointerAddressSpace());
-@@ -4348,7 +4348,7 @@
-     }
-   }
-
--  void GenWriter::emitWorkGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode) {
-+  void GenWriter::emitWorkGroupInst(CallInst &I, ir::WorkGroupOps opcode) {
-     ir::Function &f = ctx.getFunction();
-
-     if (f.getwgBroadcastSLM() < 0 && opcode == ir::WORKGROUP_OP_BROADCAST) {
-@@ -4378,8 +4378,8 @@
-       GBE_ASSERT(f.gettidMapSLM() >= 0);
-     }
-
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     if (opcode == ir::WORKGROUP_OP_ALL || opcode == ir::WORKGROUP_OP_ANY) {
-@@ -4391,14 +4391,14 @@
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], 3);
-       ctx.WORKGROUP(opcode, (uint32_t)f.gettidMapSLM(), getRegister(&I), srcTuple, 3, ir::TYPE_S32);
-     } else if (opcode == ir::WORKGROUP_OP_BROADCAST) {
--      int argNum = CS.arg_size();
-+      int argNum = I.arg_size();
-       std::vector<ir::Register> src(argNum);
-       for (int i = 0; i < argNum; i++) {
-         src[i] = this->getRegister(*(AI++));
-       }
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], argNum);
-       ctx.WORKGROUP(ir::WORKGROUP_OP_BROADCAST, (uint32_t)f.getwgBroadcastSLM(), getRegister(&I), srcTuple, argNum,
--          getType(ctx, (*CS.arg_begin())->getType()));
-+          getType(ctx, (*I.arg_begin())->getType()));
-     } else {
-       ConstantInt *sign = dyn_cast<ConstantInt>(AI);
-       GBE_ASSERT(sign);
-@@ -4423,9 +4423,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitSubGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitSubGroupInst(CallInst &I, ir::WorkGroupOps opcode) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     if (opcode == ir::WORKGROUP_OP_ALL || opcode == ir::WORKGROUP_OP_ANY) {
-@@ -4435,7 +4435,7 @@
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], 1);
-       ctx.SUBGROUP(opcode, getRegister(&I), srcTuple, 1, ir::TYPE_S32);
-     } else if (opcode == ir::WORKGROUP_OP_BROADCAST) {
--      int argNum = CS.arg_size();
-+      int argNum = I.arg_size();
-       GBE_ASSERT(argNum == 2);
-       std::vector<ir::Register> src(argNum);
-       for (int i = 0; i < argNum; i++) {
-@@ -4443,7 +4443,7 @@
-       }
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], argNum);
-       ctx.SUBGROUP(ir::WORKGROUP_OP_BROADCAST, getRegister(&I), srcTuple, argNum,
--          getType(ctx, (*CS.arg_begin())->getType()));
-+          getType(ctx, (*I.arg_begin())->getType()));
-     } else {
-       ConstantInt *sign = dyn_cast<ConstantInt>(AI);
-       GBE_ASSERT(sign);
-@@ -4466,9 +4466,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitBlockReadWriteMemInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitBlockReadWriteMemInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     Value *llvmPtr = *(AI++);
-@@ -4522,9 +4522,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitBlockReadWriteImageInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitBlockReadWriteImageInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     const uint8_t imageID = getImageID(I);
-@@ -4557,7 +4557,7 @@
-
-   /* append a new sampler. should be called before any reference to
-    * a sampler_t value. */
--  uint8_t GenWriter::appendSampler(CallSite::arg_iterator AI) {
-+  uint8_t GenWriter::appendSampler(User::op_iterator AI) {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-     CallInst *TC = dyn_cast<CallInst>(*AI);
-     Constant *CPV = TC ? dyn_cast<Constant>(TC->getOperand(0)) : NULL;
-@@ -4595,10 +4595,9 @@
-         const ir::Function &fn = ctx.getFunction();
-
-         // Get the function arguments
--        CallSite CS(&I);
--        CallSite::arg_iterator AI = CS.arg_begin();
-+        User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--        CallSite::arg_iterator AE = CS.arg_end();
-+        User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-         switch (F->getIntrinsicID()) {
-           case Intrinsic::stacksave:
-@@ -4764,17 +4763,17 @@
-             ctx.MAD(srcType, dst, src0, src1, src2);
-           }
-           break;
--          case Intrinsic::sqrt: this->emitUnaryCallInst(I,CS,ir::OP_SQR); break;
--          case Intrinsic::ceil: this->emitRoundingCallInst(I,CS,ir::OP_RNDU); break;
--          case Intrinsic::trunc: this->emitRoundingCallInst(I,CS,ir::OP_RNDZ); break;
--          case Intrinsic::rint: this->emitRoundingCallInst(I,CS,ir::OP_RNDE); break;
--          case Intrinsic::floor: this->emitRoundingCallInst(I,CS,ir::OP_RNDD); break;
--          case Intrinsic::sin: this->emitUnaryCallInst(I,CS,ir::OP_SIN); break;
--          case Intrinsic::cos: this->emitUnaryCallInst(I,CS,ir::OP_COS); break;
--          case Intrinsic::log2: this->emitUnaryCallInst(I,CS,ir::OP_LOG); break;
--          case Intrinsic::exp2: this->emitUnaryCallInst(I,CS,ir::OP_EXP); break;
-+          case Intrinsic::sqrt: this->emitUnaryCallInst(I,ir::OP_SQR); break;
-+          case Intrinsic::ceil: this->emitRoundingCallInst(I,ir::OP_RNDU); break;
-+          case Intrinsic::trunc: this->emitRoundingCallInst(I,ir::OP_RNDZ); break;
-+          case Intrinsic::rint: this->emitRoundingCallInst(I,ir::OP_RNDE); break;
-+          case Intrinsic::floor: this->emitRoundingCallInst(I,ir::OP_RNDD); break;
-+          case Intrinsic::sin: this->emitUnaryCallInst(I,ir::OP_SIN); break;
-+          case Intrinsic::cos: this->emitUnaryCallInst(I,ir::OP_COS); break;
-+          case Intrinsic::log2: this->emitUnaryCallInst(I,ir::OP_LOG); break;
-+          case Intrinsic::exp2: this->emitUnaryCallInst(I,ir::OP_EXP); break;
-           case Intrinsic::bswap:
--            this->emitUnaryCallInst(I,CS,ir::OP_BSWAP, getUnsignedType(ctx, I.getType())); break;
-+            this->emitUnaryCallInst(I,ir::OP_BSWAP, getUnsignedType(ctx, I.getType())); break;
-           case Intrinsic::pow:
-           {
-             const ir::Register src0 = this->getRegister(*AI); ++AI;
-@@ -4794,21 +4793,20 @@
-         }
-       } else {
-         // Get the name of the called function and handle it
--        Value *Callee = I.getCalledValue();
--        const std::string fnName = Callee->stripPointerCasts()->getName();
-+        Value *Callee = I.getCalledOperand();
-+        const std::string fnName = Callee->stripPointerCasts()->getName().str();
-         auto genIntrinsicID = intrinsicMap.find(fnName);
-
-         // Get the function arguments
--        CallSite CS(&I);
--        CallSite::arg_iterator AI = CS.arg_begin();
-+        User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--        CallSite::arg_iterator AE = CS.arg_end();
-+        User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-
-         switch (genIntrinsicID) {
--          case GEN_OCL_FBH: this->emitUnaryCallInst(I,CS,ir::OP_FBH, ir::TYPE_U32); break;
--          case GEN_OCL_FBL: this->emitUnaryCallInst(I,CS,ir::OP_FBL, ir::TYPE_U32); break;
--          case GEN_OCL_CBIT: this->emitUnaryCallInst(I,CS,ir::OP_CBIT, getUnsignedType(ctx, (*AI)->getType())); break;
-+          case GEN_OCL_FBH: this->emitUnaryCallInst(I,ir::OP_FBH, ir::TYPE_U32); break;
-+          case GEN_OCL_FBL: this->emitUnaryCallInst(I,ir::OP_FBL, ir::TYPE_U32); break;
-+          case GEN_OCL_CBIT: this->emitUnaryCallInst(I,ir::OP_CBIT, getUnsignedType(ctx, (*AI)->getType())); break;
-           case GEN_OCL_ABS:
-           {
-             const ir::Register src = this->getRegister(*AI);
-@@ -4915,8 +4913,8 @@
-             ctx.REGION(dst, src, x.getIntegerValue());
-             break;
-           }
--          case GEN_OCL_RSQ: this->emitUnaryCallInst(I,CS,ir::OP_RSQ); break;
--          case GEN_OCL_RCP: this->emitUnaryCallInst(I,CS,ir::OP_RCP); break;
-+          case GEN_OCL_RSQ: this->emitUnaryCallInst(I,ir::OP_RSQ); break;
-+          case GEN_OCL_RCP: this->emitUnaryCallInst(I,ir::OP_RCP); break;
-           case GEN_OCL_FORCE_SIMD8: ctx.setSimdWidth(8); break;
-           case GEN_OCL_FORCE_SIMD16: ctx.setSimdWidth(16); break;
-           case GEN_OCL_LBARRIER: ctx.SYNC(ir::syncLocalBarrier); break;
-@@ -4947,31 +4945,31 @@
-             break;
-           }
-           case GEN_OCL_ATOMIC_ADD0:
--          case GEN_OCL_ATOMIC_ADD1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_ADD); break;
-+          case GEN_OCL_ATOMIC_ADD1: this->emitAtomicInst(I,ir::ATOMIC_OP_ADD); break;
-           case GEN_OCL_ATOMIC_SUB0:
--          case GEN_OCL_ATOMIC_SUB1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_SUB); break;
-+          case GEN_OCL_ATOMIC_SUB1: this->emitAtomicInst(I,ir::ATOMIC_OP_SUB); break;
-           case GEN_OCL_ATOMIC_AND0:
--          case GEN_OCL_ATOMIC_AND1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_AND); break;
-+          case GEN_OCL_ATOMIC_AND1: this->emitAtomicInst(I,ir::ATOMIC_OP_AND); break;
-           case GEN_OCL_ATOMIC_OR0:
--          case GEN_OCL_ATOMIC_OR1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_OR); break;
-+          case GEN_OCL_ATOMIC_OR1: this->emitAtomicInst(I,ir::ATOMIC_OP_OR); break;
-           case GEN_OCL_ATOMIC_XOR0:
--          case GEN_OCL_ATOMIC_XOR1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_XOR); break;
-+          case GEN_OCL_ATOMIC_XOR1: this->emitAtomicInst(I,ir::ATOMIC_OP_XOR); break;
-           case GEN_OCL_ATOMIC_XCHG0:
--          case GEN_OCL_ATOMIC_XCHG1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_XCHG); break;
-+          case GEN_OCL_ATOMIC_XCHG1: this->emitAtomicInst(I,ir::ATOMIC_OP_XCHG); break;
-           case GEN_OCL_ATOMIC_INC0:
--          case GEN_OCL_ATOMIC_INC1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_INC); break;
-+          case GEN_OCL_ATOMIC_INC1: this->emitAtomicInst(I,ir::ATOMIC_OP_INC); break;
-           case GEN_OCL_ATOMIC_DEC0:
--          case GEN_OCL_ATOMIC_DEC1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_DEC); break;
-+          case GEN_OCL_ATOMIC_DEC1: this->emitAtomicInst(I,ir::ATOMIC_OP_DEC); break;
-           case GEN_OCL_ATOMIC_UMIN0:
--          case GEN_OCL_ATOMIC_UMIN1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_UMIN); break;
-+          case GEN_OCL_ATOMIC_UMIN1: this->emitAtomicInst(I,ir::ATOMIC_OP_UMIN); break;
-           case GEN_OCL_ATOMIC_UMAX0:
--          case GEN_OCL_ATOMIC_UMAX1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_UMAX); break;
-+          case GEN_OCL_ATOMIC_UMAX1: this->emitAtomicInst(I,ir::ATOMIC_OP_UMAX); break;
-           case GEN_OCL_ATOMIC_IMIN0:
--          case GEN_OCL_ATOMIC_IMIN1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_IMIN); break;
-+          case GEN_OCL_ATOMIC_IMIN1: this->emitAtomicInst(I,ir::ATOMIC_OP_IMIN); break;
-           case GEN_OCL_ATOMIC_IMAX0:
--          case GEN_OCL_ATOMIC_IMAX1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_IMAX); break;
-+          case GEN_OCL_ATOMIC_IMAX1: this->emitAtomicInst(I,ir::ATOMIC_OP_IMAX); break;
-           case GEN_OCL_ATOMIC_CMPXCHG0:
--          case GEN_OCL_ATOMIC_CMPXCHG1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_CMPXCHG); break;
-+          case GEN_OCL_ATOMIC_CMPXCHG1: this->emitAtomicInst(I,ir::ATOMIC_OP_CMPXCHG); break;
-           case GEN_OCL_GET_IMAGE_WIDTH:
-           case GEN_OCL_GET_IMAGE_HEIGHT:
-           case GEN_OCL_GET_IMAGE_DEPTH:
-@@ -5429,48 +5427,48 @@
-             ctx.WAIT();
-             break;
-           }
--          case GEN_OCL_WORK_GROUP_ALL: this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_ALL); break;
--          case GEN_OCL_WORK_GROUP_ANY: this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_ANY); break;
-+          case GEN_OCL_WORK_GROUP_ALL: this->emitWorkGroupInst(I, ir::WORKGROUP_OP_ALL); break;
-+          case GEN_OCL_WORK_GROUP_ANY: this->emitWorkGroupInst(I, ir::WORKGROUP_OP_ANY); break;
-           case GEN_OCL_WORK_GROUP_BROADCAST:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_BROADCAST); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_BROADCAST); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_ADD); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_MAX); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_MIN); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-           case GEN_OCL_SUB_GROUP_BROADCAST:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_BROADCAST); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_BROADCAST); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_ADD); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_MAX); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_MIN); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-           case GEN_OCL_LRP:
-           {
-             const ir::Register dst  = this->getRegister(&I);
-@@ -5484,69 +5482,69 @@
-             break;
-           }
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, false, 1); break;
-+            this->emitBlockReadWriteMemInst(I, false, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, false, 2); break;
-+            this->emitBlockReadWriteMemInst(I, false, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, false, 4); break;
-+            this->emitBlockReadWriteMemInst(I, false, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, false, 8); break;
-+            this->emitBlockReadWriteMemInst(I, false, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, true, 1); break;
-+            this->emitBlockReadWriteMemInst(I, true, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, true, 2); break;
-+            this->emitBlockReadWriteMemInst(I, true, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, true, 4); break;
-+            this->emitBlockReadWriteMemInst(I, true, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, true, 8); break;
-+            this->emitBlockReadWriteMemInst(I, true, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, false, 1); break;
-+            this->emitBlockReadWriteImageInst(I, false, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, false, 2); break;
-+            this->emitBlockReadWriteImageInst(I, false, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, false, 4); break;
-+            this->emitBlockReadWriteImageInst(I, false, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, false, 8); break;
-+            this->emitBlockReadWriteImageInst(I, false, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, true, 1); break;
-+            this->emitBlockReadWriteImageInst(I, true, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, true, 2); break;
-+            this->emitBlockReadWriteImageInst(I, true, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, true, 4); break;
-+            this->emitBlockReadWriteImageInst(I, true, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, true, 8); break;
-+            this->emitBlockReadWriteImageInst(I, true, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, false, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, false, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, false, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, false, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, true, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, true, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, true, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, true, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, false, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, false, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, false, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, false, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, true, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, true, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, true, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, true, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 8, ir::TYPE_U16); break;
-           case GEN_OCL_GET_PIPE:
-           case GEN_OCL_MAKE_RID:
-           case GEN_OCL_GET_RID:
---- a/backend/src/llvm/llvm_includes.hpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_includes.hpp	2020-11-09 19:00:09.955926795 +0100
-@@ -103,7 +103,6 @@
-
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
- #include "llvm/IR/Mangler.h"
--#include "llvm/IR/CallSite.h"
- #include "llvm/IR/CFG.h"
- #include "llvm/IR/InstVisitor.h"
- #include "llvm/IR/IRPrintingPasses.h"
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-11-09 19:10:37.141852308 +0100
-@@ -160,7 +160,7 @@
-     Value *vecPtr = Builder.CreateBitCast(ld->getPointerOperand(),
-                                         PointerType::get(vecTy, addrSpace));
-     LoadInst *vecValue = Builder.CreateLoad(vecPtr);
--    vecValue->setAlignment(align);
-+    vecValue->setAlignment(align.valueOrOne());
-
-     for (unsigned i = 0; i < size; ++i) {
-       Value *S = Builder.CreateExtractElement(vecValue, Builder.getInt32(i));
-@@ -251,7 +251,7 @@
-       return;
-     Value *newPtr = Builder.CreateBitCast(stPointer, PointerType::get(vecTy, addrSpace));
-     StoreInst *newST = Builder.CreateStore(parent, newPtr);
--    newST->setAlignment(align);
-+    newST->setAlignment(align.valueOrOne());
-   }
-
-   // Find the safe iterator we can point to. If reorder happens, we need to
---- a/backend/src/llvm/llvm_passes.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_passes.cpp	2020-11-09 18:48:55.997006837 +0100
-@@ -95,7 +95,7 @@
-   {
-     switch (Ty->getTypeID()) {
-       case Type::VoidTyID: NOT_SUPPORTED;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         const VectorType* VecTy = cast<VectorType>(Ty);
-         uint32_t elemNum = VecTy->getNumElements();
-@@ -138,7 +138,7 @@
-       case Type::HalfTyID:    return 16;
-       case Type::FloatTyID:   return 32;
-       case Type::DoubleTyID:  return 64;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         const VectorType* VecTy = cast<VectorType>(Ty);
-         uint32_t numElem = VecTy->getNumElements();
-@@ -184,10 +184,12 @@
-     Type *elementType = NULL;
-     if (PointerType* ptrType = dyn_cast<PointerType>(eltTy))
-       elementType = ptrType->getElementType();
--    else if(SequentialType * seqType = dyn_cast<SequentialType>(eltTy))
--      elementType = seqType->getElementType();
--    else if(CompositeType * compTy= dyn_cast<CompositeType>(eltTy))
--      elementType = compTy->getTypeAtIndex(index);
-+    else if (ArrayType * arrType = dyn_cast<ArrayType>(eltTy))
-+      elementType = arrType->getElementType();
-+    else if(VectorType * vecType = dyn_cast<VectorType>(eltTy))
-+      elementType = vecType->getElementType();
-+    else if(StructType * structType = dyn_cast<StructType>(eltTy))
-+      elementType = structType->getTypeAtIndex(index);
-     GBE_ASSERT(elementType);
-     return elementType;
-   }
---- a/backend/src/llvm/llvm_printf_parser.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_printf_parser.cpp	2020-11-09 18:57:52.618943105 +0100
-@@ -323,8 +323,7 @@
-
-   bool PrintfParser::parseOnePrintfInstruction(CallInst * call)
-   {
--    CallSite CS(call);
--    CallSite::arg_iterator CI_FMT = CS.arg_begin();
-+    User::op_iterator CI_FMT = call->arg_begin();
-     int param_num = 0;
-
-     llvm::Constant* arg0 = dyn_cast<llvm::ConstantExpr>(*CI_FMT);
-@@ -341,7 +340,7 @@
-       return false;
-     }
-
--    std::string fmt = fmt_arg->getAsCString();
-+    std::string fmt = fmt_arg->getAsCString().str();
-     if (fmt.size() == 0)
-       return false;
-
-@@ -437,8 +436,8 @@
-         if ( callFunc->getIntrinsicID() != 0)
-           continue;
-
--        Value *Callee = call->getCalledValue();
--        const std::string fnName = Callee->getName();
-+        Value *Callee = call->getCalledOperand();
-+        const std::string fnName = Callee->getName().str();
-
-         if (fnName != "__gen_ocl_printf_stub" && fnName != "__gen_ocl_puts_stub")
-           continue;
-@@ -582,7 +581,7 @@
-             if (!fmt_arg || !fmt_arg->isCString()) {
-               return false;
-             }
--            slot.state.str = fmt_arg->getAsCString();
-+            slot.state.str = fmt_arg->getAsCString().str();
-             return true;
-           }
-           case PRINTF_CONVERSION_P: {
-@@ -595,10 +594,10 @@
-
-         break;
-
--      case Type::VectorTyID: {
--        Type* vect_type = arg->getType();
--        Type* elt_type = vect_type->getVectorElementType();
--        int vec_num = vect_type->getVectorNumElements();
-+      case Type::FixedVectorTyID: {
-+        VectorType* vect_type = dyn_cast<VectorType>(arg->getType());
-+        Type* elt_type = vect_type->getElementType();
-+        int vec_num = vect_type->getNumElements();
-         bool sign = false;
-
-         if (vec_num != slot.state.vector_n) {
---- a/backend/src/llvm/llvm_profiling.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_profiling.cpp	2020-11-09 18:59:50.120929150 +0100
-@@ -35,7 +35,6 @@
- #include "llvm/IR/IRBuilder.h"
-
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
--#include "llvm/IR/CallSite.h"
- #include "llvm/IR/CFG.h"
- #else
- #include "llvm/Support/CallSite.h"
---- a/backend/src/llvm/llvm_sampler_fix.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp	2020-11-09 17:01:09.407774832 +0100
-@@ -45,8 +45,8 @@
-     bool visitCallInst(CallInst *I) {
-       if(!I)
-         return false;
--      Value *Callee = I->getCalledValue();
--      const std::string fnName = Callee->getName();
-+      Value *Callee = I->getCalledOperand();
-+      const std::string fnName = Callee->getName().str();
-       bool changed = false;
-       Type *boolTy = IntegerType::get(I->getContext(), 1);
-       Type *i32Ty = IntegerType::get(I->getContext(), 32);
-@@ -59,7 +59,7 @@
-         Value *needFixVal;
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-         CallInst *init = dyn_cast<CallInst>(I->getOperand(0));
--        if (init && init->getCalledValue()->getName().compare("__translate_sampler_initializer"))
-+        if (init && init->getCalledOperand()->getName().compare("__translate_sampler_initializer"))
-         {
-           const ConstantInt *ci = dyn_cast<ConstantInt>(init->getOperand(0));
-           uint32_t samplerInt = ci->getZExtValue();
-@@ -113,7 +113,7 @@
-         Value *needFixVal;
-  #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-         CallInst *init = dyn_cast<CallInst>(I->getOperand(0));
--        if (init && init->getCalledValue()->getName().compare("__translate_sampler_initializer"))
-+        if (init && init->getCalledOperand()->getName().compare("__translate_sampler_initializer"))
-         {
-           const ConstantInt *ci = dyn_cast<ConstantInt>(init->getOperand(0));
-           uint32_t samplerInt = ci->getZExtValue();
---- a/backend/src/llvm/llvm_scalarize.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_scalarize.cpp	2020-11-09 18:51:16.888990104 +0100
-@@ -178,7 +178,7 @@
-       if(!type)
-         return type;
-       switch(type->getTypeID()) {
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       case Type::ArrayTyID:
-         return GetBasicType(type->getContainedType(0));
-       default:
-@@ -188,7 +188,7 @@
-     }
-
-     int GetComponentCount(const Type* type)  {
--      if (type && type->getTypeID() == Type::VectorTyID)
-+      if (type && type->getTypeID() == Type::FixedVectorTyID)
-         return llvm::dyn_cast<VectorType>(type)->getNumElements();
-       else
-         return 1;
-@@ -652,13 +652,12 @@
-           break;
-         }
-       } else {
--        Value *Callee = call->getCalledValue();
--        const std::string fnName = Callee->getName();
-+        Value *Callee = call->getCalledOperand();
-+        const std::string fnName = Callee->getName().str();
-         auto genIntrinsicID = intrinsicMap.find(fnName);
-
-         // Get the function arguments
--        CallSite CS(call);
--        CallSite::arg_iterator CI = CS.arg_begin() + 1;
-+        User::op_iterator CI = call->arg_begin() + 1;
-
-         switch (genIntrinsicID) {
-           case GEN_OCL_NOT_FOUND:
-@@ -729,7 +728,7 @@
-             extractFromVector(call);
-             break;
-           case GEN_OCL_PRINTF:
--            for (; CI != CS.arg_end(); ++CI)
-+            for (; CI != call->arg_end(); ++CI)
-               if ((*CI)->getType()->isVectorTy())
-                 *CI = InsertToVector(call, *CI);
-             break;
diff --git a/srcpkgs/beignet/patches/llvm12.patch b/srcpkgs/beignet/patches/llvm12.patch
deleted file mode 100644
index 6f8ab005c148..000000000000
--- a/srcpkgs/beignet/patches/llvm12.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-diff --git backend/src/llvm/ExpandLargeIntegers.cpp backend/src/llvm/ExpandLargeIntegers.cpp
-index 8515dc13..27080380 100644
---- a/backend/src/llvm/ExpandLargeIntegers.cpp
-+++ b/backend/src/llvm/ExpandLargeIntegers.cpp
-@@ -328,7 +328,7 @@ static Value *buildVectorOrScalar(ConversionState &State, IRBuilder<> &IRB, Smal
-     // splited, that's why these temporary values should be erased.
-     bool KeepInsert = isLegalBitSize(ElemTy->getPrimitiveSizeInBits() * ElemNo);
-     for (unsigned i = 0; i < ElemNo; ++i) {
--      Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo));
-+      Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo, false));
-       Value *idx = ConstantInt::get(IntTy, i);
-       vec = IRB.CreateInsertElement(tmp, Elements[i], idx);
-       if (!KeepInsert && !isa<Constant>(vec)) {
-@@ -373,7 +373,7 @@ static void unifyElementType(IRBuilder<> &IRB, SmallVector<Value *, 16> &Src, Sm
-       assert((Size % MinWidth) == 0);
- 
-       if (Size > MinWidth) {
--        VectorType *VecTy = VectorType::get(ElemTy, Size/MinWidth);
-+        VectorType *VecTy = VectorType::get(ElemTy, Size/MinWidth, false);
-         Value *Casted = IRB.CreateBitCast(Src[i], VecTy);
-         for (unsigned j = 0; j < Size/MinWidth; j++)
-           Dst.push_back(IRB.CreateExtractElement(Casted, ConstantInt::get(IntTy, j)));
-@@ -462,7 +462,7 @@ static void convertInstruction(Instruction *Inst, ConversionState &State,
-       unsigned ElemNo = Unified.size();
-       Type *ElemTy = Unified[0]->getType();
-       for (unsigned i = 0; i < ElemNo; ++i) {
--        Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo));
-+        Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo, false));
-         Value *idx = ConstantInt::get(IntTy, i);
-         vec = IRB.CreateInsertElement(tmp, Unified[i], idx);
-       }
-diff --git backend/src/llvm/llvm_gen_backend.cpp backend/src/llvm/llvm_gen_backend.cpp
-index c93d89cc..64d5b0e5 100644
---- a/backend/src/llvm/llvm_gen_backend.cpp
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -304,7 +304,7 @@ namespace gbe
-       TYPESIZEVEC(long,8)
-       TYPESIZEVEC(unsigned long,8)
-       else{
--        StructType *StrTy = M->getTypeByName("struct."+name);
-+        StructType *StrTy = StructType::getTypeByName(M->getContext(), "struct."+name);
-         if(StrTy)
-           return getTypeByteSize(unit,StrTy);
-       }
-diff --git backend/src/llvm/llvm_loadstore_optimization.cpp backend/src/llvm/llvm_loadstore_optimization.cpp
-index 5aa38bef..6b5c1bad 100644
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
-@@ -152,7 +152,7 @@ namespace gbe {
-     unsigned addrSpace = ld->getPointerAddressSpace();
-     // insert before first load
-     Builder.SetInsertPoint(ld);
--    VectorType *vecTy = VectorType::get(ld->getType(), size);
-+    VectorType *vecTy = VectorType::get(ld->getType(), size, false);
-     Value *vecPtr = Builder.CreateBitCast(ld->getPointerOperand(),
-                                         PointerType::get(vecTy, addrSpace));
-     LoadInst *vecValue = Builder.CreateLoad(vecPtr);
-@@ -236,7 +236,7 @@ namespace gbe {
-     Builder.SetInsertPoint(merged[size-1]);
- 
-     Type *dataTy = st->getValueOperand()->getType();
--    VectorType *vecTy = VectorType::get(dataTy, size);
-+    VectorType *vecTy = VectorType::get(dataTy, size, false);
-     Value * parent = UndefValue::get(vecTy);
-     for(unsigned i = 0; i < size; i++) {
-       parent = Builder.CreateInsertElement(parent, values[i], ConstantInt::get(IntegerType::get(st->getContext(), 32), i));
-diff --git backend/src/llvm/llvm_printf_parser.cpp backend/src/llvm/llvm_printf_parser.cpp
-index 6bb7c52a..af459cd2 100644
---- a/backend/src/llvm/llvm_printf_parser.cpp
-+++ b/backend/src/llvm/llvm_printf_parser.cpp
-@@ -630,7 +630,7 @@ error:
-             if (elt_type != elt_dst_type) {
-               Value *II = NULL;
-               for (int i = 0; i < vec_num; i++) {
--                Value *vec = II ? II : UndefValue::get(VectorType::get(elt_dst_type, vec_num));
-+                Value *vec = II ? II : UndefValue::get(VectorType::get(elt_dst_type, vec_num, false));
-                 Value *cv = ConstantInt::get(Type::getInt32Ty(elt_type->getContext()), i);
-                 Value *org = builder->CreateExtractElement(arg, cv);
-                 Value *cvt = builder->CreateIntCast(org, elt_dst_type, sign);
-@@ -658,7 +658,7 @@ error:
-             if (elt_type->getTypeID() != Type::FloatTyID) {
-               Value *II = NULL;
-               for (int i = 0; i < vec_num; i++) {
--                Value *vec = II ? II : UndefValue::get(VectorType::get(Type::getFloatTy(elt_type->getContext()), vec_num));
-+                Value *vec = II ? II : UndefValue::get(VectorType::get(Type::getFloatTy(elt_type->getContext()), vec_num, false));
-                 Value *cv = ConstantInt::get(Type::getInt32Ty(elt_type->getContext()), i);
-                 Value *org = builder->CreateExtractElement(arg, cv);
-                 Value* cvt  = builder->CreateFPCast(org, Type::getFloatTy(module->getContext()));
-diff --git backend/src/llvm/llvm_to_gen.cpp backend/src/llvm/llvm_to_gen.cpp
-index 7f7deffe..9e8ccc67 100644
---- a/backend/src/llvm/llvm_to_gen.cpp
-+++ b/backend/src/llvm/llvm_to_gen.cpp
-@@ -358,7 +358,7 @@ namespace gbe
-     passes.add(createScalarReplAggregatesPass(64, true, -1, -1, 64));
- #endif
-     passes.add(createLoadStoreOptimizationPass());
--    passes.add(createConstantPropagationPass());
-+    //passes.add(createConstantPropagationPass());
-     passes.add(createPromoteMemoryToRegisterPass());
-     if(optLevel > 0)
-       passes.add(createGVNPass());                 // Remove redundancies
-@@ -367,11 +367,11 @@ namespace gbe
-     passes.add(createScalarizePass());             // Expand all vector ops
-     passes.add(createExpandLargeIntegersPass());   // legalize large integer operation
-     passes.add(createInstructionCombiningPass());  // legalize will generate some silly instructions
--    passes.add(createConstantPropagationPass());   // propagate constant after scalarize/legalize
-+    //passes.add(createConstantPropagationPass());   // propagate constant after scalarize/legalize
-     passes.add(createExpandConstantExprPass());    // constant prop may generate ConstantExpr
-     passes.add(createPromoteIntegersPass());       // align integer size to power of two
-     passes.add(createRemoveGEPPass(unit));         // Constant prop may generate gep
--    passes.add(createDeadInstEliminationPass());   // Remove simplified instructions
-+    //passes.add(createDeadInstEliminationPass());   // Remove simplified instructions
-     passes.add(createCFGSimplificationPass());     // Merge & remove BBs
-     passes.add(createLowerSwitchPass());           // simplify cfg will generate switch-case instruction
-     if (profiling) {
diff --git a/srcpkgs/beignet/patches/musl.patch b/srcpkgs/beignet/patches/musl.patch
deleted file mode 100644
index cefafbb65588..000000000000
--- a/srcpkgs/beignet/patches/musl.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/backend/src/backend/gen/gen_mesa_disasm.c
-+++ b/backend/src/backend/gen/gen_mesa_disasm.c
-@@ -1137,7 +1137,7 @@ static uint32_t __conv_half_to_float(uint16_t h)
-       // Adjust mantissa so it's normalized (and keep
-       // track of exponent adjustment)
-       int e = -1;
--      uint m = i.mantissa;
-+      unsigned int m = i.mantissa;
-       do {
-         e++;
-         m <<= 1;
diff --git a/srcpkgs/beignet/template b/srcpkgs/beignet/template
deleted file mode 100644
index dce6bbb7ae24..000000000000
--- a/srcpkgs/beignet/template
+++ /dev/null
@@ -1,22 +0,0 @@
-# Template file for 'beignet'
-pkgname=beignet
-version=1.3.2
-revision=10
-archs="i686* x86_64*"
-wrksrc="Beignet-${version}-Source"
-build_style=cmake
-hostmakedepends="clang llvm pkg-config"
-makedepends="MesaLib-devel libedit-devel libffi-devel ocl-icd-devel zlib-devel
- libXfixes-devel"
-depends="ocl-icd"
-short_desc="Beignet GPGPU System for Intel GPUs"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://www.freedesktop.org/wiki/Software/Beignet/"
-distfiles="https://01.org/sites/default/files/${pkgname}-${version}-source.tar.gz"
-checksum=c555edba149de23243965a703f39f79fa06f15bcff5a3762b5544b0925010b43
-
-post_install() {
-	# remove CL headers, we do use opencl-headers instead.
-	rm -r ${DESTDIR}/usr/include
-}
diff --git a/srcpkgs/beignet/update b/srcpkgs/beignet/update
deleted file mode 100644
index ca41e0afe60c..000000000000
--- a/srcpkgs/beignet/update
+++ /dev/null
@@ -1 +0,0 @@
-site="https://01.org/beignet/downloads"
diff --git a/srcpkgs/removed-packages/template b/srcpkgs/removed-packages/template
index 0923c53cfc05..d59bd20f820c 100644
--- a/srcpkgs/removed-packages/template
+++ b/srcpkgs/removed-packages/template
@@ -1,7 +1,7 @@
 # Template file for 'removed-packages'
 pkgname=removed-packages
 version=0.1
-revision=69
+revision=70
 build_style=meta
 short_desc="Uninstalls packages removed from repository"
 maintainer="Piotr Wójcik <chocimier@tlen.pl>"
@@ -25,6 +25,7 @@ replaces="
  atom<=1.44.0_1
  avogadro-devel<=1.2.0_8
  avogadro<=1.2.0_8
+ beignet<=1.3.2_10
  bokken<=1.8_3
  bomi<=0.9.11_17
  burp-client<=1.4.40_13

From 97338ef68219b7d590bd10edc23bf882e6d2d9cb Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 21/29] ldc: rebuild for llvm14

---
 srcpkgs/ldc/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/ldc/template b/srcpkgs/ldc/template
index a27280dde3b8..e21bc6555e38 100644
--- a/srcpkgs/ldc/template
+++ b/srcpkgs/ldc/template
@@ -1,7 +1,7 @@
 # Template file for 'ldc'
 pkgname=ldc
 version=1.28.0
-revision=1
+revision=2
 wrksrc="ldc-${version}-src"
 build_style=cmake
 configure_args="

From 542f5c5ee5d187c465a6490af05c1133fe701723 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 22:31:25 +0200
Subject: [PATCH 22/29] ldc: update to 1.29.0.

---
 srcpkgs/ldc/template | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/srcpkgs/ldc/template b/srcpkgs/ldc/template
index e21bc6555e38..1d72a8805eb6 100644
--- a/srcpkgs/ldc/template
+++ b/srcpkgs/ldc/template
@@ -1,7 +1,7 @@
 # Template file for 'ldc'
 pkgname=ldc
-version=1.28.0
-revision=2
+version=1.29.0
+revision=1
 wrksrc="ldc-${version}-src"
 build_style=cmake
 configure_args="
@@ -11,7 +11,7 @@ configure_args="
  -DBASH_COMPLETION_COMPLETIONSDIR=/usr/share/bash-completion
  -DC_SYSTEM_LIBS='unwind;m;pthread;rt;dl'"
 conf_files="/etc/ldc2.conf"
-hostmakedepends="dmd llvm12 perl pkg-config"
+hostmakedepends="dmd llvm14 perl pkg-config"
 makedepends="libcurl-devel libffi-devel ncurses-devel zlib-devel
  llvm-libunwind-devel"
 depends="ldc-runtime llvm-libunwind-devel"
@@ -22,7 +22,7 @@ license="BSD-3-Clause, BSL-1.0"
 homepage="https://wiki.dlang.org/LDC"
 changelog="https://raw.githubusercontent.com/ldc-developers/ldc/master/CHANGELOG.md"
 distfiles="https://github.com/ldc-developers/ldc/releases/download/v${version}/ldc-${version}-src.tar.gz"
-checksum=17fee8bb535bcb8cda0a45947526555c46c045f302a7349cc8711b254e54cf09
+checksum=d0c066eb965467625d9c5e75c00c583451b9ffa363601f9e37275ca8a8aea140
 nopie=yes
 nocross="dmd compilation fails on cross"
 # tests timeout on musl; also require unpackaged python3-lit

From aedbfa1967184744cf68b38bb9b61cc8c6df6c5c Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 23/29] include-what-you-use: update to 0.18.

---
 srcpkgs/include-what-you-use/template | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/include-what-you-use/template b/srcpkgs/include-what-you-use/template
index b13bb7ee56af..297669f60459 100644
--- a/srcpkgs/include-what-you-use/template
+++ b/srcpkgs/include-what-you-use/template
@@ -1,6 +1,6 @@
 # Template file for 'include-what-you-use'
 pkgname=include-what-you-use
-version=0.16
+version=0.18
 revision=1
 wrksrc="${pkgname}"
 build_style=cmake
@@ -12,7 +12,7 @@ maintainer="Leah Neukirchen <leah@vuxu.org>"
 license="NCSA"
 homepage="https://include-what-you-use.org/"
 distfiles="https://include-what-you-use.org/downloads/${pkgname}-${version}.src.tar.gz"
-checksum=8d6fc9b255343bc1e5ec459e39512df1d51c60e03562985e0076036119ff5a1c
+checksum=9102fc8419294757df86a89ce6ec305f8d90a818d1f2598a139d15eb1894b8f3
 python_version=3
 
 post_install() {

From 7bb7e0998594c0853e98c3bfe8857c1deb7f9e45 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:18:24 +0200
Subject: [PATCH 24/29] SPIRV-LLVM-Translator: update to 14.0.0.

---
 common/shlibs                          |  1 +
 srcpkgs/SPIRV-LLVM-Translator/template | 11 ++++++-----
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/common/shlibs b/common/shlibs
index 86f4c9060d3b..df3eb79f921c 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -983,6 +983,7 @@ libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
 libLLVM-14.so libllvm14-14.0.3_1
+libLLVMSPIRVLib.so.14 SPIRV-LLVM-Translator-14.0.0_1
 libisofs.so.6 libisofs-0.6.24_1
 libmpack.so.0 libmpack-1.0.5_1
 libGeoIP.so.1 libgeoip-1.4.8_1
diff --git a/srcpkgs/SPIRV-LLVM-Translator/template b/srcpkgs/SPIRV-LLVM-Translator/template
index 2504cabed367..2277d062d992 100644
--- a/srcpkgs/SPIRV-LLVM-Translator/template
+++ b/srcpkgs/SPIRV-LLVM-Translator/template
@@ -1,19 +1,20 @@
 # Template file for 'SPIRV-LLVM-Translator'
 pkgname=SPIRV-LLVM-Translator
-version=12.0.0
+version=14.0.0
 revision=1
 build_style=cmake
 make_build_args="llvm-spirv"
-configure_args="-Wno-dev -DLLVM_LINK_LLVM_DYLIB=ON -DCMAKE_SKIP_RPATH=ON
- -DLLVM_SPIRV_INCLUDE_TESTS=OFF -DBUILD_SHARED_LIBS=ON"
+configure_args="-DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release
+ -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_SKIP_RPATH=ON -DLLVM_INCLUDE_TESTS=OFF
+ -DLLVM_LINK_LLVM_DYLIB=ON -DLLVM_EXTERNAL_LIT=/usr/bin/lit -Wno-dev -DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=/usr/include/spirv/ "
 hostmakedepends="clang clang-tools-extra llvm"
-makedepends="llvm"
+makedepends="llvm SPIRV-Headers"
 short_desc="API and commands for processing SPIR-V modules"
 maintainer="Orphaned <orphan@voidlinux.org>"
 license="NCSA"
 homepage="https://github.com/KhronosGroup/SPIRV-LLVM-Translator"
 distfiles="https://github.com/KhronosGroup/${pkgname}/archive/refs/tags/v${version}.tar.gz"
-checksum=6e4fad04203f25fcde4c308c53e9f59bd05a390978992db3212d4b63aff62108
+checksum=1afc52bb4e39aeb9b5b69324a201c81bd986364f347b559995eff6fd6f013318
 make_check=no
 
 post_install() {

From cddfa00dd1ed830105ca6d8480e086782f74b795 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:17:29 +0200
Subject: [PATCH 25/29] SPIRV-Headers: update to 1.3.211.0.

---
 srcpkgs/SPIRV-Headers/template | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/SPIRV-Headers/template b/srcpkgs/SPIRV-Headers/template
index 5dcf457c04c7..ce8288174e48 100644
--- a/srcpkgs/SPIRV-Headers/template
+++ b/srcpkgs/SPIRV-Headers/template
@@ -1,11 +1,13 @@
 # Template file for 'SPIRV-Headers'
 pkgname=SPIRV-Headers
-version=1.5.4.raytracing.fixed
+version=1.3.211.0
 revision=1
+reverts="1.5.4.raytracing.fixed"
+wrksrc=${pkgname}-sdk-${version}
 build_style=cmake
 short_desc="Machine-readable files for the SPIR-V Registry"
 maintainer="Orphaned <orphan@voidlinux.org>"
 license="GPL-3.0-or-later"
 homepage="https://github.com/KhronosGroup/SPIRV-Headers"
-distfiles="https://github.com/KhronosGroup/SPIRV-Headers/archive/${version}.tar.gz"
-checksum=df2ad2520be4d95a479fa248921065885bbf435a658349a7fc164ad7b26b68c6
+distfiles="https://github.com/KhronosGroup/SPIRV-Headers/archive/sdk-${version}.tar.gz"
+checksum=30a78e61bd812c75e09fdc7a319af206b1044536326bc3e85fea818376a12568

From f65e289140bd47a492e88429be7f5bfc7d252135 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:35:43 +0200
Subject: [PATCH 26/29] ispc: update to 1.17.0.

---
 .../ispc/patches/cmake-build-type-none.patch  |   18 -
 srcpkgs/ispc/patches/llvm12-001.patch         |   57 -
 srcpkgs/ispc/patches/llvm12-002.patch         |  923 --------
 srcpkgs/ispc/patches/llvm12-003.patch         | 1504 ------------
 srcpkgs/ispc/patches/llvm12-004.patch         |   34 -
 srcpkgs/ispc/patches/llvm12-005.patch         |  372 ---
 srcpkgs/ispc/patches/llvm12-006.patch         |  126 -
 srcpkgs/ispc/patches/llvm12-007.patch         |  160 --
 srcpkgs/ispc/patches/llvm12-008.patch         |  149 --
 srcpkgs/ispc/patches/llvm12-009.patch         | 2109 -----------------
 srcpkgs/ispc/template                         |    6 +-
 11 files changed, 3 insertions(+), 5455 deletions(-)
 delete mode 100644 srcpkgs/ispc/patches/cmake-build-type-none.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-001.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-002.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-003.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-004.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-005.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-006.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-007.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-008.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-009.patch

diff --git a/srcpkgs/ispc/patches/cmake-build-type-none.patch b/srcpkgs/ispc/patches/cmake-build-type-none.patch
deleted file mode 100644
index 411e353c7314..000000000000
--- a/srcpkgs/ispc/patches/cmake-build-type-none.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Index: ispc-1.15.0/CMakeLists.txt
-===================================================================
---- ispc-1.15.0.orig/CMakeLists.txt
-+++ ispc-1.15.0/CMakeLists.txt
-@@ -157,13 +157,6 @@ set(OUTPUT_RELEASE Release/bin)
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin )
- 
- if(CMAKE_BUILD_TYPE)
--    # Validate build type
--    set(CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo")
--
--    string(FIND "${CONFIGURATION_TYPES}" "${CMAKE_BUILD_TYPE}" MATCHED_CONFIG)
--    if (${MATCHED_CONFIG} EQUAL -1)
--         message(FATAL_ERROR "CMAKE_BUILD_TYPE (${CMAKE_BUILD_TYPE}) allows only the following values: ${CONFIGURATION_TYPES}")
--    endif()
- else(NOT CMAKE_BUILD_TYPE)
-     set(CMAKE_BUILD_TYPE "Release")
-     message(STATUS "Build type not specified: Use Release by default.")
diff --git a/srcpkgs/ispc/patches/llvm12-001.patch b/srcpkgs/ispc/patches/llvm12-001.patch
deleted file mode 100644
index 5f2d3f5a409e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-001.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 1c0f89dccb774f216c7f6e76a99ee907a1e641cb Mon Sep 17 00:00:00 2001
-From: Dmitry Babokin <dmitry.y.babokin@intel.com>
-Date: Tue, 22 Dec 2020 17:03:59 -0800
-Subject: [PATCH] Fix to work with LLVM trunk after llvm/llvm-project@41c3b2713
-
----
- src/ctx.cpp | 18 ++++++++++++------
- 1 file changed, 12 insertions(+), 6 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 6fbb8b9cf..977e9d222 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1473,11 +1473,15 @@ void FunctionEmitContext::AddDebugPos(llvm::Value *value, const SourcePos *pos,
-     llvm::Instruction *inst = llvm::dyn_cast<llvm::Instruction>(value);
-     if (inst != NULL && m->diBuilder) {
-         SourcePos p = pos ? *pos : currentPos;
--        if (p.first_line != 0)
-+        if (p.first_line != 0) {
-             // If first_line == 0, then we're in the middle of setting up
-             // the standard library or the like; don't add debug positions
-             // for those functions
--            inst->setDebugLoc(llvm::DebugLoc::get(p.first_line, p.first_column, scope ? scope : GetDIScope()));
-+            scope = scope ? scope : GetDIScope();
-+            llvm::DebugLoc diLoc =
-+                llvm::DILocation::get(scope->getContext(), p.first_line, p.first_column, scope, nullptr, false);
-+            inst->setDebugLoc(diLoc);
-+        }
-     }
- }
- 
-@@ -1518,9 +1522,10 @@ void FunctionEmitContext::EmitVariableDebugInfo(Symbol *sym) {
-     llvm::DILocalVariable *var = m->diBuilder->createAutoVariable(
-         scope, sym->name, sym->pos.GetDIFile(), sym->pos.first_line, diType, true /* preserve through opts */);
- 
-+    llvm::DebugLoc diLoc =
-+        llvm::DILocation::get(scope->getContext(), sym->pos.first_line, sym->pos.first_column, scope, nullptr, false);
-     llvm::Instruction *declareInst =
--        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(),
--                                    llvm::DebugLoc::get(sym->pos.first_line, sym->pos.first_column, scope), bblock);
-+        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(), diLoc, bblock);
-     AddDebugPos(declareInst, &sym->pos, scope);
- }
- 
-@@ -1535,9 +1540,10 @@ void FunctionEmitContext::EmitFunctionParameterDebugInfo(Symbol *sym, int argNum
-         m->diBuilder->createParameterVariable(scope, sym->name, argNum + 1, sym->pos.GetDIFile(), sym->pos.first_line,
-                                               diType, true /* preserve through opts */, flags);
- 
-+    llvm::DebugLoc diLoc =
-+        llvm::DILocation::get(scope->getContext(), sym->pos.first_line, sym->pos.first_column, scope, nullptr, false);
-     llvm::Instruction *declareInst =
--        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(),
--                                    llvm::DebugLoc::get(sym->pos.first_line, sym->pos.first_column, scope), bblock);
-+        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(), diLoc, bblock);
-     AddDebugPos(declareInst, &sym->pos, scope);
- }
- 
diff --git a/srcpkgs/ispc/patches/llvm12-002.patch b/srcpkgs/ispc/patches/llvm12-002.patch
deleted file mode 100644
index 0903f30da10d..000000000000
--- a/srcpkgs/ispc/patches/llvm12-002.patch
+++ /dev/null
@@ -1,923 +0,0 @@
-From 0597a79d084c014780136da906afe21d15e982cb Mon Sep 17 00:00:00 2001
-From: DeepakRajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Tue, 5 Jan 2021 13:53:30 -0800
-Subject: [PATCH] Remove LLVM 8.0 and LLVM 9.0. (#1966)
-
----
- .appveyor.yml                        |  3 --
- .travis.yml                          |  7 ---
- CMakeLists.txt                       | 12 ++----
- src/ast.cpp                          |  4 --
- src/ctx.cpp                          | 30 -------------
- src/gen/GlobalsLocalization.cpp      |  4 --
- src/ispc.cpp                         | 20 ---------
- src/ispc.h                           |  3 +-
- src/ispc_version.h                   |  4 +-
- src/main.cpp                         | 13 ------
- src/module.cpp                       | 27 ------------
- src/module.h                         |  2 -
- src/opt.cpp                          | 64 ++--------------------------
- src/type.cpp                         | 10 ++---
- tests/lit-tests/1771.ispc            |  1 -
- tests/lit-tests/1844.ispc            |  3 --
- tests/lit-tests/1926.ispc            |  2 -
- tests/lit-tests/cpus_x86.ispc        |  2 +
- tests/lit-tests/cpus_x86_llvm10.ispc | 11 -----
- tests/lit-tests/lit.cfg              |  5 ---
- 20 files changed, 14 insertions(+), 213 deletions(-)
- delete mode 100644 tests/lit-tests/cpus_x86_llvm10.ispc
-
-diff --git a/.appveyor.yml b/.appveyor.yml
-index 451a7b3e0..7945cca2a 100644
---- a/.appveyor.yml
-+++ b/.appveyor.yml
-@@ -41,8 +41,6 @@ environment:
-       LLVM_VERSION: latest
-     - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
-       LLVM_VERSION: 10.0
--    - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
--      LLVM_VERSION: 9.0
- 
- for:
- -
-@@ -62,7 +60,6 @@ for:
-         if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2019" ( (set generator="Visual Studio 16") & (set vsversion=2019))
-         set LLVM_TAR=llvm-11.0.0-win.vs2019-Release+Asserts-x86.arm.wasm.7z
-         if "%LLVM_VERSION%"=="10.0" (set LLVM_TAR=llvm-10.0.1-win.vs2019-Release+Asserts-x86.arm.wasm.zip)
--        if "%LLVM_VERSION%"=="9.0" (set LLVM_TAR=llvm-9.0.1-win.vs2017-Release+Asserts-x86.arm.wasm.zip)
-   install:
-     - ps: choco install --no-progress winflexbison3 wget 7zip
-     - cmd: |-
-diff --git a/.travis.yml b/.travis.yml
-index 2e96017a6..3a6b85264 100644
---- a/.travis.yml
-+++ b/.travis.yml
-@@ -108,13 +108,6 @@ jobs:
-         - LLVM_TAR=llvm-10.0.1-ubuntu16.04-Release+Asserts-x86.arm.wasm.tar.xz
-         - LLVM_REPO=https://github.com/dbabokin/llvm-project
-         - ISPC_HOME=$TRAVIS_BUILD_DIR
--    # LLVM 9.0 + Ubuntu 16.04: build, lit tests, examples (build + run), benchmarks (build + trial run)
--    - <<: *my_tag
--      env:
--        - LLVM_VERSION=9.0 OS=Ubuntu16.04
--        - LLVM_TAR=llvm-9.0.1-ubuntu16.04-Release+Asserts-x86.arm.wasm.tar.xz
--        - LLVM_REPO=https://github.com/dbabokin/llvm-project
--        - ISPC_HOME=$TRAVIS_BUILD_DIR
-     # WASM enabled build
-     # LLVM 11.0 + Ubuntu 16.04: build, lit tests, examples (build), benchmarks (build + trial run)
-     - <<: *my_tag
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 5fa863fcf..a6b3ed251 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -241,10 +241,8 @@ if (X86_ENABLED)
-         avx2-i8x32 avx2-i16x16
-         avx2-i32x4 avx2-i32x8 avx2-i32x16 avx2-i64x4
-         avx512knl-i32x16
--        avx512skx-i32x16 avx512skx-i32x8)
--    if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "10.0.0")
--        list(APPEND ISPC_TARGETS avx512skx-i8x64 avx512skx-i16x32)
--    endif()
-+        avx512skx-i32x16 avx512skx-i32x8
-+        avx512skx-i8x64 avx512skx-i16x32)
- endif()
- if (ARM_ENABLED)
-     list(APPEND ISPC_TARGETS neon-i8x16 neon-i16x8 neon-i32x4 neon-i32x8)
-@@ -259,11 +257,7 @@ if (WASM_ENABLED)
- endif()
- 
- set(CLANG_LIBRARY_LIST clangFrontend clangDriver clangSerialization clangParse clangSema clangAnalysis clangAST clangBasic clangEdit clangLex)
--set(LLVM_COMPONENTS engine ipo bitreader bitwriter instrumentation linker option)
--
--if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "10.0.0")
--    list(APPEND LLVM_COMPONENTS frontendopenmp)
--endif()
-+set(LLVM_COMPONENTS engine ipo bitreader bitwriter instrumentation linker option frontendopenmp)
- 
- if (X86_ENABLED)
-     list(APPEND LLVM_COMPONENTS x86)
-diff --git a/src/ast.cpp b/src/ast.cpp
-index 20f75a29c..5a43c4854 100644
---- a/src/ast.cpp
-+++ b/src/ast.cpp
-@@ -44,9 +44,7 @@
- #include "sym.h"
- #include "util.h"
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/TimeProfiler.h>
--#endif
- ///////////////////////////////////////////////////////////////////////////
- // ASTNode
- 
-@@ -62,9 +60,7 @@ void AST::AddFunction(Symbol *sym, Stmt *code) {
- }
- 
- void AST::GenerateIR() {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope TimeScope("GenerateIR");
--#endif
-     for (unsigned int i = 0; i < functions.size(); ++i)
-         functions[i]->GenerateIR();
- }
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 977e9d222..42c4ea09d 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -309,21 +309,13 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym, llvm::F
-             char buf[256];
-             snprintf(buf, sizeof(buf), "__off_all_on_mask_%s", g->target->GetISAString());
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_8_0
--            llvm::Constant *offFunc = m->module->getOrInsertFunction(buf, LLVMTypes::VoidType);
--#else // LLVM 9.0+
-             llvm::FunctionCallee offFuncCallee = m->module->getOrInsertFunction(buf, LLVMTypes::VoidType);
-             llvm::Constant *offFunc = llvm::cast<llvm::Constant>(offFuncCallee.getCallee());
--#endif
-             AssertPos(currentPos, llvm::isa<llvm::Function>(offFunc));
-             llvm::BasicBlock *offBB = llvm::BasicBlock::Create(*g->ctx, "entry", (llvm::Function *)offFunc, 0);
-             llvm::StoreInst *inst = new llvm::StoreInst(LLVMMaskAllOff, globalAllOnMaskPtr, offBB);
-             if (g->opt.forceAlignedMemory) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-                 inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-             }
-             llvm::ReturnInst::Create(*g->ctx, offBB);
-         }
-@@ -2288,11 +2280,7 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
- #endif
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-     }
- 
-     AddDebugPos(inst);
-@@ -2431,11 +2419,7 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-                 // vs the proper alignment in practice.)
-                 int align = 1;
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                inst->setAlignment(align);
--#else // LLVM 10.0+
-                 inst->setAlignment(llvm::MaybeAlign(align).valueOrOne());
--#endif
-             }
- 
-             AddDebugPos(inst);
-@@ -2649,11 +2633,7 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-         align = g->target->getNativeVectorAlignment();
- 
-     if (align != 0) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(align);
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(align).valueOrOne());
--#endif
-     }
-     // Don't add debugging info to alloca instructions
-     return inst;
-@@ -2926,11 +2906,7 @@ void FunctionEmitContext::StoreInst(llvm::Value *value, llvm::Value *ptr, const
-     llvm::StoreInst *inst = new llvm::StoreInst(value, ptr, bblock);
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-     }
- 
- #ifdef ISPC_GENX_ENABLED
-@@ -3025,16 +3001,10 @@ void FunctionEmitContext::MemcpyInst(llvm::Value *dest, llvm::Value *src, llvm::
-     }
-     if (align == NULL)
-         align = LLVMInt32(1);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_8_0
--    llvm::Constant *mcFunc =
--        m->module->getOrInsertFunction("llvm.memcpy.p0i8.p0i8.i64", LLVMTypes::VoidType, LLVMTypes::VoidPointerType,
--                                       LLVMTypes::VoidPointerType, LLVMTypes::Int64Type, LLVMTypes::BoolType);
--#else // LLVM 9.0+
-     llvm::FunctionCallee mcFuncCallee =
-         m->module->getOrInsertFunction("llvm.memcpy.p0i8.p0i8.i64", LLVMTypes::VoidType, LLVMTypes::VoidPointerType,
-                                        LLVMTypes::VoidPointerType, LLVMTypes::Int64Type, LLVMTypes::BoolType);
-     llvm::Constant *mcFunc = llvm::cast<llvm::Constant>(mcFuncCallee.getCallee());
--#endif
-     AssertPos(currentPos, mcFunc != NULL);
-     AssertPos(currentPos, llvm::isa<llvm::Function>(mcFunc));
- 
-diff --git a/src/gen/GlobalsLocalization.cpp b/src/gen/GlobalsLocalization.cpp
-index 193a66289..a176e9462 100644
---- a/src/gen/GlobalsLocalization.cpp
-+++ b/src/gen/GlobalsLocalization.cpp
-@@ -470,11 +470,7 @@ void GlobalsLocalization::LocalizeGlobals(LocalizationInfo &LI) {
-         Instruction &FirstI = *Fn->getEntryBlock().begin();
-         Type *ElemTy = GV->getType()->getElementType();
-         AllocaInst *Alloca = new AllocaInst(ElemTy, 0, GV->getName() + ".local", &FirstI);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        Alloca->setAlignment(GV->getAlignment());
--#else // LLVM 10.0+
-         Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()));
--#endif
-         if (!isa<UndefValue>(GV->getInitializer()))
-             new StoreInst(GV->getInitializer(), Alloca, &FirstI);
- 
-diff --git a/src/ispc.cpp b/src/ispc.cpp
-index e2d0f206e..fac5233f7 100644
---- a/src/ispc.cpp
-+++ b/src/ispc.cpp
-@@ -272,9 +272,7 @@ typedef enum {
-     CPU_Silvermont,
- 
-     CPU_ICX,
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     CPU_TGL,
--#endif
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-     CPU_ADL,
-     CPU_SPR,
-@@ -365,10 +363,8 @@ class AllCPUs {
- 
-         names[CPU_ICX].push_back("icelake-server");
-         names[CPU_ICX].push_back("icx");
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         names[CPU_TGL].push_back("tigerlake");
-         names[CPU_TGL].push_back("tgl");
--#endif
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-         names[CPU_ADL].push_back("alderlake");
-         names[CPU_ADL].push_back("adl");
-@@ -411,11 +407,9 @@ class AllCPUs {
-         compat[CPU_ADL] = Set(CPU_ADL, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont,
-                               CPU_SandyBridge, CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_None);
- #endif
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         compat[CPU_TGL] =
-             Set(CPU_TGL, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont, CPU_SandyBridge,
-                 CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_SKX, CPU_ICL, CPU_ICX, CPU_None);
--#endif
-         compat[CPU_ICX] = Set(CPU_ICX, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont,
-                               CPU_SandyBridge, CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_SKX, CPU_ICL, CPU_None);
- 
-@@ -556,9 +550,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-         case CPU_SPR:
- #endif
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         case CPU_TGL:
--#endif
-         case CPU_ICX:
-         case CPU_ICL:
-         case CPU_SKX:
-@@ -916,7 +908,6 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         }
-         break;
-     case ISPCTarget::avx512skx_i8x64:
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0 // LLVM 10.0+
-         // This target is enabled only for LLVM 10.0 and later
-         // because LLVM requires a number of fixes, which are
-         // committed to LLVM 11.0 and can be applied to 10.0, but not
-@@ -937,12 +928,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         this->m_hasVecPrefetch = false;
-         CPUfromISA = CPU_SKX;
-         break;
--#else
--        unsupported_target = true;
--        break;
--#endif
-     case ISPCTarget::avx512skx_i16x32:
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0 // LLVM 10.0+
-         // This target is enabled only for LLVM 10.0 and later
-         // because LLVM requires a number of fixes, which are
-         // committed to LLVM 11.0 and can be applied to 10.0, but not
-@@ -963,10 +949,6 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         this->m_hasVecPrefetch = false;
-         CPUfromISA = CPU_SKX;
-         break;
--#else
--        unsupported_target = true;
--        break;
--#endif
- #ifdef ISPC_ARM_ENABLED
-     case ISPCTarget::neon_i8x16:
-         this->m_isa = Target::NEON;
-@@ -1662,11 +1644,9 @@ Globals::Globals() {
-     isMultiTargetCompilation = false;
-     errorLimit = -1;
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     enableTimeTrace = false;
-     // set default granularity to 500.
-     timeTraceGranularity = 500;
--#endif
-     target = NULL;
-     ctx = new llvm::LLVMContext;
- 
-diff --git a/src/ispc.h b/src/ispc.h
-index e25d8830e..de357a21c 100644
---- a/src/ispc.h
-+++ b/src/ispc.h
-@@ -695,13 +695,12 @@ struct Globals {
- 
-     /* Number of errors to show in ISPC. */
-     int errorLimit;
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-+
-     /* When true, enable compile time tracing. */
-     bool enableTimeTrace;
- 
-     /* When compile time tracing is enabled, set time granularity. */
-     int timeTraceGranularity;
--#endif
- };
- 
- enum {
-diff --git a/src/ispc_version.h b/src/ispc_version.h
-index d781347fd..434b2d678 100644
---- a/src/ispc_version.h
-+++ b/src/ispc_version.h
-@@ -44,13 +44,11 @@
- 
- #define ISPC_LLVM_VERSION (LLVM_VERSION_MAJOR * 10000 + LLVM_VERSION_MINOR * 100)
- 
--#define ISPC_LLVM_8_0 80000
--#define ISPC_LLVM_9_0 90000
- #define ISPC_LLVM_10_0 100000
- #define ISPC_LLVM_11_0 110000
- #define ISPC_LLVM_12_0 120000
- 
--#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_8_0
-+#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_10_0
- #define LATEST_SUPPORTED_LLVM ISPC_LLVM_12_0
- 
- #ifdef __ispc__xstr
-diff --git a/src/main.cpp b/src/main.cpp
-index 8f64330cc..5c920eabc 100644
---- a/src/main.cpp
-+++ b/src/main.cpp
-@@ -55,9 +55,7 @@
- #include <llvm/Support/Signals.h>
- #include <llvm/Support/TargetRegistry.h>
- #include <llvm/Support/TargetSelect.h>
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/ToolOutputFile.h>
--#endif
- 
- #ifdef ISPC_HOST_IS_WINDOWS
- #define strcasecmp stricmp
-@@ -181,11 +179,9 @@ static void lPrintVersion() {
-     snprintf(targetHelp, sizeof(targetHelp), "[--target-os=<os>]\t\t\tSelect target OS.  <os>={%s}",
-              g->target_registry->getSupportedOSes().c_str());
-     PrintWithWordBreaks(targetHelp, 24, TerminalWidth(), stdout);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     printf("    [--time-trace]\t\t\tTurn on time profiler. Generates JSON file based on output filename.\n");
-     printf("    [--time-trace-granularity=<value>\tMinimum time granularity (in microseconds) traced by time "
-            "profiler.\n");
--#endif
-     printf("    [--version]\t\t\t\tPrint ispc version\n");
- #ifdef ISPC_GENX_ENABLED
-     printf("    [--vc-options=<\"-option1 -option2...\">]\t\t\t\tPass additional options to Vector Compiler backend\n");
-@@ -462,7 +458,6 @@ static void setCallingConv(VectorCallStatus vectorCall, Arch arch) {
-     }
- }
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- static void writeCompileTimeFile(const char *outFileName) {
-     llvm::SmallString<128> jsonFileName(outFileName);
-     jsonFileName.append(".json");
-@@ -479,7 +474,6 @@ static void writeCompileTimeFile(const char *outFileName) {
-     of->keep();
-     return;
- }
--#endif
- 
- static std::set<int> ParsingPhases(char *stages, ArgErrors &errorHandler) {
-     constexpr int parsing_limit = 100;
-@@ -791,12 +785,10 @@ int main(int Argc, char *Argv[]) {
-             }
-         } else if (!strncmp(argv[i], "--force-alignment=", 18)) {
-             g->forceAlignment = atoi(argv[i] + 18);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         } else if (!strcmp(argv[i], "--time-trace")) {
-             g->enableTimeTrace = true;
-         } else if (!strncmp(argv[i], "--time-trace-granularity=", 25)) {
-             g->timeTraceGranularity = atoi(argv[i] + 25);
--#endif
-         } else if (!strcmp(argv[i], "--woff") || !strcmp(argv[i], "-woff")) {
-             g->disableWarnings = true;
-             g->emitPerfWarnings = false;
-@@ -1059,7 +1051,6 @@ int main(int Argc, char *Argv[]) {
- 
-     // This needs to happen after the TargetOS is decided.
-     setCallingConv(vectorCall, arch);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     if (g->enableTimeTrace) {
-         llvm::timeTraceProfilerInitialize(g->timeTraceGranularity, "ispc");
-     }
-@@ -1077,9 +1068,5 @@ int main(int Argc, char *Argv[]) {
-         }
-         llvm::timeTraceProfilerCleanup();
-     }
--#else
--    int ret = Module::CompileAndOutput(file, arch, cpu, targets, flags, ot, outFileName, headerFileName, depsFileName,
--                                       depsTargetName, hostStubFileName, devStubFileName);
--#endif
-     return ret;
- }
-diff --git a/src/module.cpp b/src/module.cpp
-index fe7452df1..a85fec77a 100644
---- a/src/module.cpp
-+++ b/src/module.cpp
-@@ -170,9 +170,7 @@ Module::Module(const char *fn) {
-     module->setDataLayout(g->target->getDataLayout()->getStringRepresentation());
- 
-     if (g->generateDebuggingSymbols) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Create Debug Data");
--#endif
-         // To enable debug information on Windows, we have to let llvm know, that
-         // debug information should be emitted in CodeView format.
-         if (g->target_os == TargetOS::windows) {
-@@ -226,10 +224,8 @@ extern YY_BUFFER_STATE yy_create_buffer(FILE *, int);
- extern void yy_delete_buffer(YY_BUFFER_STATE);
- 
- int Module::CompileFile() {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope CompileFileTimeScope(
-         "CompileFile", llvm::StringRef(filename + ("_" + std::string(g->target->GetISAString()))));
--#endif
-     extern void ParserInit();
-     ParserInit();
- 
-@@ -238,18 +234,14 @@ int Module::CompileFile() {
-     // variable 'm' to be initialized and available (which it isn't until
-     // the Module constructor returns...)
-     {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("DefineStdlib");
--#endif
-         DefineStdlib(symbolTable, g->ctx, module, g->includeStdlib);
-     }
- 
-     bool runPreprocessor = g->runCPP;
- 
-     if (runPreprocessor) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Frontend parser");
--#endif
-         if (!IsStdin(filename)) {
-             // Try to open the file first, since otherwise we crash in the
-             // preprocessor if the file doesn't exist.
-@@ -268,9 +260,7 @@ int Module::CompileFile() {
-         yyparse();
-         yy_delete_buffer(strbuf);
-     } else {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Frontend parser");
--#endif
-         // No preprocessor, just open up the file if it's not stdin..
-         FILE *f = NULL;
-         if (IsStdin(filename)) {
-@@ -297,9 +287,7 @@ int Module::CompileFile() {
- 
-     if (diBuilder)
-         diBuilder->finalize();
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope TimeScope("Optimize");
--#endif
-     if (errorCount == 0)
-         Optimize(module, g->opt.level);
- 
-@@ -1243,15 +1231,8 @@ bool Module::writeObjectFileOrAssembly(llvm::TargetMachine *targetMachine, llvm:
-                                        const char *outFileName) {
-     // Figure out if we're generating object file or assembly output, and
-     // set binary output for object files
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    Assert(!g->target->isGenXTarget());
--    llvm::TargetMachine::CodeGenFileType fileType =
--        (outputType == Object) ? llvm::TargetMachine::CGFT_ObjectFile : llvm::TargetMachine::CGFT_AssemblyFile;
--    bool binary = (fileType == llvm::TargetMachine::CGFT_ObjectFile);
--#else // LLVM 10.0+
-     llvm::CodeGenFileType fileType = (outputType == Object) ? llvm::CGFT_ObjectFile : llvm::CGFT_AssemblyFile;
-     bool binary = (fileType == llvm::CGFT_ObjectFile);
--#endif
- 
-     llvm::sys::fs::OpenFlags flags = binary ? llvm::sys::fs::F_None : llvm::sys::fs::F_Text;
- 
-@@ -2219,11 +2200,7 @@ void Module::execPreprocessor(const char *infilename, llvm::raw_string_ostream *
-     inst.setTarget(target);
-     inst.createSourceManager(inst.getFileManager());
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    clang::FrontendInputFile inputFile(infilename, clang::InputKind::Unknown);
--#else // LLVM 10.0+
-     clang::FrontendInputFile inputFile(infilename, clang::InputKind());
--#endif
- 
-     inst.InitializeSourceManager(inputFile);
- 
-@@ -2722,9 +2699,7 @@ int Module::CompileAndOutput(const char *srcFile, Arch arch, const char *cpu, st
- 
-         m = new Module(srcFile);
-         if (m->CompileFile() == 0) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-             llvm::TimeTraceScope TimeScope("Backend");
--#endif
- #ifdef ISPC_GENX_ENABLED
-             if (outputType == Asm || outputType == Object) {
-                 if (g->target->isGenXTarget()) {
-@@ -2855,9 +2830,7 @@ int Module::CompileAndOutput(const char *srcFile, Arch arch, const char *cpu, st
- 
-             m = new Module(srcFile);
-             int compileFileError = m->CompileFile();
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-             llvm::TimeTraceScope TimeScope("Backend");
--#endif
-             if (compileFileError == 0) {
-                 // Create the dispatch module, unless already created;
-                 // in the latter case, just do the checking
-diff --git a/src/module.h b/src/module.h
-index 61d3cfea0..603124d50 100644
---- a/src/module.h
-+++ b/src/module.h
-@@ -43,9 +43,7 @@
- 
- #include <llvm/IR/DebugInfo.h>
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/TimeProfiler.h>
--#endif
- 
- #ifdef ISPC_GENX_ENABLED
- #include "ocl_igc_interface/igc_ocl_device_ctx.h"
-diff --git a/src/opt.cpp b/src/opt.cpp
-index a655a8344..5b1ac7b63 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -66,6 +66,7 @@
- #include <llvm/IR/Instructions.h>
- #include <llvm/IR/IntrinsicInst.h>
- #include <llvm/IR/Intrinsics.h>
-+#include <llvm/IR/IntrinsicsX86.h>
- #include <llvm/IR/LegacyPassManager.h>
- #include <llvm/IR/Module.h>
- #include <llvm/IR/PatternMatch.h>
-@@ -85,9 +86,6 @@
- #include <llvm/Transforms/Scalar/InstSimplifyPass.h>
- #include <llvm/Transforms/Utils.h>
- #include <llvm/Transforms/Utils/BasicBlockUtils.h>
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
--#include <llvm/IR/IntrinsicsX86.h>
--#endif
- 
- #ifdef ISPC_HOST_IS_LINUX
- #include <alloca.h>
-@@ -1003,10 +1001,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
-                 name = LLVMGetName(callInst->getArgOperand(0), "_load");
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                llvm::Instruction *loadInst =
--                    new llvm::LoadInst(castPtr, name, false /* not volatile */, align, (llvm::Instruction *)NULL);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-                 llvm::Instruction *loadInst = new llvm::LoadInst(castPtr, name, false /* not volatile */,
-                                                                  llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
- #else
-@@ -1043,13 +1038,8 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedStore32 ? 4 : 8;
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                llvm::StoreInst *storeInst = new llvm::StoreInst(rvalue, castPtr, (llvm::Instruction *)NULL);
--                storeInst->setAlignment(align);
--#else
-                 llvm::StoreInst *storeInst = new llvm::StoreInst(rvalue, castPtr, (llvm::Instruction *)NULL,
-                                                                  llvm::MaybeAlign(align).valueOrOne());
--#endif
-                 lCopyMetadata(storeInst, callInst);
-                 llvm::ReplaceInstWithInst(callInst, storeInst);
- 
-@@ -1066,9 +1056,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool IntrinsicsOpt::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("IntrinsicsOpt::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -1239,9 +1227,7 @@ bool InstructionSimplifyPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool InstructionSimplifyPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("InstructionSimplifyPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -2974,16 +2960,10 @@ static bool lImproveMaskedStore(llvm::CallInst *callInst) {
- 
-             lvalue = new llvm::BitCastInst(lvalue, ptrType, "lvalue_to_ptr_type", callInst);
-             lCopyMetadata(lvalue, callInst);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--            store =
--                new llvm::StoreInst(rvalue, lvalue, false /* not volatile */,
--                                    g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align);
--#else
-             store = new llvm::StoreInst(
-                 rvalue, lvalue, false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-                     .valueOrOne());
--#endif
-         }
-         if (store != NULL) {
-             lCopyMetadata(store, callInst);
-@@ -3059,11 +3039,7 @@ static bool lImproveMaskedLoad(llvm::CallInst *callInst, llvm::BasicBlock::itera
-         {
-             llvm::Type *ptrType = llvm::PointerType::get(callInst->getType(), 0);
-             ptr = new llvm::BitCastInst(ptr, ptrType, "ptr_cast_for_load", callInst);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--            load = new llvm::LoadInst(ptr, callInst->getName(), false /* not volatile */,
--                                      g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align,
--                                      (llvm::Instruction *)NULL);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-             load = new llvm::LoadInst(
-                 ptr, callInst->getName(), false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-@@ -3129,9 +3105,7 @@ bool ImproveMemoryOpsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ImproveMemoryOpsPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ImproveMemoryOpsPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -3424,9 +3398,7 @@ llvm::Value *lGEPAndLoad(llvm::Value *basePtr, int64_t offset, int align, llvm::
-                          llvm::Type *type) {
-     llvm::Value *ptr = lGEPInst(basePtr, LLVMInt64(offset), "new_base", insertBefore);
-     ptr = new llvm::BitCastInst(ptr, llvm::PointerType::get(type, 0), "ptr_cast", insertBefore);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, align, insertBefore);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-     return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, llvm::MaybeAlign(align), insertBefore);
- #else // LLVM 11.0+
-     return new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-@@ -4135,9 +4107,7 @@ bool GatherCoalescePass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool GatherCoalescePass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("GatherCoalescePass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -4467,9 +4437,7 @@ bool ReplacePseudoMemoryOpsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplacePseudoMemoryOpsPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplacePseudoMemoryOpsPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -4573,9 +4541,7 @@ bool IsCompileTimeConstantPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool IsCompileTimeConstantPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("IsCompileTimeConstantPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5201,9 +5167,7 @@ bool PeepholePass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool PeepholePass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("PeepholePass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5299,9 +5263,7 @@ bool ReplaceStdlibShiftPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceStdlibShiftPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceStdlibShiftPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5399,9 +5361,7 @@ llvm::Instruction *FixBooleanSelectPass::fixSelect(llvm::SelectInst *sel, llvm::
- }
- 
- bool FixBooleanSelectPass::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("FixBooleanSelectPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
- 
-     return modifiedAny;
-@@ -5964,9 +5924,7 @@ bool GenXGatherCoalescing::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool GenXGatherCoalescing::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("GenXGatherCoalescing::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6113,9 +6071,7 @@ bool PromoteToPrivateMemoryPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool PromoteToPrivateMemoryPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("PromoteToPrivateMemoryPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6181,9 +6137,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceLLVMIntrinsics::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceLLVMIntrinsics::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6278,9 +6232,7 @@ bool ReplaceUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceUnsupportedInsts::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceUnsupportedInsts::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6369,9 +6321,7 @@ bool CheckUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool CheckUnsupportedInsts::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("CheckUnsupportedInsts::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6440,9 +6390,7 @@ bool MangleOpenCLBuiltins::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool MangleOpenCLBuiltins::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("MangleOpenCLBuiltins::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6828,9 +6776,7 @@ bool FixAddressSpace::runOnFunction(llvm::Function &F) {
-     // Transformations are correct when the function is not internal.
-     // This is due to address space calculation algorithm.
-     // TODO: problems can be met in case of Stack Calls
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("FixAddressSpace::runOnFunction", F.getName());
--#endif
-     if (F.getLinkage() == llvm::GlobalValue::LinkageTypes::InternalLinkage)
-         return false;
- 
-@@ -6854,9 +6800,7 @@ class DemotePHIs : public llvm::FunctionPass {
- char DemotePHIs::ID = 0;
- 
- bool DemotePHIs::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("DemotePHIs::runOnFunction", F.getName());
--#endif
-     if (F.isDeclaration() || skipFunction(F))
-         return false;
-     std::vector<llvm::Instruction *> WorkList;
-diff --git a/src/type.cpp b/src/type.cpp
-index 688a4e874..fa0cb04db 100644
---- a/src/type.cpp
-+++ b/src/type.cpp
-@@ -1822,14 +1822,10 @@ llvm::DIType *StructType::GetDIType(llvm::DIScope *scope) const {
-     llvm::DIFile *diFile = pos.GetDIFile();
-     llvm::DINamespace *diSpace = pos.GetDINamespace();
-     return m->diBuilder->createStructType(diSpace, GetString(), diFile,
--                                          pos.first_line,          // Line number
--                                          layout->getSizeInBits(), // Size in bits
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                                          layout->getAlignment() * 8, // Alignment in bits
--#else                                                                 // LLVM 10.0+
-+                                          pos.first_line,                     // Line number
-+                                          layout->getSizeInBits(),            // Size in bits
-                                           layout->getAlignment().value() * 8, // Alignment in bits
--#endif
--                                          llvm::DINode::FlagZero, // Flags
-+                                          llvm::DINode::FlagZero,             // Flags
-                                           NULL, elements);
- }
- 
-diff --git a/tests/lit-tests/1771.ispc b/tests/lit-tests/1771.ispc
-index 98064d84d..4feb73dd7 100644
---- a/tests/lit-tests/1771.ispc
-+++ b/tests/lit-tests/1771.ispc
-@@ -5,7 +5,6 @@
- // RUN: %{ispc} %s --target=sse4-i16x8 --emit-asm -o - | FileCheck %s -check-prefix=CHECKSSE4_I16X8
- // RUN: %{ispc} %s --target=sse4-i8x16 --emit-asm -o - | FileCheck %s -check-prefix=CHECKSSE4_I8X16
- 
--// REQUIRES: LLVM_10_0+
- // REQUIRES: X86_ENABLED
- 
- // CHECKAVX2_I32X8: {{[a-z]*xor[a-z]*}}  %xmm0, %xmm0, %xmm0
-diff --git a/tests/lit-tests/1844.ispc b/tests/lit-tests/1844.ispc
-index 793a8866c..189edf4c3 100644
---- a/tests/lit-tests/1844.ispc
-+++ b/tests/lit-tests/1844.ispc
-@@ -6,9 +6,6 @@
- 
- // REQUIRES: X86_ENABLED
- 
--// It doesn't work for anything earlier than 10.0, but it will not be fixed, so don't run.
--// REQUIRES: LLVM_10_0+
--
- extern uniform unsigned int64 var_6;
- extern uniform unsigned int16 var_11;
- extern uniform bool arr_201 [1] [15] [20];
-diff --git a/tests/lit-tests/1926.ispc b/tests/lit-tests/1926.ispc
-index 70f7cc3c2..7921c91a6 100644
---- a/tests/lit-tests/1926.ispc
-+++ b/tests/lit-tests/1926.ispc
-@@ -2,8 +2,6 @@
- // RUN: cat %T/1926.o.json \
- // RUN:   | FileCheck %s
- 
--// REQUIRES: LLVM_10_0+
--
- // CHECK: "traceEvents"
- // CHECK: "detail"
- export uniform int foo(uniform int a[], uniform int count) {
-diff --git a/tests/lit-tests/cpus_x86.ispc b/tests/lit-tests/cpus_x86.ispc
-index 516efdd4c..4d60186f6 100644
---- a/tests/lit-tests/cpus_x86.ispc
-+++ b/tests/lit-tests/cpus_x86.ispc
-@@ -24,6 +24,8 @@
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icl
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icelake-server
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icx
-+//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tigerlake
-+//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tgl
- 
- // REQUIRES: X86_ENABLED
- 
-diff --git a/tests/lit-tests/cpus_x86_llvm10.ispc b/tests/lit-tests/cpus_x86_llvm10.ispc
-deleted file mode 100644
-index ef00000e5..000000000
---- a/tests/lit-tests/cpus_x86_llvm10.ispc
-+++ /dev/null
-@@ -1,11 +0,0 @@
--// The test checks that cpu definitions (including all synonyms) are successfully consumed by compiler.
--
--//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tigerlake
--//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tgl
--
--// REQUIRES: X86_ENABLED
--// REQUIRES: LLVM_10_0+
--
--uniform int i;
--
--void foo() {}
-diff --git a/tests/lit-tests/lit.cfg b/tests/lit-tests/lit.cfg
-index 17016579d..045e69437 100644
---- a/tests/lit-tests/lit.cfg
-+++ b/tests/lit-tests/lit.cfg
-@@ -30,11 +30,6 @@ print("Config:")
- 
- # LLVM version
- llvm_version = LooseVersion(ispc_llvm_version_number)
--if llvm_version >= LooseVersion("10.0.0"):
--    print("LLVM_10_0+: YES")
--    config.available_features.add("LLVM_10_0+")
--else:
--    print("LLVM_10_0+: NO")
- 
- if llvm_version >= LooseVersion("12.0.0"):
-     print("LLVM_12_0+: YES")
diff --git a/srcpkgs/ispc/patches/llvm12-003.patch b/srcpkgs/ispc/patches/llvm12-003.patch
deleted file mode 100644
index 0423afc9e3f9..000000000000
--- a/srcpkgs/ispc/patches/llvm12-003.patch
+++ /dev/null
@@ -1,1504 +0,0 @@
-From 1851d18b213dbad169937076176b2d5509733c76 Mon Sep 17 00:00:00 2001
-From: Deepak Rajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Tue, 12 Jan 2021 22:15:12 -0800
-Subject: [PATCH] fixes #1821 - Removing LLVMGetName() and switching to
- LLVM::Twine.
-
----
- src/ctx.cpp      | 304 ++++++++++++++++++++++-------------------------
- src/ctx.h        |  72 +++++------
- src/expr.cpp     |  36 +++---
- src/llvmutil.cpp |  17 ---
- src/llvmutil.h   |   5 -
- src/opt.cpp      | 103 +++++++++-------
- 6 files changed, 255 insertions(+), 282 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 42c4ea09d..ded524b71 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1020,8 +1020,8 @@ void FunctionEmitContext::EmitCaseLabel(int value, bool checkMask, SourcePos pos
-     llvm::BasicBlock *bbCaseImpl = NULL;
-     if (emitGenXHardwareMask()) {
-         // Create basic block with actual case implementation
--        std::string bbName = bbCase->getName().str() + "_impl";
--        bbCaseImpl = CreateBasicBlock(bbName.c_str(), bbCase);
-+        llvm::Twine bbName = llvm::Twine(bbCase->getName()) + "_impl";
-+        bbCaseImpl = CreateBasicBlock(bbName, bbCase);
-     }
- #endif
- 
-@@ -1185,7 +1185,7 @@ bool FunctionEmitContext::initLabelBBlocks(ASTNode *node, void *data) {
-     if (ctx->labelMap.find(ls->name) != ctx->labelMap.end())
-         Error(ls->pos, "Multiple labels named \"%s\" in function.", ls->name.c_str());
-     else {
--        llvm::BasicBlock *bb = ctx->CreateBasicBlock(ls->name.c_str());
-+        llvm::BasicBlock *bb = ctx->CreateBasicBlock(ls->name);
-         ctx->labelMap[ls->name] = bb;
-     }
-     return true;
-@@ -1299,7 +1299,7 @@ llvm::Value *FunctionEmitContext::Any(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_any"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_any");
- }
- 
- llvm::Value *FunctionEmitContext::All(llvm::Value *mask) {
-@@ -1315,7 +1315,7 @@ llvm::Value *FunctionEmitContext::All(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_all"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_all");
- }
- 
- llvm::Value *FunctionEmitContext::None(llvm::Value *mask) {
-@@ -1331,7 +1331,7 @@ llvm::Value *FunctionEmitContext::None(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_none"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_none");
- }
- 
- llvm::Value *FunctionEmitContext::LaneMask(llvm::Value *v) {
-@@ -1349,7 +1349,7 @@ llvm::Value *FunctionEmitContext::LaneMask(llvm::Value *v) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, v, LLVMGetName(v, "_movmsk"));
-+    return CallInst(fmm, NULL, v, llvm::Twine(v->getName()) + "_movmsk");
- }
- 
- llvm::Value *FunctionEmitContext::MasksAllEqual(llvm::Value *v1, llvm::Value *v2) {
-@@ -1364,11 +1364,12 @@ llvm::Value *FunctionEmitContext::MasksAllEqual(llvm::Value *v1, llvm::Value *v2
- #else
-     if (g->target->getArch() == Arch::wasm32) {
-         llvm::Function *fmm = m->module->getFunction("__wasm_cmp_msk_eq");
--        return CallInst(fmm, NULL, {v1, v2}, LLVMGetName("wasm_cmp_msk_eq", v1, v2));
-+        return CallInst(fmm, NULL, {v1, v2}, ((llvm::Twine("wasm_cmp_msk_eq_") + v1->getName()) + "_") + v2->getName());
-     }
-     llvm::Value *mm1 = LaneMask(v1);
-     llvm::Value *mm2 = LaneMask(v2);
--    return CmpInst(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_EQ, mm1, mm2, LLVMGetName("equal", v1, v2));
-+    return CmpInst(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_EQ, mm1, mm2,
-+                   ((llvm::Twine("equal_") + v1->getName()) + "_") + v2->getName());
- #endif
- }
- 
-@@ -1392,7 +1393,7 @@ llvm::Value *FunctionEmitContext::GetStringPtr(const std::string &str) {
-     return new llvm::BitCastInst(lstrPtr, LLVMTypes::VoidPointerType, "str_void_ptr", bblock);
- }
- 
--llvm::BasicBlock *FunctionEmitContext::CreateBasicBlock(const char *name, llvm::BasicBlock *insertAfter) {
-+llvm::BasicBlock *FunctionEmitContext::CreateBasicBlock(const llvm::Twine &name, llvm::BasicBlock *insertAfter) {
-     llvm::BasicBlock *newBB = llvm::BasicBlock::Create(*g->ctx, name, llvmFunction);
-     if (insertAfter)
-         newBB->moveAfter(insertAfter);
-@@ -1416,14 +1417,15 @@ llvm::Value *FunctionEmitContext::I1VecToBoolVec(llvm::Value *b) {
- 
-         for (unsigned int i = 0; i < at->getNumElements(); ++i) {
-             llvm::Value *elt = ExtractInst(b, i);
--            llvm::Value *sext = SwitchBoolSize(elt, LLVMTypes::BoolVectorStorageType, LLVMGetName(elt, "_to_boolvec"));
-+            llvm::Value *sext =
-+                SwitchBoolSize(elt, LLVMTypes::BoolVectorStorageType, llvm::Twine(elt->getName()) + "_to_boolvec");
-             ret = InsertInst(ret, sext, i);
-         }
-         return ret;
-     } else {
-         // For non-array types, convert to 'LLVMTypes::BoolVectorType' if
-         // necessary.
--        return SwitchBoolSize(b, LLVMTypes::BoolVectorType, LLVMGetName(b, "_to_boolvec"));
-+        return SwitchBoolSize(b, LLVMTypes::BoolVectorType, llvm::Twine(b->getName()) + "_to_boolvec");
-     }
- }
- 
-@@ -1563,7 +1565,7 @@ static int lArrayVectorWidth(llvm::Type *t) {
- }
- 
- llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps inst, llvm::Value *v0, llvm::Value *v1,
--                                                 const char *name) {
-+                                                 const llvm::Twine &name) {
-     if (v0 == NULL || v1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1573,7 +1575,7 @@ llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps in
-     llvm::Type *type = v0->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *bop = llvm::BinaryOperator::Create(inst, v0, v1, name ? name : "", bblock);
-+        llvm::Instruction *bop = llvm::BinaryOperator::Create(inst, v0, v1, name, bblock);
-         AddDebugPos(bop);
-         return bop;
-     } else {
-@@ -1591,7 +1593,7 @@ llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps in
-     }
- }
- 
--llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const char *name) {
-+llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const llvm::Twine &name) {
-     if (v == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1603,14 +1605,14 @@ llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const char *name)
-     llvm::Type *type = v->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *binst = llvm::BinaryOperator::CreateNot(v, name ? name : "not", bblock);
-+        llvm::Instruction *binst = llvm::BinaryOperator::CreateNot(v, name.isTriviallyEmpty() ? "not" : name, bblock);
-         AddDebugPos(binst);
-         return binst;
-     } else {
-         llvm::Value *ret = llvm::UndefValue::get(type);
-         for (int i = 0; i < arraySize; ++i) {
-             llvm::Value *a = ExtractInst(v, i);
--            llvm::Value *op = llvm::BinaryOperator::CreateNot(a, name ? name : "not", bblock);
-+            llvm::Value *op = llvm::BinaryOperator::CreateNot(a, name.isTriviallyEmpty() ? "not" : name, bblock);
-             AddDebugPos(op);
-             ret = InsertInst(ret, op, i);
-         }
-@@ -1638,7 +1640,7 @@ static llvm::Type *lGetMatchingBoolVectorType(llvm::Type *type) {
- }
- 
- llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm::CmpInst::Predicate pred,
--                                          llvm::Value *v0, llvm::Value *v1, const char *name) {
-+                                          llvm::Value *v0, llvm::Value *v1, const llvm::Twine &name) {
-     if (v0 == NULL || v1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1648,7 +1650,8 @@ llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm
-     llvm::Type *type = v0->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *ci = llvm::CmpInst::Create(inst, pred, v0, v1, name ? name : "cmp", bblock);
-+        llvm::Instruction *ci =
-+            llvm::CmpInst::Create(inst, pred, v0, v1, name.isTriviallyEmpty() ? "cmp" : name, bblock);
-         AddDebugPos(ci);
-         return ci;
-     } else {
-@@ -1657,14 +1660,14 @@ llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm
-         for (int i = 0; i < arraySize; ++i) {
-             llvm::Value *a = ExtractInst(v0, i);
-             llvm::Value *b = ExtractInst(v1, i);
--            llvm::Value *op = CmpInst(inst, pred, a, b, name);
-+            llvm::Value *op = CmpInst(inst, pred, a, b, name.isTriviallyEmpty() ? "cmp" : name);
-             ret = InsertInst(ret, op, i);
-         }
-         return ret;
-     }
- }
- 
--llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const char *name) {
-+llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1704,21 +1707,19 @@ llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const char *n
-     return ret;
- }
- 
--llvm::Value *FunctionEmitContext::BitCastInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Value *FunctionEmitContext::BitCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_bitcast");
--
--    llvm::Instruction *inst = new llvm::BitCastInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::BitCastInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_bitcast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const char *name) {
-+llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1728,23 +1729,19 @@ llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const char *n
-         // no-op for varying pointers; they're already vectors of ints
-         return value;
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_ptr2int");
-     llvm::Type *type = LLVMTypes::PointerIntType;
--    llvm::Instruction *inst = new llvm::PtrToIntInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::PtrToIntInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_ptr2int");
--
-     llvm::Type *fromType = value->getType();
-     if (llvm::isa<llvm::VectorType>(fromType)) {
-         // varying pointer
-@@ -1752,27 +1749,26 @@ llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *t
-             // already the right type--done
-             return value;
-         else if (fromType->getScalarSizeInBits() > toType->getScalarSizeInBits())
--            return TruncInst(value, toType, name);
-+            return TruncInst(value, toType,
-+                             name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name);
-         else {
-             AssertPos(currentPos, fromType->getScalarSizeInBits() < toType->getScalarSizeInBits());
--            return ZExtInst(value, toType, name);
-+            return ZExtInst(value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name);
-         }
-     }
- 
--    llvm::Instruction *inst = new llvm::PtrToIntInst(value, toType, name, bblock);
-+    llvm::Instruction *inst = new llvm::PtrToIntInst(
-+        value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_int2ptr");
--
-     llvm::Type *fromType = value->getType();
-     if (llvm::isa<llvm::VectorType>(fromType)) {
-         // varying pointer
-@@ -1780,95 +1776,87 @@ llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *t
-             // done
-             return value;
-         else if (fromType->getScalarSizeInBits() > toType->getScalarSizeInBits())
--            return TruncInst(value, toType, name);
-+            return TruncInst(value, toType,
-+                             name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name);
-         else {
-             AssertPos(currentPos, fromType->getScalarSizeInBits() < toType->getScalarSizeInBits());
--            return ZExtInst(value, toType, name);
-+            return ZExtInst(value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name);
-         }
-     }
- 
--    llvm::Instruction *inst = new llvm::IntToPtrInst(value, toType, name, bblock);
-+    llvm::Instruction *inst = new llvm::IntToPtrInst(
-+        value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::TruncInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::TruncInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_trunc");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::TruncInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::TruncInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_trunc" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
- llvm::Instruction *FunctionEmitContext::CastInst(llvm::Instruction::CastOps op, llvm::Value *value, llvm::Type *type,
--                                                 const char *name) {
-+                                                 const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_cast");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = llvm::CastInst::Create(op, value, type, name, bblock);
-+    llvm::Instruction *inst = llvm::CastInst::Create(
-+        op, value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_cast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::FPCastInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::FPCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_cast");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = llvm::CastInst::CreateFPCast(value, type, name, bblock);
-+    llvm::Instruction *inst = llvm::CastInst::CreateFPCast(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_cast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::SExtInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::SExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_sext");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::SExtInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::SExtInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_sext" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::ZExtInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::ZExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_zext");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::ZExtInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::ZExtInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_zext" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
-@@ -1913,14 +1901,15 @@ llvm::Value *FunctionEmitContext::applyVaryingGEP(llvm::Value *basePtr, llvm::Va
-         scale = SmearUniform(scale);
-         Assert(index != NULL);
-         // offset = index * scale
--        offset = BinaryOperator(llvm::Instruction::Mul, scale, index, LLVMGetName("mul", scale, index));
-+        offset = BinaryOperator(llvm::Instruction::Mul, scale, index,
-+                                ((llvm::Twine("mul_") + scale->getName()) + "_") + index->getName());
-     }
- 
-     // For 64-bit targets, if we've been doing our offset calculations in
-     // 32 bits, we still have to convert to a 64-bit value before we
-     // actually add the offset to the pointer.
-     if (g->target->is32Bit() == false && g->opt.force32BitAddressing == true)
--        offset = SExtInst(offset, LLVMTypes::Int64VectorType, LLVMGetName(offset, "_to_64"));
-+        offset = SExtInst(offset, LLVMTypes::Int64VectorType, llvm::Twine(offset->getName()) + "_to_64");
- 
-     // Smear out the pointer to be varying; either the base pointer or the
-     // index must be varying for this method to be called.
-@@ -1929,7 +1918,7 @@ llvm::Value *FunctionEmitContext::applyVaryingGEP(llvm::Value *basePtr, llvm::Va
-     llvm::Value *varyingPtr = baseIsUniform ? SmearUniform(basePtr) : basePtr;
- 
-     // newPtr = ptr + offset
--    return BinaryOperator(llvm::Instruction::Add, varyingPtr, offset, LLVMGetName(basePtr, "_offset"));
-+    return BinaryOperator(llvm::Instruction::Add, varyingPtr, offset, llvm::Twine(basePtr->getName()) + "_offset");
- }
- 
- void FunctionEmitContext::MatchIntegerTypes(llvm::Value **v0, llvm::Value **v1) {
-@@ -2006,13 +1995,13 @@ llvm::Value *FunctionEmitContext::MakeSlicePointer(llvm::Value *ptr, llvm::Value
-     llvm::StructType *st = llvm::StructType::get(*g->ctx, eltTypes);
- 
-     llvm::Value *ret = llvm::UndefValue::get(st);
--    ret = InsertInst(ret, ptr, 0, LLVMGetName(ret, "_slice_ptr"));
--    ret = InsertInst(ret, offset, 1, LLVMGetName(ret, "_slice_offset"));
-+    ret = InsertInst(ret, ptr, 0, llvm::Twine(ret->getName()) + "_slice_ptr");
-+    ret = InsertInst(ret, offset, 1, llvm::Twine(ret->getName()) + "_slice_offset");
-     return ret;
- }
- 
- llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index, const Type *ptrRefType,
--                                                    const char *name) {
-+                                                    const llvm::Twine &name) {
-     if (basePtr == NULL || index == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2065,8 +2054,8 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
-         // uniform, so just emit the regular LLVM GEP instruction
-         llvm::Value *ind[1] = {index};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&ind[0], &ind[1]);
--        llvm::Instruction *inst =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "gep", bblock);
-+        llvm::Instruction *inst = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                                  name.isTriviallyEmpty() ? "gep" : name, bblock);
-         AddDebugPos(inst);
-         return inst;
-     } else
-@@ -2074,7 +2063,7 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
- }
- 
- llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0, llvm::Value *index1,
--                                                    const Type *ptrRefType, const char *name) {
-+                                                    const Type *ptrRefType, const llvm::Twine &name) {
-     if (basePtr == NULL || index0 == NULL || index1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2114,8 +2103,8 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
-         // uniform, so just emit the regular LLVM GEP instruction
-         llvm::Value *indices[2] = {index0, index1};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&indices[0], &indices[2]);
--        llvm::Instruction *inst =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "gep", bblock);
-+        llvm::Instruction *inst = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                                  name.isTriviallyEmpty() ? "gep" : name, bblock);
-         AddDebugPos(inst);
-         return inst;
-     } else {
-@@ -2138,7 +2127,7 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
- }
- 
- llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int elementNum, const Type *ptrRefType,
--                                                   const char *name, const PointerType **resultPtrType) {
-+                                                   const llvm::Twine &name, const PointerType **resultPtrType) {
-     if (resultPtrType != NULL)
-         AssertPos(currentPos, ptrRefType != NULL);
- 
-@@ -2195,8 +2184,8 @@ llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int
-         // If the pointer is uniform, we can use the regular LLVM GEP.
-         llvm::Value *offsets[2] = {LLVMInt32(0), LLVMInt32(elementNum)};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&offsets[0], &offsets[2]);
--        resultPtr =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "struct_offset", bblock);
-+        resultPtr = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                    name.isTriviallyEmpty() ? "struct_offset" : name, bblock);
-     } else {
-         // Otherwise do the math to find the offset and add it to the given
-         // varying pointers
-@@ -2237,7 +2226,7 @@ llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int
-         return resultPtr;
- }
- 
--llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if ((value == NULL) || (toType == NULL)) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2248,20 +2237,18 @@ llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type
-     llvm::Value *newBool = value;
-     if (g->target->getDataLayout()->getTypeSizeInBits(fromType) >
-         g->target->getDataLayout()->getTypeSizeInBits(toType)) {
--        if (name == NULL)
--            name = LLVMGetName(value, "_switchBool");
--        newBool = TruncInst(value, toType, name);
-+        newBool =
-+            TruncInst(value, toType, name.isTriviallyEmpty() ? (llvm::Twine(value->getName()) + "_switchBool") : name);
-     } else if (g->target->getDataLayout()->getTypeSizeInBits(fromType) <
-                g->target->getDataLayout()->getTypeSizeInBits(toType)) {
--        if (name == NULL)
--            name = LLVMGetName(value, "_switchBool");
--        newBool = SExtInst(value, toType, name);
-+        newBool =
-+            SExtInst(value, toType, name.isTriviallyEmpty() ? (llvm::Twine(value->getName()) + "_switchBool") : name);
-     }
- 
-     return newBool;
- }
- 
--llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, const char *name) {
-+llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, const llvm::Twine &name) {
-     if (ptr == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2270,13 +2257,13 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
-     llvm::PointerType *pt = llvm::dyn_cast<llvm::PointerType>(ptr->getType());
-     AssertPos(currentPos, pt != NULL);
- 
--    if (name == NULL)
--        name = LLVMGetName(ptr, "_load");
--
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    llvm::LoadInst *inst = new llvm::LoadInst(pt->getPointerElementType(), ptr, name, bblock);
-+    llvm::LoadInst *inst =
-+        new llvm::LoadInst(pt->getPointerElementType(), ptr,
-+                           name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name, bblock);
- #else
--    llvm::LoadInst *inst = new llvm::LoadInst(ptr, name, bblock);
-+    llvm::LoadInst *inst =
-+        new llvm::LoadInst(ptr, name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name, bblock);
- #endif
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
-@@ -2307,8 +2294,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
- static llvm::Value *lFinalSliceOffset(FunctionEmitContext *ctx, llvm::Value *ptr, const PointerType **ptrType) {
-     Assert(CastType<PointerType>(*ptrType) != NULL);
- 
--    llvm::Value *slicePtr = ctx->ExtractInst(ptr, 0, LLVMGetName(ptr, "_ptr"));
--    llvm::Value *sliceOffset = ctx->ExtractInst(ptr, 1, LLVMGetName(ptr, "_offset"));
-+    llvm::Value *slicePtr = ctx->ExtractInst(ptr, 0, llvm::Twine(ptr->getName()) + "_ptr");
-+    llvm::Value *sliceOffset = ctx->ExtractInst(ptr, 1, llvm::Twine(ptr->getName()) + "_offset");
- 
-     // slicePtr should be a pointer to an soa-width wide array of the
-     // final atomic/enum/pointer type
-@@ -2327,14 +2314,14 @@ static llvm::Value *lFinalSliceOffset(FunctionEmitContext *ctx, llvm::Value *ptr
-         slicePtr = ctx->BitCastInst(slicePtr, (*ptrType)->LLVMType(g->ctx));
- 
-     // And finally index based on the slice offset
--    return ctx->GetElementPtrInst(slicePtr, sliceOffset, *ptrType, LLVMGetName(slicePtr, "_final_gep"));
-+    return ctx->GetElementPtrInst(slicePtr, sliceOffset, *ptrType, llvm::Twine(slicePtr->getName()) + "_final_gep");
- }
- 
- /** Utility routine that loads from a uniform pointer to soa<> data,
-     returning a regular uniform (non-SOA result).
-  */
- llvm::Value *FunctionEmitContext::loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType,
--                                                     const char *name) {
-+                                                     const llvm::Twine &name) {
-     const Type *unifType = ptrType->GetBaseType()->GetAsUniformType();
- 
-     const CollectionType *ct = CastType<CollectionType>(ptrType->GetBaseType());
-@@ -2363,7 +2350,7 @@ llvm::Value *FunctionEmitContext::loadUniformFromSOA(llvm::Value *ptr, llvm::Val
- }
- 
- llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrRefType,
--                                           const char *name, bool one_elem) {
-+                                           const llvm::Twine &name, bool one_elem) {
-     if (ptr == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2371,9 +2358,6 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
- 
-     AssertPos(currentPos, ptrRefType != NULL && mask != NULL);
- 
--    if (name == NULL)
--        name = LLVMGetName(ptr, "_load");
--
-     const PointerType *ptrType;
-     const Type *elType;
-     if (CastType<ReferenceType>(ptrRefType) != NULL) {
-@@ -2393,7 +2377,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
- 
-     if (ptrType->IsUniformType()) {
-         if (ptrType->IsSlice()) {
--            return loadUniformFromSOA(ptr, mask, ptrType, name);
-+            return loadUniformFromSOA(ptr, mask, ptrType,
-+                                      name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name);
-         } else {
-             // FIXME: same issue as above load inst regarding alignment...
-             //
-@@ -2405,11 +2390,15 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-             const AtomicType *atomicType = CastType<AtomicType>(ptrType->GetBaseType());
- 
- #if ISPC_LLVM_VERSION <= ISPC_LLVM_10_0
--            llvm::LoadInst *inst = new llvm::LoadInst(ptr, name, false /* not volatile */, bblock);
-+            llvm::LoadInst *inst =
-+                new llvm::LoadInst(ptr, name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name,
-+                                   false /* not volatile */, bblock);
- #else // LLVM 11.0+
-             llvm::PointerType *ptr_type = llvm::dyn_cast<llvm::PointerType>(ptr->getType());
-             llvm::LoadInst *inst =
--                new llvm::LoadInst(ptr_type->getPointerElementType(), ptr, name, false /* not volatile */, bblock);
-+                new llvm::LoadInst(ptr_type->getPointerElementType(), ptr,
-+                                   name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name,
-+                                   false /* not volatile */, bblock);
- #endif
- 
-             if (atomicType != NULL && atomicType->IsVaryingType()) {
-@@ -2433,7 +2422,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-     } else {
-         // Otherwise we should have a varying ptr and it's time for a
-         // gather.
--        llvm::Value *gather_result = gather(ptr, ptrType, GetFullMask(), name);
-+        llvm::Value *gather_result = gather(ptr, ptrType, GetFullMask(),
-+                                            name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name);
-         if (!one_elem)
-             return gather_result;
- 
-@@ -2453,19 +2443,19 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-         // We can actually call either one, since both are i32s as far as
-         // LLVM's type system is concerned...
-         llvm::Function *fmm = mm[0]->function;
--        llvm::Value *int_mask = CallInst(fmm, NULL, mask, LLVMGetName(mask, "_movmsk"));
-+        llvm::Value *int_mask = CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_movmsk");
-         std::vector<Symbol *> lz;
-         m->symbolTable->LookupFunction("__count_trailing_zeros_i64", &lz);
-         llvm::Function *flz = lz[0]->function;
--        llvm::Value *elem_idx = CallInst(flz, NULL, int_mask, LLVMGetName(mask, "_clz"));
--        llvm::Value *elem = llvm::ExtractElementInst::Create(gather_result, elem_idx,
--                                                             LLVMGetName(gather_result, "_umasked_elem"), bblock);
-+        llvm::Value *elem_idx = CallInst(flz, NULL, int_mask, llvm::Twine(mask->getName()) + "_clz");
-+        llvm::Value *elem = llvm::ExtractElementInst::Create(
-+            gather_result, elem_idx, llvm::Twine(gather_result->getName()) + "_umasked_elem", bblock);
-         return elem;
-     }
- }
- 
- llvm::Value *FunctionEmitContext::gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask,
--                                         const char *name) {
-+                                         const llvm::Twine &name) {
-     // We should have a varying pointer if we get here...
-     AssertPos(currentPos, ptrType->IsVaryingType());
- 
-@@ -2602,7 +2592,8 @@ void FunctionEmitContext::addGSMetadata(llvm::Value *v, SourcePos pos) {
-     inst->setMetadata("last_column", md);
- }
- 
--llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *name, int align, bool atEntryBlock) {
-+llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const llvm::Twine &name, int align,
-+                                             bool atEntryBlock) {
-     if (llvmType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2615,12 +2606,12 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-         llvm::Instruction *retInst = allocaBlock->getTerminator();
-         AssertPos(currentPos, retInst);
-         unsigned AS = llvmFunction->getParent()->getDataLayout().getAllocaAddrSpace();
--        inst = new llvm::AllocaInst(llvmType, AS, name ? name : "", retInst);
-+        inst = new llvm::AllocaInst(llvmType, AS, name, retInst);
-     } else {
-         // Unless the caller overrode the default and wants it in the
-         // current basic block
-         unsigned AS = llvmFunction->getParent()->getDataLayout().getAllocaAddrSpace();
--        inst = new llvm::AllocaInst(llvmType, AS, name ? name : "", bblock);
-+        inst = new llvm::AllocaInst(llvmType, AS, name, bblock);
-     }
- 
-     // If no alignment was specified but we have an array of a uniform
-@@ -2639,7 +2630,8 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::AllocaInst(const Type *ptrType, const char *name, int align, bool atEntryBlock) {
-+llvm::Value *FunctionEmitContext::AllocaInst(const Type *ptrType, const llvm::Twine &name, int align,
-+                                             bool atEntryBlock) {
-     if (ptrType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3075,66 +3067,59 @@ llvm::Instruction *FunctionEmitContext::BranchInst(llvm::BasicBlock *trueBlock,
-     return b;
- }
- 
--llvm::Value *FunctionEmitContext::ExtractInst(llvm::Value *v, int elt, const char *name) {
-+llvm::Value *FunctionEmitContext::ExtractInst(llvm::Value *v, int elt, const llvm::Twine &name) {
-     if (v == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_extract_%d", elt);
--        name = LLVMGetName(v, buf);
--    }
-     llvm::Instruction *ei = NULL;
-     if (llvm::isa<llvm::VectorType>(v->getType()))
--        ei = llvm::ExtractElementInst::Create(v, LLVMInt32(elt), name, bblock);
-+        ei = llvm::ExtractElementInst::Create(
-+            v, LLVMInt32(elt),
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_extract_") + llvm::Twine(elt)) : name, bblock);
-     else
--        ei = llvm::ExtractValueInst::Create(v, elt, name, bblock);
-+        ei = llvm::ExtractValueInst::Create(
-+            v, elt, name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_extract_") + llvm::Twine(elt)) : name,
-+            bblock);
-     AddDebugPos(ei);
-     return ei;
- }
- 
--llvm::Value *FunctionEmitContext::InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const char *name) {
-+llvm::Value *FunctionEmitContext::InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const llvm::Twine &name) {
-     if (v == NULL || eltVal == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_insert_%d", elt);
--        name = LLVMGetName(v, buf);
--    }
--
-     llvm::Instruction *ii = NULL;
-     if (llvm::isa<llvm::VectorType>(v->getType()))
--        ii = llvm::InsertElementInst::Create(v, eltVal, LLVMInt32(elt), name, bblock);
-+        ii = llvm::InsertElementInst::Create(
-+            v, eltVal, LLVMInt32(elt),
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_insert_") + llvm::Twine(elt)) : name, bblock);
-     else
--        ii = llvm::InsertValueInst::Create(v, eltVal, elt, name, bblock);
-+        ii = llvm::InsertValueInst::Create(
-+            v, eltVal, elt,
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_insert_") + llvm::Twine(elt)) : name, bblock);
-     AddDebugPos(ii);
-     return ii;
- }
- 
--llvm::Value *FunctionEmitContext::ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const char *name) {
-+llvm::Value *FunctionEmitContext::ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask,
-+                                              const llvm::Twine &name) {
-     if (v1 == NULL || v2 == NULL || mask == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_shuffle");
--        name = LLVMGetName(v1, buf);
--    }
--
--    llvm::Instruction *ii = new llvm::ShuffleVectorInst(v1, v2, mask, name, bblock);
-+    llvm::Instruction *ii = new llvm::ShuffleVectorInst(
-+        v1, v2, mask, name.isTriviallyEmpty() ? (llvm::Twine(v1->getName()) + "_shuffle") : name, bblock);
- 
-     AddDebugPos(ii);
-     return ii;
- }
- 
--llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vecType, const char *name) {
-+llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vecType, const llvm::Twine &name) {
-     if (v == NULL || vecType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3148,12 +3133,6 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     Assert(ty && ty->getVectorElementType() == v->getType());
- #endif
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_broadcast");
--        name = LLVMGetName(v, buf);
--    }
--
-     // Generate the following sequence:
-     //   %name_init.i = insertelement <4 x i32> undef, i32 %val, i32 0
-     //   %name.i = shufflevector <4 x i32> %name_init.i, <4 x i32> undef,
-@@ -3163,7 +3142,7 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     llvm::Value *undef2 = llvm::UndefValue::get(vecType);
- 
-     // InsertElement
--    llvm::Twine tw = llvm::Twine(name) + llvm::Twine("_init");
-+    llvm::Twine tw = name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + llvm::Twine("_init");
-     llvm::Value *insert = InsertInst(undef1, v, 0, tw.str().c_str());
- 
-     // ShuffleVector
-@@ -3179,28 +3158,27 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-         llvm::ConstantVector::getSplat(llvm::ElementCount::get(static_cast<unsigned int>(ty->getNumElements()), false),
-                                        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
- #endif
--    llvm::Value *ret = ShuffleInst(insert, undef2, zeroVec, name);
-+    llvm::Value *ret = ShuffleInst(insert, undef2, zeroVec,
-+                                   name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name);
- 
-     return ret;
- }
- 
--llvm::PHINode *FunctionEmitContext::PhiNode(llvm::Type *type, int count, const char *name) {
--    llvm::PHINode *pn = llvm::PHINode::Create(type, count, name ? name : "phi", bblock);
-+llvm::PHINode *FunctionEmitContext::PhiNode(llvm::Type *type, int count, const llvm::Twine &name) {
-+    llvm::PHINode *pn = llvm::PHINode::Create(type, count, name.isTriviallyEmpty() ? "phi" : name, bblock);
-     AddDebugPos(pn);
-     return pn;
- }
- 
- llvm::Instruction *FunctionEmitContext::SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1,
--                                                   const char *name) {
-+                                                   const llvm::Twine &name) {
-     if (test == NULL || val0 == NULL || val1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(test, "_select");
--
--    llvm::Instruction *inst = llvm::SelectInst::Create(test, val0, val1, name, bblock);
-+    llvm::Instruction *inst = llvm::SelectInst::Create(
-+        test, val0, val1, name.isTriviallyEmpty() ? (llvm::Twine(test->getName()) + "_select") : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
-@@ -3226,7 +3204,7 @@ static unsigned int lCalleeArgCount(llvm::Value *callee, const FunctionType *fun
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType,
--                                           const std::vector<llvm::Value *> &args, const char *name) {
-+                                           const std::vector<llvm::Value *> &args, const llvm::Twine &name) {
-     if (func == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3258,9 +3236,9 @@ llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-         llvm::PointerType *func_ptr_type = llvm::dyn_cast<llvm::PointerType>(func->getType());
-         llvm::FunctionType *func_type = llvm::dyn_cast<llvm::FunctionType>(func_ptr_type->getPointerElementType());
--        llvm::CallInst *callinst = llvm::CallInst::Create(func_type, func, argVals, name ? name : "", bblock);
-+        llvm::CallInst *callinst = llvm::CallInst::Create(func_type, func, argVals, name, bblock);
- #else
--        llvm::CallInst *callinst = llvm::CallInst::Create(func, argVals, name ? name : "", bblock);
-+        llvm::CallInst *callinst = llvm::CallInst::Create(func, argVals, name, bblock);
- #endif
- 
-         // We could be dealing with a function pointer in which case this will not be a 'llvm::Function'.
-@@ -3464,14 +3442,14 @@ llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg,
--                                           const char *name) {
-+                                           const llvm::Twine &name) {
-     std::vector<llvm::Value *> args;
-     args.push_back(arg);
-     return CallInst(func, funcType, args, name);
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg0,
--                                           llvm::Value *arg1, const char *name) {
-+                                           llvm::Value *arg1, const llvm::Twine &name) {
-     std::vector<llvm::Value *> args;
-     args.push_back(arg0);
-     args.push_back(arg1);
-diff --git a/src/ctx.h b/src/ctx.h
-index 6e5ad74ba..48b3bb826 100644
---- a/src/ctx.h
-+++ b/src/ctx.h
-@@ -302,7 +302,7 @@ class FunctionEmitContext {
-     llvm::Value *GetStringPtr(const std::string &str);
- 
-     /** Create a new basic block with given name */
--    llvm::BasicBlock *CreateBasicBlock(const char *name, llvm::BasicBlock *insertAfter = NULL);
-+    llvm::BasicBlock *CreateBasicBlock(const llvm::Twine &name, llvm::BasicBlock *insertAfter = NULL);
- 
-     /** Given a vector with element type i1, return a vector of type
-         LLVMTypes::BoolVectorType.  This method handles the conversion for
-@@ -380,33 +380,33 @@ class FunctionEmitContext {
-         this also handles applying the given operation to the vector
-         elements. */
-     llvm::Value *BinaryOperator(llvm::Instruction::BinaryOps inst, llvm::Value *v0, llvm::Value *v1,
--                                const char *name = NULL);
-+                                const llvm::Twine &name = "");
- 
-     /** Emit the "not" operator.  Like BinaryOperator(), this also handles
-         a VectorType-based operand. */
--    llvm::Value *NotOperator(llvm::Value *v, const char *name = NULL);
-+    llvm::Value *NotOperator(llvm::Value *v, const llvm::Twine &name = "");
- 
-     /** Emit a comparison instruction.  If the operands are VectorTypes,
-         then a value for the corresponding boolean VectorType is
-         returned. */
-     llvm::Value *CmpInst(llvm::Instruction::OtherOps inst, llvm::CmpInst::Predicate pred, llvm::Value *v0,
--                         llvm::Value *v1, const char *name = NULL);
-+                         llvm::Value *v1, const llvm::Twine &name = "");
- 
-     /** Given a scalar value, return a vector of the same type (or an
-         array, for pointer types). */
--    llvm::Value *SmearUniform(llvm::Value *value, const char *name = NULL);
-+    llvm::Value *SmearUniform(llvm::Value *value, const llvm::Twine &name = "");
- 
--    llvm::Value *BitCastInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Value *PtrToIntInst(llvm::Value *value, const char *name = NULL);
--    llvm::Value *PtrToIntInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Value *IntToPtrInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+    llvm::Value *BitCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Value *PtrToIntInst(llvm::Value *value, const llvm::Twine &name = "");
-+    llvm::Value *PtrToIntInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Value *IntToPtrInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
- 
--    llvm::Instruction *TruncInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+    llvm::Instruction *TruncInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-     llvm::Instruction *CastInst(llvm::Instruction::CastOps op, llvm::Value *value, llvm::Type *type,
--                                const char *name = NULL);
--    llvm::Instruction *FPCastInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Instruction *SExtInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Instruction *ZExtInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+                                const llvm::Twine &name = "");
-+    llvm::Instruction *FPCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Instruction *SExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Instruction *ZExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
- 
-     /** Given two integer-typed values (but possibly one vector and the
-         other not, and or of possibly-different bit-widths), update their
-@@ -426,9 +426,9 @@ class FunctionEmitContext {
-         pointers.  The underlying type of the base pointer must be provided
-         via the ptrType parameter */
-     llvm::Value *GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index, const Type *ptrType,
--                                   const char *name = NULL);
-+                                   const llvm::Twine &name = "");
-     llvm::Value *GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0, llvm::Value *index1, const Type *ptrType,
--                                   const char *name = NULL);
-+                                   const llvm::Twine &name = "");
- 
-     /** This method returns a new pointer that represents offsetting the
-         given base pointer to point at the given element number of the
-@@ -436,26 +436,26 @@ class FunctionEmitContext {
-         pointer must be a pointer to a structure type.  The ptrType gives
-         the type of the pointer, though it may be NULL if the base pointer
-         is uniform. */
--    llvm::Value *AddElementOffset(llvm::Value *basePtr, int elementNum, const Type *ptrType, const char *name = NULL,
--                                  const PointerType **resultPtrType = NULL);
-+    llvm::Value *AddElementOffset(llvm::Value *basePtr, int elementNum, const Type *ptrType,
-+                                  const llvm::Twine &name = "", const PointerType **resultPtrType = NULL);
- 
-     /** Bool is stored as i8 and <WIDTH x i8> but represented in IR as i1 and
-      * <WIDTH x MASK>. This is a helper function to match bool size at storage
-      * interface. */
--    llvm::Value *SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const char *name = NULL);
-+    llvm::Value *SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name = "");
-     /** Load from the memory location(s) given by lvalue, using the given
-         mask.  The lvalue may be varying, in which case this corresponds to
-         a gather from the multiple memory locations given by the array of
-         pointer values given by the lvalue.  If the lvalue is not varying,
-         then both the mask pointer and the type pointer may be NULL. */
--    llvm::Value *LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrType, const char *name = NULL,
-+    llvm::Value *LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrType, const llvm::Twine &name = "",
-                           bool one_elem = false);
- 
-     /* Load from memory location(s) given.
-      * 'type' needs to be provided when storage type is different from IR type. For example,
-      * 'unform bool' is 'i1' in IR but stored as 'i8'.
-      * Otherwise leave this as NULL. */
--    llvm::Value *LoadInst(llvm::Value *ptr, const Type *type = NULL, const char *name = NULL);
-+    llvm::Value *LoadInst(llvm::Value *ptr, const Type *type = NULL, const llvm::Twine &name = "");
- 
-     /** Emits an alloca instruction to allocate stack storage for the given
-         type.  If a non-zero alignment is specified, the object is also
-@@ -463,7 +463,8 @@ class FunctionEmitContext {
-         instruction is added at the start of the function in the entry
-         basic block; if it should be added to the current basic block, then
-         the atEntryBlock parameter should be false. */
--    llvm::Value *AllocaInst(llvm::Type *llvmType, const char *name = NULL, int align = 0, bool atEntryBlock = true);
-+    llvm::Value *AllocaInst(llvm::Type *llvmType, const llvm::Twine &name = "", int align = 0,
-+                            bool atEntryBlock = true);
- 
-     /** Emits an alloca instruction to allocate stack storage for the given
-         type.  If a non-zero alignment is specified, the object is also
-@@ -474,7 +475,7 @@ class FunctionEmitContext {
-         This implementation is preferred when possible. It is needed when
-         storage type is different from IR type. For example,
-         'unform bool' is 'i1' in IR but stored as 'i8'. */
--    llvm::Value *AllocaInst(const Type *ptrType, const char *name = NULL, int align = 0, bool atEntryBlock = true);
-+    llvm::Value *AllocaInst(const Type *ptrType, const llvm::Twine &name = "", int align = 0, bool atEntryBlock = true);
- 
-     /** Standard store instruction; for this variant, the lvalue must be a
-         single pointer, not a varying lvalue.
-@@ -502,39 +503,41 @@ class FunctionEmitContext {
-     /** This convenience method maps to an llvm::ExtractElementInst if the
-         given value is a llvm::VectorType, and to an llvm::ExtractValueInst
-         otherwise. */
--    llvm::Value *ExtractInst(llvm::Value *v, int elt, const char *name = NULL);
-+    llvm::Value *ExtractInst(llvm::Value *v, int elt, const llvm::Twine &name = "");
- 
-     /** This convenience method maps to an llvm::InsertElementInst if the
-         given value is a llvm::VectorType, and to an llvm::InsertValueInst
-         otherwise. */
--    llvm::Value *InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const char *name = NULL);
-+    llvm::Value *InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const llvm::Twine &name = "");
- 
-     /** This convenience method maps to an llvm::ShuffleVectorInst. */
--    llvm::Value *ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const char *name = NULL);
-+    llvm::Value *ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const llvm::Twine &name = "");
- 
-     /** This convenience method to generate broadcast pattern. It takes a value
-         and a vector type. Type of the value must match element type of the
-         vector. */
--    llvm::Value *BroadcastValue(llvm::Value *v, llvm::Type *vecType, const char *name = NULL);
-+    llvm::Value *BroadcastValue(llvm::Value *v, llvm::Type *vecType, const llvm::Twine &name = "");
- 
--    llvm::PHINode *PhiNode(llvm::Type *type, int count, const char *name = NULL);
--    llvm::Instruction *SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1, const char *name = NULL);
-+    llvm::PHINode *PhiNode(llvm::Type *type, int count, const llvm::Twine &name = "");
-+    llvm::Instruction *SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1,
-+                                  const llvm::Twine &name = "");
- 
-     /** Emits IR to do a function call with the given arguments.  If the
-         function type is a varying function pointer type, its full type
-         must be provided in funcType.  funcType can be NULL if func is a
-         uniform function pointer. */
-     llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, const std::vector<llvm::Value *> &args,
--                          const char *name = NULL);
-+                          const llvm::Twine &name = "");
- 
-     /** This is a convenience method that issues a call instruction to a
-         function that takes just a single argument. */
--    llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg, const char *name = NULL);
-+    llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg,
-+                          const llvm::Twine &name = "");
- 
-     /** This is a convenience method that issues a call instruction to a
-         function that takes two arguments. */
-     llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg0, llvm::Value *arg1,
--                          const char *name = NULL);
-+                          const llvm::Twine &name = "");
- 
-     /** Launch an asynchronous task to run the given function, passing it
-         he given argument values. */
-@@ -756,9 +759,10 @@ class FunctionEmitContext {
-     void maskedStore(llvm::Value *value, llvm::Value *ptr, const Type *ptrType, llvm::Value *mask);
-     void storeUniformToSOA(llvm::Value *value, llvm::Value *ptr, llvm::Value *mask, const Type *valueType,
-                            const PointerType *ptrType);
--    llvm::Value *loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType, const char *name);
-+    llvm::Value *loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType,
-+                                    const llvm::Twine &name = "");
- 
--    llvm::Value *gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask, const char *name);
-+    llvm::Value *gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask, const llvm::Twine &name = "");
- 
-     llvm::Value *addVaryingOffsetsIfNeeded(llvm::Value *ptr, const Type *ptrType);
- };
-diff --git a/src/expr.cpp b/src/expr.cpp
-index 80cc3020a..6d38d1889 100644
---- a/src/expr.cpp
-+++ b/src/expr.cpp
-@@ -1021,11 +1021,11 @@ static llvm::Value *lEmitNegate(Expr *arg, SourcePos pos, FunctionEmitContext *c
-     ctx->SetDebugPos(pos);
-     if (type->IsFloatType()) {
-         llvm::Value *zero = llvm::ConstantFP::getZeroValueForNegation(type->LLVMType(g->ctx));
--        return ctx->BinaryOperator(llvm::Instruction::FSub, zero, argVal, LLVMGetName(argVal, "_negate"));
-+        return ctx->BinaryOperator(llvm::Instruction::FSub, zero, argVal, llvm::Twine(argVal->getName()) + "_negate");
-     } else {
-         llvm::Value *zero = lLLVMConstantValue(type, g->ctx, 0.);
-         AssertPos(pos, type->IsIntType());
--        return ctx->BinaryOperator(llvm::Instruction::Sub, zero, argVal, LLVMGetName(argVal, "_negate"));
-+        return ctx->BinaryOperator(llvm::Instruction::Sub, zero, argVal, llvm::Twine(argVal->getName()) + "_negate");
-     }
- }
- 
-@@ -1047,11 +1047,11 @@ llvm::Value *UnaryExpr::GetValue(FunctionEmitContext *ctx) const {
-         return lEmitNegate(expr, pos, ctx);
-     case LogicalNot: {
-         llvm::Value *argVal = expr->GetValue(ctx);
--        return ctx->NotOperator(argVal, LLVMGetName(argVal, "_logicalnot"));
-+        return ctx->NotOperator(argVal, llvm::Twine(argVal->getName()) + "_logicalnot");
-     }
-     case BitNot: {
-         llvm::Value *argVal = expr->GetValue(ctx);
--        return ctx->NotOperator(argVal, LLVMGetName(argVal, "_bitnot"));
-+        return ctx->NotOperator(argVal, llvm::Twine(argVal->getName()) + "_bitnot");
-     }
-     default:
-         FATAL("logic error");
-@@ -1518,7 +1518,8 @@ static llvm::Value *lEmitBinaryArith(BinaryExpr::Op op, llvm::Value *value0, llv
-             return NULL;
-         }
- 
--        return ctx->BinaryOperator(inst, value0, value1, LLVMGetName(opName, value0, value1));
-+        return ctx->BinaryOperator(inst, value0, value1,
-+                                   (((llvm::Twine(opName) + "_") + value0->getName()) + "_") + value1->getName());
-     }
- }
- 
-@@ -1563,7 +1564,7 @@ static llvm::Value *lEmitBinaryCmp(BinaryExpr::Op op, llvm::Value *e0Val, llvm::
-     }
- 
-     llvm::Value *cmp = ctx->CmpInst(isFloatOp ? llvm::Instruction::FCmp : llvm::Instruction::ICmp, pred, e0Val, e1Val,
--                                    LLVMGetName(opName, e0Val, e1Val));
-+                                    (((llvm::Twine(opName) + "_") + e0Val->getName()) + "_") + e1Val->getName());
-     // This is a little ugly: CmpInst returns i1 values, but we use vectors
-     // of i32s for varying bool values; type convert the result here if
-     // needed.
-@@ -4177,7 +4178,7 @@ static llvm::Value *lConvertToSlicePointer(FunctionEmitContext *ctx, llvm::Value
-     // offsets
-     llvm::Value *result = llvm::Constant::getNullValue(sliceStructType);
-     // And replace the pointer in the struct with the given pointer
--    return ctx->InsertInst(result, ptr, 0, LLVMGetName(ptr, "_slice"));
-+    return ctx->InsertInst(result, ptr, 0, llvm::Twine(ptr->getName()) + "_slice");
- }
- 
- /** If the given array index is a compile time constant, check to see if it
-@@ -4258,8 +4259,8 @@ llvm::Value *IndexExpr::GetLValue(FunctionEmitContext *ctx) const {
-         // Convert to a slice pointer if we're indexing into SOA data
-         basePtrValue = lConvertPtrToSliceIfNeeded(ctx, basePtrValue, &baseExprType);
- 
--        llvm::Value *ptr =
--            ctx->GetElementPtrInst(basePtrValue, indexValue, baseExprType, LLVMGetName(basePtrValue, "_offset"));
-+        llvm::Value *ptr = ctx->GetElementPtrInst(basePtrValue, indexValue, baseExprType,
-+                                                  llvm::Twine(basePtrValue->getName()) + "_offset");
-         return lAddVaryingOffsetsIfNeeded(ctx, ptr, GetLValueType());
-     }
- 
-@@ -4290,8 +4291,8 @@ llvm::Value *IndexExpr::GetLValue(FunctionEmitContext *ctx) const {
-     ctx->SetDebugPos(pos);
- 
-     // And do the actual indexing calculation..
--    llvm::Value *ptr =
--        ctx->GetElementPtrInst(basePtr, LLVMInt32(0), indexValue, basePtrType, LLVMGetName(basePtr, "_offset"));
-+    llvm::Value *ptr = ctx->GetElementPtrInst(basePtr, LLVMInt32(0), indexValue, basePtrType,
-+                                              llvm::Twine(basePtr->getName()) + "_offset");
-     return lAddVaryingOffsetsIfNeeded(ctx, ptr, GetLValueType());
- }
- 
-@@ -4788,15 +4789,14 @@ llvm::Value *VectorMemberExpr::GetValue(FunctionEmitContext *ctx) const {
-         for (size_t i = 0; i < identifier.size(); ++i) {
-             char idStr[2] = {identifier[i], '\0'};
-             llvm::Value *elementPtr =
--                ctx->AddElementOffset(basePtr, indices[i], basePtrType, LLVMGetName(basePtr, idStr));
-+                ctx->AddElementOffset(basePtr, indices[i], basePtrType, llvm::Twine(basePtr->getName()) + idStr);
-             llvm::Value *elementValue = ctx->LoadInst(elementPtr, elementMask, elementPtrType);
- 
--            const char *resultName = LLVMGetName(resultPtr, idStr);
--            llvm::Value *ptmp = ctx->AddElementOffset(resultPtr, i, NULL, resultName);
-+            llvm::Value *ptmp = ctx->AddElementOffset(resultPtr, i, NULL, llvm::Twine(resultPtr->getName()) + idStr);
-             ctx->StoreInst(elementValue, ptmp, elementPtrType, expr->GetType()->IsUniformType());
-         }
- 
--        return ctx->LoadInst(resultPtr, memberType, LLVMGetName(basePtr, "_swizzle"));
-+        return ctx->LoadInst(resultPtr, memberType, llvm::Twine(basePtr->getName()) + "_swizzle");
-     }
- }
- 
-@@ -4932,7 +4932,7 @@ llvm::Value *MemberExpr::GetValue(FunctionEmitContext *ctx) const {
- 
-     ctx->SetDebugPos(pos);
-     std::string suffix = std::string("_") + identifier;
--    return ctx->LoadInst(lvalue, mask, lvalueType, LLVMGetName(lvalue, suffix.c_str()));
-+    return ctx->LoadInst(lvalue, mask, lvalueType, llvm::Twine(lvalue->getName()) + suffix);
- }
- 
- const Type *MemberExpr::GetType() const { return NULL; }
-@@ -6502,7 +6502,7 @@ static llvm::Value *lTypeConvAtomic(FunctionEmitContext *ctx, llvm::Value *exprV
-                 // does for everyone else...
-                 Assert(cast);
-                 cast = ctx->SwitchBoolSize(cast, LLVMTypes::BoolVectorType->getElementType(),
--                                           LLVMGetName(cast, "to_i_bool"));
-+                                           llvm::Twine(cast->getName()) + "to_i_bool");
-             }
-         } else {
-             // fromType->IsVaryingType())
-@@ -8246,7 +8246,7 @@ llvm::Value *NewExpr::GetValue(FunctionEmitContext *ctx) const {
-         // pointer of the return type and to run the code for initializers,
-         // if present.
-         llvm::Type *ptrType = retType->LLVMType(g->ctx);
--        ptrValue = ctx->BitCastInst(ptrValue, ptrType, LLVMGetName(ptrValue, "_cast_ptr"));
-+        ptrValue = ctx->BitCastInst(ptrValue, ptrType, llvm::Twine(ptrValue->getName()) + "_cast_ptr");
- 
-         if (initExpr != NULL)
-             InitSymbol(ptrValue, allocType, initExpr, ctx, pos);
-diff --git a/src/llvmutil.cpp b/src/llvmutil.cpp
-index 970175dbf..d0becb9f5 100644
---- a/src/llvmutil.cpp
-+++ b/src/llvmutil.cpp
-@@ -1605,23 +1605,6 @@ llvm::Value *LLVMShuffleVectors(llvm::Value *v1, llvm::Value *v2, int32_t shuf[]
-     return new llvm::ShuffleVectorInst(v1, v2, vec, "shuffle", insertBefore);
- }
- 
--const char *LLVMGetName(llvm::Value *v, const char *s) {
--    if (v == NULL)
--        return s;
--    std::string ret = std::string(v->getName());
--    ret += s;
--    return strdup(ret.c_str());
--}
--
--const char *LLVMGetName(const char *op, llvm::Value *v1, llvm::Value *v2) {
--    std::string r = op;
--    r += "_";
--    r += v1->getName().str();
--    r += "_";
--    r += v2->getName().str();
--    return strdup(r.c_str());
--}
--
- #ifdef ISPC_GENX_ENABLED
- bool lIsSVMLoad(llvm::Instruction *inst) {
-     Assert(inst);
-diff --git a/src/llvmutil.h b/src/llvmutil.h
-index 42cce4d83..07d089bb4 100644
---- a/src/llvmutil.h
-+++ b/src/llvmutil.h
-@@ -328,11 +328,6 @@ extern llvm::Value *LLVMConcatVectors(llvm::Value *v1, llvm::Value *v2, llvm::In
- extern llvm::Value *LLVMShuffleVectors(llvm::Value *v1, llvm::Value *v2, int32_t shuf[], int shufSize,
-                                        llvm::Instruction *insertBefore);
- 
--/** Utility routines to concat strings with the names of existing values to
--    create meaningful new names for instruction values.
--*/
--extern const char *LLVMGetName(llvm::Value *v, const char *);
--extern const char *LLVMGetName(const char *op, llvm::Value *v1, llvm::Value *v2);
- #ifdef ISPC_GENX_ENABLED
- enum AddressSpace { Local, Global, External };
- 
-diff --git a/src/opt.cpp b/src/opt.cpp
-index 5b1ac7b63..9d6cae058 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -257,7 +257,7 @@ static bool lGetSourcePosFromMetadata(const llvm::Instruction *inst, SourcePos *
-     return true;
- }
- 
--static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, const char *name,
-+static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[2] = {arg0, arg1};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[2]);
-@@ -265,21 +265,22 @@ static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llv
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    const char *name, llvm::Instruction *insertBefore = NULL) {
-+                                    const llvm::Twine &name, llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[3] = {arg0, arg1, arg2};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[3]);
-     return llvm::CallInst::Create(func, newArgArray, name, insertBefore);
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, const char *name, llvm::Instruction *insertBefore = NULL) {
-+                                    llvm::Value *arg3, const llvm::Twine &name,
-+                                    llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[4] = {arg0, arg1, arg2, arg3};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[4]);
-     return llvm::CallInst::Create(func, newArgArray, name, insertBefore);
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, llvm::Value *arg4, const char *name,
-+                                    llvm::Value *arg3, llvm::Value *arg4, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[5] = {arg0, arg1, arg2, arg3, arg4};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[5]);
-@@ -287,7 +288,7 @@ static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llv
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, llvm::Value *arg4, llvm::Value *arg5, const char *name,
-+                                    llvm::Value *arg3, llvm::Value *arg4, llvm::Value *arg5, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[6] = {arg0, arg1, arg2, arg3, arg4, arg5};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[6]);
-@@ -991,23 +992,24 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 llvm::Type *returnType = callInst->getType();
-                 Assert(llvm::isa<llvm::VectorType>(returnType));
-                 // cast the i8 * to the appropriate type
--                const char *name = LLVMGetName(callInst->getArgOperand(0), "_cast");
--                llvm::Value *castPtr = new llvm::BitCastInst(callInst->getArgOperand(0),
--                                                             llvm::PointerType::get(returnType, 0), name, callInst);
-+                llvm::Value *castPtr =
-+                    new llvm::BitCastInst(callInst->getArgOperand(0), llvm::PointerType::get(returnType, 0),
-+                                          llvm::Twine(callInst->getArgOperand(0)->getName()) + "_cast", callInst);
-                 lCopyMetadata(castPtr, callInst);
-                 int align;
-                 if (g->opt.forceAlignedMemory)
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
--                name = LLVMGetName(callInst->getArgOperand(0), "_load");
- #if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
--                llvm::Instruction *loadInst = new llvm::LoadInst(castPtr, name, false /* not volatile */,
--                                                                 llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
-+                llvm::Instruction *loadInst =
-+                    new llvm::LoadInst(castPtr, llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load",
-+                                       false /* not volatile */, llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
- #else
-                 llvm::Instruction *loadInst = new llvm::LoadInst(
--                    llvm::dyn_cast<llvm::PointerType>(castPtr->getType())->getPointerElementType(), castPtr, name,
--                    false /* not volatile */, llvm::MaybeAlign(align).valueOrOne(), (llvm::Instruction *)NULL);
-+                    llvm::dyn_cast<llvm::PointerType>(castPtr->getType())->getPointerElementType(), castPtr,
-+                    llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load", false /* not volatile */,
-+                    llvm::MaybeAlign(align).valueOrOne(), (llvm::Instruction *)NULL);
- #endif
-                 lCopyMetadata(loadInst, callInst);
-                 llvm::ReplaceInstWithInst(callInst, loadInst);
-@@ -1028,9 +1030,9 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 // all lanes storing, so replace with a regular store
-                 llvm::Value *rvalue = callInst->getArgOperand(2);
-                 llvm::Type *storeType = rvalue->getType();
--                const char *name = LLVMGetName(callInst->getArgOperand(0), "_ptrcast");
--                llvm::Value *castPtr = new llvm::BitCastInst(callInst->getArgOperand(0),
--                                                             llvm::PointerType::get(storeType, 0), name, callInst);
-+                llvm::Value *castPtr =
-+                    new llvm::BitCastInst(callInst->getArgOperand(0), llvm::PointerType::get(storeType, 0),
-+                                          llvm::Twine(callInst->getArgOperand(0)->getName()) + "_ptrcast", callInst);
-                 lCopyMetadata(castPtr, callInst);
- 
-                 int align;
-@@ -1339,8 +1341,8 @@ static llvm::Value *lGetBasePointer(llvm::Value *v, llvm::Instruction *insertBef
-         if (t == NULL) {
-             return NULL;
-         } else {
--            return llvm::CastInst::Create(ci->getOpcode(), t, ci->getType()->getScalarType(), LLVMGetName(t, "_cast"),
--                                          insertBefore);
-+            return llvm::CastInst::Create(ci->getOpcode(), t, ci->getType()->getScalarType(),
-+                                          llvm::Twine(t->getName()) + "_cast", insertBefore);
-         }
-     }
- 
-@@ -1583,13 +1585,13 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-         if (co == NULL)
-             *constOffset = NULL;
-         else
--            *constOffset =
--                llvm::CastInst::Create(cast->getOpcode(), co, cast->getType(), LLVMGetName(co, "_cast"), insertBefore);
-+            *constOffset = llvm::CastInst::Create(cast->getOpcode(), co, cast->getType(),
-+                                                  llvm::Twine(co->getName()) + "_cast", insertBefore);
-         if (vo == NULL)
-             *variableOffset = NULL;
-         else
--            *variableOffset =
--                llvm::CastInst::Create(cast->getOpcode(), vo, cast->getType(), LLVMGetName(vo, "_cast"), insertBefore);
-+            *variableOffset = llvm::CastInst::Create(cast->getOpcode(), vo, cast->getType(),
-+                                                     llvm::Twine(vo->getName()) + "_cast", insertBefore);
-         return;
-     }
- 
-@@ -1608,16 +1610,18 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-             else if (c1 == NULL || llvm::isa<llvm::ConstantAggregateZero>(c1))
-                 *constOffset = c0;
-             else
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, c0, c1, LLVMGetName("add", c0, c1),
--                                                            insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, c0, c1, ((llvm::Twine("add_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
- 
-             if (v0 == NULL || llvm::isa<llvm::ConstantAggregateZero>(v0))
-                 *variableOffset = v1;
-             else if (v1 == NULL || llvm::isa<llvm::ConstantAggregateZero>(v1))
-                 *variableOffset = v0;
-             else
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, v0, v1,
--                                                               LLVMGetName("add", v0, v1), insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, v0, v1, ((llvm::Twine("add_") + v0->getName()) + "_") + v1->getName(),
-+                    insertBefore);
-             return;
-         } else if (bop->getOpcode() == llvm::Instruction::Shl) {
-             lExtractConstantOffset(op0, &c0, &v0, insertBefore);
-@@ -1633,10 +1637,12 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-                 *constOffset = vec;
-                 *variableOffset = NULL;
-             } else {
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Shl, c0, c1, LLVMGetName("shl", c0, c1),
--                                                            insertBefore);
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Shl, v0, c1,
--                                                               LLVMGetName("shl", v0, c1), insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Shl, c0, c1, ((llvm::Twine("shl_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Shl, v0, c1, ((llvm::Twine("shl_") + v0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-             }
-             return;
-         } else if (bop->getOpcode() == llvm::Instruction::Mul) {
-@@ -1648,25 +1654,30 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-             // Note that the first term is a constant and the last three are
-             // variable.
-             if (c0 != NULL && c1 != NULL)
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, c1, LLVMGetName("mul", c0, c1),
--                                                            insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Mul, c0, c1, ((llvm::Twine("mul_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-             else
-                 *constOffset = NULL;
- 
-             llvm::Value *va = NULL, *vb = NULL, *vc = NULL;
-             if (v0 != NULL && c1 != NULL)
--                va = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, c1, LLVMGetName("mul", v0, c1),
-+                va = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, c1,
-+                                                  ((llvm::Twine("mul_") + v0->getName()) + "_") + c1->getName(),
-                                                   insertBefore);
-             if (c0 != NULL && v1 != NULL)
--                vb = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, v1, LLVMGetName("mul", c0, v1),
-+                vb = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, v1,
-+                                                  ((llvm::Twine("mul_") + c0->getName()) + "_") + v1->getName(),
-                                                   insertBefore);
-             if (v0 != NULL && v1 != NULL)
--                vc = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, v1, LLVMGetName("mul", v0, v1),
-+                vc = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, v1,
-+                                                  ((llvm::Twine("mul_") + v0->getName()) + "_") + v1->getName(),
-                                                   insertBefore);
- 
-             llvm::Value *vab = NULL;
-             if (va != NULL && vb != NULL)
--                vab = llvm::BinaryOperator::Create(llvm::Instruction::Add, va, vb, LLVMGetName("add", va, vb),
-+                vab = llvm::BinaryOperator::Create(llvm::Instruction::Add, va, vb,
-+                                                   ((llvm::Twine("add_") + va->getName()) + "_") + vb->getName(),
-                                                    insertBefore);
-             else if (va != NULL)
-                 vab = va;
-@@ -1674,8 +1685,9 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-                 vab = vb;
- 
-             if (vab != NULL && vc != NULL)
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, vab, vc,
--                                                               LLVMGetName("add", vab, vc), insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, vab, vc, ((llvm::Twine("add_") + vab->getName()) + "_") + vc->getName(),
-+                    insertBefore);
-             else if (vab != NULL)
-                 *variableOffset = vab;
-             else
-@@ -1943,7 +1955,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-             // all zeros (i.e. a ConstantAggregateZero, but just in case,
-             // do the more general check with lVectorIs32BitInts().
-             variableOffset = new llvm::TruncInst(variableOffset, LLVMTypes::Int32VectorType,
--                                                 LLVMGetName(variableOffset, "_trunc"), insertBefore);
-+                                                 llvm::Twine(variableOffset->getName()) + "_trunc", insertBefore);
-         else
-             return false;
-     }
-@@ -1952,7 +1964,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-         if (lVectorIs32BitInts(constOffset)) {
-             // Truncate them so we have a 32-bit vector type for them.
-             constOffset = new llvm::TruncInst(constOffset, LLVMTypes::Int32VectorType,
--                                              LLVMGetName(constOffset, "_trunc"), insertBefore);
-+                                              llvm::Twine(constOffset->getName()) + "_trunc", insertBefore);
-         } else {
-             // FIXME: otherwise we just assume that all constant offsets
-             // can actually always fit into 32-bits...  (This could be
-@@ -1963,7 +1975,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-             // llvm::ConstantFoldInstruction() doesn't seem to be doing
-             // enough for us in some cases if we call it from here.
-             constOffset = new llvm::TruncInst(constOffset, LLVMTypes::Int32VectorType,
--                                              LLVMGetName(constOffset, "_trunc"), insertBefore);
-+                                              llvm::Twine(constOffset->getName()) + "_trunc", insertBefore);
-         }
-     }
- 
-@@ -2012,8 +2024,8 @@ static bool lOffsets32BitSafe(llvm::Value **offsetPtr, llvm::Instruction *insert
- 
-         // Alternatively, offset could be a sequence of adds terminating
-         // in safe constant vectors or a SExt.
--        *offsetPtr =
--            new llvm::TruncInst(offset, LLVMTypes::Int32VectorType, LLVMGetName(offset, "_trunc"), insertBefore);
-+        *offsetPtr = new llvm::TruncInst(offset, LLVMTypes::Int32VectorType, llvm::Twine(offset->getName()) + "_trunc",
-+                                         insertBefore);
-         return true;
-     } else
-         return false;
-@@ -2229,7 +2241,8 @@ static bool lGSToGSBaseOffsets(llvm::CallInst *callInst) {
-     }
-     // Cast the base pointer to a void *, since that's what the
-     // __pseudo_*_base_offsets_* functions want.
--    basePtr = new llvm::IntToPtrInst(basePtr, LLVMTypes::VoidPointerType, LLVMGetName(basePtr, "_2void"), callInst);
-+    basePtr = new llvm::IntToPtrInst(basePtr, LLVMTypes::VoidPointerType, llvm::Twine(basePtr->getName()) + "_2void",
-+                                     callInst);
-     lCopyMetadata(basePtr, callInst);
-     llvm::Function *gatherScatterFunc = info->baseOffsetsFunc;
- 
-@@ -2803,7 +2816,7 @@ static bool lGSToLoadStore(llvm::CallInst *callInst) {
-                 lCopyMetadata(ptr, callInst);
-                 Debug(pos, "Transformed gather to unaligned vector load!");
-                 llvm::Instruction *newCall =
--                    lCallInst(gatherInfo->loadMaskedFunc, ptr, mask, LLVMGetName(ptr, "_masked_load"));
-+                    lCallInst(gatherInfo->loadMaskedFunc, ptr, mask, llvm::Twine(ptr->getName()) + "_masked_load");
-                 lCopyMetadata(newCall, callInst);
-                 llvm::ReplaceInstWithInst(callInst, newCall);
-                 return true;
diff --git a/srcpkgs/ispc/patches/llvm12-004.patch b/srcpkgs/ispc/patches/llvm12-004.patch
deleted file mode 100644
index 3a94d8443a5e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-004.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From c03a5142444476a1caa5c2ba7fa2d92d7793d6f1 Mon Sep 17 00:00:00 2001
-From: Deepak Rajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Mon, 25 Jan 2021 09:22:49 -0800
-Subject: [PATCH] Fixing build on llvm trunk.
-
----
- src/ctx.cpp | 7 +++----
- 1 file changed, 3 insertions(+), 4 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index ded524b71..b60e6fe84 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1020,8 +1020,7 @@ void FunctionEmitContext::EmitCaseLabel(int value, bool checkMask, SourcePos pos
-     llvm::BasicBlock *bbCaseImpl = NULL;
-     if (emitGenXHardwareMask()) {
-         // Create basic block with actual case implementation
--        llvm::Twine bbName = llvm::Twine(bbCase->getName()) + "_impl";
--        bbCaseImpl = CreateBasicBlock(bbName, bbCase);
-+        bbCaseImpl = CreateBasicBlock(llvm::Twine(bbCase->getName()) + "_impl", bbCase);
-     }
- #endif
- 
-@@ -3142,8 +3141,8 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     llvm::Value *undef2 = llvm::UndefValue::get(vecType);
- 
-     // InsertElement
--    llvm::Twine tw = name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + llvm::Twine("_init");
--    llvm::Value *insert = InsertInst(undef1, v, 0, tw.str().c_str());
-+    llvm::Value *insert =
-+        InsertInst(undef1, v, 0, name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + "_init");
- 
-     // ShuffleVector
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
diff --git a/srcpkgs/ispc/patches/llvm12-005.patch b/srcpkgs/ispc/patches/llvm12-005.patch
deleted file mode 100644
index e3e96b00abfa..000000000000
--- a/srcpkgs/ispc/patches/llvm12-005.patch
+++ /dev/null
@@ -1,372 +0,0 @@
-From c1d0a51bf8416d42144de9e2bdd59825eaeff1ac Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Fri, 8 Jan 2021 14:13:49 -0800
-Subject: [PATCH] LLVM 11 support for gen code
-
----
- src/ctx.cpp                     |  13 ++-
- src/gen/GlobalsLocalization.cpp |   9 +-
- src/opt.cpp                     | 143 ++++++++++++++++++++++++--------
- 3 files changed, 124 insertions(+), 41 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index b60e6fe84..2a72e6837 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1,5 +1,5 @@
- /*
--  Copyright (c) 2010-2020, Intel Corporation
-+  Copyright (c) 2010-2021, Intel Corporation
-   All rights reserved.
- 
-   Redistribution and use in source and binary forms, with or without
-@@ -3685,8 +3685,17 @@ llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::
-     AssertPos(currentPos, llvm::isa<llvm::VectorType>(value->getType()));
-     llvm::VectorType *vt = llvm::dyn_cast<llvm::VectorType>(value->getType());
-     if (defaults == NULL) {
--        defaults = llvm::ConstantVector::getSplat(value->getType()->getVectorNumElements(),
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+        defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-+                                                  llvm::Constant::getNullValue(vt->getElementType()));
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+        defaults = llvm::ConstantVector::getSplat({static_cast<unsigned int>(vt->getNumElements()), false},
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
-+#else
-+        defaults = llvm::ConstantVector::getSplat(
-+            llvm::ElementCount::get(static_cast<unsigned int>(vt->getNumElements()), false),
-+            llvm::Constant::getNullValue(vt->getElementType()));
-+#endif
-     }
- 
-     auto Fn = llvm::GenXIntrinsic::getGenXDeclaration(m->module, llvm::GenXIntrinsic::genx_simdcf_predicate,
-diff --git a/src/gen/GlobalsLocalization.cpp b/src/gen/GlobalsLocalization.cpp
-index a176e9462..41f3b00e2 100644
---- a/src/gen/GlobalsLocalization.cpp
-+++ b/src/gen/GlobalsLocalization.cpp
-@@ -1,5 +1,5 @@
- /*
--  Copyright (c) 2014, 2016-2020, Intel Corporation
-+  Copyright (c) 2014, 2016-2021, Intel Corporation
-   All rights reserved.
- 
-   Redistribution and use in source and binary forms, with or without
-@@ -53,8 +53,10 @@
- #include <llvm/GenXIntrinsics/GenXIntrOpts.h>
- #include <llvm/GenXIntrinsics/GenXIntrinsics.h>
- #include <llvm/GenXIntrinsics/GenXMetadata.h>
--#include <llvm/IR/CFG.h>
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
- #include <llvm/IR/CallSite.h>
-+#endif
-+#include <llvm/IR/CFG.h>
- #include <llvm/IR/DebugInfo.h>
- #include <llvm/IR/Dominators.h>
- #include <llvm/IR/Function.h>
-@@ -470,7 +472,8 @@ void GlobalsLocalization::LocalizeGlobals(LocalizationInfo &LI) {
-         Instruction &FirstI = *Fn->getEntryBlock().begin();
-         Type *ElemTy = GV->getType()->getElementType();
-         AllocaInst *Alloca = new AllocaInst(ElemTy, 0, GV->getName() + ".local", &FirstI);
--        Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()));
-+        Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()).valueOrOne());
-+
-         if (!isa<UndefValue>(GV->getInitializer()))
-             new StoreInst(GV->getInitializer(), Alloca, &FirstI);
- 
-diff --git a/src/opt.cpp b/src/opt.cpp
-index d58d77f73..1789b8476 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -2899,15 +2899,17 @@ static llvm::Function *lGenXMaskedInt8Inst(llvm::Instruction *inst, bool isStore
- static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::Instruction *inst) {
-     Assert(g->target->isGenXTarget());
-     Assert(llvm::isa<llvm::VectorType>(val->getType()));
--    Assert(llvm::isPowerOf2_32(val->getType()->getVectorNumElements()));
--    Assert(val->getType()->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-+
-+    llvm::VectorType *valVecType = llvm::dyn_cast<llvm::VectorType>(val->getType());
-+    Assert(llvm::isPowerOf2_32(valVecType->getNumElements()));
-+    Assert(valVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
- 
-     // The data write of svm store must have a size that is a power of two from 16 to 128
-     // bytes. However for int8 type and simd width = 8, the data write size is 8.
-     // So we use masked store function here instead of svm store which process int8 type
-     // correctly.
--    if (val->getType()->getPrimitiveSizeInBits() / 8 < 16) {
--        Assert(val->getType()->getScalarType() == LLVMTypes::Int8Type);
-+    if (valVecType->getPrimitiveSizeInBits() / 8 < 16) {
-+        Assert(valVecType->getScalarType() == LLVMTypes::Int8Type);
-         if (llvm::Function *maskedFunc = lGenXMaskedInt8Inst(inst, true))
-             return llvm::dyn_cast<llvm::CallInst>(lCallInst(maskedFunc, ptr, val, LLVMMaskAllOn, ""));
-         else {
-@@ -2923,15 +2925,17 @@ static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::
- 
- static llvm::CallInst *lGenXLoadInst(llvm::Value *ptr, llvm::Type *retType, llvm::Instruction *inst) {
-     Assert(llvm::isa<llvm::VectorType>(retType));
--    Assert(llvm::isPowerOf2_32(retType->getVectorNumElements()));
--    Assert(retType->getPrimitiveSizeInBits());
--    Assert(retType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-+
-+    llvm::VectorType *retVecType = llvm::dyn_cast<llvm::VectorType>(retType);
-+    Assert(llvm::isPowerOf2_32(retVecType->getNumElements()));
-+    Assert(retVecType->getPrimitiveSizeInBits());
-+    Assert(retVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-     // The data read of svm load must have a size that is a power of two from 16 to 128
-     // bytes. However for int8 type and simd width = 8, the data read size is 8.
-     // So we use masked load function here instead of svm load which process int8 type
-     // correctly.
--    if (retType->getPrimitiveSizeInBits() / 8 < 16) {
--        Assert(retType->getScalarType() == LLVMTypes::Int8Type);
-+    if (retVecType->getPrimitiveSizeInBits() / 8 < 16) {
-+        Assert(retVecType->getScalarType() == LLVMTypes::Int8Type);
-         if (llvm::Function *maskedFunc = lGenXMaskedInt8Inst(inst, false))
-             return llvm::dyn_cast<llvm::CallInst>(lCallInst(maskedFunc, ptr, LLVMMaskAllOn, ""));
-         else {
-@@ -5622,15 +5626,24 @@ static bool lVectorizeGEPs(llvm::Value *ptr, std::vector<PtrUse> &ptrUses, std::
-         llvm::PtrToIntInst *ptrToInt =
-             new llvm::PtrToIntInst(ptr, LLVMTypes::Int64Type, "vectorized_ptrtoint", insertBefore);
-         llvm::Instruction *addr = llvm::BinaryOperator::CreateAdd(ptrToInt, offset, "vectorized_address", insertBefore);
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        llvm::Type *retType = llvm::FixedVectorType::get(scalar_type, reqSize / t_size);
-+#else
-         llvm::Type *retType = llvm::VectorType::get(scalar_type, reqSize / t_size);
-+#endif
-         llvm::Function *fn = llvm::GenXIntrinsic::getGenXDeclaration(
-             m->module, llvm::GenXIntrinsic::genx_svm_block_ld_unaligned, {retType, addr->getType()});
-         llvm::Instruction *ld = llvm::CallInst::Create(fn, {addr}, "vectorized_ld", insertBefore);
- 
-         if (loadingPtr) {
-             // Cast int to ptr via inttoptr
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            ld = new llvm::IntToPtrInst(ld, llvm::FixedVectorType::get(originalType, reqSize / t_size),
-+                                        "vectorized_inttoptr", insertBefore);
-+#else
-             ld = new llvm::IntToPtrInst(ld, llvm::VectorType::get(originalType, reqSize / t_size),
-                                         "vectorized_inttoptr", insertBefore);
-+#endif
-         }
- 
-         // Scalar extracts for all loaded elements
-@@ -6160,19 +6173,34 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-         llvm::Instruction *inst = &*I;
-         if (llvm::CallInst *ci = llvm::dyn_cast<llvm::CallInst>(inst)) {
-             llvm::Function *func = ci->getCalledFunction();
--            if (func && func->getName() == "llvm.trap") {
-+            if (func && func->getName().equals("llvm.trap")) {
-                 llvm::Type *argTypes[] = {LLVMTypes::Int1VectorType, LLVMTypes::Int16VectorType};
-                 // Description of parameters for genx_raw_send_noresult can be found in target-genx.ll
-                 auto Fn = +llvm::GenXIntrinsic::getGenXDeclaration(
-                     m->module, llvm::GenXIntrinsic::genx_raw_send_noresult, argTypes);
-                 llvm::SmallVector<llvm::Value *, 8> Args;
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 0));
--                Args.push_back(llvm::ConstantVector::getSplat(g->target->getNativeVectorWidth(),
--                                                              llvm::ConstantInt::getTrue(*g->ctx)));
-+                Args.push_back(llvm::ConstantVector::getSplat(
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+                    g->target->getNativeVectorWidth(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+                    {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
-+#else // LLVM 12.0+
-+                    llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-+#endif
-+                    llvm::ConstantInt::getTrue(*g->ctx)));
-+
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 39));
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 33554448));
-                 llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
--                    g->target->getNativeVectorWidth(), llvm::Constant::getNullValue(llvm::Type::getInt16Ty(*g->ctx)));
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+                    g->target->getNativeVectorWidth(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+                    {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
-+#else // LLVM 12.0+
-+                    llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-+#endif
-+                    llvm::Constant::getNullValue(llvm::Type::getInt16Ty(*g->ctx)));
-                 Args.push_back(zeroMask);
- 
-                 llvm::Instruction *newInst = llvm::CallInst::Create(Fn, Args, ci->getName());
-@@ -6181,7 +6209,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     modifiedAny = true;
-                     goto restart;
-                 }
--            } else if (func && func->getName() == "llvm.assume") {
-+            } else if (func && func->getName().equals("llvm.assume")) {
-                 ci->eraseFromParent();
-                 modifiedAny = true;
-                 goto restart;
-@@ -6335,7 +6363,7 @@ bool CheckUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 continue;
-             for (int i = 0; i < unsupportedFuncs.size(); i++) {
-                 std::smatch match;
--                std::string funcName = func->getName();
-+                std::string funcName = func->getName().str();
-                 if (std::regex_match(funcName, match, unsupportedFuncs[i])) {
-                     // We found unsupported function. Generate error and stop compilation.
-                     SourcePos pos;
-@@ -6418,12 +6446,14 @@ bool MangleOpenCLBuiltins::runOnBasicBlock(llvm::BasicBlock &bb) {
-             if (func->getName().startswith("__spirv_ocl")) {
-                 std::string mangledName;
-                 llvm::Type *retType = func->getReturnType();
--                std::string funcName = func->getName();
-+                std::string funcName = func->getName().str();
-                 std::vector<llvm::Type *> ArgTy;
-                 // spirv OpenCL builtins are used for double types only
--                Assert(retType->isVectorTy() && retType->getVectorElementType()->isDoubleTy() ||
-+                Assert(retType->isVectorTy() &&
-+                           llvm::dyn_cast<llvm::VectorType>(retType)->getElementType()->isDoubleTy() ||
-                        retType->isSingleValueType() && retType->isDoubleTy());
--                if (retType->isVectorTy() && retType->getVectorElementType()->isDoubleTy()) {
-+                if (retType->isVectorTy() &&
-+                    llvm::dyn_cast<llvm::VectorType>(retType)->getElementType()->isDoubleTy()) {
-                     ArgTy.push_back(LLVMTypes::DoubleVectorType);
-                     // _DvWIDTH suffix is used in target file to differentiate scalar
-                     // and vector versions of intrinsics. Here we remove this
-@@ -6511,8 +6541,15 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- 
-     // Cast offsets to int64
-     Offsets = new llvm::ZExtInst(
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        Offsets,
-+        llvm::FixedVectorType::get(LLVMTypes::Int64Type,
-+                                   llvm::dyn_cast<llvm::VectorType>(Offsets->getType())->getNumElements()),
-+        "svm_offset_zext", InsertBefore);
-+#else
-         Offsets, llvm::VectorType::get(LLVMTypes::Int64Type, Offsets->getType()->getVectorNumElements()),
-         "svm_offset_zext", InsertBefore);
-+#endif
- 
-     if (!llvm::isa<llvm::ConstantPointerNull>(Ptr)) {
-         // Cast ptr to int64
-@@ -6520,13 +6557,31 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- 
-         // Vectorize ptr
-         llvm::Value *undefInsertValue =
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            llvm::UndefValue::get(llvm::FixedVectorType::get(
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+#else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
-+#endif
-         address = llvm::InsertElementInst::Create(undefInsertValue, address, LLVMInt32(0), "svm_ptr_iei", InsertBefore);
-         llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+            {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
-+#else
-+        llvm::ElementCount::get(
-+                                llvm::dyn_cast<llvm::FixedVectorType>(addressType->getNumElements(), false),
-+#endif
-             llvm::Constant::getNullValue(llvm::Type::getInt32Ty(InsertBefore->getContext())));
-+
-         llvm::Value *undefShuffleValue =
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            llvm::UndefValue::get(llvm::FixedVectorType::get(
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+#else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
-+#endif
-         address = new llvm::ShuffleVectorInst(address, undefShuffleValue, zeroVec, "svm_ptr_svi", InsertBefore);
- 
-         // Calculate address
-@@ -6553,9 +6608,12 @@ llvm::Instruction *FixAddressSpace::processVectorLoad(llvm::LoadInst *LI) {
-     if (retType->getScalarType()->isPointerTy()) {
-         isPtrLoad = true;
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        retType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(retType)->getNumElements());
-+#else
-         retType = llvm::VectorType::get(scalarType, retType->getVectorNumElements());
-+#endif
-     }
--
-     llvm::Instruction *res = lGenXLoadInst(ptr, retType, llvm::dyn_cast<llvm::Instruction>(LI));
-     Assert(res);
- 
-@@ -6580,11 +6638,16 @@ llvm::Instruction *FixAddressSpace::processSVMVectorLoad(llvm::Instruction *CI)
-     ptr = new llvm::IntToPtrInst(ptr, llvm::PointerType::get(retType, 0), CI->getName() + "_inttoptr", CI);
-     llvm::Instruction *loadInst = NULL;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    loadInst = new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), loadInst,
--                                  CI->getName(), (llvm::Instruction *)NULL);
-+    loadInst = new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-+                                  CI->getName(), false /* not volatile */,
-+                                  llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne(),
-+                                  (llvm::Instruction *)NULL);
- #else
--    loadInst = new llvm::LoadInst(ptr, CI->getName(), (llvm::Instruction *)NULL);
-+    loadInst = new llvm::LoadInst(ptr, CI->getName(), false,
-+                                  llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne(),
-+                                  (llvm::Instruction *)NULL);
- #endif
-+
-     Assert(loadInst);
-     return loadInst;
- }
-@@ -6606,7 +6669,11 @@ llvm::Instruction *FixAddressSpace::processVectorStore(llvm::StoreInst *SI) {
-     // Note: it doesn't look like a normal case for GenX target
-     if (valType->getScalarType()->isPointerTy()) {
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        valType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(valType)->getNumElements());
-+#else
-         valType = llvm::VectorType::get(scalarType, valType->getVectorNumElements());
-+#endif
-         val = new llvm::PtrToIntInst(val, valType, "svm_st_val_ptrtoint", SI);
-     }
- 
-@@ -6631,12 +6698,8 @@ llvm::Instruction *FixAddressSpace::processSVMVectorStore(llvm::Instruction *CI)
-     ptr = new llvm::IntToPtrInst(ptr, llvm::PointerType::get(valType, 0), CI->getName() + "_inttoptr", CI);
- 
-     llvm::Instruction *storeInst = NULL;
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    loadInst = new llvm::StoreInst(val, llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(),
--                                   storeInst, CI->getName(), (llvm::Instruction *)NULL);
--#else
--    storeInst = new llvm::StoreInst(val, ptr, (llvm::Instruction *)NULL);
--#endif
-+    storeInst = new llvm::StoreInst(val, ptr, (llvm::Instruction *)NULL,
-+                                    llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
-     Assert(storeInst);
-     return storeInst;
- }
-@@ -6645,15 +6708,18 @@ llvm::Instruction *FixAddressSpace::createInt8WrRegion(llvm::Value *Val, llvm::V
-     int width = g->target->getVectorWidth();
- 
-     llvm::Value *Args[8];
--
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Args[0] = llvm::UndefValue::get(llvm::FixedVectorType::get(LLVMTypes::Int8Type, width * 4)); // old value
-+#else
-     Args[0] = llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int8Type, width * 4)); // old value
--    Args[1] = Val;                                                                          // value to store
--    Args[2] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);                              // vstride
--    Args[3] = llvm::ConstantInt::get(LLVMTypes::Int32Type, width);                          // width
--    Args[4] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 4);                              // stride
--    Args[5] = llvm::ConstantInt::get(LLVMTypes::Int16Type, 0);                              // offsets
--    Args[6] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);                              // parent width (ignored)
--    Args[7] = Mask;                                                                         // mask
-+#endif
-+    Args[1] = Val;                                                 // value to store
-+    Args[2] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);     // vstride
-+    Args[3] = llvm::ConstantInt::get(LLVMTypes::Int32Type, width); // width
-+    Args[4] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 4);     // stride
-+    Args[5] = llvm::ConstantInt::get(LLVMTypes::Int16Type, 0);     // offsets
-+    Args[6] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);     // parent width (ignored)
-+    Args[7] = Mask;                                                // mask
- 
-     llvm::Type *Tys[4];
- 
-@@ -6708,7 +6774,12 @@ llvm::Instruction *FixAddressSpace::processGatherScatterPrivate(llvm::CallInst *
-         return NULL;
- 
-     llvm::Value *address = calculateGatherScatterAddress(ptr, offsets, CI);
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    llvm::Type *i8VecType = llvm::FixedVectorType::get(LLVMTypes::Int8Type, width * 4);
-+#else
-     llvm::Type *i8VecType = llvm::VectorType::get(LLVMTypes::Int8Type, width * 4);
-+#endif
-+
-     bool isInt8 = (value->getType()->getScalarType() == LLVMTypes::Int8Type);
- 
-     Assert(address && "Bad gather/scatter address!");
diff --git a/srcpkgs/ispc/patches/llvm12-006.patch b/srcpkgs/ispc/patches/llvm12-006.patch
deleted file mode 100644
index a829ea48391e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-006.patch
+++ /dev/null
@@ -1,126 +0,0 @@
-From bb3f493d1fbd45c79e1d9dee67a0430ba313eaad Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 19 Jan 2021 11:07:33 -0800
-Subject: [PATCH] Fixed ifdefs for LLVM_11
-
----
- src/ctx.cpp |  6 +++---
- src/opt.cpp | 18 +++++++++---------
- 2 files changed, 12 insertions(+), 12 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 2a72e6837..527a02f30 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1691,7 +1691,7 @@ llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const llvm::T
-     if (llvm::Constant *const_val = llvm::dyn_cast<llvm::Constant>(value)) {
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         ret = llvm::ConstantVector::getSplat(g->target->getVectorWidth(), const_val);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-         ret =
-             llvm::ConstantVector::getSplat({static_cast<unsigned int>(g->target->getVectorWidth()), false}, const_val);
- #else // LLVM 12.0+
-@@ -3148,7 +3148,7 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-     llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
-         vecType->getVectorNumElements(), llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-     llvm::Constant *zeroVec =
-         llvm::ConstantVector::getSplat({static_cast<unsigned int>(ty->getNumElements()), false},
-                                        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
-@@ -3688,7 +3688,7 @@ llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-         defaults = llvm::ConstantVector::getSplat({static_cast<unsigned int>(vt->getNumElements()), false},
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
- #else
-diff --git a/src/opt.cpp b/src/opt.cpp
-index 1789b8476..3ff191a0a 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -1045,7 +1045,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                 llvm::Instruction *loadInst =
-                     new llvm::LoadInst(castPtr, llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load",
-                                        false /* not volatile */, llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
-@@ -1472,7 +1472,7 @@ static llvm::Value *lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offse
-                     llvm::Value *zeroMask =
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                         llvm::ConstantVector::getSplat(cv->getType()->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                         llvm::ConstantVector::getSplat(
-                             {llvm::dyn_cast<llvm::VectorType>(cv->getType())->getNumElements(), false},
- #else // LLVM 12.0+
-@@ -1495,7 +1495,7 @@ static llvm::Value *lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offse
-                         llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                             bop_var_type->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                             {llvm::dyn_cast<llvm::VectorType>(bop_var_type)->getNumElements(), false},
- #else // LLVM 12.0+
-                             llvm::ElementCount::get(
-@@ -2803,7 +2803,7 @@ static bool lGSToLoadStore(llvm::CallInst *callInst) {
-             llvm::Value *zeroMask =
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                 llvm::ConstantVector::getSplat(callInst->getType()->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                 llvm::ConstantVector::getSplat(
-                     {llvm::dyn_cast<llvm::VectorType>(callInst->getType())->getNumElements(), false},
- 
-@@ -3100,7 +3100,7 @@ static bool lImproveMaskedLoad(llvm::CallInst *callInst, llvm::BasicBlock::itera
-         {
-             llvm::Type *ptrType = llvm::PointerType::get(callInst->getType(), 0);
-             ptr = new llvm::BitCastInst(ptr, ptrType, "ptr_cast_for_load", callInst);
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             load = new llvm::LoadInst(
-                 ptr, callInst->getName(), false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-@@ -3459,7 +3459,7 @@ llvm::Value *lGEPAndLoad(llvm::Value *basePtr, int64_t offset, int align, llvm::
-                          llvm::Type *type) {
-     llvm::Value *ptr = lGEPInst(basePtr, LLVMInt64(offset), "new_base", insertBefore);
-     ptr = new llvm::BitCastInst(ptr, llvm::PointerType::get(type, 0), "ptr_cast", insertBefore);
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-     return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, llvm::MaybeAlign(align), insertBefore);
- #else // LLVM 11.0+
-     return new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-@@ -6183,7 +6183,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 Args.push_back(llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                     g->target->getNativeVectorWidth(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                     {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
- #else // LLVM 12.0+
-                     llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-@@ -6195,7 +6195,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                     g->target->getNativeVectorWidth(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                     {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
- #else // LLVM 12.0+
-                     llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-@@ -6567,7 +6567,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
-         llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-             {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
- #else
-         llvm::ElementCount::get(
diff --git a/srcpkgs/ispc/patches/llvm12-007.patch b/srcpkgs/ispc/patches/llvm12-007.patch
deleted file mode 100644
index 1b975f896c7e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-007.patch
+++ /dev/null
@@ -1,160 +0,0 @@
-From 62f5a6c37bf26fc25a7cf81868052d3472874610 Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 23 Mar 2021 23:07:30 -0700
-Subject: [PATCH] Do not generate function mask when it is not required
-
----
- src/ctx.cpp                    | 39 ++++++++++++++-------
- tests/lit-tests/full_mask.ispc | 63 ++++++++++++++++++++++++++++++++++
- 2 files changed, 90 insertions(+), 12 deletions(-)
- create mode 100644 tests/lit-tests/full_mask.ispc
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 527a02f30..9e775fc5c 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -231,10 +231,18 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym, llvm::F
-     internalMaskPointer = AllocaInst(LLVMTypes::MaskType, "internal_mask_memory");
-     StoreInst(LLVMMaskAllOn, internalMaskPointer);
- 
--    functionMaskValue = LLVMMaskAllOn;
--
--    fullMaskPointer = AllocaInst(LLVMTypes::MaskType, "full_mask_memory");
--    StoreInst(LLVMMaskAllOn, fullMaskPointer);
-+    // If the function doesn't have __mask in parameters, there is no need to
-+    // have function mask
-+    if ((func->GetType()->isExported &&
-+         (lf->getFunctionType()->getNumParams() == func->GetType()->GetNumParameters())) ||
-+        (func->GetType()->isUnmasked) || (func->GetType()->isTask)) {
-+        functionMaskValue = NULL;
-+        fullMaskPointer = NULL;
-+    } else {
-+        functionMaskValue = LLVMMaskAllOn;
-+        fullMaskPointer = AllocaInst(LLVMTypes::MaskType, "full_mask_memory");
-+        StoreInst(LLVMMaskAllOn, fullMaskPointer);
-+    }
- 
-     blockEntryMask = NULL;
-     breakLanesPtr = continueLanesPtr = NULL;
-@@ -389,20 +397,26 @@ llvm::BasicBlock *FunctionEmitContext::GetCurrentBasicBlock() { return bblock; }
- 
- void FunctionEmitContext::SetCurrentBasicBlock(llvm::BasicBlock *bb) { bblock = bb; }
- 
--llvm::Value *FunctionEmitContext::GetFunctionMask() { return functionMaskValue; }
-+llvm::Value *FunctionEmitContext::GetFunctionMask() { return fullMaskPointer ? functionMaskValue : LLVMMaskAllOn; }
- 
- llvm::Value *FunctionEmitContext::GetInternalMask() { return LoadInst(internalMaskPointer, NULL, "load_mask"); }
- 
- llvm::Value *FunctionEmitContext::GetFullMask() {
--    return BinaryOperator(llvm::Instruction::And, GetInternalMask(), functionMaskValue, "internal_mask&function_mask");
-+    return fullMaskPointer ? BinaryOperator(llvm::Instruction::And, GetInternalMask(), functionMaskValue,
-+                                            "internal_mask&function_mask")
-+                           : GetInternalMask();
- }
- 
--llvm::Value *FunctionEmitContext::GetFullMaskPointer() { return fullMaskPointer; }
-+llvm::Value *FunctionEmitContext::GetFullMaskPointer() {
-+    return fullMaskPointer ? fullMaskPointer : internalMaskPointer;
-+}
- 
- void FunctionEmitContext::SetFunctionMask(llvm::Value *value) {
--    functionMaskValue = value;
--    if (bblock != NULL)
--        StoreInst(GetFullMask(), fullMaskPointer);
-+    if (fullMaskPointer != NULL) {
-+        functionMaskValue = value;
-+        if (bblock != NULL)
-+            StoreInst(GetFullMask(), fullMaskPointer);
-+    }
- }
- 
- void FunctionEmitContext::SetBlockEntryMask(llvm::Value *value) { blockEntryMask = value; }
-@@ -410,7 +424,8 @@ void FunctionEmitContext::SetBlockEntryMask(llvm::Value *value) { blockEntryMask
- void FunctionEmitContext::SetInternalMask(llvm::Value *value) {
-     StoreInst(value, internalMaskPointer);
-     // kludge so that __mask returns the right value in ispc code.
--    StoreInst(GetFullMask(), fullMaskPointer);
-+    if (fullMaskPointer)
-+        StoreInst(GetFullMask(), fullMaskPointer);
- }
- 
- void FunctionEmitContext::SetInternalMaskAnd(llvm::Value *oldMask, llvm::Value *test) {
-@@ -1265,7 +1280,7 @@ void FunctionEmitContext::CurrentLanesReturned(Expr *expr, bool doCoherenceCheck
-         // lanes have returned
-         if (doCoherenceCheck) {
-             // if newReturnedLanes == functionMaskValue, get out of here!
--            llvm::Value *cmp = MasksAllEqual(functionMaskValue, newReturnedLanes);
-+            llvm::Value *cmp = MasksAllEqual(GetFunctionMask(), newReturnedLanes);
-             llvm::BasicBlock *bDoReturn = CreateBasicBlock("do_return");
-             llvm::BasicBlock *bNoReturn = CreateBasicBlock("no_return");
-             BranchInst(bDoReturn, bNoReturn, cmp);
-diff --git a/tests/lit-tests/full_mask.ispc b/tests/lit-tests/full_mask.ispc
-new file mode 100644
-index 000000000..ac0b0bca3
---- /dev/null
-+++ b/tests/lit-tests/full_mask.ispc
-@@ -0,0 +1,63 @@
-+// RUN: %{ispc} %s -DISPC_EXPORT --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_EXPORT %s
-+
-+// RUN: %{ispc} %s -DISPC_UNMASKED --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_UNMASKED %s
-+
-+// RUN: %{ispc} %s -DISPC_NOQUALIF --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_NOQUALIF %s
-+
-+// RUN: %{ispc} %s -DISPC_TASK --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_TASK %s
-+
-+struct Parameters {
-+    float *vout;
-+    int param;
-+};
-+
-+#ifdef ISPC_EXPORT
-+// CHECK_ISPC_EXPORT: define void @simple_export___
-+// CHECK_ISPC_EXPORT: %full_mask_memory = alloca
-+// CHECK_ISPC_EXPORT: define void @simple_export(
-+// CHECK_ISPC_EXPORT-NOT: %full_mask_memory = alloca
-+export void simple_export(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_UNMASKED
-+// CHECK_ISPC_UNMASKED: define void @simple_unmasked
-+// CHECK_ISPC_UNMASKED-NOT: %full_mask_memory = alloca
-+unmasked void simple_unmasked(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_NOQUALIF
-+// CHECK_ISPC_NOQUALIF: define void @simple
-+// CHECK_ISPC_NOQUALIF: %full_mask_memory = alloca
-+void simple(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_TASK
-+
-+// CHECK_ISPC_TASK: define void @simple_task
-+// CHECK_ISPC_TASK-NOT: %full_mask_memory = alloca
-+// CHECK_ISPC_TASK: define void @simple_entry_point__
-+// CHECK_ISPC_TASK: %full_mask_memory = alloca
-+// CHECK_ISPC_TASK: define void @simple_entry_point(
-+// CHECK_ISPC_TASK-NOT: %full_mask_memory = alloca
-+task void simple_task(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+export void simple_entry_point(void *uniform parameters, uniform int dim0, uniform int dim1, uniform int dim2) {
-+    launch[dim0, dim1, dim2] simple_task(parameters);
-+}
-+#endif
-\ No newline at end of file
diff --git a/srcpkgs/ispc/patches/llvm12-008.patch b/srcpkgs/ispc/patches/llvm12-008.patch
deleted file mode 100644
index c8413d8b7887..000000000000
--- a/srcpkgs/ispc/patches/llvm12-008.patch
+++ /dev/null
@@ -1,149 +0,0 @@
-From afad14227d9204a3c8a626ca608f5b43c3218fe9 Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 4 May 2021 11:43:52 -0700
-Subject: [PATCH] Fixed ISPC gen build for LLVM12
-
----
- src/ctx.cpp |  4 ++++
- src/opt.cpp | 43 +++++++++++++++++++++++++++++--------------
- 2 files changed, 33 insertions(+), 14 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 0c7050591..f7dc06939 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -3738,7 +3738,11 @@ llvm::Value *FunctionEmitContext::GenXSimdCFAny(llvm::Value *value) {
- 
- llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::Value *defaults) {
-     AssertPos(currentPos, llvm::isa<llvm::VectorType>(value->getType()));
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    llvm::FixedVectorType *vt = llvm::dyn_cast<llvm::FixedVectorType>(value->getType());
-+#else
-     llvm::VectorType *vt = llvm::dyn_cast<llvm::VectorType>(value->getType());
-+#endif
-     if (defaults == NULL) {
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-diff --git a/src/opt.cpp b/src/opt.cpp
-index cea4afa23..4e33d6b1a 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -2916,9 +2916,13 @@ static llvm::Function *lGenXMaskedInt8Inst(llvm::Instruction *inst, bool isStore
- 
- static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::Instruction *inst) {
-     Assert(g->target->isGenXTarget());
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Assert(llvm::isa<llvm::FixedVectorType>(val->getType()));
-+    llvm::FixedVectorType *valVecType = llvm::dyn_cast<llvm::FixedVectorType>(val->getType());
-+#else
-     Assert(llvm::isa<llvm::VectorType>(val->getType()));
--
-     llvm::VectorType *valVecType = llvm::dyn_cast<llvm::VectorType>(val->getType());
-+#endif
-     Assert(llvm::isPowerOf2_32(valVecType->getNumElements()));
-     Assert(valVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
- 
-@@ -2942,9 +2946,13 @@ static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::
- }
- 
- static llvm::CallInst *lGenXLoadInst(llvm::Value *ptr, llvm::Type *retType, llvm::Instruction *inst) {
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Assert(llvm::isa<llvm::FixedVectorType>(retType));
-+    llvm::FixedVectorType *retVecType = llvm::dyn_cast<llvm::FixedVectorType>(retType);
-+#else
-     Assert(llvm::isa<llvm::VectorType>(retType));
--
-     llvm::VectorType *retVecType = llvm::dyn_cast<llvm::VectorType>(retType);
-+#endif
-     Assert(llvm::isPowerOf2_32(retVecType->getNumElements()));
-     Assert(retVecType->getPrimitiveSizeInBits());
-     Assert(retVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-@@ -5485,8 +5493,13 @@ static void lCreateBlockLDUse(llvm::Instruction *currInst, std::vector<llvm::Ext
-         } else if (auto gather = lGetPseudoGather(llvm::dyn_cast<llvm::Instruction>(ui->getUser()))) {
-             // Collect idxs from gather and fix users
-             llvm::Value *res = llvm::UndefValue::get(gather->getType());
--            for (unsigned i = 0, end = llvm::dyn_cast<llvm::VectorType>(res->getType())->getNumElements(); i < end;
--                 ++i) {
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            for (unsigned i = 0, end = llvm::dyn_cast<llvm::FixedVectorType>(res->getType())->getNumElements(); i < end;
-+                 ++i)
-+#else
-+            for (unsigned i = 0, end = llvm::dyn_cast<llvm::VectorType>(res->getType())->getNumElements(); i < end; ++i)
-+#endif
-+            {
-                 // Get element via IEI
-                 res = llvm::InsertElementInst::Create(res, EEIs[ptrUse.idxs[curr_idx++]],
-                                                       llvm::ConstantInt::get(LLVMTypes::Int32Type, i),
-@@ -5522,10 +5535,11 @@ static bool lVectorizeGEPs(llvm::Value *ptr, std::vector<PtrUse> &ptrUses, std::
- 
-     // Adjust values for vector load
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    if (auto vecTy = llvm::dyn_cast<llvm::FixedVectorType>(type)) {
-+    if (auto vecTy = llvm::dyn_cast<llvm::FixedVectorType>(type))
- #else
--    if (auto vecTy = llvm::dyn_cast<llvm::VectorType>(type)) {
-+    if (auto vecTy = llvm::dyn_cast<llvm::VectorType>(type))
- #endif
-+    {
-         // Get single element size
-         t_size /= vecTy->getNumElements();
-         // Get single element type
-@@ -6477,7 +6491,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-         Offsets,
-         llvm::FixedVectorType::get(LLVMTypes::Int64Type,
--                                   llvm::dyn_cast<llvm::VectorType>(Offsets->getType())->getNumElements()),
-+                                   llvm::dyn_cast<llvm::FixedVectorType>(Offsets->getType())->getNumElements()),
-         "svm_offset_zext", InsertBefore);
- #else
-         Offsets, llvm::VectorType::get(LLVMTypes::Int64Type, Offsets->getType()->getVectorNumElements()),
-@@ -6492,7 +6506,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
-         llvm::Value *undefInsertValue =
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-             llvm::UndefValue::get(llvm::FixedVectorType::get(
--                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements()));
- #else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
- #endif
-@@ -6501,17 +6515,16 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
- #elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
--            {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
-+            {llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements(), false},
- #else
--        llvm::ElementCount::get(
--                                llvm::dyn_cast<llvm::FixedVectorType>(addressType->getNumElements(), false),
-+            llvm::ElementCount::get(llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements(), false),
- #endif
-             llvm::Constant::getNullValue(llvm::Type::getInt32Ty(InsertBefore->getContext())));
- 
-         llvm::Value *undefShuffleValue =
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-             llvm::UndefValue::get(llvm::FixedVectorType::get(
--                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements()));
- #else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
- #endif
-@@ -6542,7 +6555,8 @@ llvm::Instruction *FixAddressSpace::processVectorLoad(llvm::LoadInst *LI) {
-         isPtrLoad = true;
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--        retType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(retType)->getNumElements());
-+        retType =
-+            llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::FixedVectorType>(retType)->getNumElements());
- #else
-         retType = llvm::VectorType::get(scalarType, retType->getVectorNumElements());
- #endif
-@@ -6604,7 +6618,8 @@ llvm::Instruction *FixAddressSpace::processVectorStore(llvm::StoreInst *SI) {
-     if (valType->getScalarType()->isPointerTy()) {
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--        valType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(valType)->getNumElements());
-+        valType =
-+            llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::FixedVectorType>(valType)->getNumElements());
- #else
-         valType = llvm::VectorType::get(scalarType, valType->getVectorNumElements());
- #endif
diff --git a/srcpkgs/ispc/patches/llvm12-009.patch b/srcpkgs/ispc/patches/llvm12-009.patch
deleted file mode 100644
index d3ea67828582..000000000000
--- a/srcpkgs/ispc/patches/llvm12-009.patch
+++ /dev/null
@@ -1,2109 +0,0 @@
-From 97b13c32132e2704a5e3e7b2eae49d854d087e3e Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 4 May 2021 11:31:55 -0700
-Subject: [PATCH] Updated builtins-cm* for switch to LLVM12
-
----
- builtins/builtins-cm-32.ll | 234 ++++++++++++++++++-------------------
- builtins/builtins-cm-64.ll | 232 ++++++++++++++++++------------------
- 2 files changed, 233 insertions(+), 233 deletions(-)
-
-diff --git a/builtins/builtins-cm-32.ll b/builtins/builtins-cm-32.ll
-index 32debf32e..481bbdc48 100644
---- a/builtins/builtins-cm-32.ll
-+++ b/builtins/builtins-cm-32.ll
-@@ -557,7 +557,7 @@ $_ZN13VaryingWriter12WriteVecElemIPvEEvv = comdat any
- @.str.10 = private unnamed_addr constant [5 x i8] c"%08X\00", align 1
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -618,7 +618,7 @@ define internal <1 x i8> @_ZN7details13__impl_divremILi1EEEu2CMvbT__cS1_S1_u2CMv
- declare <1 x i8> @llvm.genx.rdregioni.v1i8.v1i8.i16(<1 x i8>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -634,7 +634,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -680,7 +680,7 @@ define internal <2 x i8> @_ZN7details13__impl_divremILi2EEEu2CMvbT__cS1_S1_u2CMv
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -818,7 +818,7 @@ define internal <16 x i8> @_ZN7details13__impl_divremILi16EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -864,7 +864,7 @@ define internal <32 x i8> @_ZN7details13__impl_divremILi32EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -890,7 +890,7 @@ define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -904,7 +904,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -918,7 +918,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -932,7 +932,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -946,7 +946,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -960,7 +960,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -974,7 +974,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1058,7 +1058,7 @@ define internal <1 x i16> @_ZN7details13__impl_divremILi1EEEu2CMvbT__sS1_S1_u2CM
- declare <1 x i16> @llvm.genx.rdregioni.v1i16.v1i16.i16(<1 x i16>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1074,7 +1074,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1143,7 +1143,7 @@ define internal <2 x i16> @_ZN7details13__impl_divremILi2EEEu2CMvbT__sS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1350,7 +1350,7 @@ define internal <16 x i16> @_ZN7details13__impl_divremILi16EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1419,7 +1419,7 @@ define internal <32 x i16> @_ZN7details13__impl_divremILi32EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1445,7 +1445,7 @@ define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 si
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1459,7 +1459,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1473,7 +1473,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1487,7 +1487,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -1501,7 +1501,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -1515,7 +1515,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1529,7 +1529,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1730,7 +1730,7 @@ define internal <1 x i32> @_ZN7details13__impl_divremILi1EEEu2CMvbT__iS1_S1_u2CM
- declare <1 x i32> @llvm.genx.rdregioni.v1i32.v1i32.i16(<1 x i32>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1746,7 +1746,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -1932,7 +1932,7 @@ define internal <2 x i32> @_ZN7details13__impl_divremILi2EEEu2CMvbT__iS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2490,7 +2490,7 @@ define internal <16 x i32> @_ZN7details13__impl_divremILi16EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2676,7 +2676,7 @@ define internal <32 x i32> @_ZN7details13__impl_divremILi32EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2702,7 +2702,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2716,7 +2716,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -2730,7 +2730,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2744,7 +2744,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -2758,7 +2758,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -2772,7 +2772,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2786,7 +2786,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2844,7 +2844,7 @@ define internal <1 x i8> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2860,7 +2860,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -2906,7 +2906,7 @@ define internal <2 x i8> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3044,7 +3044,7 @@ define internal <16 x i8> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3090,7 +3090,7 @@ define internal <32 x i8> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3116,7 +3116,7 @@ define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3130,7 +3130,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -3144,7 +3144,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3158,7 +3158,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -3172,7 +3172,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -3186,7 +3186,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3200,7 +3200,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3278,7 +3278,7 @@ define internal <1 x i16> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3294,7 +3294,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3360,7 +3360,7 @@ define internal <2 x i16> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3558,7 +3558,7 @@ define internal <16 x i16> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3624,7 +3624,7 @@ define internal <32 x i16> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3650,7 +3650,7 @@ define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 ze
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3664,7 +3664,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3678,7 +3678,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3692,7 +3692,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -3706,7 +3706,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -3720,7 +3720,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3734,7 +3734,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3892,7 +3892,7 @@ define internal <1 x i32> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3908,7 +3908,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4054,7 +4054,7 @@ define internal <2 x i32> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4492,7 +4492,7 @@ define internal <16 x i32> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4638,7 +4638,7 @@ define internal <32 x i32> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4664,7 +4664,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4678,7 +4678,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4692,7 +4692,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4706,7 +4706,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -4720,7 +4720,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -4734,7 +4734,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4748,7 +4748,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-+define internal void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-   %8 = alloca i8*, align 4
-   %9 = alloca i8*, align 4
-   %10 = alloca i32, align 4
-@@ -4988,7 +4988,7 @@ define internal void @_ZN7details16_cm_print_formatILi128EEEv15cm_surfaceindexju
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i32) #26 !dbg !117 {
-+define internal void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i32) #26 !dbg !117 {
-   %10 = alloca i32, align 4
-   %11 = alloca i8*, align 4
-   %12 = alloca i32, align 4
-@@ -5069,7 +5069,7 @@ define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i3
-   %67 = load i64, i64* %13, align 8, !dbg !159, !tbaa !19
-   %68 = load <5 x i32>, <5 x i32>* %21, align 32, !dbg !160, !tbaa !7
-   call void @_ZN13VaryingWriterC2ERjRPKjiyu2CMvb5_i(%class.VaryingWriter* %23, i32* dereferenceable(4) %19, i32** dereferenceable(4) %14, i32 %66, i64 %67, <5 x i32> %68), !dbg !161
--  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval align 32 %22, %class.VaryingWriter* byval align 32 %23), !dbg !162
-+  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval(%class.UniformWriter) align 32 %22, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %23), !dbg !162
-   br label %70, !dbg !163
- 
- ; <label>:70:                                     ; preds = %60
-@@ -5187,7 +5187,7 @@ define internal <5 x i32> @_Z17get_auxiliary_strv() #28 comdat !dbg !178 {
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %class.VaryingWriter* byval align 32) #25 comdat !dbg !191 {
-+define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !191 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %class.VaryingWriter, align 32
-@@ -5196,7 +5196,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %8 = bitcast %class.UniformWriter* %5 to i8*, !dbg !196
-   %9 = bitcast %class.UniformWriter* %1 to i8*, !dbg !196
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %8, i8* align 32 %9, i32 64, i1 false), !dbg !196, !tbaa.struct !197
--  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval align 32 %5), !dbg !198
-+  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5), !dbg !198
-   br i1 %10, label %16, label %11, !dbg !199
- 
- ; <label>:11:                                     ; preds = %3
-@@ -5204,7 +5204,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %13 = bitcast %class.VaryingWriter* %6 to i8*, !dbg !201
-   %14 = bitcast %class.VaryingWriter* %2 to i8*, !dbg !201
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %13, i8* align 32 %14, i32 64, i1 false), !dbg !201, !tbaa.struct !197
--  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval align 32 %6), !dbg !202
-+  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %6), !dbg !202
-   br label %16, !dbg !199
- 
- ; <label>:16:                                     ; preds = %11, %3
-@@ -5279,7 +5279,7 @@ define internal void @_ZN13VaryingWriterC2ERjRPKjiyu2CMvb5_i(%class.VaryingWrite
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @__num_cores() #29 !dbg !236 {
-+define internal i32 @__num_cores() #29 !dbg !236 {
-   ret i32 -1, !dbg !237
- }
- 
-@@ -8860,7 +8860,7 @@ declare dso_local void @_ZN7details37__cm_intrinsic_impl_svm_scatter_writeIiLi1E
- declare void @llvm.genx.svm.scatter.v1i1.v1i64.v1i32(<1 x i1>, i32, <1 x i64>, <1 x i32>) #27
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval align 32) #25 comdat !dbg !1645 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32) #25 comdat !dbg !1645 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.UniformWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8869,7 +8869,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
-   %7 = bitcast %class.UniformWriter* %4 to i8*, !dbg !1647
-   %8 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1647
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %7, i8* align 32 %8, i32 64, i1 false), !dbg !1647, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %5), !dbg !1648
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval(%class.UniformWriter) align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %5), !dbg !1648
-   ret i1 %9, !dbg !1649
- }
- 
-@@ -8877,7 +8877,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
- declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture readonly, i32, i1) #32
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval align 32) #25 comdat !dbg !1650 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !1650 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.VaryingWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -8886,12 +8886,12 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWrite
-   %7 = bitcast %class.VaryingWriter* %4 to i8*, !dbg !1652
-   %8 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !1652
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %7, i8* align 32 %8, i32 64, i1 false), !dbg !1652, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %5), !dbg !1653
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %5), !dbg !1653
-   ret i1 %9, !dbg !1654
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1655 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1655 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8914,7 +8914,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %22 = bitcast %class.UniformWriter* %5 to i8*, !dbg !1657
-   %23 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1657
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %22, i8* align 32 %23, i32 64, i1 false), !dbg !1657, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %6), !dbg !1658
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %6), !dbg !1658
-   br i1 %24, label %60, label %25, !dbg !1659
- 
- ; <label>:25:                                     ; preds = %3
-@@ -8922,7 +8922,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %27 = bitcast %class.UniformWriter* %7 to i8*, !dbg !1661
-   %28 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1661
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %27, i8* align 32 %28, i32 64, i1 false), !dbg !1661, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %8), !dbg !1662
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval(%class.UniformWriter) align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %8), !dbg !1662
-   br i1 %29, label %60, label %30, !dbg !1663
- 
- ; <label>:30:                                     ; preds = %25
-@@ -8930,7 +8930,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %32 = bitcast %class.UniformWriter* %9 to i8*, !dbg !1665
-   %33 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1665
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %32, i8* align 32 %33, i32 64, i1 false), !dbg !1665, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %10), !dbg !1666
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval(%class.UniformWriter) align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %10), !dbg !1666
-   br i1 %34, label %60, label %35, !dbg !1667
- 
- ; <label>:35:                                     ; preds = %30
-@@ -8938,7 +8938,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %37 = bitcast %class.UniformWriter* %11 to i8*, !dbg !1669
-   %38 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1669
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %37, i8* align 32 %38, i32 64, i1 false), !dbg !1669, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %12), !dbg !1670
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval(%class.UniformWriter) align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %12), !dbg !1670
-   br i1 %39, label %60, label %40, !dbg !1671
- 
- ; <label>:40:                                     ; preds = %35
-@@ -8946,7 +8946,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %42 = bitcast %class.UniformWriter* %13 to i8*, !dbg !1673
-   %43 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1673
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %42, i8* align 32 %43, i32 64, i1 false), !dbg !1673, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %14), !dbg !1674
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval(%class.UniformWriter) align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %14), !dbg !1674
-   br i1 %44, label %60, label %45, !dbg !1675
- 
- ; <label>:45:                                     ; preds = %40
-@@ -8954,7 +8954,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %47 = bitcast %class.UniformWriter* %15 to i8*, !dbg !1677
-   %48 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1677
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %47, i8* align 32 %48, i32 64, i1 false), !dbg !1677, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %16), !dbg !1678
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval(%class.UniformWriter) align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %16), !dbg !1678
-   br i1 %49, label %60, label %50, !dbg !1679
- 
- ; <label>:50:                                     ; preds = %45
-@@ -8962,7 +8962,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %52 = bitcast %class.UniformWriter* %17 to i8*, !dbg !1681
-   %53 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1681
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %52, i8* align 32 %53, i32 64, i1 false), !dbg !1681, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %18), !dbg !1682
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval(%class.UniformWriter) align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %18), !dbg !1682
-   br i1 %54, label %60, label %55, !dbg !1683
- 
- ; <label>:55:                                     ; preds = %50
-@@ -8970,7 +8970,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %57 = bitcast %class.UniformWriter* %19 to i8*, !dbg !1685
-   %58 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1685
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %57, i8* align 32 %58, i32 64, i1 false), !dbg !1685, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %20), !dbg !1686
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval(%class.UniformWriter) align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %20), !dbg !1686
-   br label %60, !dbg !1683
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -8979,7 +8979,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1688 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1688 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9005,7 +9005,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1697 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1697 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9031,7 +9031,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1706 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1706 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9057,7 +9057,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1715 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1715 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9083,7 +9083,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1724 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1724 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9109,7 +9109,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1733 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1733 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9135,7 +9135,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1742 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1742 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9161,7 +9161,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1751 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1751 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9984,7 +9984,7 @@ define internal i32 @_ZN7details18_cm_print_type_oclIPvEENS_18SHADER_PRINTF_TYPE
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2055 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2055 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.VaryingWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -10007,7 +10007,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %22 = bitcast %class.VaryingWriter* %5 to i8*, !dbg !2057
-   %23 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2057
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %22, i8* align 32 %23, i32 64, i1 false), !dbg !2057, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %6), !dbg !2058
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %6), !dbg !2058
-   br i1 %24, label %60, label %25, !dbg !2059
- 
- ; <label>:25:                                     ; preds = %3
-@@ -10015,7 +10015,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %27 = bitcast %class.VaryingWriter* %7 to i8*, !dbg !2061
-   %28 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2061
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %27, i8* align 32 %28, i32 64, i1 false), !dbg !2061, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %8), !dbg !2062
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %8), !dbg !2062
-   br i1 %29, label %60, label %30, !dbg !2063
- 
- ; <label>:30:                                     ; preds = %25
-@@ -10023,7 +10023,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %32 = bitcast %class.VaryingWriter* %9 to i8*, !dbg !2065
-   %33 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2065
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %32, i8* align 32 %33, i32 64, i1 false), !dbg !2065, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %10), !dbg !2066
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %10), !dbg !2066
-   br i1 %34, label %60, label %35, !dbg !2067
- 
- ; <label>:35:                                     ; preds = %30
-@@ -10031,7 +10031,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %37 = bitcast %class.VaryingWriter* %11 to i8*, !dbg !2069
-   %38 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2069
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %37, i8* align 32 %38, i32 64, i1 false), !dbg !2069, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %12), !dbg !2070
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %12), !dbg !2070
-   br i1 %39, label %60, label %40, !dbg !2071
- 
- ; <label>:40:                                     ; preds = %35
-@@ -10039,7 +10039,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %42 = bitcast %class.VaryingWriter* %13 to i8*, !dbg !2073
-   %43 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2073
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %42, i8* align 32 %43, i32 64, i1 false), !dbg !2073, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %14), !dbg !2074
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %14), !dbg !2074
-   br i1 %44, label %60, label %45, !dbg !2075
- 
- ; <label>:45:                                     ; preds = %40
-@@ -10047,7 +10047,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %47 = bitcast %class.VaryingWriter* %15 to i8*, !dbg !2077
-   %48 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2077
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %47, i8* align 32 %48, i32 64, i1 false), !dbg !2077, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %16), !dbg !2078
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %16), !dbg !2078
-   br i1 %49, label %60, label %50, !dbg !2079
- 
- ; <label>:50:                                     ; preds = %45
-@@ -10055,7 +10055,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %52 = bitcast %class.VaryingWriter* %17 to i8*, !dbg !2081
-   %53 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2081
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %52, i8* align 32 %53, i32 64, i1 false), !dbg !2081, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %18), !dbg !2082
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %18), !dbg !2082
-   br i1 %54, label %60, label %55, !dbg !2083
- 
- ; <label>:55:                                     ; preds = %50
-@@ -10063,7 +10063,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %57 = bitcast %class.VaryingWriter* %19 to i8*, !dbg !2085
-   %58 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2085
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %57, i8* align 32 %58, i32 64, i1 false), !dbg !2085, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %20), !dbg !2086
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %20), !dbg !2086
-   br label %60, !dbg !2083
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -10072,7 +10072,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2088 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2088 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10098,7 +10098,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2097 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2097 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10124,7 +10124,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2106 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2106 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10150,7 +10150,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2115 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2115 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10176,7 +10176,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2124 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2124 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10202,7 +10202,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2133 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2133 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10228,7 +10228,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2142 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2142 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10254,7 +10254,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2151 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2151 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-diff --git a/builtins/builtins-cm-64.ll b/builtins/builtins-cm-64.ll
-index 39a2dd8be..375d01bed 100644
---- a/builtins/builtins-cm-64.ll
-+++ b/builtins/builtins-cm-64.ll
-@@ -557,7 +557,7 @@ $_ZN13VaryingWriter12WriteVecElemIPvEEvv = comdat any
- @.str.10 = private unnamed_addr constant [8 x i8] c"%016llX\00", align 1
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -618,7 +618,7 @@ define internal <1 x i8> @_ZN7details13__impl_divremILi1EEEu2CMvbT__cS1_S1_u2CMv
- declare <1 x i8> @llvm.genx.rdregioni.v1i8.v1i8.i16(<1 x i8>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -634,7 +634,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -680,7 +680,7 @@ define internal <2 x i8> @_ZN7details13__impl_divremILi2EEEu2CMvbT__cS1_S1_u2CMv
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -818,7 +818,7 @@ define internal <16 x i8> @_ZN7details13__impl_divremILi16EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -864,7 +864,7 @@ define internal <32 x i8> @_ZN7details13__impl_divremILi32EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -890,7 +890,7 @@ define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -904,7 +904,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -918,7 +918,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -932,7 +932,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -946,7 +946,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -960,7 +960,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -974,7 +974,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1058,7 +1058,7 @@ define internal <1 x i16> @_ZN7details13__impl_divremILi1EEEu2CMvbT__sS1_S1_u2CM
- declare <1 x i16> @llvm.genx.rdregioni.v1i16.v1i16.i16(<1 x i16>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1074,7 +1074,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1143,7 +1143,7 @@ define internal <2 x i16> @_ZN7details13__impl_divremILi2EEEu2CMvbT__sS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1350,7 +1350,7 @@ define internal <16 x i16> @_ZN7details13__impl_divremILi16EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1419,7 +1419,7 @@ define internal <32 x i16> @_ZN7details13__impl_divremILi32EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1445,7 +1445,7 @@ define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 si
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1459,7 +1459,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1473,7 +1473,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1487,7 +1487,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -1501,7 +1501,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -1515,7 +1515,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1529,7 +1529,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1730,7 +1730,7 @@ define internal <1 x i32> @_ZN7details13__impl_divremILi1EEEu2CMvbT__iS1_S1_u2CM
- declare <1 x i32> @llvm.genx.rdregioni.v1i32.v1i32.i16(<1 x i32>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1746,7 +1746,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -1932,7 +1932,7 @@ define internal <2 x i32> @_ZN7details13__impl_divremILi2EEEu2CMvbT__iS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2490,7 +2490,7 @@ define internal <16 x i32> @_ZN7details13__impl_divremILi16EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2676,7 +2676,7 @@ define internal <32 x i32> @_ZN7details13__impl_divremILi32EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2702,7 +2702,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2716,7 +2716,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -2730,7 +2730,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2744,7 +2744,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -2758,7 +2758,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -2772,7 +2772,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2786,7 +2786,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2844,7 +2844,7 @@ define internal <1 x i8> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2860,7 +2860,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -2906,7 +2906,7 @@ define internal <2 x i8> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3044,7 +3044,7 @@ define internal <16 x i8> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3090,7 +3090,7 @@ define internal <32 x i8> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3116,7 +3116,7 @@ define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3130,7 +3130,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -3144,7 +3144,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3158,7 +3158,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -3172,7 +3172,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -3186,7 +3186,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3200,7 +3200,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3278,7 +3278,7 @@ define internal <1 x i16> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3294,7 +3294,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3360,7 +3360,7 @@ define internal <2 x i16> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3558,7 +3558,7 @@ define internal <16 x i16> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3624,7 +3624,7 @@ define internal <32 x i16> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3650,7 +3650,7 @@ define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 ze
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3664,7 +3664,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3678,7 +3678,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3692,7 +3692,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -3706,7 +3706,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -3720,7 +3720,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3734,7 +3734,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3892,7 +3892,7 @@ define internal <1 x i32> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3908,7 +3908,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4054,7 +4054,7 @@ define internal <2 x i32> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4492,7 +4492,7 @@ define internal <16 x i32> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4638,7 +4638,7 @@ define internal <32 x i32> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4664,7 +4664,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4678,7 +4678,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4692,7 +4692,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4706,7 +4706,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -4720,7 +4720,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -4734,7 +4734,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4748,7 +4748,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-+define internal void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-   %8 = alloca i8*, align 8
-   %9 = alloca i8*, align 8
-   %10 = alloca i32, align 4
-@@ -5070,7 +5070,7 @@ define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i3
-   %67 = load i64, i64* %13, align 8, !dbg !159, !tbaa !19
-   %68 = load <5 x i32>, <5 x i32>* %21, align 32, !dbg !160, !tbaa !7
-   call void @_ZN13VaryingWriterC2ERyRPKjiyu2CMvb5_i(%class.VaryingWriter* %23, i64* dereferenceable(8) %19, i32** dereferenceable(8) %14, i32 %66, i64 %67, <5 x i32> %68), !dbg !161
--  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval align 32 %22, %class.VaryingWriter* byval align 32 %23), !dbg !162
-+  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval(%class.UniformWriter) align 32 %22, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %23), !dbg !162
-   br label %70, !dbg !163
- 
- ; <label>:70:                                     ; preds = %60
-@@ -5188,7 +5188,7 @@ define internal <5 x i32> @_Z17get_auxiliary_strv() #28 comdat !dbg !178 {
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %class.VaryingWriter* byval align 32) #25 comdat !dbg !191 {
-+define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !191 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %class.VaryingWriter, align 32
-@@ -5197,7 +5197,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %8 = bitcast %class.UniformWriter* %5 to i8*, !dbg !196
-   %9 = bitcast %class.UniformWriter* %1 to i8*, !dbg !196
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %8, i8* align 32 %9, i64 64, i1 false), !dbg !196, !tbaa.struct !197
--  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval align 32 %5), !dbg !198
-+  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5), !dbg !198
-   br i1 %10, label %16, label %11, !dbg !199
- 
- ; <label>:11:                                     ; preds = %3
-@@ -5205,7 +5205,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %13 = bitcast %class.VaryingWriter* %6 to i8*, !dbg !201
-   %14 = bitcast %class.VaryingWriter* %2 to i8*, !dbg !201
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %13, i8* align 32 %14, i64 64, i1 false), !dbg !201, !tbaa.struct !197
--  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval align 32 %6), !dbg !202
-+  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %6), !dbg !202
-   br label %16, !dbg !199
- 
- ; <label>:16:                                     ; preds = %11, %3
-@@ -5280,7 +5280,7 @@ define internal void @_ZN13VaryingWriterC2ERyRPKjiyu2CMvb5_i(%class.VaryingWrite
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @__num_cores() #29 !dbg !236 {
-+define internal i32 @__num_cores() #29 !dbg !236 {
-   ret i32 -1, !dbg !237
- }
- 
-@@ -8870,7 +8870,7 @@ declare dso_local void @_ZN7details37__cm_intrinsic_impl_svm_scatter_writeIiLi1E
- declare void @llvm.genx.svm.scatter.v1i1.v1i64.v1i32(<1 x i1>, i32, <1 x i64>, <1 x i32>) #27
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval align 32) #25 comdat !dbg !1645 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32) #25 comdat !dbg !1645 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.UniformWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8879,7 +8879,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
-   %7 = bitcast %class.UniformWriter* %4 to i8*, !dbg !1647
-   %8 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1647
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %7, i8* align 32 %8, i64 64, i1 false), !dbg !1647, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %5), !dbg !1648
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval(%class.UniformWriter) align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %5), !dbg !1648
-   ret i1 %9, !dbg !1649
- }
- 
-@@ -8887,7 +8887,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
- declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1) #32
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval align 32) #25 comdat !dbg !1650 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !1650 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.VaryingWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -8896,12 +8896,12 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWrite
-   %7 = bitcast %class.VaryingWriter* %4 to i8*, !dbg !1652
-   %8 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !1652
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %7, i8* align 32 %8, i64 64, i1 false), !dbg !1652, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %5), !dbg !1653
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %5), !dbg !1653
-   ret i1 %9, !dbg !1654
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1655 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1655 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8924,7 +8924,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %22 = bitcast %class.UniformWriter* %5 to i8*, !dbg !1657
-   %23 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1657
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %22, i8* align 32 %23, i64 64, i1 false), !dbg !1657, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %6), !dbg !1658
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %6), !dbg !1658
-   br i1 %24, label %60, label %25, !dbg !1659
- 
- ; <label>:25:                                     ; preds = %3
-@@ -8932,7 +8932,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %27 = bitcast %class.UniformWriter* %7 to i8*, !dbg !1661
-   %28 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1661
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %27, i8* align 32 %28, i64 64, i1 false), !dbg !1661, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %8), !dbg !1662
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval(%class.UniformWriter) align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %8), !dbg !1662
-   br i1 %29, label %60, label %30, !dbg !1663
- 
- ; <label>:30:                                     ; preds = %25
-@@ -8940,7 +8940,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %32 = bitcast %class.UniformWriter* %9 to i8*, !dbg !1665
-   %33 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1665
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %32, i8* align 32 %33, i64 64, i1 false), !dbg !1665, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %10), !dbg !1666
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval(%class.UniformWriter) align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %10), !dbg !1666
-   br i1 %34, label %60, label %35, !dbg !1667
- 
- ; <label>:35:                                     ; preds = %30
-@@ -8948,7 +8948,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %37 = bitcast %class.UniformWriter* %11 to i8*, !dbg !1669
-   %38 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1669
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %37, i8* align 32 %38, i64 64, i1 false), !dbg !1669, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %12), !dbg !1670
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval(%class.UniformWriter) align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %12), !dbg !1670
-   br i1 %39, label %60, label %40, !dbg !1671
- 
- ; <label>:40:                                     ; preds = %35
-@@ -8956,7 +8956,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %42 = bitcast %class.UniformWriter* %13 to i8*, !dbg !1673
-   %43 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1673
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %42, i8* align 32 %43, i64 64, i1 false), !dbg !1673, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %14), !dbg !1674
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval(%class.UniformWriter) align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %14), !dbg !1674
-   br i1 %44, label %60, label %45, !dbg !1675
- 
- ; <label>:45:                                     ; preds = %40
-@@ -8964,7 +8964,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %47 = bitcast %class.UniformWriter* %15 to i8*, !dbg !1677
-   %48 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1677
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %47, i8* align 32 %48, i64 64, i1 false), !dbg !1677, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %16), !dbg !1678
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval(%class.UniformWriter) align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %16), !dbg !1678
-   br i1 %49, label %60, label %50, !dbg !1679
- 
- ; <label>:50:                                     ; preds = %45
-@@ -8972,7 +8972,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %52 = bitcast %class.UniformWriter* %17 to i8*, !dbg !1681
-   %53 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1681
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %52, i8* align 32 %53, i64 64, i1 false), !dbg !1681, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %18), !dbg !1682
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval(%class.UniformWriter) align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %18), !dbg !1682
-   br i1 %54, label %60, label %55, !dbg !1683
- 
- ; <label>:55:                                     ; preds = %50
-@@ -8980,7 +8980,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %57 = bitcast %class.UniformWriter* %19 to i8*, !dbg !1685
-   %58 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1685
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %57, i8* align 32 %58, i64 64, i1 false), !dbg !1685, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %20), !dbg !1686
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval(%class.UniformWriter) align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %20), !dbg !1686
-   br label %60, !dbg !1683
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -8989,7 +8989,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1688 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1688 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9015,7 +9015,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1697 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1697 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9041,7 +9041,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1706 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1706 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9067,7 +9067,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1715 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1715 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9093,7 +9093,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1724 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1724 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9119,7 +9119,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1733 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1733 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9145,7 +9145,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1742 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1742 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9171,7 +9171,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1751 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1751 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10013,7 +10013,7 @@ define internal i32 @_ZN7details18_cm_print_type_oclIPvEENS_18SHADER_PRINTF_TYPE
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2061 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2061 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.VaryingWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -10036,7 +10036,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %22 = bitcast %class.VaryingWriter* %5 to i8*, !dbg !2063
-   %23 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2063
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %22, i8* align 32 %23, i64 64, i1 false), !dbg !2063, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %6), !dbg !2064
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %6), !dbg !2064
-   br i1 %24, label %60, label %25, !dbg !2065
- 
- ; <label>:25:                                     ; preds = %3
-@@ -10044,7 +10044,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %27 = bitcast %class.VaryingWriter* %7 to i8*, !dbg !2067
-   %28 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2067
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %27, i8* align 32 %28, i64 64, i1 false), !dbg !2067, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %8), !dbg !2068
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %8), !dbg !2068
-   br i1 %29, label %60, label %30, !dbg !2069
- 
- ; <label>:30:                                     ; preds = %25
-@@ -10052,7 +10052,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %32 = bitcast %class.VaryingWriter* %9 to i8*, !dbg !2071
-   %33 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2071
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %32, i8* align 32 %33, i64 64, i1 false), !dbg !2071, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %10), !dbg !2072
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %10), !dbg !2072
-   br i1 %34, label %60, label %35, !dbg !2073
- 
- ; <label>:35:                                     ; preds = %30
-@@ -10060,7 +10060,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %37 = bitcast %class.VaryingWriter* %11 to i8*, !dbg !2075
-   %38 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2075
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %37, i8* align 32 %38, i64 64, i1 false), !dbg !2075, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %12), !dbg !2076
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %12), !dbg !2076
-   br i1 %39, label %60, label %40, !dbg !2077
- 
- ; <label>:40:                                     ; preds = %35
-@@ -10068,7 +10068,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %42 = bitcast %class.VaryingWriter* %13 to i8*, !dbg !2079
-   %43 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2079
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %42, i8* align 32 %43, i64 64, i1 false), !dbg !2079, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %14), !dbg !2080
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %14), !dbg !2080
-   br i1 %44, label %60, label %45, !dbg !2081
- 
- ; <label>:45:                                     ; preds = %40
-@@ -10076,7 +10076,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %47 = bitcast %class.VaryingWriter* %15 to i8*, !dbg !2083
-   %48 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2083
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %47, i8* align 32 %48, i64 64, i1 false), !dbg !2083, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %16), !dbg !2084
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %16), !dbg !2084
-   br i1 %49, label %60, label %50, !dbg !2085
- 
- ; <label>:50:                                     ; preds = %45
-@@ -10084,7 +10084,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %52 = bitcast %class.VaryingWriter* %17 to i8*, !dbg !2087
-   %53 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2087
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %52, i8* align 32 %53, i64 64, i1 false), !dbg !2087, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %18), !dbg !2088
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %18), !dbg !2088
-   br i1 %54, label %60, label %55, !dbg !2089
- 
- ; <label>:55:                                     ; preds = %50
-@@ -10092,7 +10092,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %57 = bitcast %class.VaryingWriter* %19 to i8*, !dbg !2091
-   %58 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2091
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %57, i8* align 32 %58, i64 64, i1 false), !dbg !2091, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %20), !dbg !2092
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %20), !dbg !2092
-   br label %60, !dbg !2089
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -10101,7 +10101,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2094 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2094 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10127,7 +10127,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2103 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2103 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10153,7 +10153,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2112 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2112 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10179,7 +10179,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2121 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2121 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10205,7 +10205,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2130 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2130 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10231,7 +10231,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2139 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2139 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10257,7 +10257,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2148 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2148 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10283,7 +10283,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2157 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2157 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
diff --git a/srcpkgs/ispc/template b/srcpkgs/ispc/template
index 9c3acb42a9cf..3a85ff2605af 100644
--- a/srcpkgs/ispc/template
+++ b/srcpkgs/ispc/template
@@ -1,7 +1,7 @@
 # Template file for 'ispc'
 pkgname=ispc
-version=1.15.0
-revision=2
+version=1.17.0
+revision=1
 archs="x86_64*"
 build_style=cmake
 configure_args="-DISPC_NO_DUMPS=ON -DARM_ENABLED=OFF"
@@ -12,7 +12,7 @@ maintainer="Andrea Brancaleoni <abc@pompel.me>"
 license="BSD-3-Clause"
 homepage="https://ispc.github.io"
 distfiles="https://github.com/ispc/ispc/archive/v${version}.tar.gz"
-checksum=2658ff00dc045ac9fcefbf6bd26dffaf723b059a942a27df91bbb61bc503a285
+checksum=37fb1055d6c6b232e112d8d50145d726824ed4d8da93a7396315dceba6c76e62
 nocross=yes
 nopie=yes
 

From 10a88bd0ffd79badb198e4ab66db1f7edef2db44 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Tue, 3 May 2022 01:20:03 +0200
Subject: [PATCH 27/29] llvm14: switch to runtimes build.

https://reviews.llvm.org/rGac7031b2b2fa
https://reviews.llvm.org/D110338#3022952
---
 srcpkgs/llvm14/template | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
index 3e7e6ab2c00b..e731aa76130a 100644
--- a/srcpkgs/llvm14/template
+++ b/srcpkgs/llvm14/template
@@ -51,7 +51,8 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
-_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
+_enabled_projects="clang;clang-tools-extra;lld"
+_enabled_runtimes="compiler-rt;libcxx;libcxxabi;libunwind"
 
 _lldb_enable=yes
 _libomp_enable=no
@@ -67,9 +68,8 @@ esac
 
 subpackages="clang-tools-extra"
 
-# must go before clang
 if [ "$_libomp_enable" = "yes" ]; then
-	_enabled_projects+=";openmp"
+	_enabled_runtimes+=";openmp"
 	subpackages+=" libomp libomp-devel"
 	# because of cmake nonsense referencing libomptarget.so.*
 	depends+=" libomp>=${version}_${revision}"
@@ -88,6 +88,7 @@ fi
 subpackages+=" lld lld-devel"
 
 configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+configure_args+=" -DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}"
 
 post_patch() {
 	if [ "$_lldb_enable" = "yes" ]; then
@@ -156,7 +157,8 @@ pre_configure() {
 		CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
 			CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
-			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
+			-DLLVM_ENABLE_PROJECTS=${_enabled_projects} \
+			-DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}
 		make ${makejobs} -C utils/TableGen
 		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen

From 146e8973a3a031fe88de96c429d08996d24b41c7 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 14:07:14 +0200
Subject: [PATCH 28/29] zig: fix build.

---
 srcpkgs/zig/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/zig/template b/srcpkgs/zig/template
index 728c5a64e9df..c175de62c5f7 100644
--- a/srcpkgs/zig/template
+++ b/srcpkgs/zig/template
@@ -5,7 +5,7 @@ revision=2
 archs="x86_64* aarch64*"
 build_style=cmake
 make_cmd=make
-makedepends="clang llvm12 lld-devel"
+makedepends="clang12 llvm12 lld12-devel"
 short_desc="Programming language designed for robustness, optimality, and clarity"
 maintainer="Isaac Freund <mail@isaacfreund.com>"
 license="MIT"

From 7a7da20ee1e26c60fdd72fdfc8eb99a92c376651 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 03:39:58 +0200
Subject: [PATCH 29/29] llvm14: fix build.

---
 .../llvm14/files/llvm-Config-llvm-config.h    |  9 +++++
 srcpkgs/llvm14/template                       | 40 +++++++++----------
 2 files changed, 27 insertions(+), 22 deletions(-)
 create mode 100644 srcpkgs/llvm14/files/llvm-Config-llvm-config.h

diff --git a/srcpkgs/llvm14/files/llvm-Config-llvm-config.h b/srcpkgs/llvm14/files/llvm-Config-llvm-config.h
new file mode 100644
index 000000000000..2fa08c9be696
--- /dev/null
+++ b/srcpkgs/llvm14/files/llvm-Config-llvm-config.h
@@ -0,0 +1,9 @@
+#include <bits/wordsize.h>
+
+#if __WORDSIZE == 32
+#include "llvm-config-32.h"
+#elif __WORDSIZE == 64
+#include "llvm-config-64.h"
+#else
+#error "Unknown word size"
+#endif
diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
index e731aa76130a..e89eb958b11b 100644
--- a/srcpkgs/llvm14/template
+++ b/srcpkgs/llvm14/template
@@ -90,6 +90,8 @@ subpackages+=" lld lld-devel"
 configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
 configure_args+=" -DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}"
 
+triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
+
 post_patch() {
 	if [ "$_lldb_enable" = "yes" ]; then
 		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
@@ -136,8 +138,6 @@ post_patch() {
 }
 
 pre_configure() {
-	local triplet
-
 	# Vastly reduce size of debugging symbols:
 	CFLAGS=${CFLAGS/ -g/ -g1}
 	CXXFLAGS=${CXXFLAGS/ -g/ -g1}
@@ -168,6 +168,9 @@ pre_configure() {
 		cd ../..
 	fi
 
+	mkdir -p gnu
+	touch gnu/stubs-32.h
+
 	case "$XBPS_TARGET_MACHINE" in
 		i686*) _arch="X86";;
 		x86_64*) _arch="X86";;
@@ -180,8 +183,6 @@ pre_configure() {
 		riscv64*) _arch="RISCV64";;
 	esac
 
-	triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
-
 	configure_args+=" -DLLVM_TARGET_ARCH=${_arch}"
 	configure_args+=" -DLLVM_HOST_TRIPLE=${triplet}"
 	configure_args+=" -DLLVM_DEFAULT_TARGET_TRIPLE=${triplet}"
@@ -251,7 +252,7 @@ clang-tools-extra_package() {
 		vmove "usr/lib/libclangQuery*"
 		vmove "usr/lib/libclangTidy*"
 		vmove "usr/share/clang/*tidy*"
-		vmove usr/share/doc/clang-tools
+		vmove usr/share/doc/LLVM/clang-tools
 		vmove usr/share/man/man1/extraclangtools.1
 		vmove usr/share/man/man1/diagtool.1
 	}
@@ -273,7 +274,7 @@ clang_package() {
 		vmove "usr/lib/libclang*.a"
 		vmove "usr/lib/libclang*.so"
 		vmove usr/share/clang
-		vmove usr/share/doc/clang
+		vmove usr/share/doc/LLVM/clang
 		vmove usr/share/man/man1/clang.1
 	}
 }
@@ -301,7 +302,7 @@ lld_package() {
 		vmove usr/bin/wasm-ld
 		vmove usr/bin/ld.lld*
 		vmove usr/bin/ld64.lld*
-		vmove usr/share/doc/lld
+		vmove usr/share/doc/LLVM/lld
 	}
 }
 
@@ -342,7 +343,7 @@ lldb-devel_package() {
 llvm-libunwind_package() {
 	short_desc+=" - libunwind"
 	pkg_install() {
-		vmove "usr/lib/libunwind.so.*"
+		vmove "usr/lib/${triplet}/libunwind.so.*"
 	}
 }
 
@@ -351,18 +352,17 @@ llvm-libunwind-devel_package() {
 	depends="llvm-libunwind>=${version}_${revision}"
 	conflicts="libunwind-devel>=0"
 	pkg_install() {
-		vmove usr/lib/libunwind.so
-		vmove usr/lib/libunwind.a
+		vmove usr/lib/${triplet}/libunwind.so
+		vmove usr/lib/${triplet}/libunwind.a
 		vmove "usr/include/*unwind*"
 		vmove usr/include/mach-o
-		vmove usr/share/doc/libunwind
 	}
 }
 
 libcxxabi_package() {
 	short_desc+=" - low level support for libc++"
 	pkg_install() {
-		vmove "usr/lib/libc++abi.so.*"
+		vmove "usr/lib/${triplet}/libc++abi.so.*"
 	}
 }
 
@@ -370,8 +370,8 @@ libcxxabi-devel_package() {
 	short_desc+=" - low level support for libc++ - development files"
 	depends="libcxxabi>=${version}_${revision}"
 	pkg_install() {
-		vmove usr/lib/libc++abi.so
-		vmove usr/lib/libc++abi.a
+		vmove usr/lib/${triplet}/libc++abi.so
+		vmove usr/lib/${triplet}/libc++abi.a
 		vmove "usr/include/*cxxabi*"
 	}
 }
@@ -379,7 +379,7 @@ libcxxabi-devel_package() {
 libcxx_package() {
 	short_desc+=" - C++ standard library"
 	pkg_install() {
-		vmove "usr/lib/libc++.so.*"
+		vmove "usr/lib/${triplet}/libc++.so.*"
 	}
 }
 
@@ -387,11 +387,10 @@ libcxx-devel_package() {
 	short_desc+=" - C++ standard library - development files"
 	depends="libcxx>=${version}_${revision}"
 	pkg_install() {
-		vmove usr/lib/libc++.so
-		vmove usr/lib/libc++.a
-		vmove usr/lib/libc++experimental.a
+		vmove usr/lib/${triplet}/libc++.so
+		vmove usr/lib/${triplet}/libc++.a
+		vmove usr/lib/${triplet}/libc++experimental.a
 		vmove usr/include/c++
-		vmove usr/share/doc/libcxx
 	}
 }
 
@@ -401,7 +400,6 @@ libomp_package() {
 		vmove usr/lib/libomp.so
 		vmove "usr/lib/libomptarget.rtl.*.so"
 		vmove usr/lib/libarcher.so
-		vmove "usr/lib/libomp*.so.*"
 	}
 }
 
@@ -413,8 +411,6 @@ libomp-devel_package() {
 		vmove "usr/lib/libarcher*"
 		vmove "usr/include/omp*.h"
 		vmove "usr/lib/clang/${version}/include/omp*.h"
-		vmove usr/share/man/man1/llvmopenmp.1
-		vmove usr/share/doc/openmp
 	}
 }
 

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: [PR PATCH] [Updated] Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (4 preceding siblings ...)
  2022-05-04 20:26 ` prez
@ 2022-05-04 20:50 ` prez
  2022-05-05  1:10 ` prez
                   ` (63 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-05-04 20:50 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 667 bytes --]

There is an updated pull request by prez against master on the void-packages repository

https://github.com/prez/void-packages llvm
https://github.com/void-linux/void-packages/pull/36962

Llvm14
Supersedes https://github.com/void-linux/void-packages/pull/36229, https://github.com/void-linux/void-packages/pull/34800 - thank you @motorto and @DBLouis.

Updated patches, ping @q66 .

@ifreund todo: zig. Since it depends on `lld-devel`, I guess we need to split out `lld12`? Would appreciate your help with this, I don't want to wait for the next zig version.

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/36962.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-llvm-36962.patch --]
[-- Type: text/x-diff, Size: 540956 bytes --]

From af3214d006e7bc77ca1201c220be4ce4b8bebd34 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:15:06 +0200
Subject: [PATCH 01/29] New package: llvm14-14.0.3

---
 common/shlibs                                 |  16 +-
 srcpkgs/clang                                 |   2 +-
 srcpkgs/clang-analyzer                        |   2 +-
 srcpkgs/clang-tools-extra                     |   2 +-
 srcpkgs/libclang                              |   2 +-
 srcpkgs/libclang-cpp                          |   2 +-
 srcpkgs/libcxx                                |   2 +-
 srcpkgs/libcxx-devel                          |   2 +-
 srcpkgs/libcxxabi                             |   2 +-
 srcpkgs/libcxxabi-devel                       |   2 +-
 srcpkgs/libllvm14                             |   1 +
 srcpkgs/libomp                                |   2 +-
 srcpkgs/libomp-devel                          |   2 +-
 srcpkgs/lld                                   |   2 +-
 srcpkgs/lld-devel                             |   2 +-
 srcpkgs/lldb                                  |   2 +-
 srcpkgs/lldb-devel                            |   2 +-
 srcpkgs/llvm-libunwind                        |   2 +-
 srcpkgs/llvm-libunwind-devel                  |   2 +-
 .../patches/clang-002-add-musl-triples.patch  | 110 +++++
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 +
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ++
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 ++
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 +++
 srcpkgs/llvm14/patches/libcxx-musl.patch      |  26 ++
 srcpkgs/llvm14/patches/libcxx-ppc.patch       |  22 +
 .../llvm14/patches/libcxx-ssp-nonshared.patch |  11 +
 srcpkgs/llvm14/patches/libcxxabi-dl.patch     |  25 ++
 srcpkgs/llvm14/patches/lldb-musl.patch        |  31 ++
 srcpkgs/llvm14/patches/llvm-001-musl.patch    |  57 +++
 .../patches/llvm-002-musl-ppc64-elfv2.patch   |  30 ++
 .../patches/llvm-003-ppc-secureplt.patch      |  11 +
 .../patches/llvm-004-override-opt.patch       |  18 +
 .../llvm14/patches/llvm-005-ppc-bigpic.patch  |  36 ++
 .../patches/llvm-006-aarch64-mf_exec.patch    |  25 ++
 srcpkgs/llvm14/template                       | 424 ++++++++++++++++++
 srcpkgs/llvm14/update                         |   3 +
 37 files changed, 1018 insertions(+), 20 deletions(-)
 create mode 120000 srcpkgs/libllvm14
 create mode 100644 srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
 create mode 100644 srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
 create mode 100644 srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
 create mode 100644 srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-ppc.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxxabi-dl.patch
 create mode 100644 srcpkgs/llvm14/patches/lldb-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-001-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-004-override-opt.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
 create mode 100644 srcpkgs/llvm14/template
 create mode 100644 srcpkgs/llvm14/update

diff --git a/common/shlibs b/common/shlibs
index 4114151662fb..81acc39defb4 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -975,11 +975,12 @@ libuchardet.so.0 uchardet-0.0.6_1
 libgtksourceviewmm-3.0.so.0 gtksourceviewmm-3.2.0_1
 libyajl.so.2 yajl-2.0.1_1
 libconfuse.so.2 confuse-3.2.1_1
-liblldb.so.12 lldb-12.0.0_1
-libclang.so.12 libclang-12.0.0_1
-libclang-cpp.so.12 libclang-cpp-12.0.0_1
+liblldb.so.14 lldb-14.0.3_1
+libclang.so.14 libclang-14.0.3_1
+libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
+libLLVM-14.so libllvm14-14.0.3_1
 libisofs.so.6 libisofs-0.6.24_1
 libmpack.so.0 libmpack-1.0.5_1
 libGeoIP.so.1 libgeoip-1.4.8_1
@@ -4152,3 +4153,12 @@ librz_bin.so.0.3.4 rizin-0.3.4_1
 libaravis-0.8.so.0 libaravis-0.8.21_1
 libLimeSuite.so.20.10-1 LimeSuite-20.10.0_1
 libnvme.so.1 libnvme-1.0_1
+libomp.so libomp-14.0.3_1
+libomptarget.rtl.amdgpu.so libomp-14.0.3_1
+libomptarget.rtl.cuda.so libomp-14.0.3_1
+libomptarget.rtl.x86_64.so libomp-14.0.3_1
+libarcher.so libomp-14.0.3_1
+libomptarget.so libomp-14.0.3_1
+liblldbIntelFeatures.so.14 lldb-14.0.3_1
+libLTO.so.14 llvm14-14.0.3_1
+libRemarks.so.14 llvm14-14.0.3_1
diff --git a/srcpkgs/clang b/srcpkgs/clang
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang
+++ b/srcpkgs/clang
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/clang-analyzer b/srcpkgs/clang-analyzer
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang-analyzer
+++ b/srcpkgs/clang-analyzer
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/clang-tools-extra b/srcpkgs/clang-tools-extra
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang-tools-extra
+++ b/srcpkgs/clang-tools-extra
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libclang b/srcpkgs/libclang
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libclang
+++ b/srcpkgs/libclang
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libclang-cpp b/srcpkgs/libclang-cpp
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libclang-cpp
+++ b/srcpkgs/libclang-cpp
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxx b/srcpkgs/libcxx
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxx
+++ b/srcpkgs/libcxx
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxx-devel b/srcpkgs/libcxx-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxx-devel
+++ b/srcpkgs/libcxx-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxxabi b/srcpkgs/libcxxabi
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxxabi
+++ b/srcpkgs/libcxxabi
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxxabi-devel b/srcpkgs/libcxxabi-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxxabi-devel
+++ b/srcpkgs/libcxxabi-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libllvm14 b/srcpkgs/libllvm14
new file mode 120000
index 000000000000..1d42ed7632a6
--- /dev/null
+++ b/srcpkgs/libllvm14
@@ -0,0 +1 @@
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libomp b/srcpkgs/libomp
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libomp
+++ b/srcpkgs/libomp
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libomp-devel b/srcpkgs/libomp-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libomp-devel
+++ b/srcpkgs/libomp-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lld b/srcpkgs/lld
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lld
+++ b/srcpkgs/lld
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lld-devel b/srcpkgs/lld-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lld-devel
+++ b/srcpkgs/lld-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lldb b/srcpkgs/lldb
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lldb
+++ b/srcpkgs/lldb
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lldb-devel b/srcpkgs/lldb-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lldb-devel
+++ b/srcpkgs/lldb-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm-libunwind b/srcpkgs/llvm-libunwind
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/llvm-libunwind
+++ b/srcpkgs/llvm-libunwind
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm-libunwind-devel b/srcpkgs/llvm-libunwind-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/llvm-libunwind-devel
+++ b/srcpkgs/llvm-libunwind-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
new file mode 100644
index 000000000000..7b640e102bed
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
@@ -0,0 +1,110 @@
+--- a/clang/lib/Driver/ToolChains/Gnu.cpp
++++ b/clang/lib/Driver/ToolChains/Gnu.cpp
+@@ -2083,7 +2083,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
+                                              "armv7hl-redhat-linux-gnueabi",
+                                              "armv6hl-suse-linux-gnueabi",
+-                                             "armv7hl-suse-linux-gnueabi"};
++                                             "armv7hl-suse-linux-gnueabi",
++                                             "armv7l-linux-gnueabihf"};
+   static const char *const ARMebLibDirs[] = {"/lib"};
+   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi"};
+   static const char *const ARMebHFTriples[] = {
+@@ -2151,8 +2152,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
+   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
+   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
+-                                             "powerpcle-unknown-linux-gnu",
+-                                             "powerpcle-linux-musl"};
++                                             "powerpcle-unknown-linux-gnu"};
+
+   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
+   static const char *const PPC64Triples[] = {
+@@ -2231,6 +2231,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+     return;
+   }
+
++  if (TargetTriple.isMusl()) {
++    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
++    static const char *const ARMHFMuslTriples[] = {
++        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
++    };
++    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
++    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
++    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
++    static const char *const MIPSMuslTriples[] = {
++        "mips-linux-musl", "mipsel-linux-musl",
++        "mipsel-linux-muslhf", "mips-linux-muslhf"
++    };
++    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
++    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
++    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
++    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
++
++    switch (TargetTriple.getArch()) {
++    case llvm::Triple::aarch64:
++      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      break;
++    case llvm::Triple::arm:
++      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
++      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
++        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
++      } else {
++        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
++      }
++      break;
++    case llvm::Triple::x86_64:
++      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      break;
++    case llvm::Triple::x86:
++      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      break;
++    case llvm::Triple::mips:
++      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
++      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
++      break;
++    case llvm::Triple::ppc:
++      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      break;
++    case llvm::Triple::ppcle:
++      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      break;
++    case llvm::Triple::ppc64:
++      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      break;
++    case llvm::Triple::ppc64le:
++      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      break;
++    default:
++      break;
++    }
++    TripleAliases.push_back(TargetTriple.str());
++    if (TargetTriple.str() != BiarchTriple.str())
++      BiarchTripleAliases.push_back(BiarchTriple.str());
++    return;
++  }
++
+   // Android targets should not use GNU/Linux tools or libraries.
+   if (TargetTriple.isAndroid()) {
+     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
new file mode 100644
index 000000000000..47128af79b7f
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
@@ -0,0 +1,13 @@
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -490,10 +490,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+     Loader = "ld.so.1";
+     break;
+   case llvm::Triple::ppc64:
+-    LibDir = "lib64";
+-    Loader =
+-        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
+-    break;
+   case llvm::Triple::ppc64le:
+     LibDir = "lib64";
+     Loader =
diff --git a/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
new file mode 100644
index 000000000000..21fc8003c5f1
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
@@ -0,0 +1,48 @@
+--- a/clang/lib/Basic/Targets/PPC.h
++++ b/clang/lib/Basic/Targets/PPC.h
+@@ -415,11 +415,10 @@ public:
+       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
+     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
+       DataLayout = "e-m:e-i64:64-n32:64";
+-      ABI = "elfv2";
+     } else {
+       DataLayout = "E-m:e-i64:64-n32:64";
+-      ABI = "elfv1";
+     }
++    ABI = "elfv2";
+ 
+     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
+       LongDoubleWidth = LongDoubleAlign = 64;
+--- a/clang/lib/CodeGen/TargetInfo.cpp
++++ b/clang/lib/CodeGen/TargetInfo.cpp
+@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
+       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
+ 
+     if (Triple.isOSBinFormatELF()) {
+-      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
+-      if (getTarget().getABI() == "elfv2")
+-        Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      if (getTarget().getABI() == "elfv1")
++        Kind = PPC64_SVR4_ABIInfo::ELFv1;
+       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
+ 
+       return SetCGInfo(
+--- a/clang/lib/Driver/ToolChains/Clang.cpp
++++ b/clang/lib/Driver/ToolChains/Clang.cpp
+@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
+   const llvm::Triple &T = getToolChain().getTriple();
+   if (T.isOSBinFormatELF()) {
+     switch (getToolChain().getArch()) {
+-    case llvm::Triple::ppc64: {
+-      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
+-          T.isOSOpenBSD() || T.isMusl())
+-        ABIName = "elfv2";
+-      else
+-        ABIName = "elfv1";
+-      break;
+-    }
++    case llvm::Triple::ppc64:
+     case llvm::Triple::ppc64le:
+       ABIName = "elfv2";
+       break;
diff --git a/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch b/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
new file mode 100644
index 000000000000..4135bfd4486a
--- /dev/null
+++ b/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
@@ -0,0 +1,35 @@
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
+@@ -74,6 +74,10 @@
+ #include <sys/utsname.h>
+ #endif
+
++#if SANITIZER_LINUX && defined(__powerpc__)
++#include <asm/ptrace.h>
++#endif
++
+ #if SANITIZER_LINUX && !SANITIZER_ANDROID
+ #include <sys/personality.h>
+ #endif
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
+@@ -92,7 +92,7 @@
+ # include <utime.h>
+ # include <sys/ptrace.h>
+ #    if defined(__mips64) || defined(__aarch64__) || defined(__arm__) || \
+-        defined(__hexagon__) || SANITIZER_RISCV64
++        defined(__hexagon__) || defined(__powerpc__) || SANITIZER_RISCV64
+ #      include <asm/ptrace.h>
+ #      ifdef __arm__
+ typedef struct user_fpregs elf_fpregset_t;
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
+@@ -31,7 +31,7 @@
+ #include <sys/types.h> // for pid_t
+ #include <sys/uio.h> // for iovec
+ #include <elf.h> // for NT_PRSTATUS
+-#if (defined(__aarch64__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
++#if (defined(__aarch64__) || defined(__powerpc__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
+ // GLIBC 2.20+ sys/user does not include asm/ptrace.h
+ # include <asm/ptrace.h>
+ #endif
diff --git a/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch b/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
new file mode 100644
index 000000000000..d0b61c80c897
--- /dev/null
+++ b/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
@@ -0,0 +1,62 @@
+--- a/compiler-rt/lib/xray/xray_powerpc64.inc
++++ b/compiler-rt/lib/xray/xray_powerpc64.inc
+@@ -12,7 +12,13 @@
+ 
+ #include <cstdint>
+ #include <mutex>
++#ifdef __GLIBC__
+ #include <sys/platform/ppc.h>
++#else
++#include <cctype>
++#include <cstring>
++#include <cstdlib>
++#endif
+ 
+ #include "xray_defs.h"
+ 
+@@ -20,13 +26,45 @@ namespace __xray {
+ 
+ ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
+   CPU = 0;
++#ifdef __GLIBC__
+   return __ppc_get_timebase();
++#else
++  return __builtin_ppc_get_timebase();
++#endif
+ }
+ 
+ inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
+   static std::mutex M;
+   std::lock_guard<std::mutex> Guard(M);
++#ifdef __GLIBC__
+   return __ppc_get_timebase_freq();
++#else
++  /* FIXME: a less dirty implementation? */
++  static uint64_t base;
++  if (!base) {
++    FILE *f = fopen("/proc/cpuinfo", "rb");
++    if (f) {
++      ssize_t nr;
++      /* virtually always big enough to hold the line */
++      char buf[512];
++      while (fgets(buf, sizeof(buf), f)) {
++        char *ret = strstr(buf, "timebase");
++        if (!ret) {
++          continue;
++        }
++        ret += sizeof("timebase") - 1;
++        ret = strchr(ret, ':');
++        if (!ret) {
++          continue;
++        }
++        base = strtoul(ret + 1, nullptr, 10);
++        break;
++      }
++      fclose(f);
++    }
++  }
++  return base;
++#endif
+ }
+ 
+ inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
diff --git a/srcpkgs/llvm14/patches/libcxx-musl.patch b/srcpkgs/llvm14/patches/libcxx-musl.patch
new file mode 100644
index 000000000000..bbd31ffc2cb1
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-musl.patch
@@ -0,0 +1,26 @@
+--- a/libcxx/include/locale
++++ b/libcxx/include/locale
+@@ -742,7 +742,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
+         typename remove_reference<decltype(errno)>::type __save_errno = errno;
+         errno = 0;
+         char *__p2;
++#if defined(__linux__) && !defined(__GLIBC__)
++        long long __ll = strtoll(__a, &__p2, __base);
++#else
+         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
++#endif
+         typename remove_reference<decltype(errno)>::type __current_errno = errno;
+         if (__current_errno == 0)
+             errno = __save_errno;
+@@ -782,7 +786,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
+         typename remove_reference<decltype(errno)>::type __save_errno = errno;
+         errno = 0;
+         char *__p2;
++#if defined(__linux__) && !defined(__GLIBC__)
++        unsigned long long __ll = strtoull(__a, &__p2, __base);
++#else
+         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
++#endif
+         typename remove_reference<decltype(errno)>::type __current_errno = errno;
+         if (__current_errno == 0)
+             errno = __save_errno;
diff --git a/srcpkgs/llvm14/patches/libcxx-ppc.patch b/srcpkgs/llvm14/patches/libcxx-ppc.patch
new file mode 100644
index 000000000000..7a92f8004e1c
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-ppc.patch
@@ -0,0 +1,22 @@
+This ensures `is_iec559` is defined correctly under all long double ABIs,
+including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__`
+is not defined on gcc.
+
+--- a/libcxx/include/limits
++++ b/libcxx/include/limits
+@@ -426,8 +426,14 @@ protected:
+     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
+     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
+ 
+-#if (defined(__ppc__) || defined(__ppc64__))
++#if defined(__powerpc__) || defined(__powerpc64__)
++#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__)
++    /* IEEE 754 quadruple or double precision */
++    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
++#else
++    /* 128-bit IBM double-double */
+     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
++#endif
+ #else
+     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
+ #endif
diff --git a/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch b/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
new file mode 100644
index 000000000000..70292beb2fcd
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
@@ -0,0 +1,11 @@
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -769,6 +769,8 @@ function(cxx_link_system_libraries target)
+     target_link_libraries(${target} PRIVATE atomic)
+   endif()
+ 
++#ssp  target_link_libraries(${target} PRIVATE ssp_nonshared)
++
+   if (MINGW)
+     target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
+   endif()
diff --git a/srcpkgs/llvm14/patches/libcxxabi-dl.patch b/srcpkgs/llvm14/patches/libcxxabi-dl.patch
new file mode 100644
index 000000000000..3a15f9db8c98
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxxabi-dl.patch
@@ -0,0 +1,25 @@
+Also link to -ldl to prevent undefined references.
+
+--- a/libcxxabi/src/CMakeLists.txt
++++ b/libcxxabi/src/CMakeLists.txt
+@@ -73,6 +73,7 @@
+   endif()
+ 
+   add_library_flags_if(LIBCXXABI_HAS_C_LIB c)
++  add_library_flags_if(LIBCXXABI_HAS_C_LIB dl)
+ endif()
+ 
+ if (LIBCXXABI_USE_LLVM_UNWINDER)
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -745,6 +745,10 @@
+     target_link_libraries(${target} PRIVATE m)
+   endif()
+ 
++  if (LIBCXX_HAS_C_LIB)
++    target_link_libraries(${target} PRIVATE dl)
++  endif()
++
+   if (LIBCXX_HAS_RT_LIB)
+     target_link_libraries(${target} PRIVATE rt)
+   endif()
diff --git a/srcpkgs/llvm14/patches/lldb-musl.patch b/srcpkgs/llvm14/patches/lldb-musl.patch
new file mode 100644
index 000000000000..601c0d138523
--- /dev/null
+++ b/srcpkgs/llvm14/patches/lldb-musl.patch
@@ -0,0 +1,31 @@
+--- a/lldb/source/Plugins/Process/Linux/Procfs.h
++++ b/lldb/source/Plugins/Process/Linux/Procfs.h
+@@ -10,21 +10,12 @@
+ // sys/procfs.h on Android/Linux for all supported architectures.
+ 
+ #include <sys/ptrace.h>
++#include <asm/ptrace.h>
+ 
+-#ifdef __ANDROID__
+-#if defined(__arm64__) || defined(__aarch64__)
+-typedef unsigned long elf_greg_t;
+-typedef elf_greg_t
+-    elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
+-typedef struct user_fpsimd_state elf_fpregset_t;
+-#ifndef NT_FPREGSET
+-#define NT_FPREGSET NT_PRFPREG
+-#endif // NT_FPREGSET
+-#elif defined(__mips__)
+-#ifndef NT_FPREGSET
+-#define NT_FPREGSET NT_PRFPREG
+-#endif // NT_FPREGSET
+-#endif
+-#else // __ANDROID__
++#if !defined(__GLIBC__) && defined(__powerpc__)
++#define pt_regs musl_pt_regs
++#include <sys/procfs.h>
++#undef pt_regs
++#else
+ #include <sys/procfs.h>
+-#endif // __ANDROID__
++#endif
diff --git a/srcpkgs/llvm14/patches/llvm-001-musl.patch b/srcpkgs/llvm14/patches/llvm-001-musl.patch
new file mode 100644
index 000000000000..f2a3f8d62813
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-001-musl.patch
@@ -0,0 +1,57 @@
+From faca3fbd15d0c3108493c3c54cd93138e049ac43 Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe@gmail.com>
+Date: Tue, 8 Sep 2015 22:03:02 +0200
+Subject: [PATCH 3/3] musl
+
+---
+ include/llvm/Analysis/TargetLibraryInfo.h | 9 +++++++++
+ lib/Support/DynamicLibrary.cpp            | 2 +-
+ lib/Support/Unix/Signals.inc              | 6 +++---
+ utils/unittest/googletest/src/gtest.cc    | 1 +
+ 5 files changed, 17 insertions(+), 6 deletions(-)
+
+diff --git a/include/llvm/Analysis/TargetLibraryInfo.h b/include/llvm/Analysis/TargetLibraryInfo.h
+index 34a8a1e3..1214ece5 100644
+--- a/llvm/include/llvm/Analysis/TargetLibraryInfo.h
++++ b/llvm/include/llvm/Analysis/TargetLibraryInfo.h
+@@ -18,6 +18,15 @@
+ #include "llvm/IR/PassManager.h"
+ #include "llvm/Pass.h"
+ 
++#undef fopen64
++#undef fseeko64
++#undef fstat64
++#undef fstatvfs64
++#undef ftello64
++#undef lstat64
++#undef stat64
++#undef tmpfile64
++
+ namespace llvm {
+ template <typename T> class ArrayRef;
+ class Triple;
+diff --git a/lib/Support/Unix/DynamicLibrary.inc b/lib/Support/Unix/DynamicLibrary.inc
+index a2a37996..2f86c470 100644
+--- a/llvm/lib/Support/Unix/DynamicLibrary.inc
++++ b/llvm/lib/Support/Unix/DynamicLibrary.inc
+@@ -102,7 +102,7 @@ static void *DoSearch(const char* SymbolName) {
+ 
+ // This macro returns the address of a well-known, explicit symbol
+ #define EXPLICIT_SYMBOL(SYM) \
+-   if (!strcmp(SymbolName, #SYM)) return &SYM
++   if (!strcmp(SymbolName, #SYM)) return (void *)&SYM
+ 
+ // Under glibc we have a weird situation. The stderr/out/in symbols are both
+ // macros and global variables because of standards requirements. So, we
+diff --git a/utils/unittest/googletest/src/gtest.cc b/utils/unittest/googletest/src/gtest.cc
+index d882ab2e..f1fb12d0 100644
+--- a/llvm/utils/unittest/googletest/src/gtest.cc
++++ b/llvm/utils/unittest/googletest/src/gtest.cc
+@@ -128,6 +128,7 @@
+ 
+ #if GTEST_CAN_STREAM_RESULTS_
+ # include <arpa/inet.h>  // NOLINT
++# include <sys/socket.h>  // NOLINT
+ # include <netdb.h>  // NOLINT
+ # include <sys/socket.h>  // NOLINT
+ # include <sys/types.h>  // NOLINT
diff --git a/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch b/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
new file mode 100644
index 000000000000..0071d964bd37
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
@@ -0,0 +1,30 @@
+This patches LLVM to use ELFv2 on ppc64 unconditionally unless overridden. We
+need this because unlike most distros we use ELFv2 for both glibc and musl
+on big endian ppc64.
+
+diff --git a/lib/Target/PowerPC/PPCTargetMachine.cpp b/lib/Target/PowerPC/PPCTargetMachine.cpp
+index 0634833e..b7cbc2e7 100644
+--- a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
++++ b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
+@@ -222,9 +222,8 @@ static PPCTargetMachine::PPCABI computeTargetABI(const Triple &TT,
+ 
+   switch (TT.getArch()) {
+   case Triple::ppc64le:
+-    return PPCTargetMachine::PPC_ABI_ELFv2;
+   case Triple::ppc64:
+-    return PPCTargetMachine::PPC_ABI_ELFv1;
++    return PPCTargetMachine::PPC_ABI_ELFv2;
+   default:
+     return PPCTargetMachine::PPC_ABI_UNKNOWN;
+   }
+diff --git a/test/CodeGen/PowerPC/ppc64-elf-abi.ll b/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+index 8b1cf6b5..296a2afa 100644
+--- a/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
++++ b/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+@@ -1,4 +1,5 @@
+-; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv1
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-musl < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv1 < %s | FileCheck %s -check-prefix=CHECK-ELFv1
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv2 < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
diff --git a/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch b/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
new file mode 100644
index 000000000000..b5d15974375d
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
@@ -0,0 +1,11 @@
+--- a/llvm/lib/Target/PowerPC/PPCSubtarget.cpp
++++ b/llvm/lib/Target/PowerPC/PPCSubtarget.cpp
+@@ -165,7 +165,7 @@ void PPCSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) {
+ 
+   if ((TargetTriple.isOSFreeBSD() && TargetTriple.getOSMajorVersion() >= 13) ||
+       TargetTriple.isOSNetBSD() || TargetTriple.isOSOpenBSD() ||
+-      TargetTriple.isMusl())
++      isTargetLinux())
+     SecurePlt = true;
+ 
+   if (HasSPE && IsPPC64)
diff --git a/srcpkgs/llvm14/patches/llvm-004-override-opt.patch b/srcpkgs/llvm14/patches/llvm-004-override-opt.patch
new file mode 100644
index 000000000000..51d0e4b31b32
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-004-override-opt.patch
@@ -0,0 +1,18 @@
+This allows us to override the optimization level as not all platforms can
+deal with -O3.
+
+--- a/llvm/CMakeLists.txt
++++ b/llvm/CMakeLists.txt
+@@ -918,6 +918,12 @@ if( MINGW AND NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" )
+   llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "-O2")
+ endif()
+ 
++set(VOID_CXX_OPT_FLAGS "" CACHE STRING "Optimization level to use")
++
++if (NOT VOID_CXX_OPT_FLAGS STREQUAL "")
++    llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "${VOID_CXX_OPT_FLAGS}")
++endif()
++
+ # Put this before tblgen. Else we have a circular dependence.
+ add_subdirectory(lib/Demangle)
+ add_subdirectory(lib/Support)
diff --git a/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch b/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
new file mode 100644
index 000000000000..d332687b9d92
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
@@ -0,0 +1,36 @@
+From f3dbdd49c06bfafc1d6138094cf42889c14d38b6 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Sun, 3 Nov 2019 10:57:27 -0600
+Subject: [PATCH] [LLVM][PowerPC] Assume BigPIC if no PIC level is specified
+
+---
+ llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp  | 2 +-
+ llvm/lib/Target/PowerPC/PPCMCInstLower.cpp | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/Target/PowerPC/PPCAsmPrinter.cpp b/lib/Target/PowerPC/PPCAsmPrinter.cpp
+index cce21f32..87ca5f9b 100644
+--- a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
++++ b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
+@@ -520,7 +520,7 @@ void PPCAsmPrinter::EmitTlsCall(const MachineInstr *MI,
+ 
+   // Add 32768 offset to the symbol so we follow up the latest GOT/PLT ABI.
+   if (Kind == MCSymbolRefExpr::VK_PLT && Subtarget->isSecurePlt() &&
+-      M->getPICLevel() == PICLevel::BigPIC)
++      M->getPICLevel() != PICLevel::SmallPIC)
+     TlsRef = MCBinaryExpr::createAdd(
+         TlsRef, MCConstantExpr::create(32768, OutContext), OutContext);
+   const MachineOperand &MO = MI->getOperand(2);
+diff --git a/lib/Target/PowerPC/PPCMCInstLower.cpp b/lib/Target/PowerPC/PPCMCInstLower.cpp
+index 5cc180d7..a5b02565 100644
+--- a/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
++++ b/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
+@@ -117,7 +117,7 @@ static MCOperand GetSymbolRef(const MachineOperand &MO, const MCSymbol *Symbol,
+   const MCExpr *Expr = MCSymbolRefExpr::create(Symbol, RefKind, Ctx);
+   // If -msecure-plt -fPIC, add 32768 to symbol.
+   if (Subtarget->isSecurePlt() && TM.isPositionIndependent() &&
+-      M->getPICLevel() == PICLevel::BigPIC &&
++      M->getPICLevel() != PICLevel::SmallPIC &&
+       MO.getTargetFlags() == PPCII::MO_PLT)
+     Expr =
+         MCBinaryExpr::createAdd(Expr, MCConstantExpr::create(32768, Ctx), Ctx);
diff --git a/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch b/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
new file mode 100644
index 000000000000..a00abd216665
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
@@ -0,0 +1,25 @@
+Fix failures in AllocationTests/MappedMemoryTest.* on aarch64:
+
+    Failing Tests (8):
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.AllocAndRelease/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.DuplicateNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.EnabledWrite/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.MultipleAllocAndRelease/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.SuccessiveNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.UnalignedNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.ZeroNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.ZeroSizeNear/3
+
+Upstream-Issue: https://bugs.llvm.org/show_bug.cgi?id=14278#c10
+
+--- a/llvm/lib/Support/Unix/Memory.inc
++++ b/llvm/lib/Support/Unix/Memory.inc
+@@ -58,7 +58,7 @@ static int getPosixProtectionFlags(unsigned Flags) {
+     return PROT_READ | PROT_WRITE | PROT_EXEC;
+   case llvm::sys::Memory::MF_EXEC:
+ #if (defined(__FreeBSD__) || defined(__POWERPC__) || defined (__ppc__) || \
+-     defined(_POWER) || defined(_ARCH_PPC))
++     defined(_POWER) || defined(_ARCH_PPC) || (defined(__linux__) && defined(__aarch64__)))
+     // On PowerPC, having an executable page that has no read permission
+     // can have unintended consequences.  The function InvalidateInstruction-
+     // Cache uses instructions dcbf and icbi, both of which are treated by
diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
new file mode 100644
index 000000000000..3e7e6ab2c00b
--- /dev/null
+++ b/srcpkgs/llvm14/template
@@ -0,0 +1,424 @@
+# Template file for 'llvm14'
+pkgname=llvm14
+version=14.0.3
+revision=1
+wrksrc="llvm-project-${version}.src"
+build_wrksrc=llvm
+build_style=cmake
+configure_args="
+ -DCMAKE_BUILD_TYPE=Release -Wno-dev
+ -DENABLE_LINKER_BUILD_ID=YES
+ -DLLDB_USE_SYSTEM_SIX=YES
+ -DLIBCXX_CXX_ABI=libcxxabi
+ -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
+ -DLIBCXXABI_USE_LLVM_UNWINDER=YES
+ -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
+ -DLIBOMP_ENABLE_SHARED=YES
+ -DLIBOMP_INSTALL_ALIASES=NO
+ -DLLVM_INCLUDE_DOCS=YES
+ -DLLVM_BUILD_DOCS=YES
+ -DLLVM_ENABLE_SPHINX=YES
+ -DSPHINX_WARNINGS_AS_ERRORS=NO
+ -DLLVM_INSTALL_UTILS=YES
+ -DLLVM_BUILD_LLVM_DYLIB=YES
+ -DLLVM_LINK_LLVM_DYLIB=YES
+ -DLLVM_ENABLE_RTTI=YES
+ -DLLVM_ENABLE_FFI=YES
+ -DLLVM_BINUTILS_INCDIR=/usr/include"
+hostmakedepends="perl python3 zlib-devel libffi-devel swig python3-Sphinx
+ python3-recommonmark python3-sphinx-automodapi"
+makedepends="python3-devel zlib-devel elfutils-devel libffi-devel libedit-devel
+ libxml2-devel binutils-devel libatomic-devel"
+depends="libllvm14>=${version}_${revision}"
+short_desc="Low Level Virtual Machine"
+maintainer="q66 <daniel@octaforge.org>"
+license="Apache-2.0"
+homepage="https://www.llvm.org"
+distfiles="https://github.com/llvm/llvm-project/releases/download/llvmorg-${version}/llvm-project-${version}.src.tar.xz"
+checksum=44d3e7a784d5cf805e72853bb03f218bd1058d448c03ca883dabbebc99204e0c
+lib32disabled=yes
+python_version=3
+
+if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+	configure_args+=" -DLIBCXX_HAS_MUSL_LIBC=YES"
+	makedepends+=" libexecinfo-devel"
+	depends+=" libexecinfo-devel"
+fi
+
+# "operand out of range" assembler failures
+case "$XBPS_TARGET_MACHINE" in
+	ppc64*) ;;
+	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
+esac
+
+_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
+
+_lldb_enable=yes
+_libomp_enable=no
+
+case "$XBPS_TARGET_MACHINE" in
+	ppc64le*) ;;
+	ppc*|i686*) _lldb_enable=no ;;
+esac
+
+case "$XBPS_TARGET_MACHINE" in
+	x86_64*|aarch64*|ppc64*) _libomp_enable=yes;;
+esac
+
+subpackages="clang-tools-extra"
+
+# must go before clang
+if [ "$_libomp_enable" = "yes" ]; then
+	_enabled_projects+=";openmp"
+	subpackages+=" libomp libomp-devel"
+	# because of cmake nonsense referencing libomptarget.so.*
+	depends+=" libomp>=${version}_${revision}"
+fi
+
+subpackages+=" clang clang-analyzer libclang libclang-cpp
+ llvm-libunwind llvm-libunwind-devel libcxx libcxx-devel
+ libcxxabi libcxxabi-devel libllvm14"
+
+if [ "$_lldb_enable" = "yes" ]; then
+	# XXX fails to cross compile due to python
+	_enabled_projects+=";lldb"
+	subpackages+=" lldb lldb-devel"
+fi
+
+subpackages+=" lld lld-devel"
+
+configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+
+post_patch() {
+	if [ "$_lldb_enable" = "yes" ]; then
+		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+			vsed -i 's|__ptrace_request|int|g' \
+				${wrksrc}/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
+		fi
+		# disable docs for lldb as they fail to generate
+		vsed -i '/add_subdirectory(docs)/d' \
+			${wrksrc}/lldb/CMakeLists.txt
+	fi
+
+	# update config.guess for better platform detection
+	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
+		${wrksrc}/llvm/cmake
+
+	# fix linker failures on some archs
+	vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
+		${wrksrc}/libcxxabi/cmake/config-ix.cmake
+	vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
+		${wrksrc}/libcxxabi/cmake/config-ix.cmake
+
+	# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*) ;;
+		ppc*-musl|i686-musl|mips*-musl)
+			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
+				${wrksrc}/libunwind/src/CMakeLists.txt
+			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
+				${wrksrc}/libcxxabi/src/CMakeLists.txt
+			vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
+			;;
+	esac
+
+	case "$XBPS_TARGET_MACHINE" in
+		x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
+			vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
+				${wrksrc}/compiler-rt/CMakeLists.txt
+			;;
+		arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
+			vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
+				${wrksrc}/compiler-rt/cmake/config-ix.cmake
+			;;
+	esac
+}
+
+pre_configure() {
+	local triplet
+
+	# Vastly reduce size of debugging symbols:
+	CFLAGS=${CFLAGS/ -g/ -g1}
+	CXXFLAGS=${CXXFLAGS/ -g/ -g1}
+
+	# since gcc9, the build likes to blow up for ppc32 apparently because
+	# of clang being too large for a 24-bit relative call to the PLT, so
+	# optimize for size instead
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*) ;;
+		mips*-musl|ppc*) configure_args+=" -DVOID_CXX_OPT_FLAGS=-Os" ;;
+	esac
+
+	if [ "$CROSS_BUILD" ]; then
+		msg_normal "Building host tblgen\n"
+		mkdir -p build/HOST
+		cd build/HOST
+		CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
+			CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
+			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
+			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
+		make ${makejobs} -C utils/TableGen
+		make ${makejobs} -C tools/clang/utils/TableGen
+		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
+		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
+		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
+		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
+		cd ../..
+	fi
+
+	case "$XBPS_TARGET_MACHINE" in
+		i686*) _arch="X86";;
+		x86_64*) _arch="X86";;
+		armv5*) _arch="Armv5te";;
+		armv6*) _arch="Armv6";;
+		armv7*) _arch="Armv7";;
+		aarch64*) _arch="AArch64";;
+		mips*) _arch="Mips";;
+		ppc*) _arch="PowerPC";;
+		riscv64*) _arch="RISCV64";;
+	esac
+
+	triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
+
+	configure_args+=" -DLLVM_TARGET_ARCH=${_arch}"
+	configure_args+=" -DLLVM_HOST_TRIPLE=${triplet}"
+	configure_args+=" -DLLVM_DEFAULT_TARGET_TRIPLE=${triplet}"
+}
+
+do_install() {
+	cd build
+	cmake -DCMAKE_INSTALL_PREFIX=${DESTDIR}/usr -P cmake_install.cmake
+
+	# Required for multilib.
+	if [ "$XBPS_TARGET_MACHINE" = "x86_64" ]; then
+		for _header in llvm-config; do
+			mv ${DESTDIR}/usr/include/llvm/Config/${_header}{,-64}.h
+			vinstall ${FILESDIR}/llvm-Config-${_header}.h 644 \
+				usr/include/llvm/Config ${_header}.h
+		done
+	fi
+
+	# Remove llvm-config-host in cross builds.
+	if [ "$CROSS_BUILD" ]; then
+		rm -f ${DESTDIR}/usr/bin/llvm-config-host
+	fi
+
+	# Install libcxxabi headers
+	vinstall ${wrksrc}/libcxxabi/include/__cxxabi_config.h 644 usr/include
+	vinstall ${wrksrc}/libcxxabi/include/cxxabi.h 644 usr/include
+
+	# Install libunwind headers
+	vinstall ${wrksrc}/libunwind/include/__libunwind_config.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/libunwind.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/unwind.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/mach-o/compact_unwind_encoding.h \
+		644 usr/include/mach-o
+}
+
+clang-analyzer_package() {
+	pycompile_dirs="usr/share/scan-view"
+	depends="clang-${version}_${revision} python3 perl"
+	short_desc+=" - A source code analysis framework"
+	homepage="https://clang-analyzer.llvm.org/"
+	pkg_install() {
+		vmove usr/share/man/man1/scan-build.1
+		vmove "/usr/bin/scan-*"
+		vmove "/usr/share/scan-*"
+		vmove "/usr/libexec/*analyzer"
+	}
+}
+
+clang-tools-extra_package() {
+	lib32disabled=yes
+	depends="clang-${version}_${revision} python3"
+	short_desc+=" - Extra Clang tools"
+	homepage="https://clang.llvm.org/extra/"
+	pkg_install() {
+		vmove usr/include/clang-tidy
+		vmove usr/bin/clang-apply-replacements
+		vmove usr/bin/clang-query
+		vmove usr/bin/clang-rename
+		vmove usr/bin/clang-tidy
+		vmove usr/bin/diagtool
+		vmove usr/bin/find-all-symbols
+		vmove usr/bin/hmaptool
+		vmove usr/bin/modularize
+		vmove usr/bin/pp-trace
+		vmove usr/bin/sancov
+		vmove "usr/lib/libclangApplyReplacements*"
+		vmove "usr/lib/libclangQuery*"
+		vmove "usr/lib/libclangTidy*"
+		vmove "usr/share/clang/*tidy*"
+		vmove usr/share/doc/clang-tools
+		vmove usr/share/man/man1/extraclangtools.1
+		vmove usr/share/man/man1/diagtool.1
+	}
+}
+
+clang_package() {
+	lib32disabled=yes
+	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
+	 libclang-${version}_${revision}"
+	short_desc+=" - C language family frontend"
+	homepage="https://clang.llvm.org/"
+	pkg_install() {
+		vmove usr/include/clang
+		vmove usr/include/clang-c
+		vmove "usr/bin/*clang*"
+		vmove usr/bin/c-index-test
+		vmove usr/lib/clang
+		vmove usr/lib/cmake/clang
+		vmove "usr/lib/libclang*.a"
+		vmove "usr/lib/libclang*.so"
+		vmove usr/share/clang
+		vmove usr/share/doc/clang
+		vmove usr/share/man/man1/clang.1
+	}
+}
+
+libclang_package() {
+	short_desc+=" - C frontend runtime library"
+	pkg_install() {
+		vmove "usr/lib/libclang.so.*"
+	}
+}
+
+libclang-cpp_package() {
+	short_desc+=" - C frontend runtime library (C++ interface)"
+	pkg_install() {
+		vmove "usr/lib/libclang-cpp.so.*"
+	}
+}
+
+lld_package() {
+	lib32disabled=yes
+	short_desc+=" - linker"
+	homepage="https://lld.llvm.org"
+	pkg_install() {
+		vmove usr/bin/lld*
+		vmove usr/bin/wasm-ld
+		vmove usr/bin/ld.lld*
+		vmove usr/bin/ld64.lld*
+		vmove usr/share/doc/lld
+	}
+}
+
+lld-devel_package() {
+	lib32disabled=yes
+	short_desc+=" - linker - development files"
+	homepage="https://lld.llvm.org"
+	depends="lld>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include/lld
+		vmove usr/lib/cmake/lld
+		vmove "usr/lib/liblld*a"
+	}
+}
+
+lldb_package() {
+	lib32disabled=yes
+	depends+=" python3-six"
+	short_desc+=" - LLDB debugger"
+	homepage="https://lldb.llvm.org/"
+	pkg_install() {
+		vmove usr/bin/*lldb*
+		vmove usr/lib/liblldb*so.*
+		vmove /usr/lib/python*
+	}
+}
+
+lldb-devel_package() {
+	lib32disabled=yes
+	depends="lldb>=${version}_${revision}"
+	short_desc+=" - LLDB debugger - development files"
+	pkg_install() {
+		vmove usr/include/lldb
+		vmove "usr/lib/liblldb*.so"
+	}
+}
+
+llvm-libunwind_package() {
+	short_desc+=" - libunwind"
+	pkg_install() {
+		vmove "usr/lib/libunwind.so.*"
+	}
+}
+
+llvm-libunwind-devel_package() {
+	short_desc+=" - libunwind - development files"
+	depends="llvm-libunwind>=${version}_${revision}"
+	conflicts="libunwind-devel>=0"
+	pkg_install() {
+		vmove usr/lib/libunwind.so
+		vmove usr/lib/libunwind.a
+		vmove "usr/include/*unwind*"
+		vmove usr/include/mach-o
+		vmove usr/share/doc/libunwind
+	}
+}
+
+libcxxabi_package() {
+	short_desc+=" - low level support for libc++"
+	pkg_install() {
+		vmove "usr/lib/libc++abi.so.*"
+	}
+}
+
+libcxxabi-devel_package() {
+	short_desc+=" - low level support for libc++ - development files"
+	depends="libcxxabi>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/lib/libc++abi.so
+		vmove usr/lib/libc++abi.a
+		vmove "usr/include/*cxxabi*"
+	}
+}
+
+libcxx_package() {
+	short_desc+=" - C++ standard library"
+	pkg_install() {
+		vmove "usr/lib/libc++.so.*"
+	}
+}
+
+libcxx-devel_package() {
+	short_desc+=" - C++ standard library - development files"
+	depends="libcxx>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/lib/libc++.so
+		vmove usr/lib/libc++.a
+		vmove usr/lib/libc++experimental.a
+		vmove usr/include/c++
+		vmove usr/share/doc/libcxx
+	}
+}
+
+libomp_package() {
+	short_desc+=" - Clang OpenMP support library"
+	pkg_install() {
+		vmove usr/lib/libomp.so
+		vmove "usr/lib/libomptarget.rtl.*.so"
+		vmove usr/lib/libarcher.so
+		vmove "usr/lib/libomp*.so.*"
+	}
+}
+
+libomp-devel_package() {
+	short_desc+=" - Clang OpenMP support library - development files"
+	depends="libomp>=${version}_${revision}"
+	pkg_install() {
+		vmove "usr/lib/libomp*.so"
+		vmove "usr/lib/libarcher*"
+		vmove "usr/include/omp*.h"
+		vmove "usr/lib/clang/${version}/include/omp*.h"
+		vmove usr/share/man/man1/llvmopenmp.1
+		vmove usr/share/doc/openmp
+	}
+}
+
+libllvm14_package() {
+	short_desc+=" - runtime library"
+	pkg_install() {
+		vmove "usr/lib/libLLVM-*.so*"
+	}
+}
diff --git a/srcpkgs/llvm14/update b/srcpkgs/llvm14/update
new file mode 100644
index 000000000000..e95cf26b3586
--- /dev/null
+++ b/srcpkgs/llvm14/update
@@ -0,0 +1,3 @@
+site="https://github.com/llvm/llvm-project/releases"
+pattern="llvmorg-\K(\d+.){2}\d+(-rc\d+)?"
+ignore="*-rc*"

From 8438d62e818f41e2c2663bb6ed0e30d730118cad Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:16:07 +0200
Subject: [PATCH 02/29] llvm: update to 14.0.3.

---
 srcpkgs/llvm/template | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/llvm/template b/srcpkgs/llvm/template
index a92db6f94f9f..d226c61c734e 100644
--- a/srcpkgs/llvm/template
+++ b/srcpkgs/llvm/template
@@ -1,10 +1,10 @@
 # Template file for 'llvm'
 pkgname=llvm
-version=12.0.0
+version=14.0.3
 revision=1
 build_style=meta
-depends="llvm12"
-replaces="llvm11>=0 llvm10>=0 llvm9>=0 llvm8>=0 llvm7>=0 llvm6.0>=0 llvm3.9>=0"
+depends="llvm14"
+replaces="llvm13>=0 llvm12>=0 llvm11>=0 llvm10>=0 llvm9>=0 llvm8>=0 llvm7>=0 llvm6.0>=0 llvm3.9>=0"
 short_desc="LLVM meta package"
 maintainer="Enno Boland <gottox@voidlinux.org>"
 license="Public Domain"

From 92edaa1759b7b52e98fd6a3adf5a761334849304 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:36:32 +0200
Subject: [PATCH 03/29] llvm12: drop non-llvm components

---
 ...clang-001-fix-unwind-chain-inclusion.patch |  44 ---
 .../patches/clang-002-add-musl-triples.patch  | 110 -------
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 -
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ---
 .../compiler-rt-aarch64-ucontext.patch        |  11 -
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 --
 .../llvm12/patches/compiler-rt-size_t.patch   |  10 -
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 ----
 srcpkgs/llvm12/patches/libcxx-musl.patch      |  26 --
 srcpkgs/llvm12/patches/libcxx-ppc.patch       |  22 --
 .../llvm12/patches/libcxx-ssp-nonshared.patch |  11 -
 srcpkgs/llvm12/patches/libcxxabi-dl.patch     |  25 --
 srcpkgs/llvm12/patches/libunwind-ppc32.patch  |  63 ----
 srcpkgs/llvm12/patches/lldb-musl.patch        |  31 --
 .../llvm12/patches/ppc32-compiler-rt.patch    |  21 --
 srcpkgs/llvm12/template                       | 301 +-----------------
 16 files changed, 1 insertion(+), 832 deletions(-)
 delete mode 100644 srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-size_t.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-ppc.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxxabi-dl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libunwind-ppc32.patch
 delete mode 100644 srcpkgs/llvm12/patches/lldb-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/ppc32-compiler-rt.patch

diff --git a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
deleted file mode 100644
index e4eaa7783e7a..000000000000
--- a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 352974169f0d2b5da3d5321f588f5e3b5941330e Mon Sep 17 00:00:00 2001
-From: Andrea Brancaleoni <miwaxe@gmail.com>
-Date: Tue, 8 Sep 2015 22:14:57 +0200
-Subject: [PATCH 2/7] fix unwind chain inclusion
-
----
- lib/Headers/unwind.h | 9 +++++----
- 1 file changed, 5 insertions(+), 4 deletions(-)
-
-diff --git a/lib/Headers/unwind.h b/lib/Headers/unwind.h
-index 303d792..44e10cc 100644
---- a/clang/lib/Headers/unwind.h
-+++ b/clang/lib/Headers/unwind.h
-@@ -9,9 +9,6 @@
- 
- /* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/
- 
--#ifndef __CLANG_UNWIND_H
--#define __CLANG_UNWIND_H
--
- #if defined(__APPLE__) && __has_include_next(<unwind.h>)
- /* Darwin (from 11.x on) provide an unwind.h. If that's available,
-  * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE,
-@@ -39,6 +36,9 @@
- # endif
- #else
- 
-+#ifndef __CLANG_UNWIND_H
-+#define __CLANG_UNWIND_H
-+
- #include <stdint.h>
- 
- #ifdef __cplusplus
-@@ -322,6 +322,7 @@ _Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *);
- }
- #endif
- 
-+#endif /* __CLANG_UNWIND_H */
-+
- #endif
- 
--#endif /* __CLANG_UNWIND_H */
--- 
-2.5.1
diff --git a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
deleted file mode 100644
index 25688d40dbc2..000000000000
--- a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
+++ /dev/null
@@ -1,110 +0,0 @@
---- a/clang/lib/Driver/ToolChains/Gnu.cpp
-+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
-@@ -2086,7 +2086,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
-                                              "armv7hl-redhat-linux-gnueabi",
-                                              "armv6hl-suse-linux-gnueabi",
--                                             "armv7hl-suse-linux-gnueabi"};
-+                                             "armv7hl-suse-linux-gnueabi",
-+                                             "armv7l-linux-gnueabihf"};
-   static const char *const ARMebLibDirs[] = {"/lib"};
-   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
-                                              "armeb-linux-androideabi"};
-@@ -2153,8 +2154,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
-   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
-   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
--                                             "powerpcle-unknown-linux-gnu",
--                                             "powerpcle-linux-musl"};
-+                                             "powerpcle-unknown-linux-gnu"};
- 
-   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
-   static const char *const PPC64Triples[] = {
-@@ -2235,6 +2235,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-     return;
-   }
- 
-+  if (TargetTriple.isMusl()) {
-+    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
-+    static const char *const ARMHFMuslTriples[] = {
-+        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
-+    };
-+    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
-+    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
-+    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
-+    static const char *const MIPSMuslTriples[] = {
-+        "mips-linux-musl", "mipsel-linux-musl",
-+        "mipsel-linux-muslhf", "mips-linux-muslhf"
-+    };
-+    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
-+    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
-+    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
-+    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
-+
-+    switch (TargetTriple.getArch()) {
-+    case llvm::Triple::aarch64:
-+      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
-+      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
-+      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
-+      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
-+      break;
-+    case llvm::Triple::arm:
-+      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
-+      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
-+        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
-+      } else {
-+        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
-+      }
-+      break;
-+    case llvm::Triple::x86_64:
-+      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-+      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
-+      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-+      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
-+      break;
-+    case llvm::Triple::x86:
-+      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-+      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
-+      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-+      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
-+      break;
-+    case llvm::Triple::mips:
-+      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
-+      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
-+      break;
-+    case llvm::Triple::ppc:
-+      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
-+      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
-+      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
-+      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
-+      break;
-+    case llvm::Triple::ppcle:
-+      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
-+      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
-+      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
-+      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
-+      break;
-+    case llvm::Triple::ppc64:
-+      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
-+      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
-+      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
-+      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
-+      break;
-+    case llvm::Triple::ppc64le:
-+      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
-+      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
-+      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
-+      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
-+      break;
-+    default:
-+      break;
-+    }
-+    TripleAliases.push_back(TargetTriple.str());
-+    if (TargetTriple.str() != BiarchTriple.str())
-+      BiarchTripleAliases.push_back(BiarchTriple.str());
-+    return;
-+  }
-+
-   // Android targets should not use GNU/Linux tools or libraries.
-   if (TargetTriple.isAndroid()) {
-     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
deleted file mode 100644
index 4ad6412d1e6c..000000000000
--- a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/clang/lib/Driver/ToolChains/Linux.cpp
-+++ b/clang/lib/Driver/ToolChains/Linux.cpp
-@@ -504,10 +504,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
-     Loader = "ld.so.1";
-     break;
-   case llvm::Triple::ppc64:
--    LibDir = "lib64";
--    Loader =
--        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
--    break;
-   case llvm::Triple::ppc64le:
-     LibDir = "lib64";
-     Loader =
diff --git a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
deleted file mode 100644
index 21fc8003c5f1..000000000000
--- a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
+++ /dev/null
@@ -1,48 +0,0 @@
---- a/clang/lib/Basic/Targets/PPC.h
-+++ b/clang/lib/Basic/Targets/PPC.h
-@@ -415,11 +415,10 @@ public:
-       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
-     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
-       DataLayout = "e-m:e-i64:64-n32:64";
--      ABI = "elfv2";
-     } else {
-       DataLayout = "E-m:e-i64:64-n32:64";
--      ABI = "elfv1";
-     }
-+    ABI = "elfv2";
- 
-     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
-       LongDoubleWidth = LongDoubleAlign = 64;
---- a/clang/lib/CodeGen/TargetInfo.cpp
-+++ b/clang/lib/CodeGen/TargetInfo.cpp
-@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
-       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
- 
-     if (Triple.isOSBinFormatELF()) {
--      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
--      if (getTarget().getABI() == "elfv2")
--        Kind = PPC64_SVR4_ABIInfo::ELFv2;
-+      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
-+      if (getTarget().getABI() == "elfv1")
-+        Kind = PPC64_SVR4_ABIInfo::ELFv1;
-       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
- 
-       return SetCGInfo(
---- a/clang/lib/Driver/ToolChains/Clang.cpp
-+++ b/clang/lib/Driver/ToolChains/Clang.cpp
-@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
-   const llvm::Triple &T = getToolChain().getTriple();
-   if (T.isOSBinFormatELF()) {
-     switch (getToolChain().getArch()) {
--    case llvm::Triple::ppc64: {
--      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
--          T.isOSOpenBSD() || T.isMusl())
--        ABIName = "elfv2";
--      else
--        ABIName = "elfv1";
--      break;
--    }
-+    case llvm::Triple::ppc64:
-     case llvm::Triple::ppc64le:
-       ABIName = "elfv2";
-       break;
diff --git a/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch b/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
deleted file mode 100644
index 893c059d7b8d..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp.orig
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-@@ -1799,7 +1799,7 @@
- 
- static bool Aarch64GetESR(ucontext_t *ucontext, u64 *esr) {
-   static const u32 kEsrMagic = 0x45535201;
--  u8 *aux = ucontext->uc_mcontext.__reserved;
-+  u8 *aux = reinterpret_cast<u8 *>(ucontext->uc_mcontext.__reserved);
-   while (true) {
-     _aarch64_ctx *ctx = (_aarch64_ctx *)aux;
-     if (ctx->size == 0) break;
diff --git a/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch b/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
deleted file mode 100644
index 35f16d24f340..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
+++ /dev/null
@@ -1,35 +0,0 @@
---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-@@ -74,6 +74,10 @@
- #include <sys/utsname.h>
- #endif
- 
-+#if SANITIZER_LINUX && defined(__powerpc__)
-+#include <asm/ptrace.h>
-+#endif
-+
- #if SANITIZER_LINUX && !SANITIZER_ANDROID
- #include <sys/personality.h>
- #endif
---- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
-@@ -92,7 +92,7 @@
- # include <utime.h>
- # include <sys/ptrace.h>
- #if defined(__mips64) || defined(__aarch64__) || defined(__arm__) || \
--    SANITIZER_RISCV64
-+    defined(__powerpc__) || SANITIZER_RISCV64
- #  include <asm/ptrace.h>
- #  ifdef __arm__
- typedef struct user_fpregs elf_fpregset_t;
---- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
-@@ -31,7 +31,7 @@
- #include <sys/types.h> // for pid_t
- #include <sys/uio.h> // for iovec
- #include <elf.h> // for NT_PRSTATUS
--#if (defined(__aarch64__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
-+#if (defined(__aarch64__) || defined(__powerpc__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
- // GLIBC 2.20+ sys/user does not include asm/ptrace.h
- # include <asm/ptrace.h>
- #endif
diff --git a/srcpkgs/llvm12/patches/compiler-rt-size_t.patch b/srcpkgs/llvm12/patches/compiler-rt-size_t.patch
deleted file mode 100644
index 2c63063a5e9e..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-size_t.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/compiler-rt/lib/fuzzer/FuzzerInterceptors.cpp.orig
-+++ b/compiler-rt/lib/fuzzer/FuzzerInterceptors.cpp
-@@ -25,6 +25,7 @@
-   }
- 
- #include <cassert>
-+#include <cstddef>
- #include <cstdint>
- #include <dlfcn.h> // for dlsym()
- 
diff --git a/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch b/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
deleted file mode 100644
index d0b61c80c897..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
+++ /dev/null
@@ -1,62 +0,0 @@
---- a/compiler-rt/lib/xray/xray_powerpc64.inc
-+++ b/compiler-rt/lib/xray/xray_powerpc64.inc
-@@ -12,7 +12,13 @@
- 
- #include <cstdint>
- #include <mutex>
-+#ifdef __GLIBC__
- #include <sys/platform/ppc.h>
-+#else
-+#include <cctype>
-+#include <cstring>
-+#include <cstdlib>
-+#endif
- 
- #include "xray_defs.h"
- 
-@@ -20,13 +26,45 @@ namespace __xray {
- 
- ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
-   CPU = 0;
-+#ifdef __GLIBC__
-   return __ppc_get_timebase();
-+#else
-+  return __builtin_ppc_get_timebase();
-+#endif
- }
- 
- inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
-   static std::mutex M;
-   std::lock_guard<std::mutex> Guard(M);
-+#ifdef __GLIBC__
-   return __ppc_get_timebase_freq();
-+#else
-+  /* FIXME: a less dirty implementation? */
-+  static uint64_t base;
-+  if (!base) {
-+    FILE *f = fopen("/proc/cpuinfo", "rb");
-+    if (f) {
-+      ssize_t nr;
-+      /* virtually always big enough to hold the line */
-+      char buf[512];
-+      while (fgets(buf, sizeof(buf), f)) {
-+        char *ret = strstr(buf, "timebase");
-+        if (!ret) {
-+          continue;
-+        }
-+        ret += sizeof("timebase") - 1;
-+        ret = strchr(ret, ':');
-+        if (!ret) {
-+          continue;
-+        }
-+        base = strtoul(ret + 1, nullptr, 10);
-+        break;
-+      }
-+      fclose(f);
-+    }
-+  }
-+  return base;
-+#endif
- }
- 
- inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
diff --git a/srcpkgs/llvm12/patches/libcxx-musl.patch b/srcpkgs/llvm12/patches/libcxx-musl.patch
deleted file mode 100644
index bbd31ffc2cb1..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-musl.patch
+++ /dev/null
@@ -1,26 +0,0 @@
---- a/libcxx/include/locale
-+++ b/libcxx/include/locale
-@@ -742,7 +742,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
-         typename remove_reference<decltype(errno)>::type __save_errno = errno;
-         errno = 0;
-         char *__p2;
-+#if defined(__linux__) && !defined(__GLIBC__)
-+        long long __ll = strtoll(__a, &__p2, __base);
-+#else
-         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
-+#endif
-         typename remove_reference<decltype(errno)>::type __current_errno = errno;
-         if (__current_errno == 0)
-             errno = __save_errno;
-@@ -782,7 +786,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
-         typename remove_reference<decltype(errno)>::type __save_errno = errno;
-         errno = 0;
-         char *__p2;
-+#if defined(__linux__) && !defined(__GLIBC__)
-+        unsigned long long __ll = strtoull(__a, &__p2, __base);
-+#else
-         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
-+#endif
-         typename remove_reference<decltype(errno)>::type __current_errno = errno;
-         if (__current_errno == 0)
-             errno = __save_errno;
diff --git a/srcpkgs/llvm12/patches/libcxx-ppc.patch b/srcpkgs/llvm12/patches/libcxx-ppc.patch
deleted file mode 100644
index 7a92f8004e1c..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-ppc.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-This ensures `is_iec559` is defined correctly under all long double ABIs,
-including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__`
-is not defined on gcc.
-
---- a/libcxx/include/limits
-+++ b/libcxx/include/limits
-@@ -426,8 +426,14 @@ protected:
-     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
-     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
- 
--#if (defined(__ppc__) || defined(__ppc64__))
-+#if defined(__powerpc__) || defined(__powerpc64__)
-+#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__)
-+    /* IEEE 754 quadruple or double precision */
-+    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
-+#else
-+    /* 128-bit IBM double-double */
-     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
-+#endif
- #else
-     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
- #endif
diff --git a/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch b/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
deleted file mode 100644
index 70292beb2fcd..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/libcxx/CMakeLists.txt
-+++ b/libcxx/CMakeLists.txt
-@@ -769,6 +769,8 @@ function(cxx_link_system_libraries target)
-     target_link_libraries(${target} PRIVATE atomic)
-   endif()
- 
-+#ssp  target_link_libraries(${target} PRIVATE ssp_nonshared)
-+
-   if (MINGW)
-     target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
-   endif()
diff --git a/srcpkgs/llvm12/patches/libcxxabi-dl.patch b/srcpkgs/llvm12/patches/libcxxabi-dl.patch
deleted file mode 100644
index 3a15f9db8c98..000000000000
--- a/srcpkgs/llvm12/patches/libcxxabi-dl.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-Also link to -ldl to prevent undefined references.
-
---- a/libcxxabi/src/CMakeLists.txt
-+++ b/libcxxabi/src/CMakeLists.txt
-@@ -73,6 +73,7 @@
-   endif()
- 
-   add_library_flags_if(LIBCXXABI_HAS_C_LIB c)
-+  add_library_flags_if(LIBCXXABI_HAS_C_LIB dl)
- endif()
- 
- if (LIBCXXABI_USE_LLVM_UNWINDER)
---- a/libcxx/CMakeLists.txt
-+++ b/libcxx/CMakeLists.txt
-@@ -745,6 +745,10 @@
-     target_link_libraries(${target} PRIVATE m)
-   endif()
- 
-+  if (LIBCXX_HAS_C_LIB)
-+    target_link_libraries(${target} PRIVATE dl)
-+  endif()
-+
-   if (LIBCXX_HAS_RT_LIB)
-     target_link_libraries(${target} PRIVATE rt)
-   endif()
diff --git a/srcpkgs/llvm12/patches/libunwind-ppc32.patch b/srcpkgs/llvm12/patches/libunwind-ppc32.patch
deleted file mode 100644
index 74aa7576ecf9..000000000000
--- a/srcpkgs/llvm12/patches/libunwind-ppc32.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-This fixes build at least with gcc9 which does not define `__ppc__`.
-
---- a/libunwind/include/__libunwind_config.h
-+++ b/libunwind/include/__libunwind_config.h
-@@ -49,7 +49,7 @@
- #  define _LIBUNWIND_CONTEXT_SIZE 167
- #  define _LIBUNWIND_CURSOR_SIZE 179
- #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64
--# elif defined(__ppc__)
-+# elif defined(__powerpc__)
- #  define _LIBUNWIND_TARGET_PPC 1
- #  define _LIBUNWIND_CONTEXT_SIZE 117
- #  define _LIBUNWIND_CURSOR_SIZE 124
---- a/libunwind/src/UnwindRegistersRestore.S
-+++ b/libunwind/src/UnwindRegistersRestore.S
-@@ -392,7 +392,7 @@ Lnovec:
-   PPC64_LR(3)
-   bctr
- 
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- 
- DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind13Registers_ppc6jumptoEv)
- //
---- a/libunwind/src/UnwindRegistersSave.S
-+++ b/libunwind/src/UnwindRegistersSave.S
-@@ -554,7 +554,7 @@ DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext)
-   blr
- 
- 
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- 
- //
- // extern int unw_getcontext(unw_context_t* thread_state)
---- a/libunwind/src/config.h
-+++ b/libunwind/src/config.h
-@@ -95,12 +95,12 @@
- #define _LIBUNWIND_BUILD_SJLJ_APIS
- #endif
- 
--#if defined(__i386__) || defined(__x86_64__) || defined(__ppc__) || defined(__ppc64__) || defined(__powerpc64__)
-+#if defined(__i386__) || defined(__x86_64__) || defined(__powerpc__) || defined(__powerpc64__)
- #define _LIBUNWIND_SUPPORT_FRAME_APIS
- #endif
- 
- #if defined(__i386__) || defined(__x86_64__) ||                                \
--    defined(__ppc__) || defined(__ppc64__) || defined(__powerpc64__) ||        \
-+    defined(__powerpc__) || defined(__powerpc64__) ||                          \
-     (!defined(__APPLE__) && defined(__arm__)) ||                               \
-     (defined(__arm64__) || defined(__aarch64__)) ||                            \
-     defined(__mips__)
---- a/libunwind/src/libunwind.cpp
-+++ b/libunwind/src/libunwind.cpp
-@@ -42,7 +42,7 @@ _LIBUNWIND_HIDDEN int __unw_init_local(unw_cursor_t *cursor,
- # define REGISTER_KIND Registers_x86_64
- #elif defined(__powerpc64__)
- # define REGISTER_KIND Registers_ppc64
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- # define REGISTER_KIND Registers_ppc
- #elif defined(__aarch64__)
- # define REGISTER_KIND Registers_arm64
diff --git a/srcpkgs/llvm12/patches/lldb-musl.patch b/srcpkgs/llvm12/patches/lldb-musl.patch
deleted file mode 100644
index 601c0d138523..000000000000
--- a/srcpkgs/llvm12/patches/lldb-musl.patch
+++ /dev/null
@@ -1,31 +0,0 @@
---- a/lldb/source/Plugins/Process/Linux/Procfs.h
-+++ b/lldb/source/Plugins/Process/Linux/Procfs.h
-@@ -10,21 +10,12 @@
- // sys/procfs.h on Android/Linux for all supported architectures.
- 
- #include <sys/ptrace.h>
-+#include <asm/ptrace.h>
- 
--#ifdef __ANDROID__
--#if defined(__arm64__) || defined(__aarch64__)
--typedef unsigned long elf_greg_t;
--typedef elf_greg_t
--    elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
--typedef struct user_fpsimd_state elf_fpregset_t;
--#ifndef NT_FPREGSET
--#define NT_FPREGSET NT_PRFPREG
--#endif // NT_FPREGSET
--#elif defined(__mips__)
--#ifndef NT_FPREGSET
--#define NT_FPREGSET NT_PRFPREG
--#endif // NT_FPREGSET
--#endif
--#else // __ANDROID__
-+#if !defined(__GLIBC__) && defined(__powerpc__)
-+#define pt_regs musl_pt_regs
-+#include <sys/procfs.h>
-+#undef pt_regs
-+#else
- #include <sys/procfs.h>
--#endif // __ANDROID__
-+#endif
diff --git a/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch b/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch
deleted file mode 100644
index 8e0a9a779d1b..000000000000
--- a/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-commit ba4ede595ff9599232f5dd2b4384c243137b53fc
-Author: Daniel Kolesa <daniel@octaforge.org>
-Date:   Tue Jun 22 23:40:54 2021 +0200
-
-    enable compiler-rt support for ppc32
-
-diff --git a/compiler-rt/cmake/base-config-ix.cmake b/compiler-rt/cmake/base-config-ix.cmake
-index 1edab43..5c0c8a2 100644
---- a/compiler-rt/cmake/base-config-ix.cmake
-+++ b/compiler-rt/cmake/base-config-ix.cmake
-@@ -182,9 +182,7 @@ macro(test_targets)
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc64le")
-       test_target_arch(powerpc64le "" "-m64")
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc")
--      if(CMAKE_SYSTEM_NAME MATCHES "AIX")
--        test_target_arch(powerpc "" "-m32")
--      endif()
-+      test_target_arch(powerpc "" "-m32")
-       test_target_arch(powerpc64 "" "-m64")
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "s390x")
-       test_target_arch(s390x "" "")
diff --git a/srcpkgs/llvm12/template b/srcpkgs/llvm12/template
index 7ce18028e4a3..7b361bbbf5bc 100644
--- a/srcpkgs/llvm12/template
+++ b/srcpkgs/llvm12/template
@@ -1,25 +1,17 @@
 # Template file for 'llvm12'
 pkgname=llvm12
 version=12.0.1
-revision=2
+revision=3
 wrksrc="llvm-project-${version}.src"
 build_wrksrc=llvm
 build_style=cmake
 configure_args="
  -DCMAKE_BUILD_TYPE=Release -Wno-dev
  -DENABLE_LINKER_BUILD_ID=YES
- -DLLDB_USE_SYSTEM_SIX=YES
- -DLIBCXX_CXX_ABI=libcxxabi
- -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
- -DLIBCXXABI_USE_LLVM_UNWINDER=YES
- -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
- -DLIBOMP_ENABLE_SHARED=YES
- -DLIBOMP_INSTALL_ALIASES=NO
  -DLLVM_INCLUDE_DOCS=YES
  -DLLVM_BUILD_DOCS=YES
  -DLLVM_ENABLE_SPHINX=YES
  -DSPHINX_WARNINGS_AS_ERRORS=NO
- -DLLVM_INSTALL_UTILS=YES
  -DLLVM_BUILD_LLVM_DYLIB=YES
  -DLLVM_LINK_LLVM_DYLIB=YES
  -DLLVM_ENABLE_RTTI=YES
@@ -51,87 +43,10 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
-_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
-
-_lldb_enable=yes
-_libomp_enable=no
-
-case "$XBPS_TARGET_MACHINE" in
-	ppc64le*) ;;
-	ppc*|i686*) _lldb_enable=no ;;
-esac
-
-case "$XBPS_TARGET_MACHINE" in
-	x86_64*|aarch64*|ppc64*) _libomp_enable=yes;;
-esac
-
-subpackages="clang-tools-extra"
-
-# must go before clang
-if [ "$_libomp_enable" = "yes" ]; then
-	_enabled_projects+=";openmp"
-	subpackages+=" libomp libomp-devel"
-	# because of cmake nonsense referencing libomptarget.so.*
-	depends+=" libomp>=${version}_${revision}"
-fi
-
-subpackages+=" clang clang-analyzer libclang libclang-cpp
- llvm-libunwind llvm-libunwind-devel libcxx libcxx-devel
- libcxxabi libcxxabi-devel libllvm12"
-
-if [ "$_lldb_enable" = "yes" ]; then
-	# XXX fails to cross compile due to python
-	_enabled_projects+=";lldb"
-	subpackages+=" lldb lldb-devel"
-fi
-
-subpackages+=" lld lld-devel"
-
-configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
-
 post_patch() {
-	if [ "$_lldb_enable" = "yes" ]; then
-		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
-			vsed -i 's|__ptrace_request|int|g' \
-				${wrksrc}/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
-		fi
-		# disable docs for lldb as they fail to generate
-		vsed -i '/add_subdirectory(docs)/d' \
-			${wrksrc}/lldb/CMakeLists.txt
-	fi
-
 	# update config.guess for better platform detection
 	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
 		${wrksrc}/llvm/cmake
-
-	# fix linker failures on some archs
-	vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
-		${wrksrc}/libcxxabi/cmake/config-ix.cmake
-	vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
-		${wrksrc}/libcxxabi/cmake/config-ix.cmake
-
-	# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
-	case "$XBPS_TARGET_MACHINE" in
-		ppc64*) ;;
-		ppc*-musl|i686-musl|mips*-musl)
-			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
-				${wrksrc}/libunwind/src/CMakeLists.txt
-			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
-				${wrksrc}/libcxxabi/src/CMakeLists.txt
-			vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
-			;;
-	esac
-
-	case "$XBPS_TARGET_MACHINE" in
-		x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
-			vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
-				${wrksrc}/compiler-rt/CMakeLists.txt
-			;;
-		arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
-			vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
-				${wrksrc}/compiler-rt/cmake/config-ix.cmake
-			;;
-	esac
 }
 
 pre_configure() {
@@ -158,10 +73,8 @@ pre_configure() {
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
 			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
 		make ${makejobs} -C utils/TableGen
-		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
 		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
-		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
 		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
 		cd ../..
 	fi
@@ -202,218 +115,6 @@ do_install() {
 	if [ "$CROSS_BUILD" ]; then
 		rm -f ${DESTDIR}/usr/bin/llvm-config-host
 	fi
-
-	# Install libcxxabi headers
-	vinstall ${wrksrc}/libcxxabi/include/__cxxabi_config.h 644 usr/include
-	vinstall ${wrksrc}/libcxxabi/include/cxxabi.h 644 usr/include
-
-	# Install libunwind headers
-	vinstall ${wrksrc}/libunwind/include/__libunwind_config.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/libunwind.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/unwind.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/mach-o/compact_unwind_encoding.h \
-		644 usr/include/mach-o
-}
-
-clang-analyzer_package() {
-	pycompile_dirs="usr/share/scan-view"
-	depends="clang-${version}_${revision} python3 perl"
-	short_desc+=" - A source code analysis framework"
-	homepage="https://clang-analyzer.llvm.org/"
-	pkg_install() {
-		vmove usr/share/man/man1/scan-build.1
-		vmove "/usr/bin/scan-*"
-		vmove "/usr/share/scan-*"
-		vmove "/usr/libexec/*analyzer"
-	}
-}
-
-clang-tools-extra_package() {
-	lib32disabled=yes
-	depends="clang-${version}_${revision} python3"
-	short_desc+=" - Extra Clang tools"
-	homepage="https://clang.llvm.org/extra/"
-	pkg_install() {
-		vmove usr/include/clang-tidy
-		vmove usr/bin/clang-apply-replacements
-		vmove usr/bin/clang-query
-		vmove usr/bin/clang-rename
-		vmove usr/bin/clang-tidy
-		vmove usr/bin/diagtool
-		vmove usr/bin/find-all-symbols
-		vmove usr/bin/hmaptool
-		vmove usr/bin/modularize
-		vmove usr/bin/pp-trace
-		vmove usr/bin/sancov
-		vmove "usr/lib/libclangApplyReplacements*"
-		vmove "usr/lib/libclangQuery*"
-		vmove "usr/lib/libclangTidy*"
-		vmove "usr/share/clang/*tidy*"
-		vmove usr/share/doc/clang-tools
-		vmove usr/share/man/man1/extraclangtools.1
-		vmove usr/share/man/man1/diagtool.1
-	}
-}
-
-clang_package() {
-	lib32disabled=yes
-	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
-	 libclang-${version}_${revision}"
-	short_desc+=" - C language family frontend"
-	homepage="https://clang.llvm.org/"
-	pkg_install() {
-		vmove usr/include/clang
-		vmove usr/include/clang-c
-		vmove "usr/bin/*clang*"
-		vmove usr/bin/c-index-test
-		vmove usr/lib/clang
-		vmove usr/lib/cmake/clang
-		vmove "usr/lib/libclang*.a"
-		vmove "usr/lib/libclang*.so"
-		vmove usr/share/clang
-		vmove usr/share/doc/clang
-		vmove usr/share/man/man1/clang.1
-	}
-}
-
-libclang_package() {
-	short_desc+=" - C frontend runtime library"
-	pkg_install() {
-		vmove "usr/lib/libclang.so.*"
-	}
-}
-
-libclang-cpp_package() {
-	short_desc+=" - C frontend runtime library (C++ interface)"
-	pkg_install() {
-		vmove "usr/lib/libclang-cpp.so.*"
-	}
-}
-
-lld_package() {
-	lib32disabled=yes
-	short_desc+=" - linker"
-	homepage="https://lld.llvm.org"
-	pkg_install() {
-		vmove usr/bin/lld*
-		vmove usr/bin/wasm-ld
-		vmove usr/bin/ld.lld*
-		vmove usr/bin/ld64.lld*
-		vmove usr/share/doc/lld
-	}
-}
-
-lld-devel_package() {
-	lib32disabled=yes
-	short_desc+=" - linker - development files"
-	homepage="https://lld.llvm.org"
-	depends="lld>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/include/lld
-		vmove usr/lib/cmake/lld
-		vmove "usr/lib/liblld*a"
-	}
-}
-
-lldb_package() {
-	lib32disabled=yes
-	depends+=" python3-six"
-	short_desc+=" - LLDB debugger"
-	homepage="https://lldb.llvm.org/"
-	pkg_install() {
-		vmove usr/bin/*lldb*
-		vmove usr/lib/liblldb*so.*
-		vmove /usr/lib/python*
-	}
-}
-
-lldb-devel_package() {
-	lib32disabled=yes
-	depends="lldb>=${version}_${revision}"
-	short_desc+=" - LLDB debugger - development files"
-	pkg_install() {
-		vmove usr/include/lldb
-		vmove "usr/lib/liblldb*.so"
-	}
-}
-
-llvm-libunwind_package() {
-	short_desc+=" - libunwind"
-	pkg_install() {
-		vmove "usr/lib/libunwind.so.*"
-	}
-}
-
-llvm-libunwind-devel_package() {
-	short_desc+=" - libunwind - development files"
-	depends="llvm-libunwind>=${version}_${revision}"
-	conflicts="libunwind-devel>=0"
-	pkg_install() {
-		vmove usr/lib/libunwind.so
-		vmove usr/lib/libunwind.a
-		vmove "usr/include/*unwind*"
-		vmove usr/include/mach-o
-		vmove usr/share/doc/libunwind
-	}
-}
-
-libcxxabi_package() {
-	short_desc+=" - low level support for libc++"
-	pkg_install() {
-		vmove "usr/lib/libc++abi.so.*"
-	}
-}
-
-libcxxabi-devel_package() {
-	short_desc+=" - low level support for libc++ - development files"
-	depends="libcxxabi>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/lib/libc++abi.so
-		vmove usr/lib/libc++abi.a
-		vmove "usr/include/*cxxabi*"
-	}
-}
-
-libcxx_package() {
-	short_desc+=" - C++ standard library"
-	pkg_install() {
-		vmove "usr/lib/libc++.so.*"
-	}
-}
-
-libcxx-devel_package() {
-	short_desc+=" - C++ standard library - development files"
-	depends="libcxx>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/lib/libc++.so
-		vmove usr/lib/libc++.a
-		vmove usr/lib/libc++experimental.a
-		vmove usr/include/c++
-		vmove usr/share/doc/libcxx
-	}
-}
-
-libomp_package() {
-	short_desc+=" - Clang OpenMP support library"
-	pkg_install() {
-		vmove usr/lib/libomp.so
-		vmove "usr/lib/libomptarget.rtl.*.so"
-		vmove usr/lib/libarcher.so
-		vmove "usr/lib/libomp*.so.*"
-	}
-}
-
-libomp-devel_package() {
-	short_desc+=" - Clang OpenMP support library - development files"
-	depends="libomp>=${version}_${revision}"
-	pkg_install() {
-		vmove "usr/lib/libomp*.so"
-		vmove "usr/lib/libarcher*"
-		vmove "usr/include/omp*.h"
-		vmove "usr/lib/clang/${version}/include/omp*.h"
-		vmove usr/share/man/man1/llvmopenmp.1
-		vmove usr/share/doc/openmp
-	}
 }
 
 libllvm12_package() {

From dd0a815073454885bd6e389186b3464ba9a421a9 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 14:00:28 +0200
Subject: [PATCH 04/29] New packages: clang12, libclang12, libclang12-cpp,
 lld12, lld12-devel.

---
 common/shlibs                                 |   2 +
 srcpkgs/clang12                               |   1 +
 srcpkgs/libclang12                            |   1 +
 srcpkgs/libclang12-cpp                        |   1 +
 srcpkgs/lld12                                 |   1 +
 srcpkgs/lld12-devel                           |   1 +
 ...clang-001-fix-unwind-chain-inclusion.patch |  44 +++++++
 .../patches/clang-002-add-musl-triples.patch  | 110 ++++++++++++++++++
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 +++
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ++++++++
 srcpkgs/llvm12/template                       |  71 +++++++++++
 11 files changed, 293 insertions(+)
 create mode 120000 srcpkgs/clang12
 create mode 120000 srcpkgs/libclang12
 create mode 120000 srcpkgs/libclang12-cpp
 create mode 120000 srcpkgs/lld12
 create mode 120000 srcpkgs/lld12-devel
 create mode 100644 srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch

diff --git a/common/shlibs b/common/shlibs
index 81acc39defb4..86f4c9060d3b 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -975,6 +975,8 @@ libuchardet.so.0 uchardet-0.0.6_1
 libgtksourceviewmm-3.0.so.0 gtksourceviewmm-3.2.0_1
 libyajl.so.2 yajl-2.0.1_1
 libconfuse.so.2 confuse-3.2.1_1
+libclang.so.12 libclang12-12.0.0_1
+libclang-cpp.so.12 libclang12-cpp-12.0.0_1
 liblldb.so.14 lldb-14.0.3_1
 libclang.so.14 libclang-14.0.3_1
 libclang-cpp.so.14 libclang-cpp-14.0.3_1
diff --git a/srcpkgs/clang12 b/srcpkgs/clang12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/clang12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/libclang12 b/srcpkgs/libclang12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/libclang12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/libclang12-cpp b/srcpkgs/libclang12-cpp
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/libclang12-cpp
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/lld12 b/srcpkgs/lld12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/lld12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/lld12-devel b/srcpkgs/lld12-devel
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/lld12-devel
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
new file mode 100644
index 000000000000..e4eaa7783e7a
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
@@ -0,0 +1,44 @@
+From 352974169f0d2b5da3d5321f588f5e3b5941330e Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe@gmail.com>
+Date: Tue, 8 Sep 2015 22:14:57 +0200
+Subject: [PATCH 2/7] fix unwind chain inclusion
+
+---
+ lib/Headers/unwind.h | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/lib/Headers/unwind.h b/lib/Headers/unwind.h
+index 303d792..44e10cc 100644
+--- a/clang/lib/Headers/unwind.h
++++ b/clang/lib/Headers/unwind.h
+@@ -9,9 +9,6 @@
+ 
+ /* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/
+ 
+-#ifndef __CLANG_UNWIND_H
+-#define __CLANG_UNWIND_H
+-
+ #if defined(__APPLE__) && __has_include_next(<unwind.h>)
+ /* Darwin (from 11.x on) provide an unwind.h. If that's available,
+  * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE,
+@@ -39,6 +36,9 @@
+ # endif
+ #else
+ 
++#ifndef __CLANG_UNWIND_H
++#define __CLANG_UNWIND_H
++
+ #include <stdint.h>
+ 
+ #ifdef __cplusplus
+@@ -322,6 +322,7 @@ _Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *);
+ }
+ #endif
+ 
++#endif /* __CLANG_UNWIND_H */
++
+ #endif
+ 
+-#endif /* __CLANG_UNWIND_H */
+-- 
+2.5.1
diff --git a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
new file mode 100644
index 000000000000..25688d40dbc2
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
@@ -0,0 +1,110 @@
+--- a/clang/lib/Driver/ToolChains/Gnu.cpp
++++ b/clang/lib/Driver/ToolChains/Gnu.cpp
+@@ -2086,7 +2086,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
+                                              "armv7hl-redhat-linux-gnueabi",
+                                              "armv6hl-suse-linux-gnueabi",
+-                                             "armv7hl-suse-linux-gnueabi"};
++                                             "armv7hl-suse-linux-gnueabi",
++                                             "armv7l-linux-gnueabihf"};
+   static const char *const ARMebLibDirs[] = {"/lib"};
+   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
+                                              "armeb-linux-androideabi"};
+@@ -2153,8 +2154,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
+   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
+   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
+-                                             "powerpcle-unknown-linux-gnu",
+-                                             "powerpcle-linux-musl"};
++                                             "powerpcle-unknown-linux-gnu"};
+ 
+   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
+   static const char *const PPC64Triples[] = {
+@@ -2235,6 +2235,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+     return;
+   }
+ 
++  if (TargetTriple.isMusl()) {
++    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
++    static const char *const ARMHFMuslTriples[] = {
++        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
++    };
++    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
++    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
++    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
++    static const char *const MIPSMuslTriples[] = {
++        "mips-linux-musl", "mipsel-linux-musl",
++        "mipsel-linux-muslhf", "mips-linux-muslhf"
++    };
++    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
++    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
++    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
++    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
++
++    switch (TargetTriple.getArch()) {
++    case llvm::Triple::aarch64:
++      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      break;
++    case llvm::Triple::arm:
++      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
++      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
++        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
++      } else {
++        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
++      }
++      break;
++    case llvm::Triple::x86_64:
++      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      break;
++    case llvm::Triple::x86:
++      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      break;
++    case llvm::Triple::mips:
++      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
++      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
++      break;
++    case llvm::Triple::ppc:
++      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      break;
++    case llvm::Triple::ppcle:
++      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      break;
++    case llvm::Triple::ppc64:
++      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      break;
++    case llvm::Triple::ppc64le:
++      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      break;
++    default:
++      break;
++    }
++    TripleAliases.push_back(TargetTriple.str());
++    if (TargetTriple.str() != BiarchTriple.str())
++      BiarchTripleAliases.push_back(BiarchTriple.str());
++    return;
++  }
++
+   // Android targets should not use GNU/Linux tools or libraries.
+   if (TargetTriple.isAndroid()) {
+     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
new file mode 100644
index 000000000000..4ad6412d1e6c
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
@@ -0,0 +1,13 @@
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -504,10 +504,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+     Loader = "ld.so.1";
+     break;
+   case llvm::Triple::ppc64:
+-    LibDir = "lib64";
+-    Loader =
+-        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
+-    break;
+   case llvm::Triple::ppc64le:
+     LibDir = "lib64";
+     Loader =
diff --git a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
new file mode 100644
index 000000000000..21fc8003c5f1
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
@@ -0,0 +1,48 @@
+--- a/clang/lib/Basic/Targets/PPC.h
++++ b/clang/lib/Basic/Targets/PPC.h
+@@ -415,11 +415,10 @@ public:
+       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
+     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
+       DataLayout = "e-m:e-i64:64-n32:64";
+-      ABI = "elfv2";
+     } else {
+       DataLayout = "E-m:e-i64:64-n32:64";
+-      ABI = "elfv1";
+     }
++    ABI = "elfv2";
+ 
+     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
+       LongDoubleWidth = LongDoubleAlign = 64;
+--- a/clang/lib/CodeGen/TargetInfo.cpp
++++ b/clang/lib/CodeGen/TargetInfo.cpp
+@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
+       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
+ 
+     if (Triple.isOSBinFormatELF()) {
+-      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
+-      if (getTarget().getABI() == "elfv2")
+-        Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      if (getTarget().getABI() == "elfv1")
++        Kind = PPC64_SVR4_ABIInfo::ELFv1;
+       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
+ 
+       return SetCGInfo(
+--- a/clang/lib/Driver/ToolChains/Clang.cpp
++++ b/clang/lib/Driver/ToolChains/Clang.cpp
+@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
+   const llvm::Triple &T = getToolChain().getTriple();
+   if (T.isOSBinFormatELF()) {
+     switch (getToolChain().getArch()) {
+-    case llvm::Triple::ppc64: {
+-      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
+-          T.isOSOpenBSD() || T.isMusl())
+-        ABIName = "elfv2";
+-      else
+-        ABIName = "elfv1";
+-      break;
+-    }
++    case llvm::Triple::ppc64:
+     case llvm::Triple::ppc64le:
+       ABIName = "elfv2";
+       break;
diff --git a/srcpkgs/llvm12/template b/srcpkgs/llvm12/template
index 7b361bbbf5bc..274b57183654 100644
--- a/srcpkgs/llvm12/template
+++ b/srcpkgs/llvm12/template
@@ -43,6 +43,12 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
+_enabled_projects="clang;lld"
+
+subpackages+=" clang12 libclang12 libclang12-cpp libllvm12 lld12 lld12-devel"
+
+configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+
 post_patch() {
 	# update config.guess for better platform detection
 	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
@@ -73,8 +79,10 @@ pre_configure() {
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
 			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
 		make ${makejobs} -C utils/TableGen
+		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
 		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
+		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
 		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
 		cd ../..
 	fi
@@ -117,6 +125,69 @@ do_install() {
 	fi
 }
 
+clang12_package() {
+	conflicts="clang"
+	lib32disabled=yes
+	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
+	 libclang12-${version}_${revision}"
+	short_desc+=" - C language family frontend"
+	homepage="https://clang.llvm.org/"
+	pkg_install() {
+		vmove usr/include/clang
+		vmove usr/include/clang-c
+		vmove "usr/bin/*clang*"
+		vmove usr/bin/c-index-test
+		vmove usr/lib/clang
+		vmove usr/lib/cmake/clang
+		vmove "usr/lib/libclang*.a"
+		vmove "usr/lib/libclang*.so"
+		vmove usr/share/clang
+		vmove usr/share/doc/clang
+		vmove usr/share/man/man1/clang.1
+	}
+}
+
+libclang12_package() {
+	short_desc+=" - C frontend runtime library"
+	pkg_install() {
+		vmove "usr/lib/libclang.so.*"
+	}
+}
+
+libclang12-cpp_package() {
+	short_desc+=" - C frontend runtime library (C++ interface)"
+	pkg_install() {
+		vmove "usr/lib/libclang-cpp.so.*"
+	}
+}
+
+lld12_package() {
+	conflicts="lld"
+	lib32disabled=yes
+	short_desc+=" - linker"
+	homepage="https://lld.llvm.org"
+	pkg_install() {
+		vmove usr/bin/lld*
+		vmove usr/bin/wasm-ld
+		vmove usr/bin/ld.lld*
+		vmove usr/bin/ld64.lld*
+		vmove usr/share/doc/lld
+	}
+}
+
+lld12-devel_package() {
+	conflicts="lld-devel"
+	lib32disabled=yes
+	short_desc+=" - linker - development files"
+	homepage="https://lld.llvm.org"
+	depends="lld12>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include/lld
+		vmove usr/lib/cmake/lld
+		vmove "usr/lib/liblld*a"
+	}
+}
+
 libllvm12_package() {
 	short_desc+=" - runtime library"
 	pkg_install() {

From 78d156cc0e8cbf8d6628dc316523878417e952be Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 05/29] chromium: update for llvm14

---
 srcpkgs/chromium/template | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/srcpkgs/chromium/template b/srcpkgs/chromium/template
index 0dce8772fdb8..8b604a349229 100644
--- a/srcpkgs/chromium/template
+++ b/srcpkgs/chromium/template
@@ -2,7 +2,7 @@
 pkgname=chromium
 # See https://chromiumdash.appspot.com/releases?platform=Linux for the latest version
 version=101.0.4951.41
-revision=1
+revision=2
 archs="i686* x86_64* aarch64* armv7l* ppc64le*"
 short_desc="Google's attempt at creating a safer, faster, and more stable browser"
 maintainer="Duncaen <duncaen@voidlinux.org>"
@@ -20,7 +20,7 @@ desc_option_debug="Build with debug symbols"
 desc_option_js_optimize="Optimize the JS used for Chromium's UI"
 desc_option_pipewire="Enable support for screen sharing for WebRTC via PipeWire"
 
-hostmakedepends="$(vopt_if clang "clang lld llvm12") python python3 pkgconf perl gperf bison ninja nodejs hwids
+hostmakedepends="$(vopt_if clang "clang lld llvm14") python python3 pkgconf perl gperf bison ninja nodejs hwids
  libatomic-devel libevent-devel libglib-devel $(vopt_if js_optimize openjdk) wayland-devel libepoxy-devel"
 makedepends="libpng-devel gtk+-devel gtk+3-devel nss-devel pciutils-devel
  libXi-devel libgcrypt-devel libgnome-keyring-devel cups-devel elfutils-devel
@@ -266,12 +266,6 @@ do_configure() {
 		'disable_fieldtrial_testing_config=true'
 
 		'is_official_build=true'
-
-		# segfaults with llvm-12.0.1
-		'is_cfi=false'
-		'use_thin_lto=false'
-		'use_cfi_icall=false'
-		'chrome_pgo_phase=0'
 	)
 
 	if [ "$CROSS_BUILD" ]; then

From bc3cf98e2b9f6019b8ca00c820a3b358b091d1a9 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 06/29] ghdl: update for llvm14

---
 srcpkgs/ghdl/patches/{llvm12.patch => llvm.patch} | 2 ++
 srcpkgs/ghdl/template                             | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)
 rename srcpkgs/ghdl/patches/{llvm12.patch => llvm.patch} (82%)

diff --git a/srcpkgs/ghdl/patches/llvm12.patch b/srcpkgs/ghdl/patches/llvm.patch
similarity index 82%
rename from srcpkgs/ghdl/patches/llvm12.patch
rename to srcpkgs/ghdl/patches/llvm.patch
index 8d2f76bfda06..9201816ae053 100644
--- a/srcpkgs/ghdl/patches/llvm12.patch
+++ b/srcpkgs/ghdl/patches/llvm.patch
@@ -7,6 +7,8 @@ index c1c1a6d..dad7c38 100755
         check_version 10.0 $llvm_version ||
         check_version 11.0 $llvm_version ||
 +       check_version 12.0 $llvm_version ||
++       check_version 13.0 $llvm_version ||
++       check_version 14.0 $llvm_version ||
         false; then
      echo "Debugging is enabled with llvm $llvm_version"
    else
diff --git a/srcpkgs/ghdl/template b/srcpkgs/ghdl/template
index e756d8c3cd87..9ca1169b22bd 100644
--- a/srcpkgs/ghdl/template
+++ b/srcpkgs/ghdl/template
@@ -7,7 +7,7 @@
 pkgname=ghdl
 reverts="20181129_1"
 version=1.0.0
-revision=1
+revision=2
 build_style=configure
 configure_args="--prefix=/usr --srcdir=.. --incdir=lib/ghdl/include"
 makedepends="zlib-devel"

From 8744d7d79b7b6f2bdf5e89453a5f8584fdb99df8 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 07/29] qt5: rebuild for llvm14

---
 srcpkgs/qt5/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index ee788fad2019..25f15583a42d 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -3,7 +3,7 @@ pkgname=qt5
 version=5.15.3+20220222
 # commit fcca82ca40a5d8a02a4ddd90846d070f2c58cfad
 # base repo: https://invent.kde.org/qt/qt/qt5
-revision=3
+revision=4
 build_style=meta
 hostmakedepends="cmake clang flex perl glib-devel pkg-config
  python re2c ruby which"

From fdc1b9b45f51d61cb9e93148eb181103a6188f85 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 08/29] tilix: rebuild for llvm14

---
 srcpkgs/tilix/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/tilix/template b/srcpkgs/tilix/template
index d8f014bc78c5..ac1bf7dd3bdd 100644
--- a/srcpkgs/tilix/template
+++ b/srcpkgs/tilix/template
@@ -1,7 +1,7 @@
 # Template file for 'tilix'
 pkgname=tilix
 version=1.9.4
-revision=3
+revision=4
 build_style=meson
 configure_args="-Db_lto=false"
 hostmakedepends="automake gettext-devel gdk-pixbuf glib-devel ldc po4a pkg-config

From 5a1cbff7e2cb513167841e803e7f1f4d905842b4 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 09/29] shiboken2: rebuild for llvm14

---
 srcpkgs/shiboken2/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/shiboken2/template b/srcpkgs/shiboken2/template
index b56613229c13..ab9d2c4cb8f9 100644
--- a/srcpkgs/shiboken2/template
+++ b/srcpkgs/shiboken2/template
@@ -1,7 +1,7 @@
 # Template file for 'shiboken2'
 pkgname=shiboken2
 version=5.15.2
-revision=4
+revision=5
 _pkgname="pyside-setup-opensource-src-${version}"
 wrksrc="${_pkgname/%5.14.2.1/5.14.2}"
 build_wrksrc="sources/shiboken2"

From c448e99709e362dd785b7348faec90e85e0ea8ab Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 10/29] gnome-builder: rebuild for llvm14

---
 srcpkgs/gnome-builder/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/gnome-builder/template b/srcpkgs/gnome-builder/template
index 93559b21774f..5a5a51893ae8 100644
--- a/srcpkgs/gnome-builder/template
+++ b/srcpkgs/gnome-builder/template
@@ -1,7 +1,7 @@
 # Template file for 'gnome-builder'
 pkgname=gnome-builder
 version=41.3
-revision=1
+revision=2
 build_style=meson
 build_helper=qemu
 configure_args="-Dhelp=true -Dnetwork_tests=false"

From c580f7815d7a81d7c4bd56bd27ebcd22b82635d6 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 11/29] bcc: rebuild for llvm14

---
 srcpkgs/bcc/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/bcc/template b/srcpkgs/bcc/template
index 54509b63d5a7..2cfa0a2977d0 100644
--- a/srcpkgs/bcc/template
+++ b/srcpkgs/bcc/template
@@ -1,7 +1,7 @@
 # Template file for 'bcc'
 pkgname=bcc
 version=0.24.0
-revision=1
+revision=2
 wrksrc="bcc"
 build_style=cmake
 configure_args="-DREVISION=${version} -DENABLE_LLVM_SHARED=1"

From 46690d5c043d37c6b3209ce8098e1a7cd85ab123 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 12/29] mesa: rebuild for llvm14

---
 srcpkgs/mesa/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/mesa/template b/srcpkgs/mesa/template
index c90500de7416..8f08262fb135 100644
--- a/srcpkgs/mesa/template
+++ b/srcpkgs/mesa/template
@@ -1,7 +1,7 @@
 # Template file for 'mesa'
 pkgname=mesa
 version=21.3.7
-revision=1
+revision=2
 build_style=meson
 configure_args="-Dglvnd=true -Dshared-glapi=enabled -Dgbm=enabled -Degl=enabled
  -Dosmesa=true -Dgles1=enabled -Dgles2=enabled -Dglx=dri -Ddri3=enabled

From 127a0bb67ac383aecbbe9025649c63cc2ae4a743 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 13/29] juCi++: rebuild for llvm14

---
 srcpkgs/juCi++/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/juCi++/template b/srcpkgs/juCi++/template
index 1a7604b44a00..5103324dec20 100644
--- a/srcpkgs/juCi++/template
+++ b/srcpkgs/juCi++/template
@@ -1,7 +1,7 @@
 # Template file for 'juCi++'
 pkgname=juCi++
 version=1.6.2
-revision=2
+revision=3
 _libclangmm_commit="b342f4dd6de4fe509a692a4b4fcfc7e24aae9590"
 _tiny_commit="c9c8bf810ddad8cd17882b9a9ee628a690e779f5"
 wrksrc="jucipp-v${version}"

From 394ee70e8242cfee71f4afee3dc30ef81f0e7cff Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 14/29] kdevelop: rebuild for llvm14

---
 srcpkgs/kdevelop/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/kdevelop/template b/srcpkgs/kdevelop/template
index 010185849d80..abf08c313071 100644
--- a/srcpkgs/kdevelop/template
+++ b/srcpkgs/kdevelop/template
@@ -1,7 +1,7 @@
 # Template file for 'kdevelop'
 pkgname=kdevelop
 version=21.12.3
-revision=1
+revision=2
 build_style=cmake
 configure_args="-DBUILD_TESTING=OFF"
 hostmakedepends="extra-cmake-modules qt5-qmake qt5-host-tools qt5-tools

From b8e909079e1f1f70b87876da73ad6b1718f2a24d Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 15/29] codelite: rebuild for llvm14

---
 srcpkgs/codelite/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/codelite/template b/srcpkgs/codelite/template
index 3a993a2c0cfb..24e2c879dd45 100644
--- a/srcpkgs/codelite/template
+++ b/srcpkgs/codelite/template
@@ -1,7 +1,7 @@
 # Template file for 'codelite'
 pkgname=codelite
 version=15.0.6
-revision=1
+revision=2
 build_style=cmake
 build_helper=cmake-wxWidgets-gtk3
 configure_args="-DWITH_PCH=0 -DWITH_WX_CONFIG=wx-config-gtk3

From 72aad906e80a17ccc97398f1324176e9d0cf3857 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 16/29] ccls: rebuild for llvm14

---
 srcpkgs/ccls/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/ccls/template b/srcpkgs/ccls/template
index fbb7c6847bc1..40aba3b55bfe 100644
--- a/srcpkgs/ccls/template
+++ b/srcpkgs/ccls/template
@@ -1,7 +1,7 @@
 # Template file for 'ccls'
 pkgname=ccls
 version=0.20210330
-revision=2
+revision=3
 build_style=cmake
 hostmakedepends="clang-tools-extra"
 makedepends="llvm ncurses-devel rapidjson zlib-devel clang-tools-extra"

From 313b9dcaed208ddc1198390cdf5d0f60e01c00c1 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 17/29] clazy: rebuild for llvm14

---
 srcpkgs/clazy/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/clazy/template b/srcpkgs/clazy/template
index 11f3bab55aef..f81de08ab836 100644
--- a/srcpkgs/clazy/template
+++ b/srcpkgs/clazy/template
@@ -1,7 +1,7 @@
 # Template file for 'clazy'
 pkgname=clazy
 version=1.11
-revision=1
+revision=2
 build_style=cmake
 build_helper=qemu
 hostmakedepends="llvm"

From 4550c56aeda7a1fb90cc0c8f1b584a2d1c2ea400 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 18/29] bpftrace: rebuild for llvm14

---
 srcpkgs/bpftrace/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/bpftrace/template b/srcpkgs/bpftrace/template
index 28ab3c626399..eb2480d2230e 100644
--- a/srcpkgs/bpftrace/template
+++ b/srcpkgs/bpftrace/template
@@ -1,7 +1,7 @@
 # Template file for 'bpftrace'
 pkgname=bpftrace
 version=0.14.1
-revision=1
+revision=2
 archs="x86_64* aarch64* ppc64*"
 build_style=cmake
 configure_args="-DBUILD_TESTING=OFF"  # needs root to run

From bd26ab8eff3ab9fc7c1450122507057bda8429fb Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 19/29] rtags: rebuild for llvm14

---
 srcpkgs/rtags/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/rtags/template b/srcpkgs/rtags/template
index b496a1b0e721..9b161e690d76 100644
--- a/srcpkgs/rtags/template
+++ b/srcpkgs/rtags/template
@@ -1,7 +1,7 @@
 # Template file for 'rtags'
 pkgname=rtags
 version=2.38
-revision=5
+revision=6
 build_style=cmake
 # Don't run tests in do_install, please.
 configure_args="-DSKIP_CTEST=TRUE"

From 85c1d5ed55c9cfec26fb359efdf77773f30bc64c Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:07:19 +0200
Subject: [PATCH 20/29] beignet: remove package

---
 srcpkgs/beignet/patches/cl_uint.patch         |  22 -
 ...419a0008e38ef2d9d255d9e9c74e9fba084b.patch | 134 ---
 srcpkgs/beignet/patches/llvm06.patch          |  33 -
 srcpkgs/beignet/patches/llvm08.patch          |  56 --
 srcpkgs/beignet/patches/llvm09.patch          | 111 ---
 srcpkgs/beignet/patches/llvm10.patch          | 347 -------
 srcpkgs/beignet/patches/llvm11.patch          | 937 ------------------
 srcpkgs/beignet/patches/llvm12.patch          | 115 ---
 srcpkgs/beignet/patches/musl.patch            |  11 -
 srcpkgs/beignet/template                      |  22 -
 srcpkgs/beignet/update                        |   1 -
 srcpkgs/removed-packages/template             |   3 +-
 12 files changed, 2 insertions(+), 1790 deletions(-)
 delete mode 100644 srcpkgs/beignet/patches/cl_uint.patch
 delete mode 100644 srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm06.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm08.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm09.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm10.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm11.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm12.patch
 delete mode 100644 srcpkgs/beignet/patches/musl.patch
 delete mode 100644 srcpkgs/beignet/template
 delete mode 100644 srcpkgs/beignet/update

diff --git a/srcpkgs/beignet/patches/cl_uint.patch b/srcpkgs/beignet/patches/cl_uint.patch
deleted file mode 100644
index 86ba00f04e95..000000000000
--- a/srcpkgs/beignet/patches/cl_uint.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/src/cl_api_kernel.c	2017-09-22 10:05:22.000000000 +0200
-+++ b/src/cl_api_kernel.c	2020-03-24 18:27:40.186485887 +0100
-@@ -151,7 +151,7 @@
-         fixed_local_sz[0] = 16;
-         fixed_local_sz[1] = 1;
-       } else {
--        uint j, maxDimSize = 64 /* from 64? */, maxGroupSize = 256; //MAX_WORK_GROUP_SIZE may too large
-+        cl_uint j, maxDimSize = 64 /* from 64? */, maxGroupSize = 256; //MAX_WORK_GROUP_SIZE may too large
-         size_t realGroupSize = 1;
-         for (i = 0; i < work_dim; i++) {
-           for (j = maxDimSize; j > 1; j--) {
---- a/src/cl_enqueue.c	2017-09-22 10:05:22.000000000 +0200
-+++ b/src/cl_enqueue.c	2020-03-24 18:30:12.031479833 +0100
-@@ -494,7 +494,7 @@
- cl_int cl_enqueue_svm_free(enqueue_data *data, cl_int status) {
-   int i;
-   void **pointers = data->pointers;
--  uint num_svm_ptrs = data->size;
-+  cl_uint num_svm_ptrs = data->size;
-   cl_int err = CL_SUCCESS;
- 
-   if (status != CL_COMPLETE)
diff --git a/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch b/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
deleted file mode 100644
index 8de9e6e2f093..000000000000
--- a/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
+++ /dev/null
@@ -1,134 +0,0 @@
-From e1b2419a0008e38ef2d9d255d9e9c74e9fba084b Mon Sep 17 00:00:00 2001
-From: "Rebecca N. Palmer" <rebecca_palmer@zoho.com>
-Date: Sat, 21 Jul 2018 20:05:54 +0100
-Subject: Add preliminary LLVM 7 support
-
-This is preliminary because LLVM 7 has not been released yet:
-it was tested with the snapshot from Debian experimental (svn336894).
-
-1.Change linking order, as clangCodeGen now links to clangFrontend
-2.Pass references not pointers to WriteBitcodeToFile and CloneModule
-3.Add the headers that LoopSimplifyID, LCSSAID and
-some create*Pass have moved to
-4.Define our DEBUG whether or not we just undefined LLVM's
-(theirs is now LLVM_DEBUG, but we never actually use it)
-
-Signed-off-by: Rebecca N. Palmer <rebecca_palmer@zoho.com>
-Reviewed-by: Yang Rong <rong.r.yang@intel.com>
----
- CMake/FindLLVM.cmake                     | 2 +-
- backend/src/backend/gen_program.cpp      | 8 ++++++++
- backend/src/backend/program.cpp          | 4 ++++
- backend/src/llvm/ExpandLargeIntegers.cpp | 2 +-
- backend/src/llvm/llvm_bitcode_link.cpp   | 4 ++++
- backend/src/llvm/llvm_includes.hpp       | 4 ++++
- 6 files changed, 22 insertions(+), 2 deletions(-)
-
-diff --git a/CMake/FindLLVM.cmake b/CMake/FindLLVM.cmake
-index 5457f24..f882589 100644
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -113,10 +113,10 @@ macro(add_one_lib name)
- endmacro()
- 
- #Assume clang lib path same as llvm lib path
-+add_one_lib("clangCodeGen")
- add_one_lib("clangFrontend")
- add_one_lib("clangSerialization")
- add_one_lib("clangDriver")
--add_one_lib("clangCodeGen")
- add_one_lib("clangSema")
- add_one_lib("clangStaticAnalyzerFrontend")
- add_one_lib("clangStaticAnalyzerCheckers")
-diff --git a/backend/src/backend/gen_program.cpp b/backend/src/backend/gen_program.cpp
-index 274c99c..4159234 100644
---- a/backend/src/backend/gen_program.cpp
-+++ b/backend/src/backend/gen_program.cpp
-@@ -454,7 +454,11 @@ namespace gbe {
- #ifdef GBE_COMPILER_AVAILABLE
-       std::string str;
-       llvm::raw_string_ostream OS(str);
-+#if LLVM_VERSION_MAJOR >= 7
-+      llvm::WriteBitcodeToFile(*((llvm::Module*)prog->module), OS);
-+#else
-       llvm::WriteBitcodeToFile((llvm::Module*)prog->module, OS);
-+#endif
-       std::string& bin_str = OS.str();
-       int llsz = bin_str.size();
-       *binary = (char *)malloc(sizeof(char) * (llsz+1) );
-@@ -545,7 +549,11 @@ namespace gbe {
-                                     &modRef);
-         src = llvm::unwrap(modRef);
-       }
-+#if LLVM_VERSION_MAJOR >= 7
-+      llvm::Module* clone = llvm::CloneModule(*src).release();
-+#else
-       llvm::Module* clone = llvm::CloneModule(src).release();
-+#endif
-       if (LLVMLinkModules2(wrap(dst), wrap(clone))) {
- #elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-       if (LLVMLinkModules(wrap(dst), wrap(src), LLVMLinkerPreserveSource_Removed, &errMsg)) {
-diff --git a/backend/src/backend/program.cpp b/backend/src/backend/program.cpp
-index c37c595..b36f7b4 100644
---- a/backend/src/backend/program.cpp
-+++ b/backend/src/backend/program.cpp
-@@ -794,7 +794,11 @@ namespace gbe {
-       llvm::raw_fd_ostream ostream (dumpSPIRBinaryName.c_str(),
-                                     err, llvm::sys::fs::F_None);
-       if (!err)
-+#if LLVM_VERSION_MAJOR<7
-         llvm::WriteBitcodeToFile(*out_module, ostream);
-+#else
-+        llvm::WriteBitcodeToFile(**out_module, ostream);
-+#endif
-     }
- #endif
-     return true;
-diff --git a/backend/src/llvm/ExpandLargeIntegers.cpp b/backend/src/llvm/ExpandLargeIntegers.cpp
-index 8515dc1..4aec44e 100644
---- a/backend/src/llvm/ExpandLargeIntegers.cpp
-+++ b/backend/src/llvm/ExpandLargeIntegers.cpp
-@@ -99,8 +99,8 @@ using namespace llvm;
- 
- #ifdef DEBUG
-   #undef DEBUG
--  #define DEBUG(...)
- #endif
-+#define DEBUG(...)
- // Break instructions up into no larger than 64-bit chunks.
- static const unsigned kChunkBits = 64;
- static const unsigned kChunkBytes = kChunkBits / CHAR_BIT;
-diff --git a/backend/src/llvm/llvm_bitcode_link.cpp b/backend/src/llvm/llvm_bitcode_link.cpp
-index ef56e4c..4c3e20e 100644
---- a/backend/src/llvm/llvm_bitcode_link.cpp
-+++ b/backend/src/llvm/llvm_bitcode_link.cpp
-@@ -340,7 +340,11 @@ namespace gbe
-     /* We use beignet's bitcode as dst because it will have a lot of
-        lazy functions which will not be loaded. */
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 39
-+#if LLVM_VERSION_MAJOR >= 7
-+    llvm::Module * linked_module = llvm::CloneModule(*(llvm::Module*)mod).release();
-+#else
-     llvm::Module * linked_module = llvm::CloneModule((llvm::Module*)mod).release();
-+#endif
-     if(LLVMLinkModules2(wrap(clonedLib), wrap(linked_module))) {
- #else
-     char* errorMsg;
-diff --git a/backend/src/llvm/llvm_includes.hpp b/backend/src/llvm/llvm_includes.hpp
-index 184553a..ffccf02 100644
---- a/backend/src/llvm/llvm_includes.hpp
-+++ b/backend/src/llvm/llvm_includes.hpp
-@@ -89,6 +89,10 @@
- #include "llvm/CodeGen/IntrinsicLowering.h"
- 
- #include "llvm/Transforms/Scalar.h"
-+#if LLVM_VERSION_MAJOR >= 7
-+#include "llvm/Transforms/Utils.h"
-+#include "llvm/Transforms/InstCombine/InstCombine.h"
-+#endif
- #include "llvm/MC/MCAsmInfo.h"
- #include "llvm/MC/MCContext.h"
- #include "llvm/MC/MCInstrInfo.h"
--- 
-cgit v1.1
-
diff --git a/srcpkgs/beignet/patches/llvm06.patch b/srcpkgs/beignet/patches/llvm06.patch
deleted file mode 100644
index 3389e66c82df..000000000000
--- a/srcpkgs/beignet/patches/llvm06.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-Source: Arch Linux
-Upstream: unknown
-Reason: fixes llvm6 compilation
-
---- a/backend/src/llvm/llvm_to_gen.cpp	2017-10-24 09:04:48.000000000 +0300
-+++ b/backend/src/llvm/llvm_to_gen.cpp	2018-03-16 16:08:54.669963824 +0200
-@@ -322,7 +322,11 @@ namespace gbe
-     DataLayout DL(&mod);
-     
-     gbeDiagnosticContext dc;
-+#if LLVM_VERSION_MAJOR >= 6
-+    mod.getContext().setDiagnosticHandlerCallBack(&gbeDiagnosticHandler,&dc);
-+#else
-     mod.getContext().setDiagnosticHandler(&gbeDiagnosticHandler,&dc);
-+#endif
- 
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-     mod.setDataLayout(DL);
---- a/backend/src/llvm/llvm_unroll.cpp	2017-10-24 09:04:48.000000000 +0300
-+++ b/backend/src/llvm/llvm_unroll.cpp	2018-03-16 16:09:47.736403557 +0200
-@@ -205,7 +205,9 @@ namespace gbe {
-           if (parentTripCount != 0 && currTripCount * parentTripCount > 32) {
-             //Don't change the unrollID if doesn't force unroll.
-             //setUnrollID(parentL, false);
--#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-+#if LLVM_VERSION_MAJOR >= 6
-+            loopInfo.erase(parentL);
-+#elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-             loopInfo.markAsRemoved(parentL);
- #else
-             LPM.deleteLoopFromQueue(parentL);
-Only in Beignet-1.3.2-Source: build
-
diff --git a/srcpkgs/beignet/patches/llvm08.patch b/srcpkgs/beignet/patches/llvm08.patch
deleted file mode 100644
index a0c5e7a7c4f7..000000000000
--- a/srcpkgs/beignet/patches/llvm08.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 75c152599a7c1739e6dadcdb9b377acf7e44d9cf Mon Sep 17 00:00:00 2001
-From: Jan Beich <jbeich@FreeBSD.org>
-Date: Wed, 30 Jan 2019 12:42:34 +0000
-Subject: [PATCH] lang/beignet: unbreak with llvm80
-
-Regressed by https://github.com/llvm/llvm-project/commit/721d95713a9e
-
-unable to load /usr/local/lib/beignet//libgbeinterp.so which is part of the driver, please check!
-ld-elf.so.1: /usr/local/lib/beignet//libgbeinterp.so: Undefined symbol "_ZN4llvm24DisableABIBreakingChecksE"
-
-Regressed by https://github.com/llvm/llvm-project/commit/4a2d58e16acc
-
-backend/src/llvm/llvm_gen_backend.cpp:3076:5: error:
-      unknown type name 'TerminatorInst'
-    TerminatorInst *term = bb->getTerminator();
-    ^
-backend/src/llvm/llvm_gen_backend.cpp:3083:5: error:
-      unknown type name 'TerminatorInst'
-    TerminatorInst *term = bb->getTerminator();
-    ^
-
---- a/backend/src/CMakeLists.txt	2017-09-22 08:05:22 UTC
-+++ b/backend/src/CMakeLists.txt
-@@ -168,6 +168,7 @@ add_dependencies(gbe beignet_bitcode)
- endif (NOT (USE_STANDALONE_GBE_COMPILER STREQUAL "true"))
- 
- add_library(gbeinterp SHARED gbe_bin_interpreter.cpp)
-+target_link_libraries(gbeinterp ${LLVM_MODULE_LIBS})
- 
- if (LLVM_VERSION_NODOT VERSION_EQUAL 34)
-   find_library(TERMINFO NAMES tinfo ncurses)
---- a/backend/src/llvm/llvm_gen_backend.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -3073,14 +3073,22 @@ namespace gbe
- 
- 
-   static unsigned getChildNo(BasicBlock *bb) {
-+#if LLVM_VERSION_MAJOR < 8
-     TerminatorInst *term = bb->getTerminator();
-+#else
-+    Instruction *term = bb->getTerminator();
-+#endif
-     return term->getNumSuccessors();
-   }
- 
-   // return NULL if index out-range of children number
-   static BasicBlock *getChildPossible(BasicBlock *bb, unsigned index) {
- 
-+#if LLVM_VERSION_MAJOR < 8
-     TerminatorInst *term = bb->getTerminator();
-+#else
-+    Instruction *term = bb->getTerminator();
-+#endif
-     unsigned childNo = term->getNumSuccessors();
-     BasicBlock *child = NULL;
-     if(index < childNo) {
diff --git a/srcpkgs/beignet/patches/llvm09.patch b/srcpkgs/beignet/patches/llvm09.patch
deleted file mode 100644
index acaeceabb6dd..000000000000
--- a/srcpkgs/beignet/patches/llvm09.patch
+++ /dev/null
@@ -1,111 +0,0 @@
-Source: FreeBSD + q66
-
-Mostly FreeBSD other than FindLLVM.cmake changes.
-Linking against clang-cpp does not work for us.
-
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -140,6 +140,7 @@ add_one_lib("clangStaticAnalyzerCore")
- add_one_lib("clangAnalysis")
- add_one_lib("clangEdit")
- add_one_lib("clangAST")
-+add_one_lib("clangASTMatchers")
- add_one_lib("clangParse")
- add_one_lib("clangSema")
- add_one_lib("clangLex")
---- a/backend/src/llvm/llvm_intrinsic_lowering.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_intrinsic_lowering.cpp
-@@ -77,7 +77,11 @@ namespace gbe {
-         std::vector<Type *> ParamTys;
-         for (Value** I = ArgBegin; I != ArgEnd; ++I)
-           ParamTys.push_back((*I)->getType());
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+        FunctionCallee FCache = M->getOrInsertFunction(NewFn,
-+#else
-         Constant* FCache = M->getOrInsertFunction(NewFn,
-+#endif
-                                         FunctionType::get(RetTy, ParamTys, false));
- 
-         IRBuilder<> Builder(CI->getParent(), BasicBlock::iterator(CI));
---- a/backend/src/llvm/llvm_sampler_fix.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp
-@@ -82,7 +82,11 @@ namespace gbe {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-           Module *M = I->getParent()->getParent()->getParent();
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+          FunctionCallee samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#endif
- #else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType(), nullptr);
- #endif
-@@ -124,7 +128,11 @@ namespace gbe {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-           Module *M = I->getParent()->getParent()->getParent();
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+          FunctionCallee samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#endif
- #else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType(), nullptr);
- #endif
---- a/backend/src/llvm/llvm_profiling.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_profiling.cpp
-@@ -163,10 +163,18 @@ namespace gbe
-       // __gen_ocl_store_timestamp(int nth, int type);
-       Value *Args[2] = {ConstantInt::get(intTy, pointNum++), ConstantInt::get(intTy, profilingType)};
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+      builder->CreateCall(module->getOrInsertFunction(
-+#else
-       builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-+#endif
-               "__gen_ocl_calc_timestamp", Type::getVoidTy(module->getContext()),
-               IntegerType::getInt32Ty(module->getContext()),
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+              IntegerType::getInt32Ty(module->getContext())),
-+#else
-               IntegerType::getInt32Ty(module->getContext()))),
-+#endif
-               ArrayRef<Value*>(Args));
- #else
-       builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-@@ -185,10 +193,18 @@ namespace gbe
-     Value *Args2[2] = {profilingBuf, ConstantInt::get(intTy, profilingType)};
- 
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+    builder->CreateCall(module->getOrInsertFunction(
-+#else
-     builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-+#endif
-             "__gen_ocl_store_profiling", Type::getVoidTy(module->getContext()),
-             ptrTy,
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+            IntegerType::getInt32Ty(module->getContext())),
-+#else
-             IntegerType::getInt32Ty(module->getContext()))),
-+#endif
-             ArrayRef<Value*>(Args2));
- #else
-     builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
---- a/backend/src/llvm/llvm_device_enqueue.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_device_enqueue.cpp
-@@ -398,8 +398,13 @@ namespace gbe {
-               std::vector<Type *> ParamTys;
-               for (Value** iter = args.begin(); iter != args.end(); ++iter)
-                 ParamTys.push_back((*iter)->getType());
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+              CallInst* newCI = builder.CreateCall(mod->getOrInsertFunction(
-+                              "__gen_enqueue_kernel_slm", FunctionType::get(intTy, ParamTys, false)), args);
-+#else
-               CallInst* newCI = builder.CreateCall(cast<llvm::Function>(mod->getOrInsertFunction(
-                               "__gen_enqueue_kernel_slm", FunctionType::get(intTy, ParamTys, false))), args);
-+#endif
-               CI->replaceAllUsesWith(newCI);
-               deadInsnSet.insert(CI);
-             }
diff --git a/srcpkgs/beignet/patches/llvm10.patch b/srcpkgs/beignet/patches/llvm10.patch
deleted file mode 100644
index 8aafe48a240d..000000000000
--- a/srcpkgs/beignet/patches/llvm10.patch
+++ /dev/null
@@ -1,347 +0,0 @@
-diff --git CMake/FindLLVM.cmake CMake/FindLLVM.cmake
-index 0a59e47..6e90923 100644
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -104,28 +104,16 @@ string(REGEX REPLACE " *\n" "" LLVM_SYSTEM_LIBS ${LLVM_SYSTEM_LIBS_ORIG})
- endif (LLVM_SYSTEM_LIBS_ORIG)
- endif (LLVM_VERSION_NODOT VERSION_GREATER 34)
- 
-+#something harmless because whitespace at start is an error
-+set(CLANG_LIBRARIES "-ldl")
- macro(add_one_lib name)
-   FIND_LIBRARY(CLANG_LIB
-     NAMES ${name}
-     PATHS ${LLVM_LIBRARY_DIR} NO_DEFAULT_PATH)
--  set(CLANG_LIBRARIES ${CLANG_LIBRARIES} ${CLANG_LIB})
-+  set(CLANG_LIBRARIES "${CLANG_LIBRARIES} ${CLANG_LIB}")
-+  message(STATUS "clanglibs name ${name} this ${CLANG_LIB} all ${CLANG_LIBRARIES} ")
- 	unset(CLANG_LIB CACHE)
- endmacro()
- 
- #Assume clang lib path same as llvm lib path
--add_one_lib("clangCodeGen")
--add_one_lib("clangFrontend")
--add_one_lib("clangSerialization")
--add_one_lib("clangDriver")
--add_one_lib("clangSema")
--add_one_lib("clangStaticAnalyzerFrontend")
--add_one_lib("clangStaticAnalyzerCheckers")
--add_one_lib("clangStaticAnalyzerCore")
--add_one_lib("clangAnalysis")
--add_one_lib("clangEdit")
--add_one_lib("clangAST")
--add_one_lib("clangASTMatchers")
--add_one_lib("clangParse")
--add_one_lib("clangSema")
--add_one_lib("clangLex")
--add_one_lib("clangBasic")
-+add_one_lib("clang-cpp")
-diff --git CMakeLists.txt CMakeLists.txt
-index c11acbb..08f427d 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -79,7 +79,7 @@ elseif (COMPILER STREQUAL "CLANG")
- elseif (COMPILER STREQUAL "ICC")
-   set (CMAKE_C_CXX_FLAGS "${CMAKE_C_CXX_FLAGS}  -wd2928 -Wall -fPIC -fstrict-aliasing -fp-model fast -msse4.1 -Wl,-E")
- endif ()
--set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
-+set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof")
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
- set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
- set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
-diff --git backend/src/backend/program.cpp backend/src/backend/program.cpp
-index b36f7b4..e666031 100644
---- a/backend/src/backend/program.cpp
-+++ b/backend/src/backend/program.cpp
-@@ -694,9 +694,9 @@ namespace gbe {
- #endif
-                 );
- 
-+    llvm::cl::ResetAllOptionOccurrences();
-     clang::CompilerInvocation::CreateFromArgs(*CI,
--                                              &args[0],
--                                              &args[0] + args.size(),
-+                                              clang::ArrayRef<const char*>(args),
-                                               Diags);
-     // Create the compiler instance
-     clang::CompilerInstance Clang;
-@@ -1242,8 +1242,7 @@ EXTEND_QUOTE:
-       // Create the compiler invocation
-       std::unique_ptr<clang::CompilerInvocation> CI(new clang::CompilerInvocation);
-       return clang::CompilerInvocation::CreateFromArgs(*CI,
--                                                       &args[0],
--                                                       &args[0] + args.size(),
-+                                                       clang::ArrayRef<const char*>(args),
-                                                        Diags);
-     }
- #endif
-diff --git backend/src/llvm/llvm_gen_backend.cpp backend/src/llvm/llvm_gen_backend.cpp
-index c6fc30d..82441d8 100644
---- a/backend/src/llvm/llvm_gen_backend.cpp
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -575,10 +575,12 @@ namespace gbe
-         has_errors(false),
-         legacyMode(true)
-     {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-       initializeLoopInfoWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeLoopInfoPass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-       pass = PASS_EMIT_REGISTERS;
-     }
-diff --git backend/src/llvm/llvm_gen_backend.hpp backend/src/llvm/llvm_gen_backend.hpp
-index b4715b1..8e74f7a 100644
---- a/backend/src/llvm/llvm_gen_backend.hpp
-+++ b/backend/src/llvm/llvm_gen_backend.hpp
-@@ -130,10 +130,10 @@ namespace gbe
-   llvm::FunctionPass *createGenPass(ir::Unit &unit);
- 
-   /*! Remove the GEP instructions */
--  llvm::BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit);
-+  llvm::FunctionPass *createRemoveGEPPass(const ir::Unit &unit);
- 
-   /*! Merge load/store if possible */
--  llvm::BasicBlockPass *createLoadStoreOptimizationPass();
-+  llvm::FunctionPass *createLoadStoreOptimizationPass();
- 
-   /*! Scalarize all vector op instructions */
-   llvm::FunctionPass* createScalarizePass();
-@@ -141,7 +141,7 @@ namespace gbe
-   llvm::ModulePass* createBarrierNodupPass(bool);
- 
-   /*! Convert the Intrinsic call to gen function */
--  llvm::BasicBlockPass *createIntrinsicLoweringPass();
-+  llvm::FunctionPass *createIntrinsicLoweringPass();
- 
-   /*! Passer the printf function call. */
-   llvm::FunctionPass* createPrintfParserPass(ir::Unit &unit);
-diff --git backend/src/llvm/llvm_intrinsic_lowering.cpp backend/src/llvm/llvm_intrinsic_lowering.cpp
-index 94f0ce6..b5539e9 100644
---- a/backend/src/llvm/llvm_intrinsic_lowering.cpp
-+++ b/backend/src/llvm/llvm_intrinsic_lowering.cpp
-@@ -29,12 +29,12 @@
- using namespace llvm;
- 
- namespace gbe {
--    class InstrinsicLowering : public BasicBlockPass
-+    class InstrinsicLowering : public FunctionPass
-     {
-     public:
-       static char ID;
-       InstrinsicLowering() :
--        BasicBlockPass(ID) {}
-+        FunctionPass(ID) {}
- 
-       void getAnalysisUsage(AnalysisUsage &AU) const {
- 
-@@ -93,9 +93,9 @@ namespace gbe {
-         CI->eraseFromParent();
-         return NewCI;
-       }
--      virtual bool runOnBasicBlock(BasicBlock &BB)
-+      virtual bool runOnFunction(Function &F)
-       {
--        bool changedBlock = false;
-+        for (BasicBlock &BB : F) {
-         Module *M = BB.getParent()->getParent();
- 
-         DataLayout TD(M);
-@@ -159,13 +159,14 @@ namespace gbe {
-             }
-           }
-         }
--        return changedBlock;
-+        }
-+        return true;
-       }
-     };
- 
-     char InstrinsicLowering::ID = 0;
- 
--    BasicBlockPass *createIntrinsicLoweringPass() {
-+    FunctionPass *createIntrinsicLoweringPass() {
-       return new InstrinsicLowering();
-     }
- } // end namespace
-diff --git backend/src/llvm/llvm_loadstore_optimization.cpp backend/src/llvm/llvm_loadstore_optimization.cpp
-index 5aa38be..e314302 100644
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
-@@ -26,13 +26,13 @@
- 
- using namespace llvm;
- namespace gbe {
--  class GenLoadStoreOptimization : public BasicBlockPass {
-+  class GenLoadStoreOptimization : public FunctionPass {
- 
-   public:
-     static char ID;
-     ScalarEvolution *SE;
-     const DataLayout *TD;
--    GenLoadStoreOptimization() : BasicBlockPass(ID) {}
-+    GenLoadStoreOptimization() : FunctionPass(ID) {}
- 
-     void getAnalysisUsage(AnalysisUsage &AU) const {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-@@ -45,7 +45,9 @@ namespace gbe {
-       AU.setPreservesCFG();
-     }
- 
--    virtual bool runOnBasicBlock(BasicBlock &BB) {
-+    virtual bool runOnFunction(Function &F) {
-+        bool changedAnyBlock = false;
-+        for (BasicBlock &BB : F) {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-       SE = &getAnalysis<ScalarEvolutionWrapperPass>().getSE();
- #else
-@@ -59,7 +61,9 @@ namespace gbe {
-       #else
-         TD = getAnalysisIfAvailable<DataLayout>();
-       #endif
--      return optimizeLoadStore(BB);
-+           changedAnyBlock = optimizeLoadStore(BB) | changedAnyBlock;
-+        }
-+        return changedAnyBlock;
-     }
-     Type    *getValueType(Value *insn);
-     Value   *getPointerOperand(Value *I);
-@@ -148,7 +152,7 @@ namespace gbe {
-       values.push_back(merged[i]);
-     }
-     LoadInst *ld = cast<LoadInst>(merged[0]);
--    unsigned align = ld->getAlignment();
-+    MaybeAlign align = ld->getAlign();
-     unsigned addrSpace = ld->getPointerAddressSpace();
-     // insert before first load
-     Builder.SetInsertPoint(ld);
-@@ -231,7 +235,7 @@ namespace gbe {
- 
-     unsigned addrSpace = st->getPointerAddressSpace();
- 
--    unsigned align = st->getAlignment();
-+    MaybeAlign align = st->getAlign();
-     // insert before the last store
-     Builder.SetInsertPoint(merged[size-1]);
- 
-@@ -325,7 +329,7 @@ namespace gbe {
-     return changed;
-   }
- 
--  BasicBlockPass *createLoadStoreOptimizationPass() {
-+  FunctionPass *createLoadStoreOptimizationPass() {
-     return new GenLoadStoreOptimization();
-   }
- };
-diff --git backend/src/llvm/llvm_passes.cpp backend/src/llvm/llvm_passes.cpp
-index 10752a3..b8f2282 100644
---- a/backend/src/llvm/llvm_passes.cpp
-+++ b/backend/src/llvm/llvm_passes.cpp
-@@ -37,7 +37,7 @@
- #include "sys/map.hpp"
- 
- using namespace llvm;
--
-+template class cfg::Update<BasicBlock *>;
- namespace gbe
- {
-   bool isKernelFunction(const llvm::Function &F) {
-@@ -219,13 +219,13 @@ namespace gbe
-     return offset;
-   }
- 
--  class GenRemoveGEPPasss : public BasicBlockPass
-+  class GenRemoveGEPPasss : public FunctionPass
-   {
- 
-    public:
-     static char ID;
-     GenRemoveGEPPasss(const ir::Unit &unit) :
--      BasicBlockPass(ID),
-+      FunctionPass(ID),
-       unit(unit) {}
-     const ir::Unit &unit;
-     void getAnalysisUsage(AnalysisUsage &AU) const {
-@@ -242,16 +242,18 @@ namespace gbe
- 
-     bool simplifyGEPInstructions(GetElementPtrInst* GEPInst);
- 
--    virtual bool runOnBasicBlock(BasicBlock &BB)
-+    virtual bool runOnFunction(Function &F)
-     {
--      bool changedBlock = false;
-+      bool changedAnyBlock = false;
-+        for (BasicBlock &BB : F) {
-       iplist<Instruction>::iterator I = BB.getInstList().begin();
-       for (auto nextI = I, E = --BB.getInstList().end(); I != E; I = nextI) {
-         iplist<Instruction>::iterator I = nextI++;
-         if(GetElementPtrInst* gep = dyn_cast<GetElementPtrInst>(&*I))
--          changedBlock = (simplifyGEPInstructions(gep) || changedBlock);
-+          changedAnyBlock = (simplifyGEPInstructions(gep) | changedAnyBlock);
-       }
--      return changedBlock;
-+        }
-+      return changedAnyBlock;
-     }
-   };
- 
-@@ -367,7 +369,7 @@ namespace gbe
-     return true;
-   }
- 
--  BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit) {
-+  FunctionPass *createRemoveGEPPass(const ir::Unit &unit) {
-     return new GenRemoveGEPPasss(unit);
-   }
- } /* namespace gbe */
-diff --git backend/src/llvm/llvm_sampler_fix.cpp backend/src/llvm/llvm_sampler_fix.cpp
-index 2a097c8..863be6d 100644
---- a/backend/src/llvm/llvm_sampler_fix.cpp
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp
-@@ -33,10 +33,12 @@ namespace gbe {
-   class SamplerFix : public FunctionPass {
-   public:
-     SamplerFix() : FunctionPass(ID) {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
-       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-     }
- 
-diff --git backend/src/llvm/llvm_scalarize.cpp backend/src/llvm/llvm_scalarize.cpp
-index e9a2a66..e9d2ee4 100644
---- a/backend/src/llvm/llvm_scalarize.cpp
-+++ b/backend/src/llvm/llvm_scalarize.cpp
-@@ -96,10 +96,12 @@ namespace gbe {
- 
-     Scalarize() : FunctionPass(ID)
-     {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
-       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-     }
- 
-diff --git utests/CMakeLists.txt utests/CMakeLists.txt
-index 300d87a..64179c7 100644
---- a/utests/CMakeLists.txt
-+++ b/utests/CMakeLists.txt
-@@ -26,8 +26,8 @@ if (NOT NOT_BUILD_STAND_ALONE_UTEST)
-   # Threads
-   Find_Package(Threads)
- 
--  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
--  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
-+  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof -ffloat-store -fno-strict-aliasing")
-+  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS} -ffloat-store -fno-strict-aliasing") #compiler_{degrees,radians,function_argument2} use equality comparison of floats, compiler_long_bitcast uses aliasing
-   set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
-   set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
-   set (CMAKE_CXX_FLAGS_MINSIZEREL     "-Os -DNDEBUG -DGBE_DEBUG=0")
diff --git a/srcpkgs/beignet/patches/llvm11.patch b/srcpkgs/beignet/patches/llvm11.patch
deleted file mode 100644
index 2c3a4278943c..000000000000
--- a/srcpkgs/beignet/patches/llvm11.patch
+++ /dev/null
@@ -1,937 +0,0 @@
-Source: Snektron
-
-There were a few changes required for LLVM 11:
-* llvm::StringRef requires .str(), implicit conversion was removed
-* llvm::CallSite was removed, but the required methods are available on llvm::CallInst
-* VectorTyID was split into FixedVectorTyID and ScalableVectorTyID, FixedVectorTyID was used
-* CallInst::getCalledValue() was renamed to CallInst::getCalledOperand()
-* Implicit conversion from MaybeAlign to Align was removed, so MaybeAlign::valueOrOne was used instead.
-
---- a/backend/src/llvm/StripAttributes.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/StripAttributes.cpp	2020-11-09 19:04:19.641897141 +0100
-@@ -107,9 +107,8 @@
-        BB != E; ++BB) {
-     for (BasicBlock::iterator Inst = BB->begin(), E = BB->end();
-          Inst != E; ++Inst) {
--      CallSite Call(&*Inst);
--      if (Call)
--        Call.setCallingConv(CallingConv::C);
-+      if (CallInst* callInst = dyn_cast<CallInst>(&*Inst))
-+        callInst->setCallingConv(CallingConv::C);
-     }
-   }
-
---- a/backend/src/llvm/llvm_bitcode_link.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_bitcode_link.cpp	2020-11-09 17:04:09.633753428 +0100
-@@ -98,7 +98,7 @@
-         if (callFunc && callFunc->getIntrinsicID() != 0)
-           continue;
-
--        std::string fnName = call->getCalledValue()->stripPointerCasts()->getName();
-+        std::string fnName = call->getCalledOperand()->stripPointerCasts()->getName().str();
-
-         if (!MFS.insert(fnName).second) {
-           continue;
---- a/backend/src/llvm/llvm_device_enqueue.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_device_enqueue.cpp	2020-11-09 19:01:49.201915008 +0100
-@@ -45,7 +45,7 @@
-       return NULL;
-
-     /* This is a fake, to check the function bitcast is for block or not */
--    std::string fnName = Fn->getName();
-+    std::string fnName = Fn->getName().str();
-     if(fnName.find("_invoke") == std::string::npos)
-       return NULL;
-
-@@ -119,18 +119,18 @@
-       ParamTys.push_back(ty);
-     }
-     FunctionType* NewFT = FunctionType::get(Fn->getReturnType(), ParamTys, false);
--    Function* NewFn = Function::Create(NewFT, Function::ExternalLinkage, Fn->getName());
-+    Function* NewFn = Function::Create(NewFT, Function::ExternalLinkage, Fn->getName().str());
-     SmallVector<ReturnInst*, 8> Returns;
-
-     Function::arg_iterator NewFnArgIt = NewFn->arg_begin();
-     for (Function::arg_iterator I = Fn->arg_begin(), E = Fn->arg_end(); I != E; ++I) {
--      std::string ArgName = I->getName();
-+      std::string ArgName = I->getName().str();
-       NewFnArgIt->setName(ArgName);
-       VMap[&*I] = &(*NewFnArgIt++);
-     }
-     CloneFunctionInto(NewFn, Fn, VMap, /*ModuleLevelChanges=*/true, Returns);
-
--    Fn->setName("__d" + Fn->getName());
-+    Fn->setName("__d" + Fn->getName().str());
-     mod->getFunctionList().push_back(NewFn);
-     //mod->getOrInsertFunction(NewFn->getName(), NewFn->getFunctionType(),
-     //                         NewFn->getAttributes());
-@@ -147,7 +147,7 @@
-       argTypeNames.push_back(llvm::MDString::get(Context, "char*"));
-       argBaseTypeNames.push_back(llvm::MDString::get(Context, "char*"));
-       argTypeQuals.push_back(llvm::MDString::get(Context, ""));
--      argNames.push_back(llvm::MDString::get(Context, I->getName()));
-+      argNames.push_back(llvm::MDString::get(Context, I->getName().str()));
-     }
-
-     //If run to here, llvm version always > 3.9, add the version check just for build.
-@@ -198,7 +198,7 @@
-            * invoke pointer to store the index in the unit's block functions index.*/
-           Function *Fn = dyn_cast<Function>(bt->getOperand(0));
-
--          std::string fnName = Fn->getName();
-+          std::string fnName = Fn->getName().str();
-           int index = -1;
-           for(size_t i=0; i<unit.blockFuncs.size(); i++) {
-             if(unit.blockFuncs[i] == fnName) {
-@@ -241,7 +241,7 @@
-             //unnamed call function, parse the use to find the define of called function
-             SmallVector<Value*, 16> args(CI->op_begin(), CI->op_end()-1);
-
--            Value *v = CI->getCalledValue();
-+            Value *v = CI->getCalledOperand();
-             BitCastInst* bt = dyn_cast<BitCastInst>(v);
-             if(bt == NULL)
-               continue;
-@@ -316,7 +316,7 @@
-                   ConstantExpr *expr = dyn_cast<ConstantExpr>(c->getOperand(3));
-                   BitCastInst *bt = dyn_cast<BitCastInst>(expr->getAsInstruction());
-                   Function* f = dyn_cast<Function>(bt->getOperand(0));
--                  blocks[v] = f->getName();
-+                  blocks[v] = f->getName().str();
-                 }
-               }
-
-@@ -332,7 +332,7 @@
-           } else {
-             //handle enqueue_kernel function call
-             Function *fn = CI->getCalledFunction();
--            if (fn->getName().find("enqueue_kernel") == std::string::npos)
-+            if (fn->getName().str().find("enqueue_kernel") == std::string::npos)
-               continue;
-
-             //block parameter's index, 3 or 6
-@@ -361,7 +361,7 @@
-                   ConstantExpr *expr = dyn_cast<ConstantExpr>(c->getOperand(3));
-                   BitCastInst *bt = dyn_cast<BitCastInst>(expr->getAsInstruction());
-                   Function* f = dyn_cast<Function>(bt->getOperand(0));
--                  blocks[v] = f->getName();
-+                  blocks[v] = f->getName().str();
-                 }
-               }
-             } else if(isa<AllocaInst>(block)) {
---- a/backend/src/llvm/llvm_gen_backend.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_gen_backend.cpp	2020-11-09 18:33:50.919114327 +0100
-@@ -376,7 +376,7 @@
-           GBE_ASSERT(index == 0);
-           return this->_newScalar(value, key, type, index, uniform);
-           break;
--        case Type::VectorTyID:
-+        case Type::FixedVectorTyID:
-         {
-           auto vectorType = cast<VectorType>(type);
-           auto elementType = vectorType->getElementType();
-@@ -743,20 +743,20 @@
- #undef DECL_VISIT_FN
-
-     // Emit rounding instructions from gen native function
--    void emitRoundingCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode);
-+    void emitRoundingCallInst(CallInst &I, ir::Opcode opcode);
-     // Emit unary instructions from gen native function
--    void emitUnaryCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode, ir::Type = ir::TYPE_FLOAT);
-+    void emitUnaryCallInst(CallInst &I, ir::Opcode opcode, ir::Type = ir::TYPE_FLOAT);
-     // Emit unary instructions from gen native function
--    void emitAtomicInst(CallInst &I, CallSite &CS, ir::AtomicOps opcode);
-+    void emitAtomicInst(CallInst &I, ir::AtomicOps opcode);
-     // Emit workgroup instructions
--    void emitWorkGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode);
-+    void emitWorkGroupInst(CallInst &I, ir::WorkGroupOps opcode);
-     // Emit subgroup instructions
--    void emitSubGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode);
-+    void emitSubGroupInst(CallInst &I, ir::WorkGroupOps opcode);
-     // Emit subgroup instructions
--    void emitBlockReadWriteMemInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
--    void emitBlockReadWriteImageInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-+    void emitBlockReadWriteMemInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-+    void emitBlockReadWriteImageInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-
--    uint8_t appendSampler(CallSite::arg_iterator AI);
-+    uint8_t appendSampler(User::op_iterator AI);
-     uint8_t getImageID(CallInst &I);
-
-     // These instructions are not supported at all
-@@ -1320,13 +1320,13 @@
- #endif
-
-       if(typeNameNode) {
--        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
-+        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-       }
-       if(typeBaseNameNode) {
--        llvmInfo.typeBaseName= (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString();
-+        llvmInfo.typeBaseName= (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString().str();
-       }
--      llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
--      llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString();
-+      llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-+      llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString().str();
-       bool isImage = llvmInfo.isImageType();
-       bool isPipe = llvmInfo.isPipeType();
-       if (I->getType()->isPointerTy() || isImage || isPipe) {
-@@ -1531,7 +1531,7 @@
-             EltTy = getEltType(EltTy, TypeIndex);
-         }
-
--        ir::Constant cc = unit.getConstantSet().getConstant(pointer->getName());
-+        ir::Constant cc = unit.getConstantSet().getConstant(pointer->getName().str());
-         unsigned int defOffset = cc.getOffset();
-         relocs.push_back(ir::RelocEntry(offset, defOffset + constantOffset));
-
-@@ -1546,7 +1546,7 @@
-       return;
-     }
-     if (isa<GlobalVariable>(c)) {
--      ir::Constant cc = unit.getConstantSet().getConstant(c->getName());
-+      ir::Constant cc = unit.getConstantSet().getConstant(c->getName().str());
-       unsigned int defOffset = cc.getOffset();
-
-       relocs.push_back(ir::RelocEntry(offset, defOffset));
-@@ -1609,7 +1609,7 @@
-           }
-           break;
-         }
--      case Type::TypeID::VectorTyID:
-+      case Type::TypeID::FixedVectorTyID:
-         {
-           const ConstantDataSequential *cds = dyn_cast<ConstantDataSequential>(c);
-           const VectorType *vecTy = cast<VectorType>(type);
-@@ -1936,7 +1936,7 @@
-       case Type::PointerTyID:
-         regTranslator.newScalar(value, key, 0, uniform);
-         break;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         auto vectorType = cast<VectorType>(type);
-         const uint32_t elemNum = vectorType->getNumElements();
-@@ -2395,7 +2395,7 @@
- #endif
-         }
-         if(typeNameNode) {
--          llvmInfo.typeName = (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
-+          llvmInfo.typeName = (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-           //LLVM 3.9 image's type name include access qual, don't match OpenCL spec, erase them.
-           std::vector<std::string> filters = {"__read_only ", "__write_only "};
-           for (uint32_t i = 0; i < filters.size(); i++) {
-@@ -2406,16 +2406,16 @@
-           }
-         }
-         if(typeBaseNameNode){
--          llvmInfo.typeBaseName = (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString();
-+          llvmInfo.typeBaseName = (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString().str();
-         }
-         if(accessQualNode) {
--          llvmInfo.accessQual = (cast<MDString>(accessQualNode->getOperand(opID)))->getString();
-+          llvmInfo.accessQual = (cast<MDString>(accessQualNode->getOperand(opID)))->getString().str();
-         }
-         if(typeQualNode) {
--          llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString();
-+          llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString().str();
-         }
-         if(argNameNode){
--          llvmInfo.argName = (cast<MDString>(argNameNode->getOperand(opID)))->getString();
-+          llvmInfo.argName = (cast<MDString>(argNameNode->getOperand(opID)))->getString().str();
-         }
-
-         // function arguments are uniform values.
-@@ -3010,7 +3010,7 @@
-         } else {
-           this->newRegister(const_cast<GlobalVariable*>(&v));
-           ir::Register reg = regTranslator.getScalar(const_cast<GlobalVariable*>(&v), 0);
--          ir::Constant &con = unit.getConstantSet().getConstant(v.getName());
-+          ir::Constant &con = unit.getConstantSet().getConstant(v.getName().str());
-           if (!legacyMode) {
-             ir::Register regload = ctx.reg(getFamily(getType(ctx, v.getType())));
-             ctx.LOADI(getType(ctx, v.getType()), regload, ctx.newIntegerImmediate(con.getOffset(), getType(ctx, v.getType())));
-@@ -3212,7 +3212,7 @@
-         GBE_ASSERTM(false, "Unsupported calling convention");
-     }
-
--    ctx.startFunction(F.getName());
-+    ctx.startFunction(F.getName().str());
-
-     ir::Function &fn = ctx.getFunction();
-     this->regTranslator.clear();
-@@ -3810,9 +3810,9 @@
-
-   void GenWriter::regAllocateCallInst(CallInst &I) {
-     Value *dst = &I;
--    Value *Callee = I.getCalledValue();
-+    Value *Callee = I.getCalledOperand();
-     GBE_ASSERT(ctx.getFunction().getProfile() == ir::PROFILE_OCL);
--    GBE_ASSERT(isa<InlineAsm>(I.getCalledValue()) == false);
-+    GBE_ASSERT(isa<InlineAsm>(I.getCalledOperand()) == false);
-     if(I.getNumArgOperands()) GBE_ASSERT(I.hasStructRetAttr() == false);
-
-     // We only support a small number of intrinsics right now
-@@ -3870,7 +3870,7 @@
-       }
-     }
-     // Get the name of the called function and handle it
--    const std::string fnName = Callee->stripPointerCasts()->getName();
-+    const std::string fnName = Callee->stripPointerCasts()->getName().str();
-     auto genIntrinsicID = intrinsicMap.find(fnName);
-     switch (genIntrinsicID) {
-       case GEN_OCL_GET_GROUP_ID0:
-@@ -4166,7 +4166,7 @@
-     };
-   }
-
--  void GenWriter::emitRoundingCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode) {
-+  void GenWriter::emitRoundingCallInst(CallInst &I, ir::Opcode opcode) {
-     if (I.getType()->isHalfTy()) {
-       const ir::Register src = this->getRegister(I.getOperand(0));
-       const ir::Register srcFloat = ctx.reg(ir::FAMILY_DWORD);
-@@ -4177,14 +4177,14 @@
-       ctx.F32TO16(ir::TYPE_U16, ir::TYPE_FLOAT, dst, dstFloat);
-     } else {
-       GBE_ASSERT(I.getType()->isFloatTy());
--      this->emitUnaryCallInst(I,CS,opcode);
-+      this->emitUnaryCallInst(I,opcode);
-     }
-   }
-
--  void GenWriter::emitUnaryCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
-+  void GenWriter::emitUnaryCallInst(CallInst &I, ir::Opcode opcode, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--    CallSite::arg_iterator AE = CS.arg_end();
-+    User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-     GBE_ASSERT(AI != AE);
-     const ir::Register src = this->getRegister(*AI);
-@@ -4293,9 +4293,9 @@
-     this->emitAtomicInstHelper(opcode, type, dst, llvmPtr, payloadTuple);
-   }
-
--  void GenWriter::emitAtomicInst(CallInst &I, CallSite &CS, ir::AtomicOps opcode) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitAtomicInst(CallInst &I, ir::AtomicOps opcode) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-     Value *llvmPtr = *AI;
-     ir::AddressSpace addrSpace = addressSpaceLLVMToGen(llvmPtr->getType()->getPointerAddressSpace());
-@@ -4348,7 +4348,7 @@
-     }
-   }
-
--  void GenWriter::emitWorkGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode) {
-+  void GenWriter::emitWorkGroupInst(CallInst &I, ir::WorkGroupOps opcode) {
-     ir::Function &f = ctx.getFunction();
-
-     if (f.getwgBroadcastSLM() < 0 && opcode == ir::WORKGROUP_OP_BROADCAST) {
-@@ -4378,8 +4378,8 @@
-       GBE_ASSERT(f.gettidMapSLM() >= 0);
-     }
-
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     if (opcode == ir::WORKGROUP_OP_ALL || opcode == ir::WORKGROUP_OP_ANY) {
-@@ -4391,14 +4391,14 @@
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], 3);
-       ctx.WORKGROUP(opcode, (uint32_t)f.gettidMapSLM(), getRegister(&I), srcTuple, 3, ir::TYPE_S32);
-     } else if (opcode == ir::WORKGROUP_OP_BROADCAST) {
--      int argNum = CS.arg_size();
-+      int argNum = I.arg_size();
-       std::vector<ir::Register> src(argNum);
-       for (int i = 0; i < argNum; i++) {
-         src[i] = this->getRegister(*(AI++));
-       }
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], argNum);
-       ctx.WORKGROUP(ir::WORKGROUP_OP_BROADCAST, (uint32_t)f.getwgBroadcastSLM(), getRegister(&I), srcTuple, argNum,
--          getType(ctx, (*CS.arg_begin())->getType()));
-+          getType(ctx, (*I.arg_begin())->getType()));
-     } else {
-       ConstantInt *sign = dyn_cast<ConstantInt>(AI);
-       GBE_ASSERT(sign);
-@@ -4423,9 +4423,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitSubGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitSubGroupInst(CallInst &I, ir::WorkGroupOps opcode) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     if (opcode == ir::WORKGROUP_OP_ALL || opcode == ir::WORKGROUP_OP_ANY) {
-@@ -4435,7 +4435,7 @@
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], 1);
-       ctx.SUBGROUP(opcode, getRegister(&I), srcTuple, 1, ir::TYPE_S32);
-     } else if (opcode == ir::WORKGROUP_OP_BROADCAST) {
--      int argNum = CS.arg_size();
-+      int argNum = I.arg_size();
-       GBE_ASSERT(argNum == 2);
-       std::vector<ir::Register> src(argNum);
-       for (int i = 0; i < argNum; i++) {
-@@ -4443,7 +4443,7 @@
-       }
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], argNum);
-       ctx.SUBGROUP(ir::WORKGROUP_OP_BROADCAST, getRegister(&I), srcTuple, argNum,
--          getType(ctx, (*CS.arg_begin())->getType()));
-+          getType(ctx, (*I.arg_begin())->getType()));
-     } else {
-       ConstantInt *sign = dyn_cast<ConstantInt>(AI);
-       GBE_ASSERT(sign);
-@@ -4466,9 +4466,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitBlockReadWriteMemInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitBlockReadWriteMemInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     Value *llvmPtr = *(AI++);
-@@ -4522,9 +4522,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitBlockReadWriteImageInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitBlockReadWriteImageInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     const uint8_t imageID = getImageID(I);
-@@ -4557,7 +4557,7 @@
-
-   /* append a new sampler. should be called before any reference to
-    * a sampler_t value. */
--  uint8_t GenWriter::appendSampler(CallSite::arg_iterator AI) {
-+  uint8_t GenWriter::appendSampler(User::op_iterator AI) {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-     CallInst *TC = dyn_cast<CallInst>(*AI);
-     Constant *CPV = TC ? dyn_cast<Constant>(TC->getOperand(0)) : NULL;
-@@ -4595,10 +4595,9 @@
-         const ir::Function &fn = ctx.getFunction();
-
-         // Get the function arguments
--        CallSite CS(&I);
--        CallSite::arg_iterator AI = CS.arg_begin();
-+        User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--        CallSite::arg_iterator AE = CS.arg_end();
-+        User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-         switch (F->getIntrinsicID()) {
-           case Intrinsic::stacksave:
-@@ -4764,17 +4763,17 @@
-             ctx.MAD(srcType, dst, src0, src1, src2);
-           }
-           break;
--          case Intrinsic::sqrt: this->emitUnaryCallInst(I,CS,ir::OP_SQR); break;
--          case Intrinsic::ceil: this->emitRoundingCallInst(I,CS,ir::OP_RNDU); break;
--          case Intrinsic::trunc: this->emitRoundingCallInst(I,CS,ir::OP_RNDZ); break;
--          case Intrinsic::rint: this->emitRoundingCallInst(I,CS,ir::OP_RNDE); break;
--          case Intrinsic::floor: this->emitRoundingCallInst(I,CS,ir::OP_RNDD); break;
--          case Intrinsic::sin: this->emitUnaryCallInst(I,CS,ir::OP_SIN); break;
--          case Intrinsic::cos: this->emitUnaryCallInst(I,CS,ir::OP_COS); break;
--          case Intrinsic::log2: this->emitUnaryCallInst(I,CS,ir::OP_LOG); break;
--          case Intrinsic::exp2: this->emitUnaryCallInst(I,CS,ir::OP_EXP); break;
-+          case Intrinsic::sqrt: this->emitUnaryCallInst(I,ir::OP_SQR); break;
-+          case Intrinsic::ceil: this->emitRoundingCallInst(I,ir::OP_RNDU); break;
-+          case Intrinsic::trunc: this->emitRoundingCallInst(I,ir::OP_RNDZ); break;
-+          case Intrinsic::rint: this->emitRoundingCallInst(I,ir::OP_RNDE); break;
-+          case Intrinsic::floor: this->emitRoundingCallInst(I,ir::OP_RNDD); break;
-+          case Intrinsic::sin: this->emitUnaryCallInst(I,ir::OP_SIN); break;
-+          case Intrinsic::cos: this->emitUnaryCallInst(I,ir::OP_COS); break;
-+          case Intrinsic::log2: this->emitUnaryCallInst(I,ir::OP_LOG); break;
-+          case Intrinsic::exp2: this->emitUnaryCallInst(I,ir::OP_EXP); break;
-           case Intrinsic::bswap:
--            this->emitUnaryCallInst(I,CS,ir::OP_BSWAP, getUnsignedType(ctx, I.getType())); break;
-+            this->emitUnaryCallInst(I,ir::OP_BSWAP, getUnsignedType(ctx, I.getType())); break;
-           case Intrinsic::pow:
-           {
-             const ir::Register src0 = this->getRegister(*AI); ++AI;
-@@ -4794,21 +4793,20 @@
-         }
-       } else {
-         // Get the name of the called function and handle it
--        Value *Callee = I.getCalledValue();
--        const std::string fnName = Callee->stripPointerCasts()->getName();
-+        Value *Callee = I.getCalledOperand();
-+        const std::string fnName = Callee->stripPointerCasts()->getName().str();
-         auto genIntrinsicID = intrinsicMap.find(fnName);
-
-         // Get the function arguments
--        CallSite CS(&I);
--        CallSite::arg_iterator AI = CS.arg_begin();
-+        User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--        CallSite::arg_iterator AE = CS.arg_end();
-+        User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-
-         switch (genIntrinsicID) {
--          case GEN_OCL_FBH: this->emitUnaryCallInst(I,CS,ir::OP_FBH, ir::TYPE_U32); break;
--          case GEN_OCL_FBL: this->emitUnaryCallInst(I,CS,ir::OP_FBL, ir::TYPE_U32); break;
--          case GEN_OCL_CBIT: this->emitUnaryCallInst(I,CS,ir::OP_CBIT, getUnsignedType(ctx, (*AI)->getType())); break;
-+          case GEN_OCL_FBH: this->emitUnaryCallInst(I,ir::OP_FBH, ir::TYPE_U32); break;
-+          case GEN_OCL_FBL: this->emitUnaryCallInst(I,ir::OP_FBL, ir::TYPE_U32); break;
-+          case GEN_OCL_CBIT: this->emitUnaryCallInst(I,ir::OP_CBIT, getUnsignedType(ctx, (*AI)->getType())); break;
-           case GEN_OCL_ABS:
-           {
-             const ir::Register src = this->getRegister(*AI);
-@@ -4915,8 +4913,8 @@
-             ctx.REGION(dst, src, x.getIntegerValue());
-             break;
-           }
--          case GEN_OCL_RSQ: this->emitUnaryCallInst(I,CS,ir::OP_RSQ); break;
--          case GEN_OCL_RCP: this->emitUnaryCallInst(I,CS,ir::OP_RCP); break;
-+          case GEN_OCL_RSQ: this->emitUnaryCallInst(I,ir::OP_RSQ); break;
-+          case GEN_OCL_RCP: this->emitUnaryCallInst(I,ir::OP_RCP); break;
-           case GEN_OCL_FORCE_SIMD8: ctx.setSimdWidth(8); break;
-           case GEN_OCL_FORCE_SIMD16: ctx.setSimdWidth(16); break;
-           case GEN_OCL_LBARRIER: ctx.SYNC(ir::syncLocalBarrier); break;
-@@ -4947,31 +4945,31 @@
-             break;
-           }
-           case GEN_OCL_ATOMIC_ADD0:
--          case GEN_OCL_ATOMIC_ADD1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_ADD); break;
-+          case GEN_OCL_ATOMIC_ADD1: this->emitAtomicInst(I,ir::ATOMIC_OP_ADD); break;
-           case GEN_OCL_ATOMIC_SUB0:
--          case GEN_OCL_ATOMIC_SUB1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_SUB); break;
-+          case GEN_OCL_ATOMIC_SUB1: this->emitAtomicInst(I,ir::ATOMIC_OP_SUB); break;
-           case GEN_OCL_ATOMIC_AND0:
--          case GEN_OCL_ATOMIC_AND1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_AND); break;
-+          case GEN_OCL_ATOMIC_AND1: this->emitAtomicInst(I,ir::ATOMIC_OP_AND); break;
-           case GEN_OCL_ATOMIC_OR0:
--          case GEN_OCL_ATOMIC_OR1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_OR); break;
-+          case GEN_OCL_ATOMIC_OR1: this->emitAtomicInst(I,ir::ATOMIC_OP_OR); break;
-           case GEN_OCL_ATOMIC_XOR0:
--          case GEN_OCL_ATOMIC_XOR1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_XOR); break;
-+          case GEN_OCL_ATOMIC_XOR1: this->emitAtomicInst(I,ir::ATOMIC_OP_XOR); break;
-           case GEN_OCL_ATOMIC_XCHG0:
--          case GEN_OCL_ATOMIC_XCHG1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_XCHG); break;
-+          case GEN_OCL_ATOMIC_XCHG1: this->emitAtomicInst(I,ir::ATOMIC_OP_XCHG); break;
-           case GEN_OCL_ATOMIC_INC0:
--          case GEN_OCL_ATOMIC_INC1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_INC); break;
-+          case GEN_OCL_ATOMIC_INC1: this->emitAtomicInst(I,ir::ATOMIC_OP_INC); break;
-           case GEN_OCL_ATOMIC_DEC0:
--          case GEN_OCL_ATOMIC_DEC1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_DEC); break;
-+          case GEN_OCL_ATOMIC_DEC1: this->emitAtomicInst(I,ir::ATOMIC_OP_DEC); break;
-           case GEN_OCL_ATOMIC_UMIN0:
--          case GEN_OCL_ATOMIC_UMIN1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_UMIN); break;
-+          case GEN_OCL_ATOMIC_UMIN1: this->emitAtomicInst(I,ir::ATOMIC_OP_UMIN); break;
-           case GEN_OCL_ATOMIC_UMAX0:
--          case GEN_OCL_ATOMIC_UMAX1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_UMAX); break;
-+          case GEN_OCL_ATOMIC_UMAX1: this->emitAtomicInst(I,ir::ATOMIC_OP_UMAX); break;
-           case GEN_OCL_ATOMIC_IMIN0:
--          case GEN_OCL_ATOMIC_IMIN1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_IMIN); break;
-+          case GEN_OCL_ATOMIC_IMIN1: this->emitAtomicInst(I,ir::ATOMIC_OP_IMIN); break;
-           case GEN_OCL_ATOMIC_IMAX0:
--          case GEN_OCL_ATOMIC_IMAX1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_IMAX); break;
-+          case GEN_OCL_ATOMIC_IMAX1: this->emitAtomicInst(I,ir::ATOMIC_OP_IMAX); break;
-           case GEN_OCL_ATOMIC_CMPXCHG0:
--          case GEN_OCL_ATOMIC_CMPXCHG1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_CMPXCHG); break;
-+          case GEN_OCL_ATOMIC_CMPXCHG1: this->emitAtomicInst(I,ir::ATOMIC_OP_CMPXCHG); break;
-           case GEN_OCL_GET_IMAGE_WIDTH:
-           case GEN_OCL_GET_IMAGE_HEIGHT:
-           case GEN_OCL_GET_IMAGE_DEPTH:
-@@ -5429,48 +5427,48 @@
-             ctx.WAIT();
-             break;
-           }
--          case GEN_OCL_WORK_GROUP_ALL: this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_ALL); break;
--          case GEN_OCL_WORK_GROUP_ANY: this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_ANY); break;
-+          case GEN_OCL_WORK_GROUP_ALL: this->emitWorkGroupInst(I, ir::WORKGROUP_OP_ALL); break;
-+          case GEN_OCL_WORK_GROUP_ANY: this->emitWorkGroupInst(I, ir::WORKGROUP_OP_ANY); break;
-           case GEN_OCL_WORK_GROUP_BROADCAST:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_BROADCAST); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_BROADCAST); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_ADD); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_MAX); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_MIN); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-           case GEN_OCL_SUB_GROUP_BROADCAST:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_BROADCAST); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_BROADCAST); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_ADD); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_MAX); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_MIN); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-           case GEN_OCL_LRP:
-           {
-             const ir::Register dst  = this->getRegister(&I);
-@@ -5484,69 +5482,69 @@
-             break;
-           }
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, false, 1); break;
-+            this->emitBlockReadWriteMemInst(I, false, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, false, 2); break;
-+            this->emitBlockReadWriteMemInst(I, false, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, false, 4); break;
-+            this->emitBlockReadWriteMemInst(I, false, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, false, 8); break;
-+            this->emitBlockReadWriteMemInst(I, false, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, true, 1); break;
-+            this->emitBlockReadWriteMemInst(I, true, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, true, 2); break;
-+            this->emitBlockReadWriteMemInst(I, true, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, true, 4); break;
-+            this->emitBlockReadWriteMemInst(I, true, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, true, 8); break;
-+            this->emitBlockReadWriteMemInst(I, true, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, false, 1); break;
-+            this->emitBlockReadWriteImageInst(I, false, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, false, 2); break;
-+            this->emitBlockReadWriteImageInst(I, false, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, false, 4); break;
-+            this->emitBlockReadWriteImageInst(I, false, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, false, 8); break;
-+            this->emitBlockReadWriteImageInst(I, false, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, true, 1); break;
-+            this->emitBlockReadWriteImageInst(I, true, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, true, 2); break;
-+            this->emitBlockReadWriteImageInst(I, true, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, true, 4); break;
-+            this->emitBlockReadWriteImageInst(I, true, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, true, 8); break;
-+            this->emitBlockReadWriteImageInst(I, true, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, false, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, false, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, false, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, false, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, true, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, true, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, true, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, true, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, false, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, false, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, false, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, false, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, true, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, true, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, true, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, true, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 8, ir::TYPE_U16); break;
-           case GEN_OCL_GET_PIPE:
-           case GEN_OCL_MAKE_RID:
-           case GEN_OCL_GET_RID:
---- a/backend/src/llvm/llvm_includes.hpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_includes.hpp	2020-11-09 19:00:09.955926795 +0100
-@@ -103,7 +103,6 @@
-
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
- #include "llvm/IR/Mangler.h"
--#include "llvm/IR/CallSite.h"
- #include "llvm/IR/CFG.h"
- #include "llvm/IR/InstVisitor.h"
- #include "llvm/IR/IRPrintingPasses.h"
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-11-09 19:10:37.141852308 +0100
-@@ -160,7 +160,7 @@
-     Value *vecPtr = Builder.CreateBitCast(ld->getPointerOperand(),
-                                         PointerType::get(vecTy, addrSpace));
-     LoadInst *vecValue = Builder.CreateLoad(vecPtr);
--    vecValue->setAlignment(align);
-+    vecValue->setAlignment(align.valueOrOne());
-
-     for (unsigned i = 0; i < size; ++i) {
-       Value *S = Builder.CreateExtractElement(vecValue, Builder.getInt32(i));
-@@ -251,7 +251,7 @@
-       return;
-     Value *newPtr = Builder.CreateBitCast(stPointer, PointerType::get(vecTy, addrSpace));
-     StoreInst *newST = Builder.CreateStore(parent, newPtr);
--    newST->setAlignment(align);
-+    newST->setAlignment(align.valueOrOne());
-   }
-
-   // Find the safe iterator we can point to. If reorder happens, we need to
---- a/backend/src/llvm/llvm_passes.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_passes.cpp	2020-11-09 18:48:55.997006837 +0100
-@@ -95,7 +95,7 @@
-   {
-     switch (Ty->getTypeID()) {
-       case Type::VoidTyID: NOT_SUPPORTED;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         const VectorType* VecTy = cast<VectorType>(Ty);
-         uint32_t elemNum = VecTy->getNumElements();
-@@ -138,7 +138,7 @@
-       case Type::HalfTyID:    return 16;
-       case Type::FloatTyID:   return 32;
-       case Type::DoubleTyID:  return 64;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         const VectorType* VecTy = cast<VectorType>(Ty);
-         uint32_t numElem = VecTy->getNumElements();
-@@ -184,10 +184,12 @@
-     Type *elementType = NULL;
-     if (PointerType* ptrType = dyn_cast<PointerType>(eltTy))
-       elementType = ptrType->getElementType();
--    else if(SequentialType * seqType = dyn_cast<SequentialType>(eltTy))
--      elementType = seqType->getElementType();
--    else if(CompositeType * compTy= dyn_cast<CompositeType>(eltTy))
--      elementType = compTy->getTypeAtIndex(index);
-+    else if (ArrayType * arrType = dyn_cast<ArrayType>(eltTy))
-+      elementType = arrType->getElementType();
-+    else if(VectorType * vecType = dyn_cast<VectorType>(eltTy))
-+      elementType = vecType->getElementType();
-+    else if(StructType * structType = dyn_cast<StructType>(eltTy))
-+      elementType = structType->getTypeAtIndex(index);
-     GBE_ASSERT(elementType);
-     return elementType;
-   }
---- a/backend/src/llvm/llvm_printf_parser.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_printf_parser.cpp	2020-11-09 18:57:52.618943105 +0100
-@@ -323,8 +323,7 @@
-
-   bool PrintfParser::parseOnePrintfInstruction(CallInst * call)
-   {
--    CallSite CS(call);
--    CallSite::arg_iterator CI_FMT = CS.arg_begin();
-+    User::op_iterator CI_FMT = call->arg_begin();
-     int param_num = 0;
-
-     llvm::Constant* arg0 = dyn_cast<llvm::ConstantExpr>(*CI_FMT);
-@@ -341,7 +340,7 @@
-       return false;
-     }
-
--    std::string fmt = fmt_arg->getAsCString();
-+    std::string fmt = fmt_arg->getAsCString().str();
-     if (fmt.size() == 0)
-       return false;
-
-@@ -437,8 +436,8 @@
-         if ( callFunc->getIntrinsicID() != 0)
-           continue;
-
--        Value *Callee = call->getCalledValue();
--        const std::string fnName = Callee->getName();
-+        Value *Callee = call->getCalledOperand();
-+        const std::string fnName = Callee->getName().str();
-
-         if (fnName != "__gen_ocl_printf_stub" && fnName != "__gen_ocl_puts_stub")
-           continue;
-@@ -582,7 +581,7 @@
-             if (!fmt_arg || !fmt_arg->isCString()) {
-               return false;
-             }
--            slot.state.str = fmt_arg->getAsCString();
-+            slot.state.str = fmt_arg->getAsCString().str();
-             return true;
-           }
-           case PRINTF_CONVERSION_P: {
-@@ -595,10 +594,10 @@
-
-         break;
-
--      case Type::VectorTyID: {
--        Type* vect_type = arg->getType();
--        Type* elt_type = vect_type->getVectorElementType();
--        int vec_num = vect_type->getVectorNumElements();
-+      case Type::FixedVectorTyID: {
-+        VectorType* vect_type = dyn_cast<VectorType>(arg->getType());
-+        Type* elt_type = vect_type->getElementType();
-+        int vec_num = vect_type->getNumElements();
-         bool sign = false;
-
-         if (vec_num != slot.state.vector_n) {
---- a/backend/src/llvm/llvm_profiling.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_profiling.cpp	2020-11-09 18:59:50.120929150 +0100
-@@ -35,7 +35,6 @@
- #include "llvm/IR/IRBuilder.h"
-
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
--#include "llvm/IR/CallSite.h"
- #include "llvm/IR/CFG.h"
- #else
- #include "llvm/Support/CallSite.h"
---- a/backend/src/llvm/llvm_sampler_fix.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp	2020-11-09 17:01:09.407774832 +0100
-@@ -45,8 +45,8 @@
-     bool visitCallInst(CallInst *I) {
-       if(!I)
-         return false;
--      Value *Callee = I->getCalledValue();
--      const std::string fnName = Callee->getName();
-+      Value *Callee = I->getCalledOperand();
-+      const std::string fnName = Callee->getName().str();
-       bool changed = false;
-       Type *boolTy = IntegerType::get(I->getContext(), 1);
-       Type *i32Ty = IntegerType::get(I->getContext(), 32);
-@@ -59,7 +59,7 @@
-         Value *needFixVal;
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-         CallInst *init = dyn_cast<CallInst>(I->getOperand(0));
--        if (init && init->getCalledValue()->getName().compare("__translate_sampler_initializer"))
-+        if (init && init->getCalledOperand()->getName().compare("__translate_sampler_initializer"))
-         {
-           const ConstantInt *ci = dyn_cast<ConstantInt>(init->getOperand(0));
-           uint32_t samplerInt = ci->getZExtValue();
-@@ -113,7 +113,7 @@
-         Value *needFixVal;
-  #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-         CallInst *init = dyn_cast<CallInst>(I->getOperand(0));
--        if (init && init->getCalledValue()->getName().compare("__translate_sampler_initializer"))
-+        if (init && init->getCalledOperand()->getName().compare("__translate_sampler_initializer"))
-         {
-           const ConstantInt *ci = dyn_cast<ConstantInt>(init->getOperand(0));
-           uint32_t samplerInt = ci->getZExtValue();
---- a/backend/src/llvm/llvm_scalarize.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_scalarize.cpp	2020-11-09 18:51:16.888990104 +0100
-@@ -178,7 +178,7 @@
-       if(!type)
-         return type;
-       switch(type->getTypeID()) {
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       case Type::ArrayTyID:
-         return GetBasicType(type->getContainedType(0));
-       default:
-@@ -188,7 +188,7 @@
-     }
-
-     int GetComponentCount(const Type* type)  {
--      if (type && type->getTypeID() == Type::VectorTyID)
-+      if (type && type->getTypeID() == Type::FixedVectorTyID)
-         return llvm::dyn_cast<VectorType>(type)->getNumElements();
-       else
-         return 1;
-@@ -652,13 +652,12 @@
-           break;
-         }
-       } else {
--        Value *Callee = call->getCalledValue();
--        const std::string fnName = Callee->getName();
-+        Value *Callee = call->getCalledOperand();
-+        const std::string fnName = Callee->getName().str();
-         auto genIntrinsicID = intrinsicMap.find(fnName);
-
-         // Get the function arguments
--        CallSite CS(call);
--        CallSite::arg_iterator CI = CS.arg_begin() + 1;
-+        User::op_iterator CI = call->arg_begin() + 1;
-
-         switch (genIntrinsicID) {
-           case GEN_OCL_NOT_FOUND:
-@@ -729,7 +728,7 @@
-             extractFromVector(call);
-             break;
-           case GEN_OCL_PRINTF:
--            for (; CI != CS.arg_end(); ++CI)
-+            for (; CI != call->arg_end(); ++CI)
-               if ((*CI)->getType()->isVectorTy())
-                 *CI = InsertToVector(call, *CI);
-             break;
diff --git a/srcpkgs/beignet/patches/llvm12.patch b/srcpkgs/beignet/patches/llvm12.patch
deleted file mode 100644
index 6f8ab005c148..000000000000
--- a/srcpkgs/beignet/patches/llvm12.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-diff --git backend/src/llvm/ExpandLargeIntegers.cpp backend/src/llvm/ExpandLargeIntegers.cpp
-index 8515dc13..27080380 100644
---- a/backend/src/llvm/ExpandLargeIntegers.cpp
-+++ b/backend/src/llvm/ExpandLargeIntegers.cpp
-@@ -328,7 +328,7 @@ static Value *buildVectorOrScalar(ConversionState &State, IRBuilder<> &IRB, Smal
-     // splited, that's why these temporary values should be erased.
-     bool KeepInsert = isLegalBitSize(ElemTy->getPrimitiveSizeInBits() * ElemNo);
-     for (unsigned i = 0; i < ElemNo; ++i) {
--      Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo));
-+      Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo, false));
-       Value *idx = ConstantInt::get(IntTy, i);
-       vec = IRB.CreateInsertElement(tmp, Elements[i], idx);
-       if (!KeepInsert && !isa<Constant>(vec)) {
-@@ -373,7 +373,7 @@ static void unifyElementType(IRBuilder<> &IRB, SmallVector<Value *, 16> &Src, Sm
-       assert((Size % MinWidth) == 0);
- 
-       if (Size > MinWidth) {
--        VectorType *VecTy = VectorType::get(ElemTy, Size/MinWidth);
-+        VectorType *VecTy = VectorType::get(ElemTy, Size/MinWidth, false);
-         Value *Casted = IRB.CreateBitCast(Src[i], VecTy);
-         for (unsigned j = 0; j < Size/MinWidth; j++)
-           Dst.push_back(IRB.CreateExtractElement(Casted, ConstantInt::get(IntTy, j)));
-@@ -462,7 +462,7 @@ static void convertInstruction(Instruction *Inst, ConversionState &State,
-       unsigned ElemNo = Unified.size();
-       Type *ElemTy = Unified[0]->getType();
-       for (unsigned i = 0; i < ElemNo; ++i) {
--        Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo));
-+        Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo, false));
-         Value *idx = ConstantInt::get(IntTy, i);
-         vec = IRB.CreateInsertElement(tmp, Unified[i], idx);
-       }
-diff --git backend/src/llvm/llvm_gen_backend.cpp backend/src/llvm/llvm_gen_backend.cpp
-index c93d89cc..64d5b0e5 100644
---- a/backend/src/llvm/llvm_gen_backend.cpp
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -304,7 +304,7 @@ namespace gbe
-       TYPESIZEVEC(long,8)
-       TYPESIZEVEC(unsigned long,8)
-       else{
--        StructType *StrTy = M->getTypeByName("struct."+name);
-+        StructType *StrTy = StructType::getTypeByName(M->getContext(), "struct."+name);
-         if(StrTy)
-           return getTypeByteSize(unit,StrTy);
-       }
-diff --git backend/src/llvm/llvm_loadstore_optimization.cpp backend/src/llvm/llvm_loadstore_optimization.cpp
-index 5aa38bef..6b5c1bad 100644
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
-@@ -152,7 +152,7 @@ namespace gbe {
-     unsigned addrSpace = ld->getPointerAddressSpace();
-     // insert before first load
-     Builder.SetInsertPoint(ld);
--    VectorType *vecTy = VectorType::get(ld->getType(), size);
-+    VectorType *vecTy = VectorType::get(ld->getType(), size, false);
-     Value *vecPtr = Builder.CreateBitCast(ld->getPointerOperand(),
-                                         PointerType::get(vecTy, addrSpace));
-     LoadInst *vecValue = Builder.CreateLoad(vecPtr);
-@@ -236,7 +236,7 @@ namespace gbe {
-     Builder.SetInsertPoint(merged[size-1]);
- 
-     Type *dataTy = st->getValueOperand()->getType();
--    VectorType *vecTy = VectorType::get(dataTy, size);
-+    VectorType *vecTy = VectorType::get(dataTy, size, false);
-     Value * parent = UndefValue::get(vecTy);
-     for(unsigned i = 0; i < size; i++) {
-       parent = Builder.CreateInsertElement(parent, values[i], ConstantInt::get(IntegerType::get(st->getContext(), 32), i));
-diff --git backend/src/llvm/llvm_printf_parser.cpp backend/src/llvm/llvm_printf_parser.cpp
-index 6bb7c52a..af459cd2 100644
---- a/backend/src/llvm/llvm_printf_parser.cpp
-+++ b/backend/src/llvm/llvm_printf_parser.cpp
-@@ -630,7 +630,7 @@ error:
-             if (elt_type != elt_dst_type) {
-               Value *II = NULL;
-               for (int i = 0; i < vec_num; i++) {
--                Value *vec = II ? II : UndefValue::get(VectorType::get(elt_dst_type, vec_num));
-+                Value *vec = II ? II : UndefValue::get(VectorType::get(elt_dst_type, vec_num, false));
-                 Value *cv = ConstantInt::get(Type::getInt32Ty(elt_type->getContext()), i);
-                 Value *org = builder->CreateExtractElement(arg, cv);
-                 Value *cvt = builder->CreateIntCast(org, elt_dst_type, sign);
-@@ -658,7 +658,7 @@ error:
-             if (elt_type->getTypeID() != Type::FloatTyID) {
-               Value *II = NULL;
-               for (int i = 0; i < vec_num; i++) {
--                Value *vec = II ? II : UndefValue::get(VectorType::get(Type::getFloatTy(elt_type->getContext()), vec_num));
-+                Value *vec = II ? II : UndefValue::get(VectorType::get(Type::getFloatTy(elt_type->getContext()), vec_num, false));
-                 Value *cv = ConstantInt::get(Type::getInt32Ty(elt_type->getContext()), i);
-                 Value *org = builder->CreateExtractElement(arg, cv);
-                 Value* cvt  = builder->CreateFPCast(org, Type::getFloatTy(module->getContext()));
-diff --git backend/src/llvm/llvm_to_gen.cpp backend/src/llvm/llvm_to_gen.cpp
-index 7f7deffe..9e8ccc67 100644
---- a/backend/src/llvm/llvm_to_gen.cpp
-+++ b/backend/src/llvm/llvm_to_gen.cpp
-@@ -358,7 +358,7 @@ namespace gbe
-     passes.add(createScalarReplAggregatesPass(64, true, -1, -1, 64));
- #endif
-     passes.add(createLoadStoreOptimizationPass());
--    passes.add(createConstantPropagationPass());
-+    //passes.add(createConstantPropagationPass());
-     passes.add(createPromoteMemoryToRegisterPass());
-     if(optLevel > 0)
-       passes.add(createGVNPass());                 // Remove redundancies
-@@ -367,11 +367,11 @@ namespace gbe
-     passes.add(createScalarizePass());             // Expand all vector ops
-     passes.add(createExpandLargeIntegersPass());   // legalize large integer operation
-     passes.add(createInstructionCombiningPass());  // legalize will generate some silly instructions
--    passes.add(createConstantPropagationPass());   // propagate constant after scalarize/legalize
-+    //passes.add(createConstantPropagationPass());   // propagate constant after scalarize/legalize
-     passes.add(createExpandConstantExprPass());    // constant prop may generate ConstantExpr
-     passes.add(createPromoteIntegersPass());       // align integer size to power of two
-     passes.add(createRemoveGEPPass(unit));         // Constant prop may generate gep
--    passes.add(createDeadInstEliminationPass());   // Remove simplified instructions
-+    //passes.add(createDeadInstEliminationPass());   // Remove simplified instructions
-     passes.add(createCFGSimplificationPass());     // Merge & remove BBs
-     passes.add(createLowerSwitchPass());           // simplify cfg will generate switch-case instruction
-     if (profiling) {
diff --git a/srcpkgs/beignet/patches/musl.patch b/srcpkgs/beignet/patches/musl.patch
deleted file mode 100644
index cefafbb65588..000000000000
--- a/srcpkgs/beignet/patches/musl.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/backend/src/backend/gen/gen_mesa_disasm.c
-+++ b/backend/src/backend/gen/gen_mesa_disasm.c
-@@ -1137,7 +1137,7 @@ static uint32_t __conv_half_to_float(uint16_t h)
-       // Adjust mantissa so it's normalized (and keep
-       // track of exponent adjustment)
-       int e = -1;
--      uint m = i.mantissa;
-+      unsigned int m = i.mantissa;
-       do {
-         e++;
-         m <<= 1;
diff --git a/srcpkgs/beignet/template b/srcpkgs/beignet/template
deleted file mode 100644
index dce6bbb7ae24..000000000000
--- a/srcpkgs/beignet/template
+++ /dev/null
@@ -1,22 +0,0 @@
-# Template file for 'beignet'
-pkgname=beignet
-version=1.3.2
-revision=10
-archs="i686* x86_64*"
-wrksrc="Beignet-${version}-Source"
-build_style=cmake
-hostmakedepends="clang llvm pkg-config"
-makedepends="MesaLib-devel libedit-devel libffi-devel ocl-icd-devel zlib-devel
- libXfixes-devel"
-depends="ocl-icd"
-short_desc="Beignet GPGPU System for Intel GPUs"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://www.freedesktop.org/wiki/Software/Beignet/"
-distfiles="https://01.org/sites/default/files/${pkgname}-${version}-source.tar.gz"
-checksum=c555edba149de23243965a703f39f79fa06f15bcff5a3762b5544b0925010b43
-
-post_install() {
-	# remove CL headers, we do use opencl-headers instead.
-	rm -r ${DESTDIR}/usr/include
-}
diff --git a/srcpkgs/beignet/update b/srcpkgs/beignet/update
deleted file mode 100644
index ca41e0afe60c..000000000000
--- a/srcpkgs/beignet/update
+++ /dev/null
@@ -1 +0,0 @@
-site="https://01.org/beignet/downloads"
diff --git a/srcpkgs/removed-packages/template b/srcpkgs/removed-packages/template
index 0923c53cfc05..d59bd20f820c 100644
--- a/srcpkgs/removed-packages/template
+++ b/srcpkgs/removed-packages/template
@@ -1,7 +1,7 @@
 # Template file for 'removed-packages'
 pkgname=removed-packages
 version=0.1
-revision=69
+revision=70
 build_style=meta
 short_desc="Uninstalls packages removed from repository"
 maintainer="Piotr Wójcik <chocimier@tlen.pl>"
@@ -25,6 +25,7 @@ replaces="
  atom<=1.44.0_1
  avogadro-devel<=1.2.0_8
  avogadro<=1.2.0_8
+ beignet<=1.3.2_10
  bokken<=1.8_3
  bomi<=0.9.11_17
  burp-client<=1.4.40_13

From 97338ef68219b7d590bd10edc23bf882e6d2d9cb Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 21/29] ldc: rebuild for llvm14

---
 srcpkgs/ldc/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/ldc/template b/srcpkgs/ldc/template
index a27280dde3b8..e21bc6555e38 100644
--- a/srcpkgs/ldc/template
+++ b/srcpkgs/ldc/template
@@ -1,7 +1,7 @@
 # Template file for 'ldc'
 pkgname=ldc
 version=1.28.0
-revision=1
+revision=2
 wrksrc="ldc-${version}-src"
 build_style=cmake
 configure_args="

From 542f5c5ee5d187c465a6490af05c1133fe701723 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 22:31:25 +0200
Subject: [PATCH 22/29] ldc: update to 1.29.0.

---
 srcpkgs/ldc/template | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/srcpkgs/ldc/template b/srcpkgs/ldc/template
index e21bc6555e38..1d72a8805eb6 100644
--- a/srcpkgs/ldc/template
+++ b/srcpkgs/ldc/template
@@ -1,7 +1,7 @@
 # Template file for 'ldc'
 pkgname=ldc
-version=1.28.0
-revision=2
+version=1.29.0
+revision=1
 wrksrc="ldc-${version}-src"
 build_style=cmake
 configure_args="
@@ -11,7 +11,7 @@ configure_args="
  -DBASH_COMPLETION_COMPLETIONSDIR=/usr/share/bash-completion
  -DC_SYSTEM_LIBS='unwind;m;pthread;rt;dl'"
 conf_files="/etc/ldc2.conf"
-hostmakedepends="dmd llvm12 perl pkg-config"
+hostmakedepends="dmd llvm14 perl pkg-config"
 makedepends="libcurl-devel libffi-devel ncurses-devel zlib-devel
  llvm-libunwind-devel"
 depends="ldc-runtime llvm-libunwind-devel"
@@ -22,7 +22,7 @@ license="BSD-3-Clause, BSL-1.0"
 homepage="https://wiki.dlang.org/LDC"
 changelog="https://raw.githubusercontent.com/ldc-developers/ldc/master/CHANGELOG.md"
 distfiles="https://github.com/ldc-developers/ldc/releases/download/v${version}/ldc-${version}-src.tar.gz"
-checksum=17fee8bb535bcb8cda0a45947526555c46c045f302a7349cc8711b254e54cf09
+checksum=d0c066eb965467625d9c5e75c00c583451b9ffa363601f9e37275ca8a8aea140
 nopie=yes
 nocross="dmd compilation fails on cross"
 # tests timeout on musl; also require unpackaged python3-lit

From aedbfa1967184744cf68b38bb9b61cc8c6df6c5c Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 23/29] include-what-you-use: update to 0.18.

---
 srcpkgs/include-what-you-use/template | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/include-what-you-use/template b/srcpkgs/include-what-you-use/template
index b13bb7ee56af..297669f60459 100644
--- a/srcpkgs/include-what-you-use/template
+++ b/srcpkgs/include-what-you-use/template
@@ -1,6 +1,6 @@
 # Template file for 'include-what-you-use'
 pkgname=include-what-you-use
-version=0.16
+version=0.18
 revision=1
 wrksrc="${pkgname}"
 build_style=cmake
@@ -12,7 +12,7 @@ maintainer="Leah Neukirchen <leah@vuxu.org>"
 license="NCSA"
 homepage="https://include-what-you-use.org/"
 distfiles="https://include-what-you-use.org/downloads/${pkgname}-${version}.src.tar.gz"
-checksum=8d6fc9b255343bc1e5ec459e39512df1d51c60e03562985e0076036119ff5a1c
+checksum=9102fc8419294757df86a89ce6ec305f8d90a818d1f2598a139d15eb1894b8f3
 python_version=3
 
 post_install() {

From 7bb7e0998594c0853e98c3bfe8857c1deb7f9e45 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:18:24 +0200
Subject: [PATCH 24/29] SPIRV-LLVM-Translator: update to 14.0.0.

---
 common/shlibs                          |  1 +
 srcpkgs/SPIRV-LLVM-Translator/template | 11 ++++++-----
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/common/shlibs b/common/shlibs
index 86f4c9060d3b..df3eb79f921c 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -983,6 +983,7 @@ libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
 libLLVM-14.so libllvm14-14.0.3_1
+libLLVMSPIRVLib.so.14 SPIRV-LLVM-Translator-14.0.0_1
 libisofs.so.6 libisofs-0.6.24_1
 libmpack.so.0 libmpack-1.0.5_1
 libGeoIP.so.1 libgeoip-1.4.8_1
diff --git a/srcpkgs/SPIRV-LLVM-Translator/template b/srcpkgs/SPIRV-LLVM-Translator/template
index 2504cabed367..2277d062d992 100644
--- a/srcpkgs/SPIRV-LLVM-Translator/template
+++ b/srcpkgs/SPIRV-LLVM-Translator/template
@@ -1,19 +1,20 @@
 # Template file for 'SPIRV-LLVM-Translator'
 pkgname=SPIRV-LLVM-Translator
-version=12.0.0
+version=14.0.0
 revision=1
 build_style=cmake
 make_build_args="llvm-spirv"
-configure_args="-Wno-dev -DLLVM_LINK_LLVM_DYLIB=ON -DCMAKE_SKIP_RPATH=ON
- -DLLVM_SPIRV_INCLUDE_TESTS=OFF -DBUILD_SHARED_LIBS=ON"
+configure_args="-DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release
+ -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_SKIP_RPATH=ON -DLLVM_INCLUDE_TESTS=OFF
+ -DLLVM_LINK_LLVM_DYLIB=ON -DLLVM_EXTERNAL_LIT=/usr/bin/lit -Wno-dev -DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=/usr/include/spirv/ "
 hostmakedepends="clang clang-tools-extra llvm"
-makedepends="llvm"
+makedepends="llvm SPIRV-Headers"
 short_desc="API and commands for processing SPIR-V modules"
 maintainer="Orphaned <orphan@voidlinux.org>"
 license="NCSA"
 homepage="https://github.com/KhronosGroup/SPIRV-LLVM-Translator"
 distfiles="https://github.com/KhronosGroup/${pkgname}/archive/refs/tags/v${version}.tar.gz"
-checksum=6e4fad04203f25fcde4c308c53e9f59bd05a390978992db3212d4b63aff62108
+checksum=1afc52bb4e39aeb9b5b69324a201c81bd986364f347b559995eff6fd6f013318
 make_check=no
 
 post_install() {

From cddfa00dd1ed830105ca6d8480e086782f74b795 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:17:29 +0200
Subject: [PATCH 25/29] SPIRV-Headers: update to 1.3.211.0.

---
 srcpkgs/SPIRV-Headers/template | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/SPIRV-Headers/template b/srcpkgs/SPIRV-Headers/template
index 5dcf457c04c7..ce8288174e48 100644
--- a/srcpkgs/SPIRV-Headers/template
+++ b/srcpkgs/SPIRV-Headers/template
@@ -1,11 +1,13 @@
 # Template file for 'SPIRV-Headers'
 pkgname=SPIRV-Headers
-version=1.5.4.raytracing.fixed
+version=1.3.211.0
 revision=1
+reverts="1.5.4.raytracing.fixed"
+wrksrc=${pkgname}-sdk-${version}
 build_style=cmake
 short_desc="Machine-readable files for the SPIR-V Registry"
 maintainer="Orphaned <orphan@voidlinux.org>"
 license="GPL-3.0-or-later"
 homepage="https://github.com/KhronosGroup/SPIRV-Headers"
-distfiles="https://github.com/KhronosGroup/SPIRV-Headers/archive/${version}.tar.gz"
-checksum=df2ad2520be4d95a479fa248921065885bbf435a658349a7fc164ad7b26b68c6
+distfiles="https://github.com/KhronosGroup/SPIRV-Headers/archive/sdk-${version}.tar.gz"
+checksum=30a78e61bd812c75e09fdc7a319af206b1044536326bc3e85fea818376a12568

From f65e289140bd47a492e88429be7f5bfc7d252135 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:35:43 +0200
Subject: [PATCH 26/29] ispc: update to 1.17.0.

---
 .../ispc/patches/cmake-build-type-none.patch  |   18 -
 srcpkgs/ispc/patches/llvm12-001.patch         |   57 -
 srcpkgs/ispc/patches/llvm12-002.patch         |  923 --------
 srcpkgs/ispc/patches/llvm12-003.patch         | 1504 ------------
 srcpkgs/ispc/patches/llvm12-004.patch         |   34 -
 srcpkgs/ispc/patches/llvm12-005.patch         |  372 ---
 srcpkgs/ispc/patches/llvm12-006.patch         |  126 -
 srcpkgs/ispc/patches/llvm12-007.patch         |  160 --
 srcpkgs/ispc/patches/llvm12-008.patch         |  149 --
 srcpkgs/ispc/patches/llvm12-009.patch         | 2109 -----------------
 srcpkgs/ispc/template                         |    6 +-
 11 files changed, 3 insertions(+), 5455 deletions(-)
 delete mode 100644 srcpkgs/ispc/patches/cmake-build-type-none.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-001.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-002.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-003.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-004.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-005.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-006.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-007.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-008.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-009.patch

diff --git a/srcpkgs/ispc/patches/cmake-build-type-none.patch b/srcpkgs/ispc/patches/cmake-build-type-none.patch
deleted file mode 100644
index 411e353c7314..000000000000
--- a/srcpkgs/ispc/patches/cmake-build-type-none.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Index: ispc-1.15.0/CMakeLists.txt
-===================================================================
---- ispc-1.15.0.orig/CMakeLists.txt
-+++ ispc-1.15.0/CMakeLists.txt
-@@ -157,13 +157,6 @@ set(OUTPUT_RELEASE Release/bin)
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin )
- 
- if(CMAKE_BUILD_TYPE)
--    # Validate build type
--    set(CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo")
--
--    string(FIND "${CONFIGURATION_TYPES}" "${CMAKE_BUILD_TYPE}" MATCHED_CONFIG)
--    if (${MATCHED_CONFIG} EQUAL -1)
--         message(FATAL_ERROR "CMAKE_BUILD_TYPE (${CMAKE_BUILD_TYPE}) allows only the following values: ${CONFIGURATION_TYPES}")
--    endif()
- else(NOT CMAKE_BUILD_TYPE)
-     set(CMAKE_BUILD_TYPE "Release")
-     message(STATUS "Build type not specified: Use Release by default.")
diff --git a/srcpkgs/ispc/patches/llvm12-001.patch b/srcpkgs/ispc/patches/llvm12-001.patch
deleted file mode 100644
index 5f2d3f5a409e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-001.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 1c0f89dccb774f216c7f6e76a99ee907a1e641cb Mon Sep 17 00:00:00 2001
-From: Dmitry Babokin <dmitry.y.babokin@intel.com>
-Date: Tue, 22 Dec 2020 17:03:59 -0800
-Subject: [PATCH] Fix to work with LLVM trunk after llvm/llvm-project@41c3b2713
-
----
- src/ctx.cpp | 18 ++++++++++++------
- 1 file changed, 12 insertions(+), 6 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 6fbb8b9cf..977e9d222 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1473,11 +1473,15 @@ void FunctionEmitContext::AddDebugPos(llvm::Value *value, const SourcePos *pos,
-     llvm::Instruction *inst = llvm::dyn_cast<llvm::Instruction>(value);
-     if (inst != NULL && m->diBuilder) {
-         SourcePos p = pos ? *pos : currentPos;
--        if (p.first_line != 0)
-+        if (p.first_line != 0) {
-             // If first_line == 0, then we're in the middle of setting up
-             // the standard library or the like; don't add debug positions
-             // for those functions
--            inst->setDebugLoc(llvm::DebugLoc::get(p.first_line, p.first_column, scope ? scope : GetDIScope()));
-+            scope = scope ? scope : GetDIScope();
-+            llvm::DebugLoc diLoc =
-+                llvm::DILocation::get(scope->getContext(), p.first_line, p.first_column, scope, nullptr, false);
-+            inst->setDebugLoc(diLoc);
-+        }
-     }
- }
- 
-@@ -1518,9 +1522,10 @@ void FunctionEmitContext::EmitVariableDebugInfo(Symbol *sym) {
-     llvm::DILocalVariable *var = m->diBuilder->createAutoVariable(
-         scope, sym->name, sym->pos.GetDIFile(), sym->pos.first_line, diType, true /* preserve through opts */);
- 
-+    llvm::DebugLoc diLoc =
-+        llvm::DILocation::get(scope->getContext(), sym->pos.first_line, sym->pos.first_column, scope, nullptr, false);
-     llvm::Instruction *declareInst =
--        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(),
--                                    llvm::DebugLoc::get(sym->pos.first_line, sym->pos.first_column, scope), bblock);
-+        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(), diLoc, bblock);
-     AddDebugPos(declareInst, &sym->pos, scope);
- }
- 
-@@ -1535,9 +1540,10 @@ void FunctionEmitContext::EmitFunctionParameterDebugInfo(Symbol *sym, int argNum
-         m->diBuilder->createParameterVariable(scope, sym->name, argNum + 1, sym->pos.GetDIFile(), sym->pos.first_line,
-                                               diType, true /* preserve through opts */, flags);
- 
-+    llvm::DebugLoc diLoc =
-+        llvm::DILocation::get(scope->getContext(), sym->pos.first_line, sym->pos.first_column, scope, nullptr, false);
-     llvm::Instruction *declareInst =
--        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(),
--                                    llvm::DebugLoc::get(sym->pos.first_line, sym->pos.first_column, scope), bblock);
-+        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(), diLoc, bblock);
-     AddDebugPos(declareInst, &sym->pos, scope);
- }
- 
diff --git a/srcpkgs/ispc/patches/llvm12-002.patch b/srcpkgs/ispc/patches/llvm12-002.patch
deleted file mode 100644
index 0903f30da10d..000000000000
--- a/srcpkgs/ispc/patches/llvm12-002.patch
+++ /dev/null
@@ -1,923 +0,0 @@
-From 0597a79d084c014780136da906afe21d15e982cb Mon Sep 17 00:00:00 2001
-From: DeepakRajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Tue, 5 Jan 2021 13:53:30 -0800
-Subject: [PATCH] Remove LLVM 8.0 and LLVM 9.0. (#1966)
-
----
- .appveyor.yml                        |  3 --
- .travis.yml                          |  7 ---
- CMakeLists.txt                       | 12 ++----
- src/ast.cpp                          |  4 --
- src/ctx.cpp                          | 30 -------------
- src/gen/GlobalsLocalization.cpp      |  4 --
- src/ispc.cpp                         | 20 ---------
- src/ispc.h                           |  3 +-
- src/ispc_version.h                   |  4 +-
- src/main.cpp                         | 13 ------
- src/module.cpp                       | 27 ------------
- src/module.h                         |  2 -
- src/opt.cpp                          | 64 ++--------------------------
- src/type.cpp                         | 10 ++---
- tests/lit-tests/1771.ispc            |  1 -
- tests/lit-tests/1844.ispc            |  3 --
- tests/lit-tests/1926.ispc            |  2 -
- tests/lit-tests/cpus_x86.ispc        |  2 +
- tests/lit-tests/cpus_x86_llvm10.ispc | 11 -----
- tests/lit-tests/lit.cfg              |  5 ---
- 20 files changed, 14 insertions(+), 213 deletions(-)
- delete mode 100644 tests/lit-tests/cpus_x86_llvm10.ispc
-
-diff --git a/.appveyor.yml b/.appveyor.yml
-index 451a7b3e0..7945cca2a 100644
---- a/.appveyor.yml
-+++ b/.appveyor.yml
-@@ -41,8 +41,6 @@ environment:
-       LLVM_VERSION: latest
-     - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
-       LLVM_VERSION: 10.0
--    - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
--      LLVM_VERSION: 9.0
- 
- for:
- -
-@@ -62,7 +60,6 @@ for:
-         if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2019" ( (set generator="Visual Studio 16") & (set vsversion=2019))
-         set LLVM_TAR=llvm-11.0.0-win.vs2019-Release+Asserts-x86.arm.wasm.7z
-         if "%LLVM_VERSION%"=="10.0" (set LLVM_TAR=llvm-10.0.1-win.vs2019-Release+Asserts-x86.arm.wasm.zip)
--        if "%LLVM_VERSION%"=="9.0" (set LLVM_TAR=llvm-9.0.1-win.vs2017-Release+Asserts-x86.arm.wasm.zip)
-   install:
-     - ps: choco install --no-progress winflexbison3 wget 7zip
-     - cmd: |-
-diff --git a/.travis.yml b/.travis.yml
-index 2e96017a6..3a6b85264 100644
---- a/.travis.yml
-+++ b/.travis.yml
-@@ -108,13 +108,6 @@ jobs:
-         - LLVM_TAR=llvm-10.0.1-ubuntu16.04-Release+Asserts-x86.arm.wasm.tar.xz
-         - LLVM_REPO=https://github.com/dbabokin/llvm-project
-         - ISPC_HOME=$TRAVIS_BUILD_DIR
--    # LLVM 9.0 + Ubuntu 16.04: build, lit tests, examples (build + run), benchmarks (build + trial run)
--    - <<: *my_tag
--      env:
--        - LLVM_VERSION=9.0 OS=Ubuntu16.04
--        - LLVM_TAR=llvm-9.0.1-ubuntu16.04-Release+Asserts-x86.arm.wasm.tar.xz
--        - LLVM_REPO=https://github.com/dbabokin/llvm-project
--        - ISPC_HOME=$TRAVIS_BUILD_DIR
-     # WASM enabled build
-     # LLVM 11.0 + Ubuntu 16.04: build, lit tests, examples (build), benchmarks (build + trial run)
-     - <<: *my_tag
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 5fa863fcf..a6b3ed251 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -241,10 +241,8 @@ if (X86_ENABLED)
-         avx2-i8x32 avx2-i16x16
-         avx2-i32x4 avx2-i32x8 avx2-i32x16 avx2-i64x4
-         avx512knl-i32x16
--        avx512skx-i32x16 avx512skx-i32x8)
--    if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "10.0.0")
--        list(APPEND ISPC_TARGETS avx512skx-i8x64 avx512skx-i16x32)
--    endif()
-+        avx512skx-i32x16 avx512skx-i32x8
-+        avx512skx-i8x64 avx512skx-i16x32)
- endif()
- if (ARM_ENABLED)
-     list(APPEND ISPC_TARGETS neon-i8x16 neon-i16x8 neon-i32x4 neon-i32x8)
-@@ -259,11 +257,7 @@ if (WASM_ENABLED)
- endif()
- 
- set(CLANG_LIBRARY_LIST clangFrontend clangDriver clangSerialization clangParse clangSema clangAnalysis clangAST clangBasic clangEdit clangLex)
--set(LLVM_COMPONENTS engine ipo bitreader bitwriter instrumentation linker option)
--
--if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "10.0.0")
--    list(APPEND LLVM_COMPONENTS frontendopenmp)
--endif()
-+set(LLVM_COMPONENTS engine ipo bitreader bitwriter instrumentation linker option frontendopenmp)
- 
- if (X86_ENABLED)
-     list(APPEND LLVM_COMPONENTS x86)
-diff --git a/src/ast.cpp b/src/ast.cpp
-index 20f75a29c..5a43c4854 100644
---- a/src/ast.cpp
-+++ b/src/ast.cpp
-@@ -44,9 +44,7 @@
- #include "sym.h"
- #include "util.h"
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/TimeProfiler.h>
--#endif
- ///////////////////////////////////////////////////////////////////////////
- // ASTNode
- 
-@@ -62,9 +60,7 @@ void AST::AddFunction(Symbol *sym, Stmt *code) {
- }
- 
- void AST::GenerateIR() {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope TimeScope("GenerateIR");
--#endif
-     for (unsigned int i = 0; i < functions.size(); ++i)
-         functions[i]->GenerateIR();
- }
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 977e9d222..42c4ea09d 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -309,21 +309,13 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym, llvm::F
-             char buf[256];
-             snprintf(buf, sizeof(buf), "__off_all_on_mask_%s", g->target->GetISAString());
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_8_0
--            llvm::Constant *offFunc = m->module->getOrInsertFunction(buf, LLVMTypes::VoidType);
--#else // LLVM 9.0+
-             llvm::FunctionCallee offFuncCallee = m->module->getOrInsertFunction(buf, LLVMTypes::VoidType);
-             llvm::Constant *offFunc = llvm::cast<llvm::Constant>(offFuncCallee.getCallee());
--#endif
-             AssertPos(currentPos, llvm::isa<llvm::Function>(offFunc));
-             llvm::BasicBlock *offBB = llvm::BasicBlock::Create(*g->ctx, "entry", (llvm::Function *)offFunc, 0);
-             llvm::StoreInst *inst = new llvm::StoreInst(LLVMMaskAllOff, globalAllOnMaskPtr, offBB);
-             if (g->opt.forceAlignedMemory) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-                 inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-             }
-             llvm::ReturnInst::Create(*g->ctx, offBB);
-         }
-@@ -2288,11 +2280,7 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
- #endif
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-     }
- 
-     AddDebugPos(inst);
-@@ -2431,11 +2419,7 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-                 // vs the proper alignment in practice.)
-                 int align = 1;
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                inst->setAlignment(align);
--#else // LLVM 10.0+
-                 inst->setAlignment(llvm::MaybeAlign(align).valueOrOne());
--#endif
-             }
- 
-             AddDebugPos(inst);
-@@ -2649,11 +2633,7 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-         align = g->target->getNativeVectorAlignment();
- 
-     if (align != 0) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(align);
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(align).valueOrOne());
--#endif
-     }
-     // Don't add debugging info to alloca instructions
-     return inst;
-@@ -2926,11 +2906,7 @@ void FunctionEmitContext::StoreInst(llvm::Value *value, llvm::Value *ptr, const
-     llvm::StoreInst *inst = new llvm::StoreInst(value, ptr, bblock);
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-     }
- 
- #ifdef ISPC_GENX_ENABLED
-@@ -3025,16 +3001,10 @@ void FunctionEmitContext::MemcpyInst(llvm::Value *dest, llvm::Value *src, llvm::
-     }
-     if (align == NULL)
-         align = LLVMInt32(1);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_8_0
--    llvm::Constant *mcFunc =
--        m->module->getOrInsertFunction("llvm.memcpy.p0i8.p0i8.i64", LLVMTypes::VoidType, LLVMTypes::VoidPointerType,
--                                       LLVMTypes::VoidPointerType, LLVMTypes::Int64Type, LLVMTypes::BoolType);
--#else // LLVM 9.0+
-     llvm::FunctionCallee mcFuncCallee =
-         m->module->getOrInsertFunction("llvm.memcpy.p0i8.p0i8.i64", LLVMTypes::VoidType, LLVMTypes::VoidPointerType,
-                                        LLVMTypes::VoidPointerType, LLVMTypes::Int64Type, LLVMTypes::BoolType);
-     llvm::Constant *mcFunc = llvm::cast<llvm::Constant>(mcFuncCallee.getCallee());
--#endif
-     AssertPos(currentPos, mcFunc != NULL);
-     AssertPos(currentPos, llvm::isa<llvm::Function>(mcFunc));
- 
-diff --git a/src/gen/GlobalsLocalization.cpp b/src/gen/GlobalsLocalization.cpp
-index 193a66289..a176e9462 100644
---- a/src/gen/GlobalsLocalization.cpp
-+++ b/src/gen/GlobalsLocalization.cpp
-@@ -470,11 +470,7 @@ void GlobalsLocalization::LocalizeGlobals(LocalizationInfo &LI) {
-         Instruction &FirstI = *Fn->getEntryBlock().begin();
-         Type *ElemTy = GV->getType()->getElementType();
-         AllocaInst *Alloca = new AllocaInst(ElemTy, 0, GV->getName() + ".local", &FirstI);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        Alloca->setAlignment(GV->getAlignment());
--#else // LLVM 10.0+
-         Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()));
--#endif
-         if (!isa<UndefValue>(GV->getInitializer()))
-             new StoreInst(GV->getInitializer(), Alloca, &FirstI);
- 
-diff --git a/src/ispc.cpp b/src/ispc.cpp
-index e2d0f206e..fac5233f7 100644
---- a/src/ispc.cpp
-+++ b/src/ispc.cpp
-@@ -272,9 +272,7 @@ typedef enum {
-     CPU_Silvermont,
- 
-     CPU_ICX,
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     CPU_TGL,
--#endif
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-     CPU_ADL,
-     CPU_SPR,
-@@ -365,10 +363,8 @@ class AllCPUs {
- 
-         names[CPU_ICX].push_back("icelake-server");
-         names[CPU_ICX].push_back("icx");
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         names[CPU_TGL].push_back("tigerlake");
-         names[CPU_TGL].push_back("tgl");
--#endif
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-         names[CPU_ADL].push_back("alderlake");
-         names[CPU_ADL].push_back("adl");
-@@ -411,11 +407,9 @@ class AllCPUs {
-         compat[CPU_ADL] = Set(CPU_ADL, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont,
-                               CPU_SandyBridge, CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_None);
- #endif
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         compat[CPU_TGL] =
-             Set(CPU_TGL, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont, CPU_SandyBridge,
-                 CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_SKX, CPU_ICL, CPU_ICX, CPU_None);
--#endif
-         compat[CPU_ICX] = Set(CPU_ICX, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont,
-                               CPU_SandyBridge, CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_SKX, CPU_ICL, CPU_None);
- 
-@@ -556,9 +550,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-         case CPU_SPR:
- #endif
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         case CPU_TGL:
--#endif
-         case CPU_ICX:
-         case CPU_ICL:
-         case CPU_SKX:
-@@ -916,7 +908,6 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         }
-         break;
-     case ISPCTarget::avx512skx_i8x64:
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0 // LLVM 10.0+
-         // This target is enabled only for LLVM 10.0 and later
-         // because LLVM requires a number of fixes, which are
-         // committed to LLVM 11.0 and can be applied to 10.0, but not
-@@ -937,12 +928,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         this->m_hasVecPrefetch = false;
-         CPUfromISA = CPU_SKX;
-         break;
--#else
--        unsupported_target = true;
--        break;
--#endif
-     case ISPCTarget::avx512skx_i16x32:
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0 // LLVM 10.0+
-         // This target is enabled only for LLVM 10.0 and later
-         // because LLVM requires a number of fixes, which are
-         // committed to LLVM 11.0 and can be applied to 10.0, but not
-@@ -963,10 +949,6 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         this->m_hasVecPrefetch = false;
-         CPUfromISA = CPU_SKX;
-         break;
--#else
--        unsupported_target = true;
--        break;
--#endif
- #ifdef ISPC_ARM_ENABLED
-     case ISPCTarget::neon_i8x16:
-         this->m_isa = Target::NEON;
-@@ -1662,11 +1644,9 @@ Globals::Globals() {
-     isMultiTargetCompilation = false;
-     errorLimit = -1;
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     enableTimeTrace = false;
-     // set default granularity to 500.
-     timeTraceGranularity = 500;
--#endif
-     target = NULL;
-     ctx = new llvm::LLVMContext;
- 
-diff --git a/src/ispc.h b/src/ispc.h
-index e25d8830e..de357a21c 100644
---- a/src/ispc.h
-+++ b/src/ispc.h
-@@ -695,13 +695,12 @@ struct Globals {
- 
-     /* Number of errors to show in ISPC. */
-     int errorLimit;
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-+
-     /* When true, enable compile time tracing. */
-     bool enableTimeTrace;
- 
-     /* When compile time tracing is enabled, set time granularity. */
-     int timeTraceGranularity;
--#endif
- };
- 
- enum {
-diff --git a/src/ispc_version.h b/src/ispc_version.h
-index d781347fd..434b2d678 100644
---- a/src/ispc_version.h
-+++ b/src/ispc_version.h
-@@ -44,13 +44,11 @@
- 
- #define ISPC_LLVM_VERSION (LLVM_VERSION_MAJOR * 10000 + LLVM_VERSION_MINOR * 100)
- 
--#define ISPC_LLVM_8_0 80000
--#define ISPC_LLVM_9_0 90000
- #define ISPC_LLVM_10_0 100000
- #define ISPC_LLVM_11_0 110000
- #define ISPC_LLVM_12_0 120000
- 
--#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_8_0
-+#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_10_0
- #define LATEST_SUPPORTED_LLVM ISPC_LLVM_12_0
- 
- #ifdef __ispc__xstr
-diff --git a/src/main.cpp b/src/main.cpp
-index 8f64330cc..5c920eabc 100644
---- a/src/main.cpp
-+++ b/src/main.cpp
-@@ -55,9 +55,7 @@
- #include <llvm/Support/Signals.h>
- #include <llvm/Support/TargetRegistry.h>
- #include <llvm/Support/TargetSelect.h>
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/ToolOutputFile.h>
--#endif
- 
- #ifdef ISPC_HOST_IS_WINDOWS
- #define strcasecmp stricmp
-@@ -181,11 +179,9 @@ static void lPrintVersion() {
-     snprintf(targetHelp, sizeof(targetHelp), "[--target-os=<os>]\t\t\tSelect target OS.  <os>={%s}",
-              g->target_registry->getSupportedOSes().c_str());
-     PrintWithWordBreaks(targetHelp, 24, TerminalWidth(), stdout);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     printf("    [--time-trace]\t\t\tTurn on time profiler. Generates JSON file based on output filename.\n");
-     printf("    [--time-trace-granularity=<value>\tMinimum time granularity (in microseconds) traced by time "
-            "profiler.\n");
--#endif
-     printf("    [--version]\t\t\t\tPrint ispc version\n");
- #ifdef ISPC_GENX_ENABLED
-     printf("    [--vc-options=<\"-option1 -option2...\">]\t\t\t\tPass additional options to Vector Compiler backend\n");
-@@ -462,7 +458,6 @@ static void setCallingConv(VectorCallStatus vectorCall, Arch arch) {
-     }
- }
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- static void writeCompileTimeFile(const char *outFileName) {
-     llvm::SmallString<128> jsonFileName(outFileName);
-     jsonFileName.append(".json");
-@@ -479,7 +474,6 @@ static void writeCompileTimeFile(const char *outFileName) {
-     of->keep();
-     return;
- }
--#endif
- 
- static std::set<int> ParsingPhases(char *stages, ArgErrors &errorHandler) {
-     constexpr int parsing_limit = 100;
-@@ -791,12 +785,10 @@ int main(int Argc, char *Argv[]) {
-             }
-         } else if (!strncmp(argv[i], "--force-alignment=", 18)) {
-             g->forceAlignment = atoi(argv[i] + 18);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         } else if (!strcmp(argv[i], "--time-trace")) {
-             g->enableTimeTrace = true;
-         } else if (!strncmp(argv[i], "--time-trace-granularity=", 25)) {
-             g->timeTraceGranularity = atoi(argv[i] + 25);
--#endif
-         } else if (!strcmp(argv[i], "--woff") || !strcmp(argv[i], "-woff")) {
-             g->disableWarnings = true;
-             g->emitPerfWarnings = false;
-@@ -1059,7 +1051,6 @@ int main(int Argc, char *Argv[]) {
- 
-     // This needs to happen after the TargetOS is decided.
-     setCallingConv(vectorCall, arch);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     if (g->enableTimeTrace) {
-         llvm::timeTraceProfilerInitialize(g->timeTraceGranularity, "ispc");
-     }
-@@ -1077,9 +1068,5 @@ int main(int Argc, char *Argv[]) {
-         }
-         llvm::timeTraceProfilerCleanup();
-     }
--#else
--    int ret = Module::CompileAndOutput(file, arch, cpu, targets, flags, ot, outFileName, headerFileName, depsFileName,
--                                       depsTargetName, hostStubFileName, devStubFileName);
--#endif
-     return ret;
- }
-diff --git a/src/module.cpp b/src/module.cpp
-index fe7452df1..a85fec77a 100644
---- a/src/module.cpp
-+++ b/src/module.cpp
-@@ -170,9 +170,7 @@ Module::Module(const char *fn) {
-     module->setDataLayout(g->target->getDataLayout()->getStringRepresentation());
- 
-     if (g->generateDebuggingSymbols) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Create Debug Data");
--#endif
-         // To enable debug information on Windows, we have to let llvm know, that
-         // debug information should be emitted in CodeView format.
-         if (g->target_os == TargetOS::windows) {
-@@ -226,10 +224,8 @@ extern YY_BUFFER_STATE yy_create_buffer(FILE *, int);
- extern void yy_delete_buffer(YY_BUFFER_STATE);
- 
- int Module::CompileFile() {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope CompileFileTimeScope(
-         "CompileFile", llvm::StringRef(filename + ("_" + std::string(g->target->GetISAString()))));
--#endif
-     extern void ParserInit();
-     ParserInit();
- 
-@@ -238,18 +234,14 @@ int Module::CompileFile() {
-     // variable 'm' to be initialized and available (which it isn't until
-     // the Module constructor returns...)
-     {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("DefineStdlib");
--#endif
-         DefineStdlib(symbolTable, g->ctx, module, g->includeStdlib);
-     }
- 
-     bool runPreprocessor = g->runCPP;
- 
-     if (runPreprocessor) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Frontend parser");
--#endif
-         if (!IsStdin(filename)) {
-             // Try to open the file first, since otherwise we crash in the
-             // preprocessor if the file doesn't exist.
-@@ -268,9 +260,7 @@ int Module::CompileFile() {
-         yyparse();
-         yy_delete_buffer(strbuf);
-     } else {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Frontend parser");
--#endif
-         // No preprocessor, just open up the file if it's not stdin..
-         FILE *f = NULL;
-         if (IsStdin(filename)) {
-@@ -297,9 +287,7 @@ int Module::CompileFile() {
- 
-     if (diBuilder)
-         diBuilder->finalize();
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope TimeScope("Optimize");
--#endif
-     if (errorCount == 0)
-         Optimize(module, g->opt.level);
- 
-@@ -1243,15 +1231,8 @@ bool Module::writeObjectFileOrAssembly(llvm::TargetMachine *targetMachine, llvm:
-                                        const char *outFileName) {
-     // Figure out if we're generating object file or assembly output, and
-     // set binary output for object files
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    Assert(!g->target->isGenXTarget());
--    llvm::TargetMachine::CodeGenFileType fileType =
--        (outputType == Object) ? llvm::TargetMachine::CGFT_ObjectFile : llvm::TargetMachine::CGFT_AssemblyFile;
--    bool binary = (fileType == llvm::TargetMachine::CGFT_ObjectFile);
--#else // LLVM 10.0+
-     llvm::CodeGenFileType fileType = (outputType == Object) ? llvm::CGFT_ObjectFile : llvm::CGFT_AssemblyFile;
-     bool binary = (fileType == llvm::CGFT_ObjectFile);
--#endif
- 
-     llvm::sys::fs::OpenFlags flags = binary ? llvm::sys::fs::F_None : llvm::sys::fs::F_Text;
- 
-@@ -2219,11 +2200,7 @@ void Module::execPreprocessor(const char *infilename, llvm::raw_string_ostream *
-     inst.setTarget(target);
-     inst.createSourceManager(inst.getFileManager());
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    clang::FrontendInputFile inputFile(infilename, clang::InputKind::Unknown);
--#else // LLVM 10.0+
-     clang::FrontendInputFile inputFile(infilename, clang::InputKind());
--#endif
- 
-     inst.InitializeSourceManager(inputFile);
- 
-@@ -2722,9 +2699,7 @@ int Module::CompileAndOutput(const char *srcFile, Arch arch, const char *cpu, st
- 
-         m = new Module(srcFile);
-         if (m->CompileFile() == 0) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-             llvm::TimeTraceScope TimeScope("Backend");
--#endif
- #ifdef ISPC_GENX_ENABLED
-             if (outputType == Asm || outputType == Object) {
-                 if (g->target->isGenXTarget()) {
-@@ -2855,9 +2830,7 @@ int Module::CompileAndOutput(const char *srcFile, Arch arch, const char *cpu, st
- 
-             m = new Module(srcFile);
-             int compileFileError = m->CompileFile();
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-             llvm::TimeTraceScope TimeScope("Backend");
--#endif
-             if (compileFileError == 0) {
-                 // Create the dispatch module, unless already created;
-                 // in the latter case, just do the checking
-diff --git a/src/module.h b/src/module.h
-index 61d3cfea0..603124d50 100644
---- a/src/module.h
-+++ b/src/module.h
-@@ -43,9 +43,7 @@
- 
- #include <llvm/IR/DebugInfo.h>
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/TimeProfiler.h>
--#endif
- 
- #ifdef ISPC_GENX_ENABLED
- #include "ocl_igc_interface/igc_ocl_device_ctx.h"
-diff --git a/src/opt.cpp b/src/opt.cpp
-index a655a8344..5b1ac7b63 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -66,6 +66,7 @@
- #include <llvm/IR/Instructions.h>
- #include <llvm/IR/IntrinsicInst.h>
- #include <llvm/IR/Intrinsics.h>
-+#include <llvm/IR/IntrinsicsX86.h>
- #include <llvm/IR/LegacyPassManager.h>
- #include <llvm/IR/Module.h>
- #include <llvm/IR/PatternMatch.h>
-@@ -85,9 +86,6 @@
- #include <llvm/Transforms/Scalar/InstSimplifyPass.h>
- #include <llvm/Transforms/Utils.h>
- #include <llvm/Transforms/Utils/BasicBlockUtils.h>
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
--#include <llvm/IR/IntrinsicsX86.h>
--#endif
- 
- #ifdef ISPC_HOST_IS_LINUX
- #include <alloca.h>
-@@ -1003,10 +1001,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
-                 name = LLVMGetName(callInst->getArgOperand(0), "_load");
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                llvm::Instruction *loadInst =
--                    new llvm::LoadInst(castPtr, name, false /* not volatile */, align, (llvm::Instruction *)NULL);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-                 llvm::Instruction *loadInst = new llvm::LoadInst(castPtr, name, false /* not volatile */,
-                                                                  llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
- #else
-@@ -1043,13 +1038,8 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedStore32 ? 4 : 8;
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                llvm::StoreInst *storeInst = new llvm::StoreInst(rvalue, castPtr, (llvm::Instruction *)NULL);
--                storeInst->setAlignment(align);
--#else
-                 llvm::StoreInst *storeInst = new llvm::StoreInst(rvalue, castPtr, (llvm::Instruction *)NULL,
-                                                                  llvm::MaybeAlign(align).valueOrOne());
--#endif
-                 lCopyMetadata(storeInst, callInst);
-                 llvm::ReplaceInstWithInst(callInst, storeInst);
- 
-@@ -1066,9 +1056,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool IntrinsicsOpt::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("IntrinsicsOpt::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -1239,9 +1227,7 @@ bool InstructionSimplifyPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool InstructionSimplifyPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("InstructionSimplifyPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -2974,16 +2960,10 @@ static bool lImproveMaskedStore(llvm::CallInst *callInst) {
- 
-             lvalue = new llvm::BitCastInst(lvalue, ptrType, "lvalue_to_ptr_type", callInst);
-             lCopyMetadata(lvalue, callInst);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--            store =
--                new llvm::StoreInst(rvalue, lvalue, false /* not volatile */,
--                                    g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align);
--#else
-             store = new llvm::StoreInst(
-                 rvalue, lvalue, false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-                     .valueOrOne());
--#endif
-         }
-         if (store != NULL) {
-             lCopyMetadata(store, callInst);
-@@ -3059,11 +3039,7 @@ static bool lImproveMaskedLoad(llvm::CallInst *callInst, llvm::BasicBlock::itera
-         {
-             llvm::Type *ptrType = llvm::PointerType::get(callInst->getType(), 0);
-             ptr = new llvm::BitCastInst(ptr, ptrType, "ptr_cast_for_load", callInst);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--            load = new llvm::LoadInst(ptr, callInst->getName(), false /* not volatile */,
--                                      g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align,
--                                      (llvm::Instruction *)NULL);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-             load = new llvm::LoadInst(
-                 ptr, callInst->getName(), false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-@@ -3129,9 +3105,7 @@ bool ImproveMemoryOpsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ImproveMemoryOpsPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ImproveMemoryOpsPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -3424,9 +3398,7 @@ llvm::Value *lGEPAndLoad(llvm::Value *basePtr, int64_t offset, int align, llvm::
-                          llvm::Type *type) {
-     llvm::Value *ptr = lGEPInst(basePtr, LLVMInt64(offset), "new_base", insertBefore);
-     ptr = new llvm::BitCastInst(ptr, llvm::PointerType::get(type, 0), "ptr_cast", insertBefore);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, align, insertBefore);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-     return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, llvm::MaybeAlign(align), insertBefore);
- #else // LLVM 11.0+
-     return new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-@@ -4135,9 +4107,7 @@ bool GatherCoalescePass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool GatherCoalescePass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("GatherCoalescePass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -4467,9 +4437,7 @@ bool ReplacePseudoMemoryOpsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplacePseudoMemoryOpsPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplacePseudoMemoryOpsPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -4573,9 +4541,7 @@ bool IsCompileTimeConstantPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool IsCompileTimeConstantPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("IsCompileTimeConstantPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5201,9 +5167,7 @@ bool PeepholePass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool PeepholePass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("PeepholePass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5299,9 +5263,7 @@ bool ReplaceStdlibShiftPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceStdlibShiftPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceStdlibShiftPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5399,9 +5361,7 @@ llvm::Instruction *FixBooleanSelectPass::fixSelect(llvm::SelectInst *sel, llvm::
- }
- 
- bool FixBooleanSelectPass::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("FixBooleanSelectPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
- 
-     return modifiedAny;
-@@ -5964,9 +5924,7 @@ bool GenXGatherCoalescing::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool GenXGatherCoalescing::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("GenXGatherCoalescing::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6113,9 +6071,7 @@ bool PromoteToPrivateMemoryPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool PromoteToPrivateMemoryPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("PromoteToPrivateMemoryPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6181,9 +6137,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceLLVMIntrinsics::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceLLVMIntrinsics::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6278,9 +6232,7 @@ bool ReplaceUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceUnsupportedInsts::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceUnsupportedInsts::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6369,9 +6321,7 @@ bool CheckUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool CheckUnsupportedInsts::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("CheckUnsupportedInsts::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6440,9 +6390,7 @@ bool MangleOpenCLBuiltins::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool MangleOpenCLBuiltins::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("MangleOpenCLBuiltins::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6828,9 +6776,7 @@ bool FixAddressSpace::runOnFunction(llvm::Function &F) {
-     // Transformations are correct when the function is not internal.
-     // This is due to address space calculation algorithm.
-     // TODO: problems can be met in case of Stack Calls
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("FixAddressSpace::runOnFunction", F.getName());
--#endif
-     if (F.getLinkage() == llvm::GlobalValue::LinkageTypes::InternalLinkage)
-         return false;
- 
-@@ -6854,9 +6800,7 @@ class DemotePHIs : public llvm::FunctionPass {
- char DemotePHIs::ID = 0;
- 
- bool DemotePHIs::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("DemotePHIs::runOnFunction", F.getName());
--#endif
-     if (F.isDeclaration() || skipFunction(F))
-         return false;
-     std::vector<llvm::Instruction *> WorkList;
-diff --git a/src/type.cpp b/src/type.cpp
-index 688a4e874..fa0cb04db 100644
---- a/src/type.cpp
-+++ b/src/type.cpp
-@@ -1822,14 +1822,10 @@ llvm::DIType *StructType::GetDIType(llvm::DIScope *scope) const {
-     llvm::DIFile *diFile = pos.GetDIFile();
-     llvm::DINamespace *diSpace = pos.GetDINamespace();
-     return m->diBuilder->createStructType(diSpace, GetString(), diFile,
--                                          pos.first_line,          // Line number
--                                          layout->getSizeInBits(), // Size in bits
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                                          layout->getAlignment() * 8, // Alignment in bits
--#else                                                                 // LLVM 10.0+
-+                                          pos.first_line,                     // Line number
-+                                          layout->getSizeInBits(),            // Size in bits
-                                           layout->getAlignment().value() * 8, // Alignment in bits
--#endif
--                                          llvm::DINode::FlagZero, // Flags
-+                                          llvm::DINode::FlagZero,             // Flags
-                                           NULL, elements);
- }
- 
-diff --git a/tests/lit-tests/1771.ispc b/tests/lit-tests/1771.ispc
-index 98064d84d..4feb73dd7 100644
---- a/tests/lit-tests/1771.ispc
-+++ b/tests/lit-tests/1771.ispc
-@@ -5,7 +5,6 @@
- // RUN: %{ispc} %s --target=sse4-i16x8 --emit-asm -o - | FileCheck %s -check-prefix=CHECKSSE4_I16X8
- // RUN: %{ispc} %s --target=sse4-i8x16 --emit-asm -o - | FileCheck %s -check-prefix=CHECKSSE4_I8X16
- 
--// REQUIRES: LLVM_10_0+
- // REQUIRES: X86_ENABLED
- 
- // CHECKAVX2_I32X8: {{[a-z]*xor[a-z]*}}  %xmm0, %xmm0, %xmm0
-diff --git a/tests/lit-tests/1844.ispc b/tests/lit-tests/1844.ispc
-index 793a8866c..189edf4c3 100644
---- a/tests/lit-tests/1844.ispc
-+++ b/tests/lit-tests/1844.ispc
-@@ -6,9 +6,6 @@
- 
- // REQUIRES: X86_ENABLED
- 
--// It doesn't work for anything earlier than 10.0, but it will not be fixed, so don't run.
--// REQUIRES: LLVM_10_0+
--
- extern uniform unsigned int64 var_6;
- extern uniform unsigned int16 var_11;
- extern uniform bool arr_201 [1] [15] [20];
-diff --git a/tests/lit-tests/1926.ispc b/tests/lit-tests/1926.ispc
-index 70f7cc3c2..7921c91a6 100644
---- a/tests/lit-tests/1926.ispc
-+++ b/tests/lit-tests/1926.ispc
-@@ -2,8 +2,6 @@
- // RUN: cat %T/1926.o.json \
- // RUN:   | FileCheck %s
- 
--// REQUIRES: LLVM_10_0+
--
- // CHECK: "traceEvents"
- // CHECK: "detail"
- export uniform int foo(uniform int a[], uniform int count) {
-diff --git a/tests/lit-tests/cpus_x86.ispc b/tests/lit-tests/cpus_x86.ispc
-index 516efdd4c..4d60186f6 100644
---- a/tests/lit-tests/cpus_x86.ispc
-+++ b/tests/lit-tests/cpus_x86.ispc
-@@ -24,6 +24,8 @@
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icl
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icelake-server
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icx
-+//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tigerlake
-+//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tgl
- 
- // REQUIRES: X86_ENABLED
- 
-diff --git a/tests/lit-tests/cpus_x86_llvm10.ispc b/tests/lit-tests/cpus_x86_llvm10.ispc
-deleted file mode 100644
-index ef00000e5..000000000
---- a/tests/lit-tests/cpus_x86_llvm10.ispc
-+++ /dev/null
-@@ -1,11 +0,0 @@
--// The test checks that cpu definitions (including all synonyms) are successfully consumed by compiler.
--
--//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tigerlake
--//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tgl
--
--// REQUIRES: X86_ENABLED
--// REQUIRES: LLVM_10_0+
--
--uniform int i;
--
--void foo() {}
-diff --git a/tests/lit-tests/lit.cfg b/tests/lit-tests/lit.cfg
-index 17016579d..045e69437 100644
---- a/tests/lit-tests/lit.cfg
-+++ b/tests/lit-tests/lit.cfg
-@@ -30,11 +30,6 @@ print("Config:")
- 
- # LLVM version
- llvm_version = LooseVersion(ispc_llvm_version_number)
--if llvm_version >= LooseVersion("10.0.0"):
--    print("LLVM_10_0+: YES")
--    config.available_features.add("LLVM_10_0+")
--else:
--    print("LLVM_10_0+: NO")
- 
- if llvm_version >= LooseVersion("12.0.0"):
-     print("LLVM_12_0+: YES")
diff --git a/srcpkgs/ispc/patches/llvm12-003.patch b/srcpkgs/ispc/patches/llvm12-003.patch
deleted file mode 100644
index 0423afc9e3f9..000000000000
--- a/srcpkgs/ispc/patches/llvm12-003.patch
+++ /dev/null
@@ -1,1504 +0,0 @@
-From 1851d18b213dbad169937076176b2d5509733c76 Mon Sep 17 00:00:00 2001
-From: Deepak Rajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Tue, 12 Jan 2021 22:15:12 -0800
-Subject: [PATCH] fixes #1821 - Removing LLVMGetName() and switching to
- LLVM::Twine.
-
----
- src/ctx.cpp      | 304 ++++++++++++++++++++++-------------------------
- src/ctx.h        |  72 +++++------
- src/expr.cpp     |  36 +++---
- src/llvmutil.cpp |  17 ---
- src/llvmutil.h   |   5 -
- src/opt.cpp      | 103 +++++++++-------
- 6 files changed, 255 insertions(+), 282 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 42c4ea09d..ded524b71 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1020,8 +1020,8 @@ void FunctionEmitContext::EmitCaseLabel(int value, bool checkMask, SourcePos pos
-     llvm::BasicBlock *bbCaseImpl = NULL;
-     if (emitGenXHardwareMask()) {
-         // Create basic block with actual case implementation
--        std::string bbName = bbCase->getName().str() + "_impl";
--        bbCaseImpl = CreateBasicBlock(bbName.c_str(), bbCase);
-+        llvm::Twine bbName = llvm::Twine(bbCase->getName()) + "_impl";
-+        bbCaseImpl = CreateBasicBlock(bbName, bbCase);
-     }
- #endif
- 
-@@ -1185,7 +1185,7 @@ bool FunctionEmitContext::initLabelBBlocks(ASTNode *node, void *data) {
-     if (ctx->labelMap.find(ls->name) != ctx->labelMap.end())
-         Error(ls->pos, "Multiple labels named \"%s\" in function.", ls->name.c_str());
-     else {
--        llvm::BasicBlock *bb = ctx->CreateBasicBlock(ls->name.c_str());
-+        llvm::BasicBlock *bb = ctx->CreateBasicBlock(ls->name);
-         ctx->labelMap[ls->name] = bb;
-     }
-     return true;
-@@ -1299,7 +1299,7 @@ llvm::Value *FunctionEmitContext::Any(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_any"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_any");
- }
- 
- llvm::Value *FunctionEmitContext::All(llvm::Value *mask) {
-@@ -1315,7 +1315,7 @@ llvm::Value *FunctionEmitContext::All(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_all"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_all");
- }
- 
- llvm::Value *FunctionEmitContext::None(llvm::Value *mask) {
-@@ -1331,7 +1331,7 @@ llvm::Value *FunctionEmitContext::None(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_none"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_none");
- }
- 
- llvm::Value *FunctionEmitContext::LaneMask(llvm::Value *v) {
-@@ -1349,7 +1349,7 @@ llvm::Value *FunctionEmitContext::LaneMask(llvm::Value *v) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, v, LLVMGetName(v, "_movmsk"));
-+    return CallInst(fmm, NULL, v, llvm::Twine(v->getName()) + "_movmsk");
- }
- 
- llvm::Value *FunctionEmitContext::MasksAllEqual(llvm::Value *v1, llvm::Value *v2) {
-@@ -1364,11 +1364,12 @@ llvm::Value *FunctionEmitContext::MasksAllEqual(llvm::Value *v1, llvm::Value *v2
- #else
-     if (g->target->getArch() == Arch::wasm32) {
-         llvm::Function *fmm = m->module->getFunction("__wasm_cmp_msk_eq");
--        return CallInst(fmm, NULL, {v1, v2}, LLVMGetName("wasm_cmp_msk_eq", v1, v2));
-+        return CallInst(fmm, NULL, {v1, v2}, ((llvm::Twine("wasm_cmp_msk_eq_") + v1->getName()) + "_") + v2->getName());
-     }
-     llvm::Value *mm1 = LaneMask(v1);
-     llvm::Value *mm2 = LaneMask(v2);
--    return CmpInst(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_EQ, mm1, mm2, LLVMGetName("equal", v1, v2));
-+    return CmpInst(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_EQ, mm1, mm2,
-+                   ((llvm::Twine("equal_") + v1->getName()) + "_") + v2->getName());
- #endif
- }
- 
-@@ -1392,7 +1393,7 @@ llvm::Value *FunctionEmitContext::GetStringPtr(const std::string &str) {
-     return new llvm::BitCastInst(lstrPtr, LLVMTypes::VoidPointerType, "str_void_ptr", bblock);
- }
- 
--llvm::BasicBlock *FunctionEmitContext::CreateBasicBlock(const char *name, llvm::BasicBlock *insertAfter) {
-+llvm::BasicBlock *FunctionEmitContext::CreateBasicBlock(const llvm::Twine &name, llvm::BasicBlock *insertAfter) {
-     llvm::BasicBlock *newBB = llvm::BasicBlock::Create(*g->ctx, name, llvmFunction);
-     if (insertAfter)
-         newBB->moveAfter(insertAfter);
-@@ -1416,14 +1417,15 @@ llvm::Value *FunctionEmitContext::I1VecToBoolVec(llvm::Value *b) {
- 
-         for (unsigned int i = 0; i < at->getNumElements(); ++i) {
-             llvm::Value *elt = ExtractInst(b, i);
--            llvm::Value *sext = SwitchBoolSize(elt, LLVMTypes::BoolVectorStorageType, LLVMGetName(elt, "_to_boolvec"));
-+            llvm::Value *sext =
-+                SwitchBoolSize(elt, LLVMTypes::BoolVectorStorageType, llvm::Twine(elt->getName()) + "_to_boolvec");
-             ret = InsertInst(ret, sext, i);
-         }
-         return ret;
-     } else {
-         // For non-array types, convert to 'LLVMTypes::BoolVectorType' if
-         // necessary.
--        return SwitchBoolSize(b, LLVMTypes::BoolVectorType, LLVMGetName(b, "_to_boolvec"));
-+        return SwitchBoolSize(b, LLVMTypes::BoolVectorType, llvm::Twine(b->getName()) + "_to_boolvec");
-     }
- }
- 
-@@ -1563,7 +1565,7 @@ static int lArrayVectorWidth(llvm::Type *t) {
- }
- 
- llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps inst, llvm::Value *v0, llvm::Value *v1,
--                                                 const char *name) {
-+                                                 const llvm::Twine &name) {
-     if (v0 == NULL || v1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1573,7 +1575,7 @@ llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps in
-     llvm::Type *type = v0->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *bop = llvm::BinaryOperator::Create(inst, v0, v1, name ? name : "", bblock);
-+        llvm::Instruction *bop = llvm::BinaryOperator::Create(inst, v0, v1, name, bblock);
-         AddDebugPos(bop);
-         return bop;
-     } else {
-@@ -1591,7 +1593,7 @@ llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps in
-     }
- }
- 
--llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const char *name) {
-+llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const llvm::Twine &name) {
-     if (v == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1603,14 +1605,14 @@ llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const char *name)
-     llvm::Type *type = v->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *binst = llvm::BinaryOperator::CreateNot(v, name ? name : "not", bblock);
-+        llvm::Instruction *binst = llvm::BinaryOperator::CreateNot(v, name.isTriviallyEmpty() ? "not" : name, bblock);
-         AddDebugPos(binst);
-         return binst;
-     } else {
-         llvm::Value *ret = llvm::UndefValue::get(type);
-         for (int i = 0; i < arraySize; ++i) {
-             llvm::Value *a = ExtractInst(v, i);
--            llvm::Value *op = llvm::BinaryOperator::CreateNot(a, name ? name : "not", bblock);
-+            llvm::Value *op = llvm::BinaryOperator::CreateNot(a, name.isTriviallyEmpty() ? "not" : name, bblock);
-             AddDebugPos(op);
-             ret = InsertInst(ret, op, i);
-         }
-@@ -1638,7 +1640,7 @@ static llvm::Type *lGetMatchingBoolVectorType(llvm::Type *type) {
- }
- 
- llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm::CmpInst::Predicate pred,
--                                          llvm::Value *v0, llvm::Value *v1, const char *name) {
-+                                          llvm::Value *v0, llvm::Value *v1, const llvm::Twine &name) {
-     if (v0 == NULL || v1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1648,7 +1650,8 @@ llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm
-     llvm::Type *type = v0->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *ci = llvm::CmpInst::Create(inst, pred, v0, v1, name ? name : "cmp", bblock);
-+        llvm::Instruction *ci =
-+            llvm::CmpInst::Create(inst, pred, v0, v1, name.isTriviallyEmpty() ? "cmp" : name, bblock);
-         AddDebugPos(ci);
-         return ci;
-     } else {
-@@ -1657,14 +1660,14 @@ llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm
-         for (int i = 0; i < arraySize; ++i) {
-             llvm::Value *a = ExtractInst(v0, i);
-             llvm::Value *b = ExtractInst(v1, i);
--            llvm::Value *op = CmpInst(inst, pred, a, b, name);
-+            llvm::Value *op = CmpInst(inst, pred, a, b, name.isTriviallyEmpty() ? "cmp" : name);
-             ret = InsertInst(ret, op, i);
-         }
-         return ret;
-     }
- }
- 
--llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const char *name) {
-+llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1704,21 +1707,19 @@ llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const char *n
-     return ret;
- }
- 
--llvm::Value *FunctionEmitContext::BitCastInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Value *FunctionEmitContext::BitCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_bitcast");
--
--    llvm::Instruction *inst = new llvm::BitCastInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::BitCastInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_bitcast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const char *name) {
-+llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1728,23 +1729,19 @@ llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const char *n
-         // no-op for varying pointers; they're already vectors of ints
-         return value;
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_ptr2int");
-     llvm::Type *type = LLVMTypes::PointerIntType;
--    llvm::Instruction *inst = new llvm::PtrToIntInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::PtrToIntInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_ptr2int");
--
-     llvm::Type *fromType = value->getType();
-     if (llvm::isa<llvm::VectorType>(fromType)) {
-         // varying pointer
-@@ -1752,27 +1749,26 @@ llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *t
-             // already the right type--done
-             return value;
-         else if (fromType->getScalarSizeInBits() > toType->getScalarSizeInBits())
--            return TruncInst(value, toType, name);
-+            return TruncInst(value, toType,
-+                             name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name);
-         else {
-             AssertPos(currentPos, fromType->getScalarSizeInBits() < toType->getScalarSizeInBits());
--            return ZExtInst(value, toType, name);
-+            return ZExtInst(value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name);
-         }
-     }
- 
--    llvm::Instruction *inst = new llvm::PtrToIntInst(value, toType, name, bblock);
-+    llvm::Instruction *inst = new llvm::PtrToIntInst(
-+        value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_int2ptr");
--
-     llvm::Type *fromType = value->getType();
-     if (llvm::isa<llvm::VectorType>(fromType)) {
-         // varying pointer
-@@ -1780,95 +1776,87 @@ llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *t
-             // done
-             return value;
-         else if (fromType->getScalarSizeInBits() > toType->getScalarSizeInBits())
--            return TruncInst(value, toType, name);
-+            return TruncInst(value, toType,
-+                             name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name);
-         else {
-             AssertPos(currentPos, fromType->getScalarSizeInBits() < toType->getScalarSizeInBits());
--            return ZExtInst(value, toType, name);
-+            return ZExtInst(value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name);
-         }
-     }
- 
--    llvm::Instruction *inst = new llvm::IntToPtrInst(value, toType, name, bblock);
-+    llvm::Instruction *inst = new llvm::IntToPtrInst(
-+        value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::TruncInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::TruncInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_trunc");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::TruncInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::TruncInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_trunc" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
- llvm::Instruction *FunctionEmitContext::CastInst(llvm::Instruction::CastOps op, llvm::Value *value, llvm::Type *type,
--                                                 const char *name) {
-+                                                 const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_cast");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = llvm::CastInst::Create(op, value, type, name, bblock);
-+    llvm::Instruction *inst = llvm::CastInst::Create(
-+        op, value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_cast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::FPCastInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::FPCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_cast");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = llvm::CastInst::CreateFPCast(value, type, name, bblock);
-+    llvm::Instruction *inst = llvm::CastInst::CreateFPCast(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_cast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::SExtInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::SExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_sext");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::SExtInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::SExtInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_sext" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::ZExtInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::ZExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_zext");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::ZExtInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::ZExtInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_zext" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
-@@ -1913,14 +1901,15 @@ llvm::Value *FunctionEmitContext::applyVaryingGEP(llvm::Value *basePtr, llvm::Va
-         scale = SmearUniform(scale);
-         Assert(index != NULL);
-         // offset = index * scale
--        offset = BinaryOperator(llvm::Instruction::Mul, scale, index, LLVMGetName("mul", scale, index));
-+        offset = BinaryOperator(llvm::Instruction::Mul, scale, index,
-+                                ((llvm::Twine("mul_") + scale->getName()) + "_") + index->getName());
-     }
- 
-     // For 64-bit targets, if we've been doing our offset calculations in
-     // 32 bits, we still have to convert to a 64-bit value before we
-     // actually add the offset to the pointer.
-     if (g->target->is32Bit() == false && g->opt.force32BitAddressing == true)
--        offset = SExtInst(offset, LLVMTypes::Int64VectorType, LLVMGetName(offset, "_to_64"));
-+        offset = SExtInst(offset, LLVMTypes::Int64VectorType, llvm::Twine(offset->getName()) + "_to_64");
- 
-     // Smear out the pointer to be varying; either the base pointer or the
-     // index must be varying for this method to be called.
-@@ -1929,7 +1918,7 @@ llvm::Value *FunctionEmitContext::applyVaryingGEP(llvm::Value *basePtr, llvm::Va
-     llvm::Value *varyingPtr = baseIsUniform ? SmearUniform(basePtr) : basePtr;
- 
-     // newPtr = ptr + offset
--    return BinaryOperator(llvm::Instruction::Add, varyingPtr, offset, LLVMGetName(basePtr, "_offset"));
-+    return BinaryOperator(llvm::Instruction::Add, varyingPtr, offset, llvm::Twine(basePtr->getName()) + "_offset");
- }
- 
- void FunctionEmitContext::MatchIntegerTypes(llvm::Value **v0, llvm::Value **v1) {
-@@ -2006,13 +1995,13 @@ llvm::Value *FunctionEmitContext::MakeSlicePointer(llvm::Value *ptr, llvm::Value
-     llvm::StructType *st = llvm::StructType::get(*g->ctx, eltTypes);
- 
-     llvm::Value *ret = llvm::UndefValue::get(st);
--    ret = InsertInst(ret, ptr, 0, LLVMGetName(ret, "_slice_ptr"));
--    ret = InsertInst(ret, offset, 1, LLVMGetName(ret, "_slice_offset"));
-+    ret = InsertInst(ret, ptr, 0, llvm::Twine(ret->getName()) + "_slice_ptr");
-+    ret = InsertInst(ret, offset, 1, llvm::Twine(ret->getName()) + "_slice_offset");
-     return ret;
- }
- 
- llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index, const Type *ptrRefType,
--                                                    const char *name) {
-+                                                    const llvm::Twine &name) {
-     if (basePtr == NULL || index == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2065,8 +2054,8 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
-         // uniform, so just emit the regular LLVM GEP instruction
-         llvm::Value *ind[1] = {index};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&ind[0], &ind[1]);
--        llvm::Instruction *inst =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "gep", bblock);
-+        llvm::Instruction *inst = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                                  name.isTriviallyEmpty() ? "gep" : name, bblock);
-         AddDebugPos(inst);
-         return inst;
-     } else
-@@ -2074,7 +2063,7 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
- }
- 
- llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0, llvm::Value *index1,
--                                                    const Type *ptrRefType, const char *name) {
-+                                                    const Type *ptrRefType, const llvm::Twine &name) {
-     if (basePtr == NULL || index0 == NULL || index1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2114,8 +2103,8 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
-         // uniform, so just emit the regular LLVM GEP instruction
-         llvm::Value *indices[2] = {index0, index1};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&indices[0], &indices[2]);
--        llvm::Instruction *inst =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "gep", bblock);
-+        llvm::Instruction *inst = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                                  name.isTriviallyEmpty() ? "gep" : name, bblock);
-         AddDebugPos(inst);
-         return inst;
-     } else {
-@@ -2138,7 +2127,7 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
- }
- 
- llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int elementNum, const Type *ptrRefType,
--                                                   const char *name, const PointerType **resultPtrType) {
-+                                                   const llvm::Twine &name, const PointerType **resultPtrType) {
-     if (resultPtrType != NULL)
-         AssertPos(currentPos, ptrRefType != NULL);
- 
-@@ -2195,8 +2184,8 @@ llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int
-         // If the pointer is uniform, we can use the regular LLVM GEP.
-         llvm::Value *offsets[2] = {LLVMInt32(0), LLVMInt32(elementNum)};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&offsets[0], &offsets[2]);
--        resultPtr =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "struct_offset", bblock);
-+        resultPtr = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                    name.isTriviallyEmpty() ? "struct_offset" : name, bblock);
-     } else {
-         // Otherwise do the math to find the offset and add it to the given
-         // varying pointers
-@@ -2237,7 +2226,7 @@ llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int
-         return resultPtr;
- }
- 
--llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if ((value == NULL) || (toType == NULL)) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2248,20 +2237,18 @@ llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type
-     llvm::Value *newBool = value;
-     if (g->target->getDataLayout()->getTypeSizeInBits(fromType) >
-         g->target->getDataLayout()->getTypeSizeInBits(toType)) {
--        if (name == NULL)
--            name = LLVMGetName(value, "_switchBool");
--        newBool = TruncInst(value, toType, name);
-+        newBool =
-+            TruncInst(value, toType, name.isTriviallyEmpty() ? (llvm::Twine(value->getName()) + "_switchBool") : name);
-     } else if (g->target->getDataLayout()->getTypeSizeInBits(fromType) <
-                g->target->getDataLayout()->getTypeSizeInBits(toType)) {
--        if (name == NULL)
--            name = LLVMGetName(value, "_switchBool");
--        newBool = SExtInst(value, toType, name);
-+        newBool =
-+            SExtInst(value, toType, name.isTriviallyEmpty() ? (llvm::Twine(value->getName()) + "_switchBool") : name);
-     }
- 
-     return newBool;
- }
- 
--llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, const char *name) {
-+llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, const llvm::Twine &name) {
-     if (ptr == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2270,13 +2257,13 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
-     llvm::PointerType *pt = llvm::dyn_cast<llvm::PointerType>(ptr->getType());
-     AssertPos(currentPos, pt != NULL);
- 
--    if (name == NULL)
--        name = LLVMGetName(ptr, "_load");
--
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    llvm::LoadInst *inst = new llvm::LoadInst(pt->getPointerElementType(), ptr, name, bblock);
-+    llvm::LoadInst *inst =
-+        new llvm::LoadInst(pt->getPointerElementType(), ptr,
-+                           name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name, bblock);
- #else
--    llvm::LoadInst *inst = new llvm::LoadInst(ptr, name, bblock);
-+    llvm::LoadInst *inst =
-+        new llvm::LoadInst(ptr, name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name, bblock);
- #endif
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
-@@ -2307,8 +2294,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
- static llvm::Value *lFinalSliceOffset(FunctionEmitContext *ctx, llvm::Value *ptr, const PointerType **ptrType) {
-     Assert(CastType<PointerType>(*ptrType) != NULL);
- 
--    llvm::Value *slicePtr = ctx->ExtractInst(ptr, 0, LLVMGetName(ptr, "_ptr"));
--    llvm::Value *sliceOffset = ctx->ExtractInst(ptr, 1, LLVMGetName(ptr, "_offset"));
-+    llvm::Value *slicePtr = ctx->ExtractInst(ptr, 0, llvm::Twine(ptr->getName()) + "_ptr");
-+    llvm::Value *sliceOffset = ctx->ExtractInst(ptr, 1, llvm::Twine(ptr->getName()) + "_offset");
- 
-     // slicePtr should be a pointer to an soa-width wide array of the
-     // final atomic/enum/pointer type
-@@ -2327,14 +2314,14 @@ static llvm::Value *lFinalSliceOffset(FunctionEmitContext *ctx, llvm::Value *ptr
-         slicePtr = ctx->BitCastInst(slicePtr, (*ptrType)->LLVMType(g->ctx));
- 
-     // And finally index based on the slice offset
--    return ctx->GetElementPtrInst(slicePtr, sliceOffset, *ptrType, LLVMGetName(slicePtr, "_final_gep"));
-+    return ctx->GetElementPtrInst(slicePtr, sliceOffset, *ptrType, llvm::Twine(slicePtr->getName()) + "_final_gep");
- }
- 
- /** Utility routine that loads from a uniform pointer to soa<> data,
-     returning a regular uniform (non-SOA result).
-  */
- llvm::Value *FunctionEmitContext::loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType,
--                                                     const char *name) {
-+                                                     const llvm::Twine &name) {
-     const Type *unifType = ptrType->GetBaseType()->GetAsUniformType();
- 
-     const CollectionType *ct = CastType<CollectionType>(ptrType->GetBaseType());
-@@ -2363,7 +2350,7 @@ llvm::Value *FunctionEmitContext::loadUniformFromSOA(llvm::Value *ptr, llvm::Val
- }
- 
- llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrRefType,
--                                           const char *name, bool one_elem) {
-+                                           const llvm::Twine &name, bool one_elem) {
-     if (ptr == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2371,9 +2358,6 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
- 
-     AssertPos(currentPos, ptrRefType != NULL && mask != NULL);
- 
--    if (name == NULL)
--        name = LLVMGetName(ptr, "_load");
--
-     const PointerType *ptrType;
-     const Type *elType;
-     if (CastType<ReferenceType>(ptrRefType) != NULL) {
-@@ -2393,7 +2377,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
- 
-     if (ptrType->IsUniformType()) {
-         if (ptrType->IsSlice()) {
--            return loadUniformFromSOA(ptr, mask, ptrType, name);
-+            return loadUniformFromSOA(ptr, mask, ptrType,
-+                                      name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name);
-         } else {
-             // FIXME: same issue as above load inst regarding alignment...
-             //
-@@ -2405,11 +2390,15 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-             const AtomicType *atomicType = CastType<AtomicType>(ptrType->GetBaseType());
- 
- #if ISPC_LLVM_VERSION <= ISPC_LLVM_10_0
--            llvm::LoadInst *inst = new llvm::LoadInst(ptr, name, false /* not volatile */, bblock);
-+            llvm::LoadInst *inst =
-+                new llvm::LoadInst(ptr, name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name,
-+                                   false /* not volatile */, bblock);
- #else // LLVM 11.0+
-             llvm::PointerType *ptr_type = llvm::dyn_cast<llvm::PointerType>(ptr->getType());
-             llvm::LoadInst *inst =
--                new llvm::LoadInst(ptr_type->getPointerElementType(), ptr, name, false /* not volatile */, bblock);
-+                new llvm::LoadInst(ptr_type->getPointerElementType(), ptr,
-+                                   name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name,
-+                                   false /* not volatile */, bblock);
- #endif
- 
-             if (atomicType != NULL && atomicType->IsVaryingType()) {
-@@ -2433,7 +2422,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-     } else {
-         // Otherwise we should have a varying ptr and it's time for a
-         // gather.
--        llvm::Value *gather_result = gather(ptr, ptrType, GetFullMask(), name);
-+        llvm::Value *gather_result = gather(ptr, ptrType, GetFullMask(),
-+                                            name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name);
-         if (!one_elem)
-             return gather_result;
- 
-@@ -2453,19 +2443,19 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-         // We can actually call either one, since both are i32s as far as
-         // LLVM's type system is concerned...
-         llvm::Function *fmm = mm[0]->function;
--        llvm::Value *int_mask = CallInst(fmm, NULL, mask, LLVMGetName(mask, "_movmsk"));
-+        llvm::Value *int_mask = CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_movmsk");
-         std::vector<Symbol *> lz;
-         m->symbolTable->LookupFunction("__count_trailing_zeros_i64", &lz);
-         llvm::Function *flz = lz[0]->function;
--        llvm::Value *elem_idx = CallInst(flz, NULL, int_mask, LLVMGetName(mask, "_clz"));
--        llvm::Value *elem = llvm::ExtractElementInst::Create(gather_result, elem_idx,
--                                                             LLVMGetName(gather_result, "_umasked_elem"), bblock);
-+        llvm::Value *elem_idx = CallInst(flz, NULL, int_mask, llvm::Twine(mask->getName()) + "_clz");
-+        llvm::Value *elem = llvm::ExtractElementInst::Create(
-+            gather_result, elem_idx, llvm::Twine(gather_result->getName()) + "_umasked_elem", bblock);
-         return elem;
-     }
- }
- 
- llvm::Value *FunctionEmitContext::gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask,
--                                         const char *name) {
-+                                         const llvm::Twine &name) {
-     // We should have a varying pointer if we get here...
-     AssertPos(currentPos, ptrType->IsVaryingType());
- 
-@@ -2602,7 +2592,8 @@ void FunctionEmitContext::addGSMetadata(llvm::Value *v, SourcePos pos) {
-     inst->setMetadata("last_column", md);
- }
- 
--llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *name, int align, bool atEntryBlock) {
-+llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const llvm::Twine &name, int align,
-+                                             bool atEntryBlock) {
-     if (llvmType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2615,12 +2606,12 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-         llvm::Instruction *retInst = allocaBlock->getTerminator();
-         AssertPos(currentPos, retInst);
-         unsigned AS = llvmFunction->getParent()->getDataLayout().getAllocaAddrSpace();
--        inst = new llvm::AllocaInst(llvmType, AS, name ? name : "", retInst);
-+        inst = new llvm::AllocaInst(llvmType, AS, name, retInst);
-     } else {
-         // Unless the caller overrode the default and wants it in the
-         // current basic block
-         unsigned AS = llvmFunction->getParent()->getDataLayout().getAllocaAddrSpace();
--        inst = new llvm::AllocaInst(llvmType, AS, name ? name : "", bblock);
-+        inst = new llvm::AllocaInst(llvmType, AS, name, bblock);
-     }
- 
-     // If no alignment was specified but we have an array of a uniform
-@@ -2639,7 +2630,8 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::AllocaInst(const Type *ptrType, const char *name, int align, bool atEntryBlock) {
-+llvm::Value *FunctionEmitContext::AllocaInst(const Type *ptrType, const llvm::Twine &name, int align,
-+                                             bool atEntryBlock) {
-     if (ptrType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3075,66 +3067,59 @@ llvm::Instruction *FunctionEmitContext::BranchInst(llvm::BasicBlock *trueBlock,
-     return b;
- }
- 
--llvm::Value *FunctionEmitContext::ExtractInst(llvm::Value *v, int elt, const char *name) {
-+llvm::Value *FunctionEmitContext::ExtractInst(llvm::Value *v, int elt, const llvm::Twine &name) {
-     if (v == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_extract_%d", elt);
--        name = LLVMGetName(v, buf);
--    }
-     llvm::Instruction *ei = NULL;
-     if (llvm::isa<llvm::VectorType>(v->getType()))
--        ei = llvm::ExtractElementInst::Create(v, LLVMInt32(elt), name, bblock);
-+        ei = llvm::ExtractElementInst::Create(
-+            v, LLVMInt32(elt),
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_extract_") + llvm::Twine(elt)) : name, bblock);
-     else
--        ei = llvm::ExtractValueInst::Create(v, elt, name, bblock);
-+        ei = llvm::ExtractValueInst::Create(
-+            v, elt, name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_extract_") + llvm::Twine(elt)) : name,
-+            bblock);
-     AddDebugPos(ei);
-     return ei;
- }
- 
--llvm::Value *FunctionEmitContext::InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const char *name) {
-+llvm::Value *FunctionEmitContext::InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const llvm::Twine &name) {
-     if (v == NULL || eltVal == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_insert_%d", elt);
--        name = LLVMGetName(v, buf);
--    }
--
-     llvm::Instruction *ii = NULL;
-     if (llvm::isa<llvm::VectorType>(v->getType()))
--        ii = llvm::InsertElementInst::Create(v, eltVal, LLVMInt32(elt), name, bblock);
-+        ii = llvm::InsertElementInst::Create(
-+            v, eltVal, LLVMInt32(elt),
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_insert_") + llvm::Twine(elt)) : name, bblock);
-     else
--        ii = llvm::InsertValueInst::Create(v, eltVal, elt, name, bblock);
-+        ii = llvm::InsertValueInst::Create(
-+            v, eltVal, elt,
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_insert_") + llvm::Twine(elt)) : name, bblock);
-     AddDebugPos(ii);
-     return ii;
- }
- 
--llvm::Value *FunctionEmitContext::ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const char *name) {
-+llvm::Value *FunctionEmitContext::ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask,
-+                                              const llvm::Twine &name) {
-     if (v1 == NULL || v2 == NULL || mask == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_shuffle");
--        name = LLVMGetName(v1, buf);
--    }
--
--    llvm::Instruction *ii = new llvm::ShuffleVectorInst(v1, v2, mask, name, bblock);
-+    llvm::Instruction *ii = new llvm::ShuffleVectorInst(
-+        v1, v2, mask, name.isTriviallyEmpty() ? (llvm::Twine(v1->getName()) + "_shuffle") : name, bblock);
- 
-     AddDebugPos(ii);
-     return ii;
- }
- 
--llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vecType, const char *name) {
-+llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vecType, const llvm::Twine &name) {
-     if (v == NULL || vecType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3148,12 +3133,6 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     Assert(ty && ty->getVectorElementType() == v->getType());
- #endif
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_broadcast");
--        name = LLVMGetName(v, buf);
--    }
--
-     // Generate the following sequence:
-     //   %name_init.i = insertelement <4 x i32> undef, i32 %val, i32 0
-     //   %name.i = shufflevector <4 x i32> %name_init.i, <4 x i32> undef,
-@@ -3163,7 +3142,7 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     llvm::Value *undef2 = llvm::UndefValue::get(vecType);
- 
-     // InsertElement
--    llvm::Twine tw = llvm::Twine(name) + llvm::Twine("_init");
-+    llvm::Twine tw = name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + llvm::Twine("_init");
-     llvm::Value *insert = InsertInst(undef1, v, 0, tw.str().c_str());
- 
-     // ShuffleVector
-@@ -3179,28 +3158,27 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-         llvm::ConstantVector::getSplat(llvm::ElementCount::get(static_cast<unsigned int>(ty->getNumElements()), false),
-                                        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
- #endif
--    llvm::Value *ret = ShuffleInst(insert, undef2, zeroVec, name);
-+    llvm::Value *ret = ShuffleInst(insert, undef2, zeroVec,
-+                                   name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name);
- 
-     return ret;
- }
- 
--llvm::PHINode *FunctionEmitContext::PhiNode(llvm::Type *type, int count, const char *name) {
--    llvm::PHINode *pn = llvm::PHINode::Create(type, count, name ? name : "phi", bblock);
-+llvm::PHINode *FunctionEmitContext::PhiNode(llvm::Type *type, int count, const llvm::Twine &name) {
-+    llvm::PHINode *pn = llvm::PHINode::Create(type, count, name.isTriviallyEmpty() ? "phi" : name, bblock);
-     AddDebugPos(pn);
-     return pn;
- }
- 
- llvm::Instruction *FunctionEmitContext::SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1,
--                                                   const char *name) {
-+                                                   const llvm::Twine &name) {
-     if (test == NULL || val0 == NULL || val1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(test, "_select");
--
--    llvm::Instruction *inst = llvm::SelectInst::Create(test, val0, val1, name, bblock);
-+    llvm::Instruction *inst = llvm::SelectInst::Create(
-+        test, val0, val1, name.isTriviallyEmpty() ? (llvm::Twine(test->getName()) + "_select") : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
-@@ -3226,7 +3204,7 @@ static unsigned int lCalleeArgCount(llvm::Value *callee, const FunctionType *fun
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType,
--                                           const std::vector<llvm::Value *> &args, const char *name) {
-+                                           const std::vector<llvm::Value *> &args, const llvm::Twine &name) {
-     if (func == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3258,9 +3236,9 @@ llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-         llvm::PointerType *func_ptr_type = llvm::dyn_cast<llvm::PointerType>(func->getType());
-         llvm::FunctionType *func_type = llvm::dyn_cast<llvm::FunctionType>(func_ptr_type->getPointerElementType());
--        llvm::CallInst *callinst = llvm::CallInst::Create(func_type, func, argVals, name ? name : "", bblock);
-+        llvm::CallInst *callinst = llvm::CallInst::Create(func_type, func, argVals, name, bblock);
- #else
--        llvm::CallInst *callinst = llvm::CallInst::Create(func, argVals, name ? name : "", bblock);
-+        llvm::CallInst *callinst = llvm::CallInst::Create(func, argVals, name, bblock);
- #endif
- 
-         // We could be dealing with a function pointer in which case this will not be a 'llvm::Function'.
-@@ -3464,14 +3442,14 @@ llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg,
--                                           const char *name) {
-+                                           const llvm::Twine &name) {
-     std::vector<llvm::Value *> args;
-     args.push_back(arg);
-     return CallInst(func, funcType, args, name);
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg0,
--                                           llvm::Value *arg1, const char *name) {
-+                                           llvm::Value *arg1, const llvm::Twine &name) {
-     std::vector<llvm::Value *> args;
-     args.push_back(arg0);
-     args.push_back(arg1);
-diff --git a/src/ctx.h b/src/ctx.h
-index 6e5ad74ba..48b3bb826 100644
---- a/src/ctx.h
-+++ b/src/ctx.h
-@@ -302,7 +302,7 @@ class FunctionEmitContext {
-     llvm::Value *GetStringPtr(const std::string &str);
- 
-     /** Create a new basic block with given name */
--    llvm::BasicBlock *CreateBasicBlock(const char *name, llvm::BasicBlock *insertAfter = NULL);
-+    llvm::BasicBlock *CreateBasicBlock(const llvm::Twine &name, llvm::BasicBlock *insertAfter = NULL);
- 
-     /** Given a vector with element type i1, return a vector of type
-         LLVMTypes::BoolVectorType.  This method handles the conversion for
-@@ -380,33 +380,33 @@ class FunctionEmitContext {
-         this also handles applying the given operation to the vector
-         elements. */
-     llvm::Value *BinaryOperator(llvm::Instruction::BinaryOps inst, llvm::Value *v0, llvm::Value *v1,
--                                const char *name = NULL);
-+                                const llvm::Twine &name = "");
- 
-     /** Emit the "not" operator.  Like BinaryOperator(), this also handles
-         a VectorType-based operand. */
--    llvm::Value *NotOperator(llvm::Value *v, const char *name = NULL);
-+    llvm::Value *NotOperator(llvm::Value *v, const llvm::Twine &name = "");
- 
-     /** Emit a comparison instruction.  If the operands are VectorTypes,
-         then a value for the corresponding boolean VectorType is
-         returned. */
-     llvm::Value *CmpInst(llvm::Instruction::OtherOps inst, llvm::CmpInst::Predicate pred, llvm::Value *v0,
--                         llvm::Value *v1, const char *name = NULL);
-+                         llvm::Value *v1, const llvm::Twine &name = "");
- 
-     /** Given a scalar value, return a vector of the same type (or an
-         array, for pointer types). */
--    llvm::Value *SmearUniform(llvm::Value *value, const char *name = NULL);
-+    llvm::Value *SmearUniform(llvm::Value *value, const llvm::Twine &name = "");
- 
--    llvm::Value *BitCastInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Value *PtrToIntInst(llvm::Value *value, const char *name = NULL);
--    llvm::Value *PtrToIntInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Value *IntToPtrInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+    llvm::Value *BitCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Value *PtrToIntInst(llvm::Value *value, const llvm::Twine &name = "");
-+    llvm::Value *PtrToIntInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Value *IntToPtrInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
- 
--    llvm::Instruction *TruncInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+    llvm::Instruction *TruncInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-     llvm::Instruction *CastInst(llvm::Instruction::CastOps op, llvm::Value *value, llvm::Type *type,
--                                const char *name = NULL);
--    llvm::Instruction *FPCastInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Instruction *SExtInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Instruction *ZExtInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+                                const llvm::Twine &name = "");
-+    llvm::Instruction *FPCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Instruction *SExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Instruction *ZExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
- 
-     /** Given two integer-typed values (but possibly one vector and the
-         other not, and or of possibly-different bit-widths), update their
-@@ -426,9 +426,9 @@ class FunctionEmitContext {
-         pointers.  The underlying type of the base pointer must be provided
-         via the ptrType parameter */
-     llvm::Value *GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index, const Type *ptrType,
--                                   const char *name = NULL);
-+                                   const llvm::Twine &name = "");
-     llvm::Value *GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0, llvm::Value *index1, const Type *ptrType,
--                                   const char *name = NULL);
-+                                   const llvm::Twine &name = "");
- 
-     /** This method returns a new pointer that represents offsetting the
-         given base pointer to point at the given element number of the
-@@ -436,26 +436,26 @@ class FunctionEmitContext {
-         pointer must be a pointer to a structure type.  The ptrType gives
-         the type of the pointer, though it may be NULL if the base pointer
-         is uniform. */
--    llvm::Value *AddElementOffset(llvm::Value *basePtr, int elementNum, const Type *ptrType, const char *name = NULL,
--                                  const PointerType **resultPtrType = NULL);
-+    llvm::Value *AddElementOffset(llvm::Value *basePtr, int elementNum, const Type *ptrType,
-+                                  const llvm::Twine &name = "", const PointerType **resultPtrType = NULL);
- 
-     /** Bool is stored as i8 and <WIDTH x i8> but represented in IR as i1 and
-      * <WIDTH x MASK>. This is a helper function to match bool size at storage
-      * interface. */
--    llvm::Value *SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const char *name = NULL);
-+    llvm::Value *SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name = "");
-     /** Load from the memory location(s) given by lvalue, using the given
-         mask.  The lvalue may be varying, in which case this corresponds to
-         a gather from the multiple memory locations given by the array of
-         pointer values given by the lvalue.  If the lvalue is not varying,
-         then both the mask pointer and the type pointer may be NULL. */
--    llvm::Value *LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrType, const char *name = NULL,
-+    llvm::Value *LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrType, const llvm::Twine &name = "",
-                           bool one_elem = false);
- 
-     /* Load from memory location(s) given.
-      * 'type' needs to be provided when storage type is different from IR type. For example,
-      * 'unform bool' is 'i1' in IR but stored as 'i8'.
-      * Otherwise leave this as NULL. */
--    llvm::Value *LoadInst(llvm::Value *ptr, const Type *type = NULL, const char *name = NULL);
-+    llvm::Value *LoadInst(llvm::Value *ptr, const Type *type = NULL, const llvm::Twine &name = "");
- 
-     /** Emits an alloca instruction to allocate stack storage for the given
-         type.  If a non-zero alignment is specified, the object is also
-@@ -463,7 +463,8 @@ class FunctionEmitContext {
-         instruction is added at the start of the function in the entry
-         basic block; if it should be added to the current basic block, then
-         the atEntryBlock parameter should be false. */
--    llvm::Value *AllocaInst(llvm::Type *llvmType, const char *name = NULL, int align = 0, bool atEntryBlock = true);
-+    llvm::Value *AllocaInst(llvm::Type *llvmType, const llvm::Twine &name = "", int align = 0,
-+                            bool atEntryBlock = true);
- 
-     /** Emits an alloca instruction to allocate stack storage for the given
-         type.  If a non-zero alignment is specified, the object is also
-@@ -474,7 +475,7 @@ class FunctionEmitContext {
-         This implementation is preferred when possible. It is needed when
-         storage type is different from IR type. For example,
-         'unform bool' is 'i1' in IR but stored as 'i8'. */
--    llvm::Value *AllocaInst(const Type *ptrType, const char *name = NULL, int align = 0, bool atEntryBlock = true);
-+    llvm::Value *AllocaInst(const Type *ptrType, const llvm::Twine &name = "", int align = 0, bool atEntryBlock = true);
- 
-     /** Standard store instruction; for this variant, the lvalue must be a
-         single pointer, not a varying lvalue.
-@@ -502,39 +503,41 @@ class FunctionEmitContext {
-     /** This convenience method maps to an llvm::ExtractElementInst if the
-         given value is a llvm::VectorType, and to an llvm::ExtractValueInst
-         otherwise. */
--    llvm::Value *ExtractInst(llvm::Value *v, int elt, const char *name = NULL);
-+    llvm::Value *ExtractInst(llvm::Value *v, int elt, const llvm::Twine &name = "");
- 
-     /** This convenience method maps to an llvm::InsertElementInst if the
-         given value is a llvm::VectorType, and to an llvm::InsertValueInst
-         otherwise. */
--    llvm::Value *InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const char *name = NULL);
-+    llvm::Value *InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const llvm::Twine &name = "");
- 
-     /** This convenience method maps to an llvm::ShuffleVectorInst. */
--    llvm::Value *ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const char *name = NULL);
-+    llvm::Value *ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const llvm::Twine &name = "");
- 
-     /** This convenience method to generate broadcast pattern. It takes a value
-         and a vector type. Type of the value must match element type of the
-         vector. */
--    llvm::Value *BroadcastValue(llvm::Value *v, llvm::Type *vecType, const char *name = NULL);
-+    llvm::Value *BroadcastValue(llvm::Value *v, llvm::Type *vecType, const llvm::Twine &name = "");
- 
--    llvm::PHINode *PhiNode(llvm::Type *type, int count, const char *name = NULL);
--    llvm::Instruction *SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1, const char *name = NULL);
-+    llvm::PHINode *PhiNode(llvm::Type *type, int count, const llvm::Twine &name = "");
-+    llvm::Instruction *SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1,
-+                                  const llvm::Twine &name = "");
- 
-     /** Emits IR to do a function call with the given arguments.  If the
-         function type is a varying function pointer type, its full type
-         must be provided in funcType.  funcType can be NULL if func is a
-         uniform function pointer. */
-     llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, const std::vector<llvm::Value *> &args,
--                          const char *name = NULL);
-+                          const llvm::Twine &name = "");
- 
-     /** This is a convenience method that issues a call instruction to a
-         function that takes just a single argument. */
--    llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg, const char *name = NULL);
-+    llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg,
-+                          const llvm::Twine &name = "");
- 
-     /** This is a convenience method that issues a call instruction to a
-         function that takes two arguments. */
-     llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg0, llvm::Value *arg1,
--                          const char *name = NULL);
-+                          const llvm::Twine &name = "");
- 
-     /** Launch an asynchronous task to run the given function, passing it
-         he given argument values. */
-@@ -756,9 +759,10 @@ class FunctionEmitContext {
-     void maskedStore(llvm::Value *value, llvm::Value *ptr, const Type *ptrType, llvm::Value *mask);
-     void storeUniformToSOA(llvm::Value *value, llvm::Value *ptr, llvm::Value *mask, const Type *valueType,
-                            const PointerType *ptrType);
--    llvm::Value *loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType, const char *name);
-+    llvm::Value *loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType,
-+                                    const llvm::Twine &name = "");
- 
--    llvm::Value *gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask, const char *name);
-+    llvm::Value *gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask, const llvm::Twine &name = "");
- 
-     llvm::Value *addVaryingOffsetsIfNeeded(llvm::Value *ptr, const Type *ptrType);
- };
-diff --git a/src/expr.cpp b/src/expr.cpp
-index 80cc3020a..6d38d1889 100644
---- a/src/expr.cpp
-+++ b/src/expr.cpp
-@@ -1021,11 +1021,11 @@ static llvm::Value *lEmitNegate(Expr *arg, SourcePos pos, FunctionEmitContext *c
-     ctx->SetDebugPos(pos);
-     if (type->IsFloatType()) {
-         llvm::Value *zero = llvm::ConstantFP::getZeroValueForNegation(type->LLVMType(g->ctx));
--        return ctx->BinaryOperator(llvm::Instruction::FSub, zero, argVal, LLVMGetName(argVal, "_negate"));
-+        return ctx->BinaryOperator(llvm::Instruction::FSub, zero, argVal, llvm::Twine(argVal->getName()) + "_negate");
-     } else {
-         llvm::Value *zero = lLLVMConstantValue(type, g->ctx, 0.);
-         AssertPos(pos, type->IsIntType());
--        return ctx->BinaryOperator(llvm::Instruction::Sub, zero, argVal, LLVMGetName(argVal, "_negate"));
-+        return ctx->BinaryOperator(llvm::Instruction::Sub, zero, argVal, llvm::Twine(argVal->getName()) + "_negate");
-     }
- }
- 
-@@ -1047,11 +1047,11 @@ llvm::Value *UnaryExpr::GetValue(FunctionEmitContext *ctx) const {
-         return lEmitNegate(expr, pos, ctx);
-     case LogicalNot: {
-         llvm::Value *argVal = expr->GetValue(ctx);
--        return ctx->NotOperator(argVal, LLVMGetName(argVal, "_logicalnot"));
-+        return ctx->NotOperator(argVal, llvm::Twine(argVal->getName()) + "_logicalnot");
-     }
-     case BitNot: {
-         llvm::Value *argVal = expr->GetValue(ctx);
--        return ctx->NotOperator(argVal, LLVMGetName(argVal, "_bitnot"));
-+        return ctx->NotOperator(argVal, llvm::Twine(argVal->getName()) + "_bitnot");
-     }
-     default:
-         FATAL("logic error");
-@@ -1518,7 +1518,8 @@ static llvm::Value *lEmitBinaryArith(BinaryExpr::Op op, llvm::Value *value0, llv
-             return NULL;
-         }
- 
--        return ctx->BinaryOperator(inst, value0, value1, LLVMGetName(opName, value0, value1));
-+        return ctx->BinaryOperator(inst, value0, value1,
-+                                   (((llvm::Twine(opName) + "_") + value0->getName()) + "_") + value1->getName());
-     }
- }
- 
-@@ -1563,7 +1564,7 @@ static llvm::Value *lEmitBinaryCmp(BinaryExpr::Op op, llvm::Value *e0Val, llvm::
-     }
- 
-     llvm::Value *cmp = ctx->CmpInst(isFloatOp ? llvm::Instruction::FCmp : llvm::Instruction::ICmp, pred, e0Val, e1Val,
--                                    LLVMGetName(opName, e0Val, e1Val));
-+                                    (((llvm::Twine(opName) + "_") + e0Val->getName()) + "_") + e1Val->getName());
-     // This is a little ugly: CmpInst returns i1 values, but we use vectors
-     // of i32s for varying bool values; type convert the result here if
-     // needed.
-@@ -4177,7 +4178,7 @@ static llvm::Value *lConvertToSlicePointer(FunctionEmitContext *ctx, llvm::Value
-     // offsets
-     llvm::Value *result = llvm::Constant::getNullValue(sliceStructType);
-     // And replace the pointer in the struct with the given pointer
--    return ctx->InsertInst(result, ptr, 0, LLVMGetName(ptr, "_slice"));
-+    return ctx->InsertInst(result, ptr, 0, llvm::Twine(ptr->getName()) + "_slice");
- }
- 
- /** If the given array index is a compile time constant, check to see if it
-@@ -4258,8 +4259,8 @@ llvm::Value *IndexExpr::GetLValue(FunctionEmitContext *ctx) const {
-         // Convert to a slice pointer if we're indexing into SOA data
-         basePtrValue = lConvertPtrToSliceIfNeeded(ctx, basePtrValue, &baseExprType);
- 
--        llvm::Value *ptr =
--            ctx->GetElementPtrInst(basePtrValue, indexValue, baseExprType, LLVMGetName(basePtrValue, "_offset"));
-+        llvm::Value *ptr = ctx->GetElementPtrInst(basePtrValue, indexValue, baseExprType,
-+                                                  llvm::Twine(basePtrValue->getName()) + "_offset");
-         return lAddVaryingOffsetsIfNeeded(ctx, ptr, GetLValueType());
-     }
- 
-@@ -4290,8 +4291,8 @@ llvm::Value *IndexExpr::GetLValue(FunctionEmitContext *ctx) const {
-     ctx->SetDebugPos(pos);
- 
-     // And do the actual indexing calculation..
--    llvm::Value *ptr =
--        ctx->GetElementPtrInst(basePtr, LLVMInt32(0), indexValue, basePtrType, LLVMGetName(basePtr, "_offset"));
-+    llvm::Value *ptr = ctx->GetElementPtrInst(basePtr, LLVMInt32(0), indexValue, basePtrType,
-+                                              llvm::Twine(basePtr->getName()) + "_offset");
-     return lAddVaryingOffsetsIfNeeded(ctx, ptr, GetLValueType());
- }
- 
-@@ -4788,15 +4789,14 @@ llvm::Value *VectorMemberExpr::GetValue(FunctionEmitContext *ctx) const {
-         for (size_t i = 0; i < identifier.size(); ++i) {
-             char idStr[2] = {identifier[i], '\0'};
-             llvm::Value *elementPtr =
--                ctx->AddElementOffset(basePtr, indices[i], basePtrType, LLVMGetName(basePtr, idStr));
-+                ctx->AddElementOffset(basePtr, indices[i], basePtrType, llvm::Twine(basePtr->getName()) + idStr);
-             llvm::Value *elementValue = ctx->LoadInst(elementPtr, elementMask, elementPtrType);
- 
--            const char *resultName = LLVMGetName(resultPtr, idStr);
--            llvm::Value *ptmp = ctx->AddElementOffset(resultPtr, i, NULL, resultName);
-+            llvm::Value *ptmp = ctx->AddElementOffset(resultPtr, i, NULL, llvm::Twine(resultPtr->getName()) + idStr);
-             ctx->StoreInst(elementValue, ptmp, elementPtrType, expr->GetType()->IsUniformType());
-         }
- 
--        return ctx->LoadInst(resultPtr, memberType, LLVMGetName(basePtr, "_swizzle"));
-+        return ctx->LoadInst(resultPtr, memberType, llvm::Twine(basePtr->getName()) + "_swizzle");
-     }
- }
- 
-@@ -4932,7 +4932,7 @@ llvm::Value *MemberExpr::GetValue(FunctionEmitContext *ctx) const {
- 
-     ctx->SetDebugPos(pos);
-     std::string suffix = std::string("_") + identifier;
--    return ctx->LoadInst(lvalue, mask, lvalueType, LLVMGetName(lvalue, suffix.c_str()));
-+    return ctx->LoadInst(lvalue, mask, lvalueType, llvm::Twine(lvalue->getName()) + suffix);
- }
- 
- const Type *MemberExpr::GetType() const { return NULL; }
-@@ -6502,7 +6502,7 @@ static llvm::Value *lTypeConvAtomic(FunctionEmitContext *ctx, llvm::Value *exprV
-                 // does for everyone else...
-                 Assert(cast);
-                 cast = ctx->SwitchBoolSize(cast, LLVMTypes::BoolVectorType->getElementType(),
--                                           LLVMGetName(cast, "to_i_bool"));
-+                                           llvm::Twine(cast->getName()) + "to_i_bool");
-             }
-         } else {
-             // fromType->IsVaryingType())
-@@ -8246,7 +8246,7 @@ llvm::Value *NewExpr::GetValue(FunctionEmitContext *ctx) const {
-         // pointer of the return type and to run the code for initializers,
-         // if present.
-         llvm::Type *ptrType = retType->LLVMType(g->ctx);
--        ptrValue = ctx->BitCastInst(ptrValue, ptrType, LLVMGetName(ptrValue, "_cast_ptr"));
-+        ptrValue = ctx->BitCastInst(ptrValue, ptrType, llvm::Twine(ptrValue->getName()) + "_cast_ptr");
- 
-         if (initExpr != NULL)
-             InitSymbol(ptrValue, allocType, initExpr, ctx, pos);
-diff --git a/src/llvmutil.cpp b/src/llvmutil.cpp
-index 970175dbf..d0becb9f5 100644
---- a/src/llvmutil.cpp
-+++ b/src/llvmutil.cpp
-@@ -1605,23 +1605,6 @@ llvm::Value *LLVMShuffleVectors(llvm::Value *v1, llvm::Value *v2, int32_t shuf[]
-     return new llvm::ShuffleVectorInst(v1, v2, vec, "shuffle", insertBefore);
- }
- 
--const char *LLVMGetName(llvm::Value *v, const char *s) {
--    if (v == NULL)
--        return s;
--    std::string ret = std::string(v->getName());
--    ret += s;
--    return strdup(ret.c_str());
--}
--
--const char *LLVMGetName(const char *op, llvm::Value *v1, llvm::Value *v2) {
--    std::string r = op;
--    r += "_";
--    r += v1->getName().str();
--    r += "_";
--    r += v2->getName().str();
--    return strdup(r.c_str());
--}
--
- #ifdef ISPC_GENX_ENABLED
- bool lIsSVMLoad(llvm::Instruction *inst) {
-     Assert(inst);
-diff --git a/src/llvmutil.h b/src/llvmutil.h
-index 42cce4d83..07d089bb4 100644
---- a/src/llvmutil.h
-+++ b/src/llvmutil.h
-@@ -328,11 +328,6 @@ extern llvm::Value *LLVMConcatVectors(llvm::Value *v1, llvm::Value *v2, llvm::In
- extern llvm::Value *LLVMShuffleVectors(llvm::Value *v1, llvm::Value *v2, int32_t shuf[], int shufSize,
-                                        llvm::Instruction *insertBefore);
- 
--/** Utility routines to concat strings with the names of existing values to
--    create meaningful new names for instruction values.
--*/
--extern const char *LLVMGetName(llvm::Value *v, const char *);
--extern const char *LLVMGetName(const char *op, llvm::Value *v1, llvm::Value *v2);
- #ifdef ISPC_GENX_ENABLED
- enum AddressSpace { Local, Global, External };
- 
-diff --git a/src/opt.cpp b/src/opt.cpp
-index 5b1ac7b63..9d6cae058 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -257,7 +257,7 @@ static bool lGetSourcePosFromMetadata(const llvm::Instruction *inst, SourcePos *
-     return true;
- }
- 
--static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, const char *name,
-+static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[2] = {arg0, arg1};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[2]);
-@@ -265,21 +265,22 @@ static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llv
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    const char *name, llvm::Instruction *insertBefore = NULL) {
-+                                    const llvm::Twine &name, llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[3] = {arg0, arg1, arg2};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[3]);
-     return llvm::CallInst::Create(func, newArgArray, name, insertBefore);
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, const char *name, llvm::Instruction *insertBefore = NULL) {
-+                                    llvm::Value *arg3, const llvm::Twine &name,
-+                                    llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[4] = {arg0, arg1, arg2, arg3};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[4]);
-     return llvm::CallInst::Create(func, newArgArray, name, insertBefore);
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, llvm::Value *arg4, const char *name,
-+                                    llvm::Value *arg3, llvm::Value *arg4, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[5] = {arg0, arg1, arg2, arg3, arg4};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[5]);
-@@ -287,7 +288,7 @@ static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llv
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, llvm::Value *arg4, llvm::Value *arg5, const char *name,
-+                                    llvm::Value *arg3, llvm::Value *arg4, llvm::Value *arg5, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[6] = {arg0, arg1, arg2, arg3, arg4, arg5};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[6]);
-@@ -991,23 +992,24 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 llvm::Type *returnType = callInst->getType();
-                 Assert(llvm::isa<llvm::VectorType>(returnType));
-                 // cast the i8 * to the appropriate type
--                const char *name = LLVMGetName(callInst->getArgOperand(0), "_cast");
--                llvm::Value *castPtr = new llvm::BitCastInst(callInst->getArgOperand(0),
--                                                             llvm::PointerType::get(returnType, 0), name, callInst);
-+                llvm::Value *castPtr =
-+                    new llvm::BitCastInst(callInst->getArgOperand(0), llvm::PointerType::get(returnType, 0),
-+                                          llvm::Twine(callInst->getArgOperand(0)->getName()) + "_cast", callInst);
-                 lCopyMetadata(castPtr, callInst);
-                 int align;
-                 if (g->opt.forceAlignedMemory)
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
--                name = LLVMGetName(callInst->getArgOperand(0), "_load");
- #if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
--                llvm::Instruction *loadInst = new llvm::LoadInst(castPtr, name, false /* not volatile */,
--                                                                 llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
-+                llvm::Instruction *loadInst =
-+                    new llvm::LoadInst(castPtr, llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load",
-+                                       false /* not volatile */, llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
- #else
-                 llvm::Instruction *loadInst = new llvm::LoadInst(
--                    llvm::dyn_cast<llvm::PointerType>(castPtr->getType())->getPointerElementType(), castPtr, name,
--                    false /* not volatile */, llvm::MaybeAlign(align).valueOrOne(), (llvm::Instruction *)NULL);
-+                    llvm::dyn_cast<llvm::PointerType>(castPtr->getType())->getPointerElementType(), castPtr,
-+                    llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load", false /* not volatile */,
-+                    llvm::MaybeAlign(align).valueOrOne(), (llvm::Instruction *)NULL);
- #endif
-                 lCopyMetadata(loadInst, callInst);
-                 llvm::ReplaceInstWithInst(callInst, loadInst);
-@@ -1028,9 +1030,9 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 // all lanes storing, so replace with a regular store
-                 llvm::Value *rvalue = callInst->getArgOperand(2);
-                 llvm::Type *storeType = rvalue->getType();
--                const char *name = LLVMGetName(callInst->getArgOperand(0), "_ptrcast");
--                llvm::Value *castPtr = new llvm::BitCastInst(callInst->getArgOperand(0),
--                                                             llvm::PointerType::get(storeType, 0), name, callInst);
-+                llvm::Value *castPtr =
-+                    new llvm::BitCastInst(callInst->getArgOperand(0), llvm::PointerType::get(storeType, 0),
-+                                          llvm::Twine(callInst->getArgOperand(0)->getName()) + "_ptrcast", callInst);
-                 lCopyMetadata(castPtr, callInst);
- 
-                 int align;
-@@ -1339,8 +1341,8 @@ static llvm::Value *lGetBasePointer(llvm::Value *v, llvm::Instruction *insertBef
-         if (t == NULL) {
-             return NULL;
-         } else {
--            return llvm::CastInst::Create(ci->getOpcode(), t, ci->getType()->getScalarType(), LLVMGetName(t, "_cast"),
--                                          insertBefore);
-+            return llvm::CastInst::Create(ci->getOpcode(), t, ci->getType()->getScalarType(),
-+                                          llvm::Twine(t->getName()) + "_cast", insertBefore);
-         }
-     }
- 
-@@ -1583,13 +1585,13 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-         if (co == NULL)
-             *constOffset = NULL;
-         else
--            *constOffset =
--                llvm::CastInst::Create(cast->getOpcode(), co, cast->getType(), LLVMGetName(co, "_cast"), insertBefore);
-+            *constOffset = llvm::CastInst::Create(cast->getOpcode(), co, cast->getType(),
-+                                                  llvm::Twine(co->getName()) + "_cast", insertBefore);
-         if (vo == NULL)
-             *variableOffset = NULL;
-         else
--            *variableOffset =
--                llvm::CastInst::Create(cast->getOpcode(), vo, cast->getType(), LLVMGetName(vo, "_cast"), insertBefore);
-+            *variableOffset = llvm::CastInst::Create(cast->getOpcode(), vo, cast->getType(),
-+                                                     llvm::Twine(vo->getName()) + "_cast", insertBefore);
-         return;
-     }
- 
-@@ -1608,16 +1610,18 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-             else if (c1 == NULL || llvm::isa<llvm::ConstantAggregateZero>(c1))
-                 *constOffset = c0;
-             else
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, c0, c1, LLVMGetName("add", c0, c1),
--                                                            insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, c0, c1, ((llvm::Twine("add_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
- 
-             if (v0 == NULL || llvm::isa<llvm::ConstantAggregateZero>(v0))
-                 *variableOffset = v1;
-             else if (v1 == NULL || llvm::isa<llvm::ConstantAggregateZero>(v1))
-                 *variableOffset = v0;
-             else
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, v0, v1,
--                                                               LLVMGetName("add", v0, v1), insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, v0, v1, ((llvm::Twine("add_") + v0->getName()) + "_") + v1->getName(),
-+                    insertBefore);
-             return;
-         } else if (bop->getOpcode() == llvm::Instruction::Shl) {
-             lExtractConstantOffset(op0, &c0, &v0, insertBefore);
-@@ -1633,10 +1637,12 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-                 *constOffset = vec;
-                 *variableOffset = NULL;
-             } else {
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Shl, c0, c1, LLVMGetName("shl", c0, c1),
--                                                            insertBefore);
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Shl, v0, c1,
--                                                               LLVMGetName("shl", v0, c1), insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Shl, c0, c1, ((llvm::Twine("shl_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Shl, v0, c1, ((llvm::Twine("shl_") + v0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-             }
-             return;
-         } else if (bop->getOpcode() == llvm::Instruction::Mul) {
-@@ -1648,25 +1654,30 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-             // Note that the first term is a constant and the last three are
-             // variable.
-             if (c0 != NULL && c1 != NULL)
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, c1, LLVMGetName("mul", c0, c1),
--                                                            insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Mul, c0, c1, ((llvm::Twine("mul_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-             else
-                 *constOffset = NULL;
- 
-             llvm::Value *va = NULL, *vb = NULL, *vc = NULL;
-             if (v0 != NULL && c1 != NULL)
--                va = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, c1, LLVMGetName("mul", v0, c1),
-+                va = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, c1,
-+                                                  ((llvm::Twine("mul_") + v0->getName()) + "_") + c1->getName(),
-                                                   insertBefore);
-             if (c0 != NULL && v1 != NULL)
--                vb = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, v1, LLVMGetName("mul", c0, v1),
-+                vb = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, v1,
-+                                                  ((llvm::Twine("mul_") + c0->getName()) + "_") + v1->getName(),
-                                                   insertBefore);
-             if (v0 != NULL && v1 != NULL)
--                vc = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, v1, LLVMGetName("mul", v0, v1),
-+                vc = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, v1,
-+                                                  ((llvm::Twine("mul_") + v0->getName()) + "_") + v1->getName(),
-                                                   insertBefore);
- 
-             llvm::Value *vab = NULL;
-             if (va != NULL && vb != NULL)
--                vab = llvm::BinaryOperator::Create(llvm::Instruction::Add, va, vb, LLVMGetName("add", va, vb),
-+                vab = llvm::BinaryOperator::Create(llvm::Instruction::Add, va, vb,
-+                                                   ((llvm::Twine("add_") + va->getName()) + "_") + vb->getName(),
-                                                    insertBefore);
-             else if (va != NULL)
-                 vab = va;
-@@ -1674,8 +1685,9 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-                 vab = vb;
- 
-             if (vab != NULL && vc != NULL)
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, vab, vc,
--                                                               LLVMGetName("add", vab, vc), insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, vab, vc, ((llvm::Twine("add_") + vab->getName()) + "_") + vc->getName(),
-+                    insertBefore);
-             else if (vab != NULL)
-                 *variableOffset = vab;
-             else
-@@ -1943,7 +1955,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-             // all zeros (i.e. a ConstantAggregateZero, but just in case,
-             // do the more general check with lVectorIs32BitInts().
-             variableOffset = new llvm::TruncInst(variableOffset, LLVMTypes::Int32VectorType,
--                                                 LLVMGetName(variableOffset, "_trunc"), insertBefore);
-+                                                 llvm::Twine(variableOffset->getName()) + "_trunc", insertBefore);
-         else
-             return false;
-     }
-@@ -1952,7 +1964,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-         if (lVectorIs32BitInts(constOffset)) {
-             // Truncate them so we have a 32-bit vector type for them.
-             constOffset = new llvm::TruncInst(constOffset, LLVMTypes::Int32VectorType,
--                                              LLVMGetName(constOffset, "_trunc"), insertBefore);
-+                                              llvm::Twine(constOffset->getName()) + "_trunc", insertBefore);
-         } else {
-             // FIXME: otherwise we just assume that all constant offsets
-             // can actually always fit into 32-bits...  (This could be
-@@ -1963,7 +1975,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-             // llvm::ConstantFoldInstruction() doesn't seem to be doing
-             // enough for us in some cases if we call it from here.
-             constOffset = new llvm::TruncInst(constOffset, LLVMTypes::Int32VectorType,
--                                              LLVMGetName(constOffset, "_trunc"), insertBefore);
-+                                              llvm::Twine(constOffset->getName()) + "_trunc", insertBefore);
-         }
-     }
- 
-@@ -2012,8 +2024,8 @@ static bool lOffsets32BitSafe(llvm::Value **offsetPtr, llvm::Instruction *insert
- 
-         // Alternatively, offset could be a sequence of adds terminating
-         // in safe constant vectors or a SExt.
--        *offsetPtr =
--            new llvm::TruncInst(offset, LLVMTypes::Int32VectorType, LLVMGetName(offset, "_trunc"), insertBefore);
-+        *offsetPtr = new llvm::TruncInst(offset, LLVMTypes::Int32VectorType, llvm::Twine(offset->getName()) + "_trunc",
-+                                         insertBefore);
-         return true;
-     } else
-         return false;
-@@ -2229,7 +2241,8 @@ static bool lGSToGSBaseOffsets(llvm::CallInst *callInst) {
-     }
-     // Cast the base pointer to a void *, since that's what the
-     // __pseudo_*_base_offsets_* functions want.
--    basePtr = new llvm::IntToPtrInst(basePtr, LLVMTypes::VoidPointerType, LLVMGetName(basePtr, "_2void"), callInst);
-+    basePtr = new llvm::IntToPtrInst(basePtr, LLVMTypes::VoidPointerType, llvm::Twine(basePtr->getName()) + "_2void",
-+                                     callInst);
-     lCopyMetadata(basePtr, callInst);
-     llvm::Function *gatherScatterFunc = info->baseOffsetsFunc;
- 
-@@ -2803,7 +2816,7 @@ static bool lGSToLoadStore(llvm::CallInst *callInst) {
-                 lCopyMetadata(ptr, callInst);
-                 Debug(pos, "Transformed gather to unaligned vector load!");
-                 llvm::Instruction *newCall =
--                    lCallInst(gatherInfo->loadMaskedFunc, ptr, mask, LLVMGetName(ptr, "_masked_load"));
-+                    lCallInst(gatherInfo->loadMaskedFunc, ptr, mask, llvm::Twine(ptr->getName()) + "_masked_load");
-                 lCopyMetadata(newCall, callInst);
-                 llvm::ReplaceInstWithInst(callInst, newCall);
-                 return true;
diff --git a/srcpkgs/ispc/patches/llvm12-004.patch b/srcpkgs/ispc/patches/llvm12-004.patch
deleted file mode 100644
index 3a94d8443a5e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-004.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From c03a5142444476a1caa5c2ba7fa2d92d7793d6f1 Mon Sep 17 00:00:00 2001
-From: Deepak Rajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Mon, 25 Jan 2021 09:22:49 -0800
-Subject: [PATCH] Fixing build on llvm trunk.
-
----
- src/ctx.cpp | 7 +++----
- 1 file changed, 3 insertions(+), 4 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index ded524b71..b60e6fe84 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1020,8 +1020,7 @@ void FunctionEmitContext::EmitCaseLabel(int value, bool checkMask, SourcePos pos
-     llvm::BasicBlock *bbCaseImpl = NULL;
-     if (emitGenXHardwareMask()) {
-         // Create basic block with actual case implementation
--        llvm::Twine bbName = llvm::Twine(bbCase->getName()) + "_impl";
--        bbCaseImpl = CreateBasicBlock(bbName, bbCase);
-+        bbCaseImpl = CreateBasicBlock(llvm::Twine(bbCase->getName()) + "_impl", bbCase);
-     }
- #endif
- 
-@@ -3142,8 +3141,8 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     llvm::Value *undef2 = llvm::UndefValue::get(vecType);
- 
-     // InsertElement
--    llvm::Twine tw = name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + llvm::Twine("_init");
--    llvm::Value *insert = InsertInst(undef1, v, 0, tw.str().c_str());
-+    llvm::Value *insert =
-+        InsertInst(undef1, v, 0, name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + "_init");
- 
-     // ShuffleVector
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
diff --git a/srcpkgs/ispc/patches/llvm12-005.patch b/srcpkgs/ispc/patches/llvm12-005.patch
deleted file mode 100644
index e3e96b00abfa..000000000000
--- a/srcpkgs/ispc/patches/llvm12-005.patch
+++ /dev/null
@@ -1,372 +0,0 @@
-From c1d0a51bf8416d42144de9e2bdd59825eaeff1ac Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Fri, 8 Jan 2021 14:13:49 -0800
-Subject: [PATCH] LLVM 11 support for gen code
-
----
- src/ctx.cpp                     |  13 ++-
- src/gen/GlobalsLocalization.cpp |   9 +-
- src/opt.cpp                     | 143 ++++++++++++++++++++++++--------
- 3 files changed, 124 insertions(+), 41 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index b60e6fe84..2a72e6837 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1,5 +1,5 @@
- /*
--  Copyright (c) 2010-2020, Intel Corporation
-+  Copyright (c) 2010-2021, Intel Corporation
-   All rights reserved.
- 
-   Redistribution and use in source and binary forms, with or without
-@@ -3685,8 +3685,17 @@ llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::
-     AssertPos(currentPos, llvm::isa<llvm::VectorType>(value->getType()));
-     llvm::VectorType *vt = llvm::dyn_cast<llvm::VectorType>(value->getType());
-     if (defaults == NULL) {
--        defaults = llvm::ConstantVector::getSplat(value->getType()->getVectorNumElements(),
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+        defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-+                                                  llvm::Constant::getNullValue(vt->getElementType()));
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+        defaults = llvm::ConstantVector::getSplat({static_cast<unsigned int>(vt->getNumElements()), false},
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
-+#else
-+        defaults = llvm::ConstantVector::getSplat(
-+            llvm::ElementCount::get(static_cast<unsigned int>(vt->getNumElements()), false),
-+            llvm::Constant::getNullValue(vt->getElementType()));
-+#endif
-     }
- 
-     auto Fn = llvm::GenXIntrinsic::getGenXDeclaration(m->module, llvm::GenXIntrinsic::genx_simdcf_predicate,
-diff --git a/src/gen/GlobalsLocalization.cpp b/src/gen/GlobalsLocalization.cpp
-index a176e9462..41f3b00e2 100644
---- a/src/gen/GlobalsLocalization.cpp
-+++ b/src/gen/GlobalsLocalization.cpp
-@@ -1,5 +1,5 @@
- /*
--  Copyright (c) 2014, 2016-2020, Intel Corporation
-+  Copyright (c) 2014, 2016-2021, Intel Corporation
-   All rights reserved.
- 
-   Redistribution and use in source and binary forms, with or without
-@@ -53,8 +53,10 @@
- #include <llvm/GenXIntrinsics/GenXIntrOpts.h>
- #include <llvm/GenXIntrinsics/GenXIntrinsics.h>
- #include <llvm/GenXIntrinsics/GenXMetadata.h>
--#include <llvm/IR/CFG.h>
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
- #include <llvm/IR/CallSite.h>
-+#endif
-+#include <llvm/IR/CFG.h>
- #include <llvm/IR/DebugInfo.h>
- #include <llvm/IR/Dominators.h>
- #include <llvm/IR/Function.h>
-@@ -470,7 +472,8 @@ void GlobalsLocalization::LocalizeGlobals(LocalizationInfo &LI) {
-         Instruction &FirstI = *Fn->getEntryBlock().begin();
-         Type *ElemTy = GV->getType()->getElementType();
-         AllocaInst *Alloca = new AllocaInst(ElemTy, 0, GV->getName() + ".local", &FirstI);
--        Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()));
-+        Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()).valueOrOne());
-+
-         if (!isa<UndefValue>(GV->getInitializer()))
-             new StoreInst(GV->getInitializer(), Alloca, &FirstI);
- 
-diff --git a/src/opt.cpp b/src/opt.cpp
-index d58d77f73..1789b8476 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -2899,15 +2899,17 @@ static llvm::Function *lGenXMaskedInt8Inst(llvm::Instruction *inst, bool isStore
- static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::Instruction *inst) {
-     Assert(g->target->isGenXTarget());
-     Assert(llvm::isa<llvm::VectorType>(val->getType()));
--    Assert(llvm::isPowerOf2_32(val->getType()->getVectorNumElements()));
--    Assert(val->getType()->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-+
-+    llvm::VectorType *valVecType = llvm::dyn_cast<llvm::VectorType>(val->getType());
-+    Assert(llvm::isPowerOf2_32(valVecType->getNumElements()));
-+    Assert(valVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
- 
-     // The data write of svm store must have a size that is a power of two from 16 to 128
-     // bytes. However for int8 type and simd width = 8, the data write size is 8.
-     // So we use masked store function here instead of svm store which process int8 type
-     // correctly.
--    if (val->getType()->getPrimitiveSizeInBits() / 8 < 16) {
--        Assert(val->getType()->getScalarType() == LLVMTypes::Int8Type);
-+    if (valVecType->getPrimitiveSizeInBits() / 8 < 16) {
-+        Assert(valVecType->getScalarType() == LLVMTypes::Int8Type);
-         if (llvm::Function *maskedFunc = lGenXMaskedInt8Inst(inst, true))
-             return llvm::dyn_cast<llvm::CallInst>(lCallInst(maskedFunc, ptr, val, LLVMMaskAllOn, ""));
-         else {
-@@ -2923,15 +2925,17 @@ static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::
- 
- static llvm::CallInst *lGenXLoadInst(llvm::Value *ptr, llvm::Type *retType, llvm::Instruction *inst) {
-     Assert(llvm::isa<llvm::VectorType>(retType));
--    Assert(llvm::isPowerOf2_32(retType->getVectorNumElements()));
--    Assert(retType->getPrimitiveSizeInBits());
--    Assert(retType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-+
-+    llvm::VectorType *retVecType = llvm::dyn_cast<llvm::VectorType>(retType);
-+    Assert(llvm::isPowerOf2_32(retVecType->getNumElements()));
-+    Assert(retVecType->getPrimitiveSizeInBits());
-+    Assert(retVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-     // The data read of svm load must have a size that is a power of two from 16 to 128
-     // bytes. However for int8 type and simd width = 8, the data read size is 8.
-     // So we use masked load function here instead of svm load which process int8 type
-     // correctly.
--    if (retType->getPrimitiveSizeInBits() / 8 < 16) {
--        Assert(retType->getScalarType() == LLVMTypes::Int8Type);
-+    if (retVecType->getPrimitiveSizeInBits() / 8 < 16) {
-+        Assert(retVecType->getScalarType() == LLVMTypes::Int8Type);
-         if (llvm::Function *maskedFunc = lGenXMaskedInt8Inst(inst, false))
-             return llvm::dyn_cast<llvm::CallInst>(lCallInst(maskedFunc, ptr, LLVMMaskAllOn, ""));
-         else {
-@@ -5622,15 +5626,24 @@ static bool lVectorizeGEPs(llvm::Value *ptr, std::vector<PtrUse> &ptrUses, std::
-         llvm::PtrToIntInst *ptrToInt =
-             new llvm::PtrToIntInst(ptr, LLVMTypes::Int64Type, "vectorized_ptrtoint", insertBefore);
-         llvm::Instruction *addr = llvm::BinaryOperator::CreateAdd(ptrToInt, offset, "vectorized_address", insertBefore);
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        llvm::Type *retType = llvm::FixedVectorType::get(scalar_type, reqSize / t_size);
-+#else
-         llvm::Type *retType = llvm::VectorType::get(scalar_type, reqSize / t_size);
-+#endif
-         llvm::Function *fn = llvm::GenXIntrinsic::getGenXDeclaration(
-             m->module, llvm::GenXIntrinsic::genx_svm_block_ld_unaligned, {retType, addr->getType()});
-         llvm::Instruction *ld = llvm::CallInst::Create(fn, {addr}, "vectorized_ld", insertBefore);
- 
-         if (loadingPtr) {
-             // Cast int to ptr via inttoptr
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            ld = new llvm::IntToPtrInst(ld, llvm::FixedVectorType::get(originalType, reqSize / t_size),
-+                                        "vectorized_inttoptr", insertBefore);
-+#else
-             ld = new llvm::IntToPtrInst(ld, llvm::VectorType::get(originalType, reqSize / t_size),
-                                         "vectorized_inttoptr", insertBefore);
-+#endif
-         }
- 
-         // Scalar extracts for all loaded elements
-@@ -6160,19 +6173,34 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-         llvm::Instruction *inst = &*I;
-         if (llvm::CallInst *ci = llvm::dyn_cast<llvm::CallInst>(inst)) {
-             llvm::Function *func = ci->getCalledFunction();
--            if (func && func->getName() == "llvm.trap") {
-+            if (func && func->getName().equals("llvm.trap")) {
-                 llvm::Type *argTypes[] = {LLVMTypes::Int1VectorType, LLVMTypes::Int16VectorType};
-                 // Description of parameters for genx_raw_send_noresult can be found in target-genx.ll
-                 auto Fn = +llvm::GenXIntrinsic::getGenXDeclaration(
-                     m->module, llvm::GenXIntrinsic::genx_raw_send_noresult, argTypes);
-                 llvm::SmallVector<llvm::Value *, 8> Args;
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 0));
--                Args.push_back(llvm::ConstantVector::getSplat(g->target->getNativeVectorWidth(),
--                                                              llvm::ConstantInt::getTrue(*g->ctx)));
-+                Args.push_back(llvm::ConstantVector::getSplat(
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+                    g->target->getNativeVectorWidth(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+                    {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
-+#else // LLVM 12.0+
-+                    llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-+#endif
-+                    llvm::ConstantInt::getTrue(*g->ctx)));
-+
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 39));
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 33554448));
-                 llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
--                    g->target->getNativeVectorWidth(), llvm::Constant::getNullValue(llvm::Type::getInt16Ty(*g->ctx)));
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+                    g->target->getNativeVectorWidth(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+                    {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
-+#else // LLVM 12.0+
-+                    llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-+#endif
-+                    llvm::Constant::getNullValue(llvm::Type::getInt16Ty(*g->ctx)));
-                 Args.push_back(zeroMask);
- 
-                 llvm::Instruction *newInst = llvm::CallInst::Create(Fn, Args, ci->getName());
-@@ -6181,7 +6209,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     modifiedAny = true;
-                     goto restart;
-                 }
--            } else if (func && func->getName() == "llvm.assume") {
-+            } else if (func && func->getName().equals("llvm.assume")) {
-                 ci->eraseFromParent();
-                 modifiedAny = true;
-                 goto restart;
-@@ -6335,7 +6363,7 @@ bool CheckUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 continue;
-             for (int i = 0; i < unsupportedFuncs.size(); i++) {
-                 std::smatch match;
--                std::string funcName = func->getName();
-+                std::string funcName = func->getName().str();
-                 if (std::regex_match(funcName, match, unsupportedFuncs[i])) {
-                     // We found unsupported function. Generate error and stop compilation.
-                     SourcePos pos;
-@@ -6418,12 +6446,14 @@ bool MangleOpenCLBuiltins::runOnBasicBlock(llvm::BasicBlock &bb) {
-             if (func->getName().startswith("__spirv_ocl")) {
-                 std::string mangledName;
-                 llvm::Type *retType = func->getReturnType();
--                std::string funcName = func->getName();
-+                std::string funcName = func->getName().str();
-                 std::vector<llvm::Type *> ArgTy;
-                 // spirv OpenCL builtins are used for double types only
--                Assert(retType->isVectorTy() && retType->getVectorElementType()->isDoubleTy() ||
-+                Assert(retType->isVectorTy() &&
-+                           llvm::dyn_cast<llvm::VectorType>(retType)->getElementType()->isDoubleTy() ||
-                        retType->isSingleValueType() && retType->isDoubleTy());
--                if (retType->isVectorTy() && retType->getVectorElementType()->isDoubleTy()) {
-+                if (retType->isVectorTy() &&
-+                    llvm::dyn_cast<llvm::VectorType>(retType)->getElementType()->isDoubleTy()) {
-                     ArgTy.push_back(LLVMTypes::DoubleVectorType);
-                     // _DvWIDTH suffix is used in target file to differentiate scalar
-                     // and vector versions of intrinsics. Here we remove this
-@@ -6511,8 +6541,15 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- 
-     // Cast offsets to int64
-     Offsets = new llvm::ZExtInst(
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        Offsets,
-+        llvm::FixedVectorType::get(LLVMTypes::Int64Type,
-+                                   llvm::dyn_cast<llvm::VectorType>(Offsets->getType())->getNumElements()),
-+        "svm_offset_zext", InsertBefore);
-+#else
-         Offsets, llvm::VectorType::get(LLVMTypes::Int64Type, Offsets->getType()->getVectorNumElements()),
-         "svm_offset_zext", InsertBefore);
-+#endif
- 
-     if (!llvm::isa<llvm::ConstantPointerNull>(Ptr)) {
-         // Cast ptr to int64
-@@ -6520,13 +6557,31 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- 
-         // Vectorize ptr
-         llvm::Value *undefInsertValue =
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            llvm::UndefValue::get(llvm::FixedVectorType::get(
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+#else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
-+#endif
-         address = llvm::InsertElementInst::Create(undefInsertValue, address, LLVMInt32(0), "svm_ptr_iei", InsertBefore);
-         llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+            {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
-+#else
-+        llvm::ElementCount::get(
-+                                llvm::dyn_cast<llvm::FixedVectorType>(addressType->getNumElements(), false),
-+#endif
-             llvm::Constant::getNullValue(llvm::Type::getInt32Ty(InsertBefore->getContext())));
-+
-         llvm::Value *undefShuffleValue =
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            llvm::UndefValue::get(llvm::FixedVectorType::get(
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+#else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
-+#endif
-         address = new llvm::ShuffleVectorInst(address, undefShuffleValue, zeroVec, "svm_ptr_svi", InsertBefore);
- 
-         // Calculate address
-@@ -6553,9 +6608,12 @@ llvm::Instruction *FixAddressSpace::processVectorLoad(llvm::LoadInst *LI) {
-     if (retType->getScalarType()->isPointerTy()) {
-         isPtrLoad = true;
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        retType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(retType)->getNumElements());
-+#else
-         retType = llvm::VectorType::get(scalarType, retType->getVectorNumElements());
-+#endif
-     }
--
-     llvm::Instruction *res = lGenXLoadInst(ptr, retType, llvm::dyn_cast<llvm::Instruction>(LI));
-     Assert(res);
- 
-@@ -6580,11 +6638,16 @@ llvm::Instruction *FixAddressSpace::processSVMVectorLoad(llvm::Instruction *CI)
-     ptr = new llvm::IntToPtrInst(ptr, llvm::PointerType::get(retType, 0), CI->getName() + "_inttoptr", CI);
-     llvm::Instruction *loadInst = NULL;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    loadInst = new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), loadInst,
--                                  CI->getName(), (llvm::Instruction *)NULL);
-+    loadInst = new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-+                                  CI->getName(), false /* not volatile */,
-+                                  llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne(),
-+                                  (llvm::Instruction *)NULL);
- #else
--    loadInst = new llvm::LoadInst(ptr, CI->getName(), (llvm::Instruction *)NULL);
-+    loadInst = new llvm::LoadInst(ptr, CI->getName(), false,
-+                                  llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne(),
-+                                  (llvm::Instruction *)NULL);
- #endif
-+
-     Assert(loadInst);
-     return loadInst;
- }
-@@ -6606,7 +6669,11 @@ llvm::Instruction *FixAddressSpace::processVectorStore(llvm::StoreInst *SI) {
-     // Note: it doesn't look like a normal case for GenX target
-     if (valType->getScalarType()->isPointerTy()) {
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        valType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(valType)->getNumElements());
-+#else
-         valType = llvm::VectorType::get(scalarType, valType->getVectorNumElements());
-+#endif
-         val = new llvm::PtrToIntInst(val, valType, "svm_st_val_ptrtoint", SI);
-     }
- 
-@@ -6631,12 +6698,8 @@ llvm::Instruction *FixAddressSpace::processSVMVectorStore(llvm::Instruction *CI)
-     ptr = new llvm::IntToPtrInst(ptr, llvm::PointerType::get(valType, 0), CI->getName() + "_inttoptr", CI);
- 
-     llvm::Instruction *storeInst = NULL;
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    loadInst = new llvm::StoreInst(val, llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(),
--                                   storeInst, CI->getName(), (llvm::Instruction *)NULL);
--#else
--    storeInst = new llvm::StoreInst(val, ptr, (llvm::Instruction *)NULL);
--#endif
-+    storeInst = new llvm::StoreInst(val, ptr, (llvm::Instruction *)NULL,
-+                                    llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
-     Assert(storeInst);
-     return storeInst;
- }
-@@ -6645,15 +6708,18 @@ llvm::Instruction *FixAddressSpace::createInt8WrRegion(llvm::Value *Val, llvm::V
-     int width = g->target->getVectorWidth();
- 
-     llvm::Value *Args[8];
--
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Args[0] = llvm::UndefValue::get(llvm::FixedVectorType::get(LLVMTypes::Int8Type, width * 4)); // old value
-+#else
-     Args[0] = llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int8Type, width * 4)); // old value
--    Args[1] = Val;                                                                          // value to store
--    Args[2] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);                              // vstride
--    Args[3] = llvm::ConstantInt::get(LLVMTypes::Int32Type, width);                          // width
--    Args[4] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 4);                              // stride
--    Args[5] = llvm::ConstantInt::get(LLVMTypes::Int16Type, 0);                              // offsets
--    Args[6] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);                              // parent width (ignored)
--    Args[7] = Mask;                                                                         // mask
-+#endif
-+    Args[1] = Val;                                                 // value to store
-+    Args[2] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);     // vstride
-+    Args[3] = llvm::ConstantInt::get(LLVMTypes::Int32Type, width); // width
-+    Args[4] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 4);     // stride
-+    Args[5] = llvm::ConstantInt::get(LLVMTypes::Int16Type, 0);     // offsets
-+    Args[6] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);     // parent width (ignored)
-+    Args[7] = Mask;                                                // mask
- 
-     llvm::Type *Tys[4];
- 
-@@ -6708,7 +6774,12 @@ llvm::Instruction *FixAddressSpace::processGatherScatterPrivate(llvm::CallInst *
-         return NULL;
- 
-     llvm::Value *address = calculateGatherScatterAddress(ptr, offsets, CI);
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    llvm::Type *i8VecType = llvm::FixedVectorType::get(LLVMTypes::Int8Type, width * 4);
-+#else
-     llvm::Type *i8VecType = llvm::VectorType::get(LLVMTypes::Int8Type, width * 4);
-+#endif
-+
-     bool isInt8 = (value->getType()->getScalarType() == LLVMTypes::Int8Type);
- 
-     Assert(address && "Bad gather/scatter address!");
diff --git a/srcpkgs/ispc/patches/llvm12-006.patch b/srcpkgs/ispc/patches/llvm12-006.patch
deleted file mode 100644
index a829ea48391e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-006.patch
+++ /dev/null
@@ -1,126 +0,0 @@
-From bb3f493d1fbd45c79e1d9dee67a0430ba313eaad Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 19 Jan 2021 11:07:33 -0800
-Subject: [PATCH] Fixed ifdefs for LLVM_11
-
----
- src/ctx.cpp |  6 +++---
- src/opt.cpp | 18 +++++++++---------
- 2 files changed, 12 insertions(+), 12 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 2a72e6837..527a02f30 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1691,7 +1691,7 @@ llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const llvm::T
-     if (llvm::Constant *const_val = llvm::dyn_cast<llvm::Constant>(value)) {
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         ret = llvm::ConstantVector::getSplat(g->target->getVectorWidth(), const_val);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-         ret =
-             llvm::ConstantVector::getSplat({static_cast<unsigned int>(g->target->getVectorWidth()), false}, const_val);
- #else // LLVM 12.0+
-@@ -3148,7 +3148,7 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-     llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
-         vecType->getVectorNumElements(), llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-     llvm::Constant *zeroVec =
-         llvm::ConstantVector::getSplat({static_cast<unsigned int>(ty->getNumElements()), false},
-                                        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
-@@ -3688,7 +3688,7 @@ llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-         defaults = llvm::ConstantVector::getSplat({static_cast<unsigned int>(vt->getNumElements()), false},
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
- #else
-diff --git a/src/opt.cpp b/src/opt.cpp
-index 1789b8476..3ff191a0a 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -1045,7 +1045,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                 llvm::Instruction *loadInst =
-                     new llvm::LoadInst(castPtr, llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load",
-                                        false /* not volatile */, llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
-@@ -1472,7 +1472,7 @@ static llvm::Value *lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offse
-                     llvm::Value *zeroMask =
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                         llvm::ConstantVector::getSplat(cv->getType()->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                         llvm::ConstantVector::getSplat(
-                             {llvm::dyn_cast<llvm::VectorType>(cv->getType())->getNumElements(), false},
- #else // LLVM 12.0+
-@@ -1495,7 +1495,7 @@ static llvm::Value *lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offse
-                         llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                             bop_var_type->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                             {llvm::dyn_cast<llvm::VectorType>(bop_var_type)->getNumElements(), false},
- #else // LLVM 12.0+
-                             llvm::ElementCount::get(
-@@ -2803,7 +2803,7 @@ static bool lGSToLoadStore(llvm::CallInst *callInst) {
-             llvm::Value *zeroMask =
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                 llvm::ConstantVector::getSplat(callInst->getType()->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                 llvm::ConstantVector::getSplat(
-                     {llvm::dyn_cast<llvm::VectorType>(callInst->getType())->getNumElements(), false},
- 
-@@ -3100,7 +3100,7 @@ static bool lImproveMaskedLoad(llvm::CallInst *callInst, llvm::BasicBlock::itera
-         {
-             llvm::Type *ptrType = llvm::PointerType::get(callInst->getType(), 0);
-             ptr = new llvm::BitCastInst(ptr, ptrType, "ptr_cast_for_load", callInst);
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             load = new llvm::LoadInst(
-                 ptr, callInst->getName(), false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-@@ -3459,7 +3459,7 @@ llvm::Value *lGEPAndLoad(llvm::Value *basePtr, int64_t offset, int align, llvm::
-                          llvm::Type *type) {
-     llvm::Value *ptr = lGEPInst(basePtr, LLVMInt64(offset), "new_base", insertBefore);
-     ptr = new llvm::BitCastInst(ptr, llvm::PointerType::get(type, 0), "ptr_cast", insertBefore);
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-     return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, llvm::MaybeAlign(align), insertBefore);
- #else // LLVM 11.0+
-     return new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-@@ -6183,7 +6183,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 Args.push_back(llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                     g->target->getNativeVectorWidth(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                     {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
- #else // LLVM 12.0+
-                     llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-@@ -6195,7 +6195,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                     g->target->getNativeVectorWidth(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                     {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
- #else // LLVM 12.0+
-                     llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-@@ -6567,7 +6567,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
-         llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-             {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
- #else
-         llvm::ElementCount::get(
diff --git a/srcpkgs/ispc/patches/llvm12-007.patch b/srcpkgs/ispc/patches/llvm12-007.patch
deleted file mode 100644
index 1b975f896c7e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-007.patch
+++ /dev/null
@@ -1,160 +0,0 @@
-From 62f5a6c37bf26fc25a7cf81868052d3472874610 Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 23 Mar 2021 23:07:30 -0700
-Subject: [PATCH] Do not generate function mask when it is not required
-
----
- src/ctx.cpp                    | 39 ++++++++++++++-------
- tests/lit-tests/full_mask.ispc | 63 ++++++++++++++++++++++++++++++++++
- 2 files changed, 90 insertions(+), 12 deletions(-)
- create mode 100644 tests/lit-tests/full_mask.ispc
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 527a02f30..9e775fc5c 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -231,10 +231,18 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym, llvm::F
-     internalMaskPointer = AllocaInst(LLVMTypes::MaskType, "internal_mask_memory");
-     StoreInst(LLVMMaskAllOn, internalMaskPointer);
- 
--    functionMaskValue = LLVMMaskAllOn;
--
--    fullMaskPointer = AllocaInst(LLVMTypes::MaskType, "full_mask_memory");
--    StoreInst(LLVMMaskAllOn, fullMaskPointer);
-+    // If the function doesn't have __mask in parameters, there is no need to
-+    // have function mask
-+    if ((func->GetType()->isExported &&
-+         (lf->getFunctionType()->getNumParams() == func->GetType()->GetNumParameters())) ||
-+        (func->GetType()->isUnmasked) || (func->GetType()->isTask)) {
-+        functionMaskValue = NULL;
-+        fullMaskPointer = NULL;
-+    } else {
-+        functionMaskValue = LLVMMaskAllOn;
-+        fullMaskPointer = AllocaInst(LLVMTypes::MaskType, "full_mask_memory");
-+        StoreInst(LLVMMaskAllOn, fullMaskPointer);
-+    }
- 
-     blockEntryMask = NULL;
-     breakLanesPtr = continueLanesPtr = NULL;
-@@ -389,20 +397,26 @@ llvm::BasicBlock *FunctionEmitContext::GetCurrentBasicBlock() { return bblock; }
- 
- void FunctionEmitContext::SetCurrentBasicBlock(llvm::BasicBlock *bb) { bblock = bb; }
- 
--llvm::Value *FunctionEmitContext::GetFunctionMask() { return functionMaskValue; }
-+llvm::Value *FunctionEmitContext::GetFunctionMask() { return fullMaskPointer ? functionMaskValue : LLVMMaskAllOn; }
- 
- llvm::Value *FunctionEmitContext::GetInternalMask() { return LoadInst(internalMaskPointer, NULL, "load_mask"); }
- 
- llvm::Value *FunctionEmitContext::GetFullMask() {
--    return BinaryOperator(llvm::Instruction::And, GetInternalMask(), functionMaskValue, "internal_mask&function_mask");
-+    return fullMaskPointer ? BinaryOperator(llvm::Instruction::And, GetInternalMask(), functionMaskValue,
-+                                            "internal_mask&function_mask")
-+                           : GetInternalMask();
- }
- 
--llvm::Value *FunctionEmitContext::GetFullMaskPointer() { return fullMaskPointer; }
-+llvm::Value *FunctionEmitContext::GetFullMaskPointer() {
-+    return fullMaskPointer ? fullMaskPointer : internalMaskPointer;
-+}
- 
- void FunctionEmitContext::SetFunctionMask(llvm::Value *value) {
--    functionMaskValue = value;
--    if (bblock != NULL)
--        StoreInst(GetFullMask(), fullMaskPointer);
-+    if (fullMaskPointer != NULL) {
-+        functionMaskValue = value;
-+        if (bblock != NULL)
-+            StoreInst(GetFullMask(), fullMaskPointer);
-+    }
- }
- 
- void FunctionEmitContext::SetBlockEntryMask(llvm::Value *value) { blockEntryMask = value; }
-@@ -410,7 +424,8 @@ void FunctionEmitContext::SetBlockEntryMask(llvm::Value *value) { blockEntryMask
- void FunctionEmitContext::SetInternalMask(llvm::Value *value) {
-     StoreInst(value, internalMaskPointer);
-     // kludge so that __mask returns the right value in ispc code.
--    StoreInst(GetFullMask(), fullMaskPointer);
-+    if (fullMaskPointer)
-+        StoreInst(GetFullMask(), fullMaskPointer);
- }
- 
- void FunctionEmitContext::SetInternalMaskAnd(llvm::Value *oldMask, llvm::Value *test) {
-@@ -1265,7 +1280,7 @@ void FunctionEmitContext::CurrentLanesReturned(Expr *expr, bool doCoherenceCheck
-         // lanes have returned
-         if (doCoherenceCheck) {
-             // if newReturnedLanes == functionMaskValue, get out of here!
--            llvm::Value *cmp = MasksAllEqual(functionMaskValue, newReturnedLanes);
-+            llvm::Value *cmp = MasksAllEqual(GetFunctionMask(), newReturnedLanes);
-             llvm::BasicBlock *bDoReturn = CreateBasicBlock("do_return");
-             llvm::BasicBlock *bNoReturn = CreateBasicBlock("no_return");
-             BranchInst(bDoReturn, bNoReturn, cmp);
-diff --git a/tests/lit-tests/full_mask.ispc b/tests/lit-tests/full_mask.ispc
-new file mode 100644
-index 000000000..ac0b0bca3
---- /dev/null
-+++ b/tests/lit-tests/full_mask.ispc
-@@ -0,0 +1,63 @@
-+// RUN: %{ispc} %s -DISPC_EXPORT --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_EXPORT %s
-+
-+// RUN: %{ispc} %s -DISPC_UNMASKED --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_UNMASKED %s
-+
-+// RUN: %{ispc} %s -DISPC_NOQUALIF --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_NOQUALIF %s
-+
-+// RUN: %{ispc} %s -DISPC_TASK --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_TASK %s
-+
-+struct Parameters {
-+    float *vout;
-+    int param;
-+};
-+
-+#ifdef ISPC_EXPORT
-+// CHECK_ISPC_EXPORT: define void @simple_export___
-+// CHECK_ISPC_EXPORT: %full_mask_memory = alloca
-+// CHECK_ISPC_EXPORT: define void @simple_export(
-+// CHECK_ISPC_EXPORT-NOT: %full_mask_memory = alloca
-+export void simple_export(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_UNMASKED
-+// CHECK_ISPC_UNMASKED: define void @simple_unmasked
-+// CHECK_ISPC_UNMASKED-NOT: %full_mask_memory = alloca
-+unmasked void simple_unmasked(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_NOQUALIF
-+// CHECK_ISPC_NOQUALIF: define void @simple
-+// CHECK_ISPC_NOQUALIF: %full_mask_memory = alloca
-+void simple(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_TASK
-+
-+// CHECK_ISPC_TASK: define void @simple_task
-+// CHECK_ISPC_TASK-NOT: %full_mask_memory = alloca
-+// CHECK_ISPC_TASK: define void @simple_entry_point__
-+// CHECK_ISPC_TASK: %full_mask_memory = alloca
-+// CHECK_ISPC_TASK: define void @simple_entry_point(
-+// CHECK_ISPC_TASK-NOT: %full_mask_memory = alloca
-+task void simple_task(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+export void simple_entry_point(void *uniform parameters, uniform int dim0, uniform int dim1, uniform int dim2) {
-+    launch[dim0, dim1, dim2] simple_task(parameters);
-+}
-+#endif
-\ No newline at end of file
diff --git a/srcpkgs/ispc/patches/llvm12-008.patch b/srcpkgs/ispc/patches/llvm12-008.patch
deleted file mode 100644
index c8413d8b7887..000000000000
--- a/srcpkgs/ispc/patches/llvm12-008.patch
+++ /dev/null
@@ -1,149 +0,0 @@
-From afad14227d9204a3c8a626ca608f5b43c3218fe9 Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 4 May 2021 11:43:52 -0700
-Subject: [PATCH] Fixed ISPC gen build for LLVM12
-
----
- src/ctx.cpp |  4 ++++
- src/opt.cpp | 43 +++++++++++++++++++++++++++++--------------
- 2 files changed, 33 insertions(+), 14 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 0c7050591..f7dc06939 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -3738,7 +3738,11 @@ llvm::Value *FunctionEmitContext::GenXSimdCFAny(llvm::Value *value) {
- 
- llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::Value *defaults) {
-     AssertPos(currentPos, llvm::isa<llvm::VectorType>(value->getType()));
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    llvm::FixedVectorType *vt = llvm::dyn_cast<llvm::FixedVectorType>(value->getType());
-+#else
-     llvm::VectorType *vt = llvm::dyn_cast<llvm::VectorType>(value->getType());
-+#endif
-     if (defaults == NULL) {
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-diff --git a/src/opt.cpp b/src/opt.cpp
-index cea4afa23..4e33d6b1a 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -2916,9 +2916,13 @@ static llvm::Function *lGenXMaskedInt8Inst(llvm::Instruction *inst, bool isStore
- 
- static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::Instruction *inst) {
-     Assert(g->target->isGenXTarget());
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Assert(llvm::isa<llvm::FixedVectorType>(val->getType()));
-+    llvm::FixedVectorType *valVecType = llvm::dyn_cast<llvm::FixedVectorType>(val->getType());
-+#else
-     Assert(llvm::isa<llvm::VectorType>(val->getType()));
--
-     llvm::VectorType *valVecType = llvm::dyn_cast<llvm::VectorType>(val->getType());
-+#endif
-     Assert(llvm::isPowerOf2_32(valVecType->getNumElements()));
-     Assert(valVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
- 
-@@ -2942,9 +2946,13 @@ static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::
- }
- 
- static llvm::CallInst *lGenXLoadInst(llvm::Value *ptr, llvm::Type *retType, llvm::Instruction *inst) {
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Assert(llvm::isa<llvm::FixedVectorType>(retType));
-+    llvm::FixedVectorType *retVecType = llvm::dyn_cast<llvm::FixedVectorType>(retType);
-+#else
-     Assert(llvm::isa<llvm::VectorType>(retType));
--
-     llvm::VectorType *retVecType = llvm::dyn_cast<llvm::VectorType>(retType);
-+#endif
-     Assert(llvm::isPowerOf2_32(retVecType->getNumElements()));
-     Assert(retVecType->getPrimitiveSizeInBits());
-     Assert(retVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-@@ -5485,8 +5493,13 @@ static void lCreateBlockLDUse(llvm::Instruction *currInst, std::vector<llvm::Ext
-         } else if (auto gather = lGetPseudoGather(llvm::dyn_cast<llvm::Instruction>(ui->getUser()))) {
-             // Collect idxs from gather and fix users
-             llvm::Value *res = llvm::UndefValue::get(gather->getType());
--            for (unsigned i = 0, end = llvm::dyn_cast<llvm::VectorType>(res->getType())->getNumElements(); i < end;
--                 ++i) {
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            for (unsigned i = 0, end = llvm::dyn_cast<llvm::FixedVectorType>(res->getType())->getNumElements(); i < end;
-+                 ++i)
-+#else
-+            for (unsigned i = 0, end = llvm::dyn_cast<llvm::VectorType>(res->getType())->getNumElements(); i < end; ++i)
-+#endif
-+            {
-                 // Get element via IEI
-                 res = llvm::InsertElementInst::Create(res, EEIs[ptrUse.idxs[curr_idx++]],
-                                                       llvm::ConstantInt::get(LLVMTypes::Int32Type, i),
-@@ -5522,10 +5535,11 @@ static bool lVectorizeGEPs(llvm::Value *ptr, std::vector<PtrUse> &ptrUses, std::
- 
-     // Adjust values for vector load
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    if (auto vecTy = llvm::dyn_cast<llvm::FixedVectorType>(type)) {
-+    if (auto vecTy = llvm::dyn_cast<llvm::FixedVectorType>(type))
- #else
--    if (auto vecTy = llvm::dyn_cast<llvm::VectorType>(type)) {
-+    if (auto vecTy = llvm::dyn_cast<llvm::VectorType>(type))
- #endif
-+    {
-         // Get single element size
-         t_size /= vecTy->getNumElements();
-         // Get single element type
-@@ -6477,7 +6491,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-         Offsets,
-         llvm::FixedVectorType::get(LLVMTypes::Int64Type,
--                                   llvm::dyn_cast<llvm::VectorType>(Offsets->getType())->getNumElements()),
-+                                   llvm::dyn_cast<llvm::FixedVectorType>(Offsets->getType())->getNumElements()),
-         "svm_offset_zext", InsertBefore);
- #else
-         Offsets, llvm::VectorType::get(LLVMTypes::Int64Type, Offsets->getType()->getVectorNumElements()),
-@@ -6492,7 +6506,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
-         llvm::Value *undefInsertValue =
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-             llvm::UndefValue::get(llvm::FixedVectorType::get(
--                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements()));
- #else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
- #endif
-@@ -6501,17 +6515,16 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
- #elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
--            {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
-+            {llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements(), false},
- #else
--        llvm::ElementCount::get(
--                                llvm::dyn_cast<llvm::FixedVectorType>(addressType->getNumElements(), false),
-+            llvm::ElementCount::get(llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements(), false),
- #endif
-             llvm::Constant::getNullValue(llvm::Type::getInt32Ty(InsertBefore->getContext())));
- 
-         llvm::Value *undefShuffleValue =
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-             llvm::UndefValue::get(llvm::FixedVectorType::get(
--                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements()));
- #else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
- #endif
-@@ -6542,7 +6555,8 @@ llvm::Instruction *FixAddressSpace::processVectorLoad(llvm::LoadInst *LI) {
-         isPtrLoad = true;
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--        retType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(retType)->getNumElements());
-+        retType =
-+            llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::FixedVectorType>(retType)->getNumElements());
- #else
-         retType = llvm::VectorType::get(scalarType, retType->getVectorNumElements());
- #endif
-@@ -6604,7 +6618,8 @@ llvm::Instruction *FixAddressSpace::processVectorStore(llvm::StoreInst *SI) {
-     if (valType->getScalarType()->isPointerTy()) {
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--        valType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(valType)->getNumElements());
-+        valType =
-+            llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::FixedVectorType>(valType)->getNumElements());
- #else
-         valType = llvm::VectorType::get(scalarType, valType->getVectorNumElements());
- #endif
diff --git a/srcpkgs/ispc/patches/llvm12-009.patch b/srcpkgs/ispc/patches/llvm12-009.patch
deleted file mode 100644
index d3ea67828582..000000000000
--- a/srcpkgs/ispc/patches/llvm12-009.patch
+++ /dev/null
@@ -1,2109 +0,0 @@
-From 97b13c32132e2704a5e3e7b2eae49d854d087e3e Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 4 May 2021 11:31:55 -0700
-Subject: [PATCH] Updated builtins-cm* for switch to LLVM12
-
----
- builtins/builtins-cm-32.ll | 234 ++++++++++++++++++-------------------
- builtins/builtins-cm-64.ll | 232 ++++++++++++++++++------------------
- 2 files changed, 233 insertions(+), 233 deletions(-)
-
-diff --git a/builtins/builtins-cm-32.ll b/builtins/builtins-cm-32.ll
-index 32debf32e..481bbdc48 100644
---- a/builtins/builtins-cm-32.ll
-+++ b/builtins/builtins-cm-32.ll
-@@ -557,7 +557,7 @@ $_ZN13VaryingWriter12WriteVecElemIPvEEvv = comdat any
- @.str.10 = private unnamed_addr constant [5 x i8] c"%08X\00", align 1
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -618,7 +618,7 @@ define internal <1 x i8> @_ZN7details13__impl_divremILi1EEEu2CMvbT__cS1_S1_u2CMv
- declare <1 x i8> @llvm.genx.rdregioni.v1i8.v1i8.i16(<1 x i8>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -634,7 +634,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -680,7 +680,7 @@ define internal <2 x i8> @_ZN7details13__impl_divremILi2EEEu2CMvbT__cS1_S1_u2CMv
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -818,7 +818,7 @@ define internal <16 x i8> @_ZN7details13__impl_divremILi16EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -864,7 +864,7 @@ define internal <32 x i8> @_ZN7details13__impl_divremILi32EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -890,7 +890,7 @@ define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -904,7 +904,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -918,7 +918,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -932,7 +932,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -946,7 +946,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -960,7 +960,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -974,7 +974,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1058,7 +1058,7 @@ define internal <1 x i16> @_ZN7details13__impl_divremILi1EEEu2CMvbT__sS1_S1_u2CM
- declare <1 x i16> @llvm.genx.rdregioni.v1i16.v1i16.i16(<1 x i16>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1074,7 +1074,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1143,7 +1143,7 @@ define internal <2 x i16> @_ZN7details13__impl_divremILi2EEEu2CMvbT__sS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1350,7 +1350,7 @@ define internal <16 x i16> @_ZN7details13__impl_divremILi16EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1419,7 +1419,7 @@ define internal <32 x i16> @_ZN7details13__impl_divremILi32EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1445,7 +1445,7 @@ define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 si
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1459,7 +1459,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1473,7 +1473,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1487,7 +1487,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -1501,7 +1501,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -1515,7 +1515,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1529,7 +1529,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1730,7 +1730,7 @@ define internal <1 x i32> @_ZN7details13__impl_divremILi1EEEu2CMvbT__iS1_S1_u2CM
- declare <1 x i32> @llvm.genx.rdregioni.v1i32.v1i32.i16(<1 x i32>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1746,7 +1746,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -1932,7 +1932,7 @@ define internal <2 x i32> @_ZN7details13__impl_divremILi2EEEu2CMvbT__iS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2490,7 +2490,7 @@ define internal <16 x i32> @_ZN7details13__impl_divremILi16EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2676,7 +2676,7 @@ define internal <32 x i32> @_ZN7details13__impl_divremILi32EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2702,7 +2702,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2716,7 +2716,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -2730,7 +2730,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2744,7 +2744,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -2758,7 +2758,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -2772,7 +2772,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2786,7 +2786,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2844,7 +2844,7 @@ define internal <1 x i8> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2860,7 +2860,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -2906,7 +2906,7 @@ define internal <2 x i8> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3044,7 +3044,7 @@ define internal <16 x i8> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3090,7 +3090,7 @@ define internal <32 x i8> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3116,7 +3116,7 @@ define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3130,7 +3130,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -3144,7 +3144,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3158,7 +3158,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -3172,7 +3172,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -3186,7 +3186,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3200,7 +3200,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3278,7 +3278,7 @@ define internal <1 x i16> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3294,7 +3294,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3360,7 +3360,7 @@ define internal <2 x i16> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3558,7 +3558,7 @@ define internal <16 x i16> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3624,7 +3624,7 @@ define internal <32 x i16> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3650,7 +3650,7 @@ define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 ze
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3664,7 +3664,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3678,7 +3678,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3692,7 +3692,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -3706,7 +3706,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -3720,7 +3720,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3734,7 +3734,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3892,7 +3892,7 @@ define internal <1 x i32> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3908,7 +3908,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4054,7 +4054,7 @@ define internal <2 x i32> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4492,7 +4492,7 @@ define internal <16 x i32> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4638,7 +4638,7 @@ define internal <32 x i32> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4664,7 +4664,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4678,7 +4678,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4692,7 +4692,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4706,7 +4706,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -4720,7 +4720,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -4734,7 +4734,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4748,7 +4748,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-+define internal void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-   %8 = alloca i8*, align 4
-   %9 = alloca i8*, align 4
-   %10 = alloca i32, align 4
-@@ -4988,7 +4988,7 @@ define internal void @_ZN7details16_cm_print_formatILi128EEEv15cm_surfaceindexju
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i32) #26 !dbg !117 {
-+define internal void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i32) #26 !dbg !117 {
-   %10 = alloca i32, align 4
-   %11 = alloca i8*, align 4
-   %12 = alloca i32, align 4
-@@ -5069,7 +5069,7 @@ define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i3
-   %67 = load i64, i64* %13, align 8, !dbg !159, !tbaa !19
-   %68 = load <5 x i32>, <5 x i32>* %21, align 32, !dbg !160, !tbaa !7
-   call void @_ZN13VaryingWriterC2ERjRPKjiyu2CMvb5_i(%class.VaryingWriter* %23, i32* dereferenceable(4) %19, i32** dereferenceable(4) %14, i32 %66, i64 %67, <5 x i32> %68), !dbg !161
--  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval align 32 %22, %class.VaryingWriter* byval align 32 %23), !dbg !162
-+  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval(%class.UniformWriter) align 32 %22, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %23), !dbg !162
-   br label %70, !dbg !163
- 
- ; <label>:70:                                     ; preds = %60
-@@ -5187,7 +5187,7 @@ define internal <5 x i32> @_Z17get_auxiliary_strv() #28 comdat !dbg !178 {
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %class.VaryingWriter* byval align 32) #25 comdat !dbg !191 {
-+define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !191 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %class.VaryingWriter, align 32
-@@ -5196,7 +5196,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %8 = bitcast %class.UniformWriter* %5 to i8*, !dbg !196
-   %9 = bitcast %class.UniformWriter* %1 to i8*, !dbg !196
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %8, i8* align 32 %9, i32 64, i1 false), !dbg !196, !tbaa.struct !197
--  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval align 32 %5), !dbg !198
-+  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5), !dbg !198
-   br i1 %10, label %16, label %11, !dbg !199
- 
- ; <label>:11:                                     ; preds = %3
-@@ -5204,7 +5204,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %13 = bitcast %class.VaryingWriter* %6 to i8*, !dbg !201
-   %14 = bitcast %class.VaryingWriter* %2 to i8*, !dbg !201
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %13, i8* align 32 %14, i32 64, i1 false), !dbg !201, !tbaa.struct !197
--  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval align 32 %6), !dbg !202
-+  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %6), !dbg !202
-   br label %16, !dbg !199
- 
- ; <label>:16:                                     ; preds = %11, %3
-@@ -5279,7 +5279,7 @@ define internal void @_ZN13VaryingWriterC2ERjRPKjiyu2CMvb5_i(%class.VaryingWrite
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @__num_cores() #29 !dbg !236 {
-+define internal i32 @__num_cores() #29 !dbg !236 {
-   ret i32 -1, !dbg !237
- }
- 
-@@ -8860,7 +8860,7 @@ declare dso_local void @_ZN7details37__cm_intrinsic_impl_svm_scatter_writeIiLi1E
- declare void @llvm.genx.svm.scatter.v1i1.v1i64.v1i32(<1 x i1>, i32, <1 x i64>, <1 x i32>) #27
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval align 32) #25 comdat !dbg !1645 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32) #25 comdat !dbg !1645 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.UniformWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8869,7 +8869,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
-   %7 = bitcast %class.UniformWriter* %4 to i8*, !dbg !1647
-   %8 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1647
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %7, i8* align 32 %8, i32 64, i1 false), !dbg !1647, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %5), !dbg !1648
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval(%class.UniformWriter) align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %5), !dbg !1648
-   ret i1 %9, !dbg !1649
- }
- 
-@@ -8877,7 +8877,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
- declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture readonly, i32, i1) #32
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval align 32) #25 comdat !dbg !1650 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !1650 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.VaryingWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -8886,12 +8886,12 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWrite
-   %7 = bitcast %class.VaryingWriter* %4 to i8*, !dbg !1652
-   %8 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !1652
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %7, i8* align 32 %8, i32 64, i1 false), !dbg !1652, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %5), !dbg !1653
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %5), !dbg !1653
-   ret i1 %9, !dbg !1654
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1655 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1655 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8914,7 +8914,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %22 = bitcast %class.UniformWriter* %5 to i8*, !dbg !1657
-   %23 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1657
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %22, i8* align 32 %23, i32 64, i1 false), !dbg !1657, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %6), !dbg !1658
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %6), !dbg !1658
-   br i1 %24, label %60, label %25, !dbg !1659
- 
- ; <label>:25:                                     ; preds = %3
-@@ -8922,7 +8922,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %27 = bitcast %class.UniformWriter* %7 to i8*, !dbg !1661
-   %28 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1661
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %27, i8* align 32 %28, i32 64, i1 false), !dbg !1661, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %8), !dbg !1662
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval(%class.UniformWriter) align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %8), !dbg !1662
-   br i1 %29, label %60, label %30, !dbg !1663
- 
- ; <label>:30:                                     ; preds = %25
-@@ -8930,7 +8930,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %32 = bitcast %class.UniformWriter* %9 to i8*, !dbg !1665
-   %33 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1665
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %32, i8* align 32 %33, i32 64, i1 false), !dbg !1665, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %10), !dbg !1666
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval(%class.UniformWriter) align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %10), !dbg !1666
-   br i1 %34, label %60, label %35, !dbg !1667
- 
- ; <label>:35:                                     ; preds = %30
-@@ -8938,7 +8938,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %37 = bitcast %class.UniformWriter* %11 to i8*, !dbg !1669
-   %38 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1669
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %37, i8* align 32 %38, i32 64, i1 false), !dbg !1669, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %12), !dbg !1670
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval(%class.UniformWriter) align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %12), !dbg !1670
-   br i1 %39, label %60, label %40, !dbg !1671
- 
- ; <label>:40:                                     ; preds = %35
-@@ -8946,7 +8946,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %42 = bitcast %class.UniformWriter* %13 to i8*, !dbg !1673
-   %43 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1673
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %42, i8* align 32 %43, i32 64, i1 false), !dbg !1673, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %14), !dbg !1674
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval(%class.UniformWriter) align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %14), !dbg !1674
-   br i1 %44, label %60, label %45, !dbg !1675
- 
- ; <label>:45:                                     ; preds = %40
-@@ -8954,7 +8954,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %47 = bitcast %class.UniformWriter* %15 to i8*, !dbg !1677
-   %48 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1677
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %47, i8* align 32 %48, i32 64, i1 false), !dbg !1677, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %16), !dbg !1678
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval(%class.UniformWriter) align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %16), !dbg !1678
-   br i1 %49, label %60, label %50, !dbg !1679
- 
- ; <label>:50:                                     ; preds = %45
-@@ -8962,7 +8962,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %52 = bitcast %class.UniformWriter* %17 to i8*, !dbg !1681
-   %53 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1681
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %52, i8* align 32 %53, i32 64, i1 false), !dbg !1681, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %18), !dbg !1682
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval(%class.UniformWriter) align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %18), !dbg !1682
-   br i1 %54, label %60, label %55, !dbg !1683
- 
- ; <label>:55:                                     ; preds = %50
-@@ -8970,7 +8970,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %57 = bitcast %class.UniformWriter* %19 to i8*, !dbg !1685
-   %58 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1685
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %57, i8* align 32 %58, i32 64, i1 false), !dbg !1685, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %20), !dbg !1686
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval(%class.UniformWriter) align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %20), !dbg !1686
-   br label %60, !dbg !1683
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -8979,7 +8979,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1688 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1688 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9005,7 +9005,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1697 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1697 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9031,7 +9031,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1706 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1706 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9057,7 +9057,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1715 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1715 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9083,7 +9083,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1724 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1724 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9109,7 +9109,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1733 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1733 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9135,7 +9135,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1742 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1742 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9161,7 +9161,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1751 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1751 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9984,7 +9984,7 @@ define internal i32 @_ZN7details18_cm_print_type_oclIPvEENS_18SHADER_PRINTF_TYPE
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2055 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2055 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.VaryingWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -10007,7 +10007,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %22 = bitcast %class.VaryingWriter* %5 to i8*, !dbg !2057
-   %23 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2057
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %22, i8* align 32 %23, i32 64, i1 false), !dbg !2057, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %6), !dbg !2058
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %6), !dbg !2058
-   br i1 %24, label %60, label %25, !dbg !2059
- 
- ; <label>:25:                                     ; preds = %3
-@@ -10015,7 +10015,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %27 = bitcast %class.VaryingWriter* %7 to i8*, !dbg !2061
-   %28 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2061
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %27, i8* align 32 %28, i32 64, i1 false), !dbg !2061, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %8), !dbg !2062
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %8), !dbg !2062
-   br i1 %29, label %60, label %30, !dbg !2063
- 
- ; <label>:30:                                     ; preds = %25
-@@ -10023,7 +10023,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %32 = bitcast %class.VaryingWriter* %9 to i8*, !dbg !2065
-   %33 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2065
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %32, i8* align 32 %33, i32 64, i1 false), !dbg !2065, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %10), !dbg !2066
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %10), !dbg !2066
-   br i1 %34, label %60, label %35, !dbg !2067
- 
- ; <label>:35:                                     ; preds = %30
-@@ -10031,7 +10031,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %37 = bitcast %class.VaryingWriter* %11 to i8*, !dbg !2069
-   %38 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2069
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %37, i8* align 32 %38, i32 64, i1 false), !dbg !2069, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %12), !dbg !2070
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %12), !dbg !2070
-   br i1 %39, label %60, label %40, !dbg !2071
- 
- ; <label>:40:                                     ; preds = %35
-@@ -10039,7 +10039,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %42 = bitcast %class.VaryingWriter* %13 to i8*, !dbg !2073
-   %43 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2073
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %42, i8* align 32 %43, i32 64, i1 false), !dbg !2073, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %14), !dbg !2074
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %14), !dbg !2074
-   br i1 %44, label %60, label %45, !dbg !2075
- 
- ; <label>:45:                                     ; preds = %40
-@@ -10047,7 +10047,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %47 = bitcast %class.VaryingWriter* %15 to i8*, !dbg !2077
-   %48 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2077
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %47, i8* align 32 %48, i32 64, i1 false), !dbg !2077, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %16), !dbg !2078
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %16), !dbg !2078
-   br i1 %49, label %60, label %50, !dbg !2079
- 
- ; <label>:50:                                     ; preds = %45
-@@ -10055,7 +10055,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %52 = bitcast %class.VaryingWriter* %17 to i8*, !dbg !2081
-   %53 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2081
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %52, i8* align 32 %53, i32 64, i1 false), !dbg !2081, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %18), !dbg !2082
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %18), !dbg !2082
-   br i1 %54, label %60, label %55, !dbg !2083
- 
- ; <label>:55:                                     ; preds = %50
-@@ -10063,7 +10063,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %57 = bitcast %class.VaryingWriter* %19 to i8*, !dbg !2085
-   %58 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2085
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %57, i8* align 32 %58, i32 64, i1 false), !dbg !2085, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %20), !dbg !2086
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %20), !dbg !2086
-   br label %60, !dbg !2083
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -10072,7 +10072,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2088 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2088 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10098,7 +10098,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2097 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2097 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10124,7 +10124,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2106 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2106 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10150,7 +10150,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2115 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2115 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10176,7 +10176,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2124 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2124 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10202,7 +10202,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2133 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2133 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10228,7 +10228,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2142 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2142 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10254,7 +10254,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2151 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2151 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-diff --git a/builtins/builtins-cm-64.ll b/builtins/builtins-cm-64.ll
-index 39a2dd8be..375d01bed 100644
---- a/builtins/builtins-cm-64.ll
-+++ b/builtins/builtins-cm-64.ll
-@@ -557,7 +557,7 @@ $_ZN13VaryingWriter12WriteVecElemIPvEEvv = comdat any
- @.str.10 = private unnamed_addr constant [8 x i8] c"%016llX\00", align 1
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -618,7 +618,7 @@ define internal <1 x i8> @_ZN7details13__impl_divremILi1EEEu2CMvbT__cS1_S1_u2CMv
- declare <1 x i8> @llvm.genx.rdregioni.v1i8.v1i8.i16(<1 x i8>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -634,7 +634,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -680,7 +680,7 @@ define internal <2 x i8> @_ZN7details13__impl_divremILi2EEEu2CMvbT__cS1_S1_u2CMv
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -818,7 +818,7 @@ define internal <16 x i8> @_ZN7details13__impl_divremILi16EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -864,7 +864,7 @@ define internal <32 x i8> @_ZN7details13__impl_divremILi32EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -890,7 +890,7 @@ define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -904,7 +904,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -918,7 +918,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -932,7 +932,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -946,7 +946,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -960,7 +960,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -974,7 +974,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1058,7 +1058,7 @@ define internal <1 x i16> @_ZN7details13__impl_divremILi1EEEu2CMvbT__sS1_S1_u2CM
- declare <1 x i16> @llvm.genx.rdregioni.v1i16.v1i16.i16(<1 x i16>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1074,7 +1074,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1143,7 +1143,7 @@ define internal <2 x i16> @_ZN7details13__impl_divremILi2EEEu2CMvbT__sS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1350,7 +1350,7 @@ define internal <16 x i16> @_ZN7details13__impl_divremILi16EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1419,7 +1419,7 @@ define internal <32 x i16> @_ZN7details13__impl_divremILi32EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1445,7 +1445,7 @@ define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 si
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1459,7 +1459,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1473,7 +1473,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1487,7 +1487,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -1501,7 +1501,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -1515,7 +1515,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1529,7 +1529,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1730,7 +1730,7 @@ define internal <1 x i32> @_ZN7details13__impl_divremILi1EEEu2CMvbT__iS1_S1_u2CM
- declare <1 x i32> @llvm.genx.rdregioni.v1i32.v1i32.i16(<1 x i32>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1746,7 +1746,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -1932,7 +1932,7 @@ define internal <2 x i32> @_ZN7details13__impl_divremILi2EEEu2CMvbT__iS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2490,7 +2490,7 @@ define internal <16 x i32> @_ZN7details13__impl_divremILi16EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2676,7 +2676,7 @@ define internal <32 x i32> @_ZN7details13__impl_divremILi32EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2702,7 +2702,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2716,7 +2716,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -2730,7 +2730,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2744,7 +2744,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -2758,7 +2758,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -2772,7 +2772,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2786,7 +2786,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2844,7 +2844,7 @@ define internal <1 x i8> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2860,7 +2860,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -2906,7 +2906,7 @@ define internal <2 x i8> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3044,7 +3044,7 @@ define internal <16 x i8> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3090,7 +3090,7 @@ define internal <32 x i8> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3116,7 +3116,7 @@ define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3130,7 +3130,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -3144,7 +3144,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3158,7 +3158,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -3172,7 +3172,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -3186,7 +3186,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3200,7 +3200,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3278,7 +3278,7 @@ define internal <1 x i16> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3294,7 +3294,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3360,7 +3360,7 @@ define internal <2 x i16> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3558,7 +3558,7 @@ define internal <16 x i16> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3624,7 +3624,7 @@ define internal <32 x i16> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3650,7 +3650,7 @@ define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 ze
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3664,7 +3664,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3678,7 +3678,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3692,7 +3692,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -3706,7 +3706,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -3720,7 +3720,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3734,7 +3734,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3892,7 +3892,7 @@ define internal <1 x i32> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3908,7 +3908,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4054,7 +4054,7 @@ define internal <2 x i32> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4492,7 +4492,7 @@ define internal <16 x i32> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4638,7 +4638,7 @@ define internal <32 x i32> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4664,7 +4664,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4678,7 +4678,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4692,7 +4692,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4706,7 +4706,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -4720,7 +4720,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -4734,7 +4734,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4748,7 +4748,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-+define internal void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-   %8 = alloca i8*, align 8
-   %9 = alloca i8*, align 8
-   %10 = alloca i32, align 4
-@@ -5070,7 +5070,7 @@ define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i3
-   %67 = load i64, i64* %13, align 8, !dbg !159, !tbaa !19
-   %68 = load <5 x i32>, <5 x i32>* %21, align 32, !dbg !160, !tbaa !7
-   call void @_ZN13VaryingWriterC2ERyRPKjiyu2CMvb5_i(%class.VaryingWriter* %23, i64* dereferenceable(8) %19, i32** dereferenceable(8) %14, i32 %66, i64 %67, <5 x i32> %68), !dbg !161
--  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval align 32 %22, %class.VaryingWriter* byval align 32 %23), !dbg !162
-+  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval(%class.UniformWriter) align 32 %22, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %23), !dbg !162
-   br label %70, !dbg !163
- 
- ; <label>:70:                                     ; preds = %60
-@@ -5188,7 +5188,7 @@ define internal <5 x i32> @_Z17get_auxiliary_strv() #28 comdat !dbg !178 {
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %class.VaryingWriter* byval align 32) #25 comdat !dbg !191 {
-+define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !191 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %class.VaryingWriter, align 32
-@@ -5197,7 +5197,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %8 = bitcast %class.UniformWriter* %5 to i8*, !dbg !196
-   %9 = bitcast %class.UniformWriter* %1 to i8*, !dbg !196
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %8, i8* align 32 %9, i64 64, i1 false), !dbg !196, !tbaa.struct !197
--  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval align 32 %5), !dbg !198
-+  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5), !dbg !198
-   br i1 %10, label %16, label %11, !dbg !199
- 
- ; <label>:11:                                     ; preds = %3
-@@ -5205,7 +5205,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %13 = bitcast %class.VaryingWriter* %6 to i8*, !dbg !201
-   %14 = bitcast %class.VaryingWriter* %2 to i8*, !dbg !201
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %13, i8* align 32 %14, i64 64, i1 false), !dbg !201, !tbaa.struct !197
--  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval align 32 %6), !dbg !202
-+  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %6), !dbg !202
-   br label %16, !dbg !199
- 
- ; <label>:16:                                     ; preds = %11, %3
-@@ -5280,7 +5280,7 @@ define internal void @_ZN13VaryingWriterC2ERyRPKjiyu2CMvb5_i(%class.VaryingWrite
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @__num_cores() #29 !dbg !236 {
-+define internal i32 @__num_cores() #29 !dbg !236 {
-   ret i32 -1, !dbg !237
- }
- 
-@@ -8870,7 +8870,7 @@ declare dso_local void @_ZN7details37__cm_intrinsic_impl_svm_scatter_writeIiLi1E
- declare void @llvm.genx.svm.scatter.v1i1.v1i64.v1i32(<1 x i1>, i32, <1 x i64>, <1 x i32>) #27
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval align 32) #25 comdat !dbg !1645 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32) #25 comdat !dbg !1645 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.UniformWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8879,7 +8879,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
-   %7 = bitcast %class.UniformWriter* %4 to i8*, !dbg !1647
-   %8 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1647
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %7, i8* align 32 %8, i64 64, i1 false), !dbg !1647, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %5), !dbg !1648
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval(%class.UniformWriter) align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %5), !dbg !1648
-   ret i1 %9, !dbg !1649
- }
- 
-@@ -8887,7 +8887,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
- declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1) #32
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval align 32) #25 comdat !dbg !1650 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !1650 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.VaryingWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -8896,12 +8896,12 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWrite
-   %7 = bitcast %class.VaryingWriter* %4 to i8*, !dbg !1652
-   %8 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !1652
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %7, i8* align 32 %8, i64 64, i1 false), !dbg !1652, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %5), !dbg !1653
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %5), !dbg !1653
-   ret i1 %9, !dbg !1654
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1655 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1655 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8924,7 +8924,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %22 = bitcast %class.UniformWriter* %5 to i8*, !dbg !1657
-   %23 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1657
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %22, i8* align 32 %23, i64 64, i1 false), !dbg !1657, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %6), !dbg !1658
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %6), !dbg !1658
-   br i1 %24, label %60, label %25, !dbg !1659
- 
- ; <label>:25:                                     ; preds = %3
-@@ -8932,7 +8932,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %27 = bitcast %class.UniformWriter* %7 to i8*, !dbg !1661
-   %28 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1661
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %27, i8* align 32 %28, i64 64, i1 false), !dbg !1661, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %8), !dbg !1662
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval(%class.UniformWriter) align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %8), !dbg !1662
-   br i1 %29, label %60, label %30, !dbg !1663
- 
- ; <label>:30:                                     ; preds = %25
-@@ -8940,7 +8940,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %32 = bitcast %class.UniformWriter* %9 to i8*, !dbg !1665
-   %33 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1665
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %32, i8* align 32 %33, i64 64, i1 false), !dbg !1665, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %10), !dbg !1666
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval(%class.UniformWriter) align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %10), !dbg !1666
-   br i1 %34, label %60, label %35, !dbg !1667
- 
- ; <label>:35:                                     ; preds = %30
-@@ -8948,7 +8948,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %37 = bitcast %class.UniformWriter* %11 to i8*, !dbg !1669
-   %38 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1669
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %37, i8* align 32 %38, i64 64, i1 false), !dbg !1669, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %12), !dbg !1670
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval(%class.UniformWriter) align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %12), !dbg !1670
-   br i1 %39, label %60, label %40, !dbg !1671
- 
- ; <label>:40:                                     ; preds = %35
-@@ -8956,7 +8956,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %42 = bitcast %class.UniformWriter* %13 to i8*, !dbg !1673
-   %43 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1673
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %42, i8* align 32 %43, i64 64, i1 false), !dbg !1673, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %14), !dbg !1674
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval(%class.UniformWriter) align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %14), !dbg !1674
-   br i1 %44, label %60, label %45, !dbg !1675
- 
- ; <label>:45:                                     ; preds = %40
-@@ -8964,7 +8964,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %47 = bitcast %class.UniformWriter* %15 to i8*, !dbg !1677
-   %48 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1677
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %47, i8* align 32 %48, i64 64, i1 false), !dbg !1677, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %16), !dbg !1678
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval(%class.UniformWriter) align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %16), !dbg !1678
-   br i1 %49, label %60, label %50, !dbg !1679
- 
- ; <label>:50:                                     ; preds = %45
-@@ -8972,7 +8972,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %52 = bitcast %class.UniformWriter* %17 to i8*, !dbg !1681
-   %53 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1681
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %52, i8* align 32 %53, i64 64, i1 false), !dbg !1681, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %18), !dbg !1682
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval(%class.UniformWriter) align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %18), !dbg !1682
-   br i1 %54, label %60, label %55, !dbg !1683
- 
- ; <label>:55:                                     ; preds = %50
-@@ -8980,7 +8980,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %57 = bitcast %class.UniformWriter* %19 to i8*, !dbg !1685
-   %58 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1685
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %57, i8* align 32 %58, i64 64, i1 false), !dbg !1685, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %20), !dbg !1686
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval(%class.UniformWriter) align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %20), !dbg !1686
-   br label %60, !dbg !1683
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -8989,7 +8989,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1688 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1688 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9015,7 +9015,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1697 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1697 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9041,7 +9041,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1706 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1706 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9067,7 +9067,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1715 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1715 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9093,7 +9093,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1724 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1724 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9119,7 +9119,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1733 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1733 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9145,7 +9145,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1742 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1742 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9171,7 +9171,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1751 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1751 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10013,7 +10013,7 @@ define internal i32 @_ZN7details18_cm_print_type_oclIPvEENS_18SHADER_PRINTF_TYPE
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2061 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2061 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.VaryingWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -10036,7 +10036,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %22 = bitcast %class.VaryingWriter* %5 to i8*, !dbg !2063
-   %23 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2063
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %22, i8* align 32 %23, i64 64, i1 false), !dbg !2063, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %6), !dbg !2064
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %6), !dbg !2064
-   br i1 %24, label %60, label %25, !dbg !2065
- 
- ; <label>:25:                                     ; preds = %3
-@@ -10044,7 +10044,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %27 = bitcast %class.VaryingWriter* %7 to i8*, !dbg !2067
-   %28 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2067
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %27, i8* align 32 %28, i64 64, i1 false), !dbg !2067, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %8), !dbg !2068
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %8), !dbg !2068
-   br i1 %29, label %60, label %30, !dbg !2069
- 
- ; <label>:30:                                     ; preds = %25
-@@ -10052,7 +10052,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %32 = bitcast %class.VaryingWriter* %9 to i8*, !dbg !2071
-   %33 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2071
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %32, i8* align 32 %33, i64 64, i1 false), !dbg !2071, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %10), !dbg !2072
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %10), !dbg !2072
-   br i1 %34, label %60, label %35, !dbg !2073
- 
- ; <label>:35:                                     ; preds = %30
-@@ -10060,7 +10060,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %37 = bitcast %class.VaryingWriter* %11 to i8*, !dbg !2075
-   %38 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2075
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %37, i8* align 32 %38, i64 64, i1 false), !dbg !2075, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %12), !dbg !2076
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %12), !dbg !2076
-   br i1 %39, label %60, label %40, !dbg !2077
- 
- ; <label>:40:                                     ; preds = %35
-@@ -10068,7 +10068,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %42 = bitcast %class.VaryingWriter* %13 to i8*, !dbg !2079
-   %43 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2079
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %42, i8* align 32 %43, i64 64, i1 false), !dbg !2079, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %14), !dbg !2080
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %14), !dbg !2080
-   br i1 %44, label %60, label %45, !dbg !2081
- 
- ; <label>:45:                                     ; preds = %40
-@@ -10076,7 +10076,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %47 = bitcast %class.VaryingWriter* %15 to i8*, !dbg !2083
-   %48 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2083
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %47, i8* align 32 %48, i64 64, i1 false), !dbg !2083, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %16), !dbg !2084
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %16), !dbg !2084
-   br i1 %49, label %60, label %50, !dbg !2085
- 
- ; <label>:50:                                     ; preds = %45
-@@ -10084,7 +10084,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %52 = bitcast %class.VaryingWriter* %17 to i8*, !dbg !2087
-   %53 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2087
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %52, i8* align 32 %53, i64 64, i1 false), !dbg !2087, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %18), !dbg !2088
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %18), !dbg !2088
-   br i1 %54, label %60, label %55, !dbg !2089
- 
- ; <label>:55:                                     ; preds = %50
-@@ -10092,7 +10092,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %57 = bitcast %class.VaryingWriter* %19 to i8*, !dbg !2091
-   %58 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2091
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %57, i8* align 32 %58, i64 64, i1 false), !dbg !2091, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %20), !dbg !2092
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %20), !dbg !2092
-   br label %60, !dbg !2089
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -10101,7 +10101,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2094 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2094 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10127,7 +10127,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2103 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2103 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10153,7 +10153,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2112 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2112 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10179,7 +10179,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2121 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2121 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10205,7 +10205,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2130 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2130 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10231,7 +10231,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2139 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2139 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10257,7 +10257,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2148 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2148 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10283,7 +10283,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2157 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2157 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
diff --git a/srcpkgs/ispc/template b/srcpkgs/ispc/template
index 9c3acb42a9cf..3a85ff2605af 100644
--- a/srcpkgs/ispc/template
+++ b/srcpkgs/ispc/template
@@ -1,7 +1,7 @@
 # Template file for 'ispc'
 pkgname=ispc
-version=1.15.0
-revision=2
+version=1.17.0
+revision=1
 archs="x86_64*"
 build_style=cmake
 configure_args="-DISPC_NO_DUMPS=ON -DARM_ENABLED=OFF"
@@ -12,7 +12,7 @@ maintainer="Andrea Brancaleoni <abc@pompel.me>"
 license="BSD-3-Clause"
 homepage="https://ispc.github.io"
 distfiles="https://github.com/ispc/ispc/archive/v${version}.tar.gz"
-checksum=2658ff00dc045ac9fcefbf6bd26dffaf723b059a942a27df91bbb61bc503a285
+checksum=37fb1055d6c6b232e112d8d50145d726824ed4d8da93a7396315dceba6c76e62
 nocross=yes
 nopie=yes
 

From 10a88bd0ffd79badb198e4ab66db1f7edef2db44 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Tue, 3 May 2022 01:20:03 +0200
Subject: [PATCH 27/29] llvm14: switch to runtimes build.

https://reviews.llvm.org/rGac7031b2b2fa
https://reviews.llvm.org/D110338#3022952
---
 srcpkgs/llvm14/template | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
index 3e7e6ab2c00b..e731aa76130a 100644
--- a/srcpkgs/llvm14/template
+++ b/srcpkgs/llvm14/template
@@ -51,7 +51,8 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
-_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
+_enabled_projects="clang;clang-tools-extra;lld"
+_enabled_runtimes="compiler-rt;libcxx;libcxxabi;libunwind"
 
 _lldb_enable=yes
 _libomp_enable=no
@@ -67,9 +68,8 @@ esac
 
 subpackages="clang-tools-extra"
 
-# must go before clang
 if [ "$_libomp_enable" = "yes" ]; then
-	_enabled_projects+=";openmp"
+	_enabled_runtimes+=";openmp"
 	subpackages+=" libomp libomp-devel"
 	# because of cmake nonsense referencing libomptarget.so.*
 	depends+=" libomp>=${version}_${revision}"
@@ -88,6 +88,7 @@ fi
 subpackages+=" lld lld-devel"
 
 configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+configure_args+=" -DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}"
 
 post_patch() {
 	if [ "$_lldb_enable" = "yes" ]; then
@@ -156,7 +157,8 @@ pre_configure() {
 		CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
 			CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
-			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
+			-DLLVM_ENABLE_PROJECTS=${_enabled_projects} \
+			-DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}
 		make ${makejobs} -C utils/TableGen
 		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen

From 146e8973a3a031fe88de96c429d08996d24b41c7 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 14:07:14 +0200
Subject: [PATCH 28/29] zig: fix build.

---
 srcpkgs/zig/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/zig/template b/srcpkgs/zig/template
index 728c5a64e9df..c175de62c5f7 100644
--- a/srcpkgs/zig/template
+++ b/srcpkgs/zig/template
@@ -5,7 +5,7 @@ revision=2
 archs="x86_64* aarch64*"
 build_style=cmake
 make_cmd=make
-makedepends="clang llvm12 lld-devel"
+makedepends="clang12 llvm12 lld12-devel"
 short_desc="Programming language designed for robustness, optimality, and clarity"
 maintainer="Isaac Freund <mail@isaacfreund.com>"
 license="MIT"

From 020b6c17dc16d822fbebdb368d933d3609114d71 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 03:39:58 +0200
Subject: [PATCH 29/29] llvm14: fix build.

---
 .../llvm14/files/llvm-Config-llvm-config.h    |  9 +++++
 srcpkgs/llvm14/template                       | 40 +++++++++----------
 2 files changed, 27 insertions(+), 22 deletions(-)
 create mode 100644 srcpkgs/llvm14/files/llvm-Config-llvm-config.h

diff --git a/srcpkgs/llvm14/files/llvm-Config-llvm-config.h b/srcpkgs/llvm14/files/llvm-Config-llvm-config.h
new file mode 100644
index 000000000000..2fa08c9be696
--- /dev/null
+++ b/srcpkgs/llvm14/files/llvm-Config-llvm-config.h
@@ -0,0 +1,9 @@
+#include <bits/wordsize.h>
+
+#if __WORDSIZE == 32
+#include "llvm-config-32.h"
+#elif __WORDSIZE == 64
+#include "llvm-config-64.h"
+#else
+#error "Unknown word size"
+#endif
diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
index e731aa76130a..40f13a392192 100644
--- a/srcpkgs/llvm14/template
+++ b/srcpkgs/llvm14/template
@@ -90,6 +90,7 @@ subpackages+=" lld lld-devel"
 configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
 configure_args+=" -DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}"
 
+
 post_patch() {
 	if [ "$_lldb_enable" = "yes" ]; then
 		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
@@ -136,8 +137,7 @@ post_patch() {
 }
 
 pre_configure() {
-	local triplet
-
+	local triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
 	# Vastly reduce size of debugging symbols:
 	CFLAGS=${CFLAGS/ -g/ -g1}
 	CXXFLAGS=${CXXFLAGS/ -g/ -g1}
@@ -168,6 +168,9 @@ pre_configure() {
 		cd ../..
 	fi
 
+	mkdir -p gnu
+	touch gnu/stubs-32.h
+
 	case "$XBPS_TARGET_MACHINE" in
 		i686*) _arch="X86";;
 		x86_64*) _arch="X86";;
@@ -180,8 +183,6 @@ pre_configure() {
 		riscv64*) _arch="RISCV64";;
 	esac
 
-	triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
-
 	configure_args+=" -DLLVM_TARGET_ARCH=${_arch}"
 	configure_args+=" -DLLVM_HOST_TRIPLE=${triplet}"
 	configure_args+=" -DLLVM_DEFAULT_TARGET_TRIPLE=${triplet}"
@@ -251,7 +252,7 @@ clang-tools-extra_package() {
 		vmove "usr/lib/libclangQuery*"
 		vmove "usr/lib/libclangTidy*"
 		vmove "usr/share/clang/*tidy*"
-		vmove usr/share/doc/clang-tools
+		vmove usr/share/doc/LLVM/clang-tools
 		vmove usr/share/man/man1/extraclangtools.1
 		vmove usr/share/man/man1/diagtool.1
 	}
@@ -273,7 +274,7 @@ clang_package() {
 		vmove "usr/lib/libclang*.a"
 		vmove "usr/lib/libclang*.so"
 		vmove usr/share/clang
-		vmove usr/share/doc/clang
+		vmove usr/share/doc/LLVM/clang
 		vmove usr/share/man/man1/clang.1
 	}
 }
@@ -301,7 +302,7 @@ lld_package() {
 		vmove usr/bin/wasm-ld
 		vmove usr/bin/ld.lld*
 		vmove usr/bin/ld64.lld*
-		vmove usr/share/doc/lld
+		vmove usr/share/doc/LLVM/lld
 	}
 }
 
@@ -342,7 +343,7 @@ lldb-devel_package() {
 llvm-libunwind_package() {
 	short_desc+=" - libunwind"
 	pkg_install() {
-		vmove "usr/lib/libunwind.so.*"
+		vmove "usr/lib/${XBPS_TARGET_LIBC_CROSS_TRIPLET:-XBPS_TRIPLET}/libunwind.so.*"
 	}
 }
 
@@ -351,18 +352,17 @@ llvm-libunwind-devel_package() {
 	depends="llvm-libunwind>=${version}_${revision}"
 	conflicts="libunwind-devel>=0"
 	pkg_install() {
-		vmove usr/lib/libunwind.so
-		vmove usr/lib/libunwind.a
+		vmove usr/lib/${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}/libunwind.so
+		vmove usr/lib/${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}/libunwind.a
 		vmove "usr/include/*unwind*"
 		vmove usr/include/mach-o
-		vmove usr/share/doc/libunwind
 	}
 }
 
 libcxxabi_package() {
 	short_desc+=" - low level support for libc++"
 	pkg_install() {
-		vmove "usr/lib/libc++abi.so.*"
+		vmove "usr/lib/${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}/libc++abi.so.*"
 	}
 }
 
@@ -370,8 +370,8 @@ libcxxabi-devel_package() {
 	short_desc+=" - low level support for libc++ - development files"
 	depends="libcxxabi>=${version}_${revision}"
 	pkg_install() {
-		vmove usr/lib/libc++abi.so
-		vmove usr/lib/libc++abi.a
+		vmove usr/lib/${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}/libc++abi.so
+		vmove usr/lib/${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}/libc++abi.a
 		vmove "usr/include/*cxxabi*"
 	}
 }
@@ -379,7 +379,7 @@ libcxxabi-devel_package() {
 libcxx_package() {
 	short_desc+=" - C++ standard library"
 	pkg_install() {
-		vmove "usr/lib/libc++.so.*"
+		vmove "usr/lib/${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}/libc++.so.*"
 	}
 }
 
@@ -387,11 +387,10 @@ libcxx-devel_package() {
 	short_desc+=" - C++ standard library - development files"
 	depends="libcxx>=${version}_${revision}"
 	pkg_install() {
-		vmove usr/lib/libc++.so
-		vmove usr/lib/libc++.a
-		vmove usr/lib/libc++experimental.a
+		vmove usr/lib/${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}/libc++.so
+		vmove usr/lib/${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}/libc++.a
+		vmove usr/lib/${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}/libc++experimental.a
 		vmove usr/include/c++
-		vmove usr/share/doc/libcxx
 	}
 }
 
@@ -401,7 +400,6 @@ libomp_package() {
 		vmove usr/lib/libomp.so
 		vmove "usr/lib/libomptarget.rtl.*.so"
 		vmove usr/lib/libarcher.so
-		vmove "usr/lib/libomp*.so.*"
 	}
 }
 
@@ -413,8 +411,6 @@ libomp-devel_package() {
 		vmove "usr/lib/libarcher*"
 		vmove "usr/include/omp*.h"
 		vmove "usr/lib/clang/${version}/include/omp*.h"
-		vmove usr/share/man/man1/llvmopenmp.1
-		vmove usr/share/doc/openmp
 	}
 }
 

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: [PR PATCH] [Updated] Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (5 preceding siblings ...)
  2022-05-04 20:50 ` prez
@ 2022-05-05  1:10 ` prez
  2022-05-05  1:25 ` prez
                   ` (62 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-05-05  1:10 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 667 bytes --]

There is an updated pull request by prez against master on the void-packages repository

https://github.com/prez/void-packages llvm
https://github.com/void-linux/void-packages/pull/36962

Llvm14
Supersedes https://github.com/void-linux/void-packages/pull/36229, https://github.com/void-linux/void-packages/pull/34800 - thank you @motorto and @DBLouis.

Updated patches, ping @q66 .

@ifreund todo: zig. Since it depends on `lld-devel`, I guess we need to split out `lld12`? Would appreciate your help with this, I don't want to wait for the next zig version.

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/36962.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-llvm-36962.patch --]
[-- Type: text/x-diff, Size: 541207 bytes --]

From af3214d006e7bc77ca1201c220be4ce4b8bebd34 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:15:06 +0200
Subject: [PATCH 01/29] New package: llvm14-14.0.3

---
 common/shlibs                                 |  16 +-
 srcpkgs/clang                                 |   2 +-
 srcpkgs/clang-analyzer                        |   2 +-
 srcpkgs/clang-tools-extra                     |   2 +-
 srcpkgs/libclang                              |   2 +-
 srcpkgs/libclang-cpp                          |   2 +-
 srcpkgs/libcxx                                |   2 +-
 srcpkgs/libcxx-devel                          |   2 +-
 srcpkgs/libcxxabi                             |   2 +-
 srcpkgs/libcxxabi-devel                       |   2 +-
 srcpkgs/libllvm14                             |   1 +
 srcpkgs/libomp                                |   2 +-
 srcpkgs/libomp-devel                          |   2 +-
 srcpkgs/lld                                   |   2 +-
 srcpkgs/lld-devel                             |   2 +-
 srcpkgs/lldb                                  |   2 +-
 srcpkgs/lldb-devel                            |   2 +-
 srcpkgs/llvm-libunwind                        |   2 +-
 srcpkgs/llvm-libunwind-devel                  |   2 +-
 .../patches/clang-002-add-musl-triples.patch  | 110 +++++
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 +
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ++
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 ++
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 +++
 srcpkgs/llvm14/patches/libcxx-musl.patch      |  26 ++
 srcpkgs/llvm14/patches/libcxx-ppc.patch       |  22 +
 .../llvm14/patches/libcxx-ssp-nonshared.patch |  11 +
 srcpkgs/llvm14/patches/libcxxabi-dl.patch     |  25 ++
 srcpkgs/llvm14/patches/lldb-musl.patch        |  31 ++
 srcpkgs/llvm14/patches/llvm-001-musl.patch    |  57 +++
 .../patches/llvm-002-musl-ppc64-elfv2.patch   |  30 ++
 .../patches/llvm-003-ppc-secureplt.patch      |  11 +
 .../patches/llvm-004-override-opt.patch       |  18 +
 .../llvm14/patches/llvm-005-ppc-bigpic.patch  |  36 ++
 .../patches/llvm-006-aarch64-mf_exec.patch    |  25 ++
 srcpkgs/llvm14/template                       | 424 ++++++++++++++++++
 srcpkgs/llvm14/update                         |   3 +
 37 files changed, 1018 insertions(+), 20 deletions(-)
 create mode 120000 srcpkgs/libllvm14
 create mode 100644 srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
 create mode 100644 srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
 create mode 100644 srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
 create mode 100644 srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-ppc.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxxabi-dl.patch
 create mode 100644 srcpkgs/llvm14/patches/lldb-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-001-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-004-override-opt.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
 create mode 100644 srcpkgs/llvm14/template
 create mode 100644 srcpkgs/llvm14/update

diff --git a/common/shlibs b/common/shlibs
index 4114151662fb..81acc39defb4 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -975,11 +975,12 @@ libuchardet.so.0 uchardet-0.0.6_1
 libgtksourceviewmm-3.0.so.0 gtksourceviewmm-3.2.0_1
 libyajl.so.2 yajl-2.0.1_1
 libconfuse.so.2 confuse-3.2.1_1
-liblldb.so.12 lldb-12.0.0_1
-libclang.so.12 libclang-12.0.0_1
-libclang-cpp.so.12 libclang-cpp-12.0.0_1
+liblldb.so.14 lldb-14.0.3_1
+libclang.so.14 libclang-14.0.3_1
+libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
+libLLVM-14.so libllvm14-14.0.3_1
 libisofs.so.6 libisofs-0.6.24_1
 libmpack.so.0 libmpack-1.0.5_1
 libGeoIP.so.1 libgeoip-1.4.8_1
@@ -4152,3 +4153,12 @@ librz_bin.so.0.3.4 rizin-0.3.4_1
 libaravis-0.8.so.0 libaravis-0.8.21_1
 libLimeSuite.so.20.10-1 LimeSuite-20.10.0_1
 libnvme.so.1 libnvme-1.0_1
+libomp.so libomp-14.0.3_1
+libomptarget.rtl.amdgpu.so libomp-14.0.3_1
+libomptarget.rtl.cuda.so libomp-14.0.3_1
+libomptarget.rtl.x86_64.so libomp-14.0.3_1
+libarcher.so libomp-14.0.3_1
+libomptarget.so libomp-14.0.3_1
+liblldbIntelFeatures.so.14 lldb-14.0.3_1
+libLTO.so.14 llvm14-14.0.3_1
+libRemarks.so.14 llvm14-14.0.3_1
diff --git a/srcpkgs/clang b/srcpkgs/clang
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang
+++ b/srcpkgs/clang
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/clang-analyzer b/srcpkgs/clang-analyzer
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang-analyzer
+++ b/srcpkgs/clang-analyzer
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/clang-tools-extra b/srcpkgs/clang-tools-extra
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang-tools-extra
+++ b/srcpkgs/clang-tools-extra
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libclang b/srcpkgs/libclang
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libclang
+++ b/srcpkgs/libclang
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libclang-cpp b/srcpkgs/libclang-cpp
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libclang-cpp
+++ b/srcpkgs/libclang-cpp
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxx b/srcpkgs/libcxx
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxx
+++ b/srcpkgs/libcxx
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxx-devel b/srcpkgs/libcxx-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxx-devel
+++ b/srcpkgs/libcxx-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxxabi b/srcpkgs/libcxxabi
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxxabi
+++ b/srcpkgs/libcxxabi
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxxabi-devel b/srcpkgs/libcxxabi-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxxabi-devel
+++ b/srcpkgs/libcxxabi-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libllvm14 b/srcpkgs/libllvm14
new file mode 120000
index 000000000000..1d42ed7632a6
--- /dev/null
+++ b/srcpkgs/libllvm14
@@ -0,0 +1 @@
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libomp b/srcpkgs/libomp
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libomp
+++ b/srcpkgs/libomp
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libomp-devel b/srcpkgs/libomp-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libomp-devel
+++ b/srcpkgs/libomp-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lld b/srcpkgs/lld
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lld
+++ b/srcpkgs/lld
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lld-devel b/srcpkgs/lld-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lld-devel
+++ b/srcpkgs/lld-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lldb b/srcpkgs/lldb
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lldb
+++ b/srcpkgs/lldb
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lldb-devel b/srcpkgs/lldb-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lldb-devel
+++ b/srcpkgs/lldb-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm-libunwind b/srcpkgs/llvm-libunwind
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/llvm-libunwind
+++ b/srcpkgs/llvm-libunwind
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm-libunwind-devel b/srcpkgs/llvm-libunwind-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/llvm-libunwind-devel
+++ b/srcpkgs/llvm-libunwind-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
new file mode 100644
index 000000000000..7b640e102bed
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
@@ -0,0 +1,110 @@
+--- a/clang/lib/Driver/ToolChains/Gnu.cpp
++++ b/clang/lib/Driver/ToolChains/Gnu.cpp
+@@ -2083,7 +2083,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
+                                              "armv7hl-redhat-linux-gnueabi",
+                                              "armv6hl-suse-linux-gnueabi",
+-                                             "armv7hl-suse-linux-gnueabi"};
++                                             "armv7hl-suse-linux-gnueabi",
++                                             "armv7l-linux-gnueabihf"};
+   static const char *const ARMebLibDirs[] = {"/lib"};
+   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi"};
+   static const char *const ARMebHFTriples[] = {
+@@ -2151,8 +2152,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
+   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
+   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
+-                                             "powerpcle-unknown-linux-gnu",
+-                                             "powerpcle-linux-musl"};
++                                             "powerpcle-unknown-linux-gnu"};
+
+   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
+   static const char *const PPC64Triples[] = {
+@@ -2231,6 +2231,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+     return;
+   }
+
++  if (TargetTriple.isMusl()) {
++    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
++    static const char *const ARMHFMuslTriples[] = {
++        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
++    };
++    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
++    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
++    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
++    static const char *const MIPSMuslTriples[] = {
++        "mips-linux-musl", "mipsel-linux-musl",
++        "mipsel-linux-muslhf", "mips-linux-muslhf"
++    };
++    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
++    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
++    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
++    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
++
++    switch (TargetTriple.getArch()) {
++    case llvm::Triple::aarch64:
++      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      break;
++    case llvm::Triple::arm:
++      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
++      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
++        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
++      } else {
++        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
++      }
++      break;
++    case llvm::Triple::x86_64:
++      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      break;
++    case llvm::Triple::x86:
++      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      break;
++    case llvm::Triple::mips:
++      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
++      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
++      break;
++    case llvm::Triple::ppc:
++      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      break;
++    case llvm::Triple::ppcle:
++      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      break;
++    case llvm::Triple::ppc64:
++      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      break;
++    case llvm::Triple::ppc64le:
++      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      break;
++    default:
++      break;
++    }
++    TripleAliases.push_back(TargetTriple.str());
++    if (TargetTriple.str() != BiarchTriple.str())
++      BiarchTripleAliases.push_back(BiarchTriple.str());
++    return;
++  }
++
+   // Android targets should not use GNU/Linux tools or libraries.
+   if (TargetTriple.isAndroid()) {
+     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
new file mode 100644
index 000000000000..47128af79b7f
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
@@ -0,0 +1,13 @@
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -490,10 +490,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+     Loader = "ld.so.1";
+     break;
+   case llvm::Triple::ppc64:
+-    LibDir = "lib64";
+-    Loader =
+-        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
+-    break;
+   case llvm::Triple::ppc64le:
+     LibDir = "lib64";
+     Loader =
diff --git a/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
new file mode 100644
index 000000000000..21fc8003c5f1
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
@@ -0,0 +1,48 @@
+--- a/clang/lib/Basic/Targets/PPC.h
++++ b/clang/lib/Basic/Targets/PPC.h
+@@ -415,11 +415,10 @@ public:
+       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
+     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
+       DataLayout = "e-m:e-i64:64-n32:64";
+-      ABI = "elfv2";
+     } else {
+       DataLayout = "E-m:e-i64:64-n32:64";
+-      ABI = "elfv1";
+     }
++    ABI = "elfv2";
+ 
+     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
+       LongDoubleWidth = LongDoubleAlign = 64;
+--- a/clang/lib/CodeGen/TargetInfo.cpp
++++ b/clang/lib/CodeGen/TargetInfo.cpp
+@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
+       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
+ 
+     if (Triple.isOSBinFormatELF()) {
+-      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
+-      if (getTarget().getABI() == "elfv2")
+-        Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      if (getTarget().getABI() == "elfv1")
++        Kind = PPC64_SVR4_ABIInfo::ELFv1;
+       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
+ 
+       return SetCGInfo(
+--- a/clang/lib/Driver/ToolChains/Clang.cpp
++++ b/clang/lib/Driver/ToolChains/Clang.cpp
+@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
+   const llvm::Triple &T = getToolChain().getTriple();
+   if (T.isOSBinFormatELF()) {
+     switch (getToolChain().getArch()) {
+-    case llvm::Triple::ppc64: {
+-      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
+-          T.isOSOpenBSD() || T.isMusl())
+-        ABIName = "elfv2";
+-      else
+-        ABIName = "elfv1";
+-      break;
+-    }
++    case llvm::Triple::ppc64:
+     case llvm::Triple::ppc64le:
+       ABIName = "elfv2";
+       break;
diff --git a/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch b/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
new file mode 100644
index 000000000000..4135bfd4486a
--- /dev/null
+++ b/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
@@ -0,0 +1,35 @@
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
+@@ -74,6 +74,10 @@
+ #include <sys/utsname.h>
+ #endif
+
++#if SANITIZER_LINUX && defined(__powerpc__)
++#include <asm/ptrace.h>
++#endif
++
+ #if SANITIZER_LINUX && !SANITIZER_ANDROID
+ #include <sys/personality.h>
+ #endif
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
+@@ -92,7 +92,7 @@
+ # include <utime.h>
+ # include <sys/ptrace.h>
+ #    if defined(__mips64) || defined(__aarch64__) || defined(__arm__) || \
+-        defined(__hexagon__) || SANITIZER_RISCV64
++        defined(__hexagon__) || defined(__powerpc__) || SANITIZER_RISCV64
+ #      include <asm/ptrace.h>
+ #      ifdef __arm__
+ typedef struct user_fpregs elf_fpregset_t;
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
+@@ -31,7 +31,7 @@
+ #include <sys/types.h> // for pid_t
+ #include <sys/uio.h> // for iovec
+ #include <elf.h> // for NT_PRSTATUS
+-#if (defined(__aarch64__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
++#if (defined(__aarch64__) || defined(__powerpc__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
+ // GLIBC 2.20+ sys/user does not include asm/ptrace.h
+ # include <asm/ptrace.h>
+ #endif
diff --git a/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch b/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
new file mode 100644
index 000000000000..d0b61c80c897
--- /dev/null
+++ b/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
@@ -0,0 +1,62 @@
+--- a/compiler-rt/lib/xray/xray_powerpc64.inc
++++ b/compiler-rt/lib/xray/xray_powerpc64.inc
+@@ -12,7 +12,13 @@
+ 
+ #include <cstdint>
+ #include <mutex>
++#ifdef __GLIBC__
+ #include <sys/platform/ppc.h>
++#else
++#include <cctype>
++#include <cstring>
++#include <cstdlib>
++#endif
+ 
+ #include "xray_defs.h"
+ 
+@@ -20,13 +26,45 @@ namespace __xray {
+ 
+ ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
+   CPU = 0;
++#ifdef __GLIBC__
+   return __ppc_get_timebase();
++#else
++  return __builtin_ppc_get_timebase();
++#endif
+ }
+ 
+ inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
+   static std::mutex M;
+   std::lock_guard<std::mutex> Guard(M);
++#ifdef __GLIBC__
+   return __ppc_get_timebase_freq();
++#else
++  /* FIXME: a less dirty implementation? */
++  static uint64_t base;
++  if (!base) {
++    FILE *f = fopen("/proc/cpuinfo", "rb");
++    if (f) {
++      ssize_t nr;
++      /* virtually always big enough to hold the line */
++      char buf[512];
++      while (fgets(buf, sizeof(buf), f)) {
++        char *ret = strstr(buf, "timebase");
++        if (!ret) {
++          continue;
++        }
++        ret += sizeof("timebase") - 1;
++        ret = strchr(ret, ':');
++        if (!ret) {
++          continue;
++        }
++        base = strtoul(ret + 1, nullptr, 10);
++        break;
++      }
++      fclose(f);
++    }
++  }
++  return base;
++#endif
+ }
+ 
+ inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
diff --git a/srcpkgs/llvm14/patches/libcxx-musl.patch b/srcpkgs/llvm14/patches/libcxx-musl.patch
new file mode 100644
index 000000000000..bbd31ffc2cb1
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-musl.patch
@@ -0,0 +1,26 @@
+--- a/libcxx/include/locale
++++ b/libcxx/include/locale
+@@ -742,7 +742,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
+         typename remove_reference<decltype(errno)>::type __save_errno = errno;
+         errno = 0;
+         char *__p2;
++#if defined(__linux__) && !defined(__GLIBC__)
++        long long __ll = strtoll(__a, &__p2, __base);
++#else
+         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
++#endif
+         typename remove_reference<decltype(errno)>::type __current_errno = errno;
+         if (__current_errno == 0)
+             errno = __save_errno;
+@@ -782,7 +786,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
+         typename remove_reference<decltype(errno)>::type __save_errno = errno;
+         errno = 0;
+         char *__p2;
++#if defined(__linux__) && !defined(__GLIBC__)
++        unsigned long long __ll = strtoull(__a, &__p2, __base);
++#else
+         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
++#endif
+         typename remove_reference<decltype(errno)>::type __current_errno = errno;
+         if (__current_errno == 0)
+             errno = __save_errno;
diff --git a/srcpkgs/llvm14/patches/libcxx-ppc.patch b/srcpkgs/llvm14/patches/libcxx-ppc.patch
new file mode 100644
index 000000000000..7a92f8004e1c
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-ppc.patch
@@ -0,0 +1,22 @@
+This ensures `is_iec559` is defined correctly under all long double ABIs,
+including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__`
+is not defined on gcc.
+
+--- a/libcxx/include/limits
++++ b/libcxx/include/limits
+@@ -426,8 +426,14 @@ protected:
+     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
+     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
+ 
+-#if (defined(__ppc__) || defined(__ppc64__))
++#if defined(__powerpc__) || defined(__powerpc64__)
++#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__)
++    /* IEEE 754 quadruple or double precision */
++    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
++#else
++    /* 128-bit IBM double-double */
+     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
++#endif
+ #else
+     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
+ #endif
diff --git a/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch b/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
new file mode 100644
index 000000000000..70292beb2fcd
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
@@ -0,0 +1,11 @@
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -769,6 +769,8 @@ function(cxx_link_system_libraries target)
+     target_link_libraries(${target} PRIVATE atomic)
+   endif()
+ 
++#ssp  target_link_libraries(${target} PRIVATE ssp_nonshared)
++
+   if (MINGW)
+     target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
+   endif()
diff --git a/srcpkgs/llvm14/patches/libcxxabi-dl.patch b/srcpkgs/llvm14/patches/libcxxabi-dl.patch
new file mode 100644
index 000000000000..3a15f9db8c98
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxxabi-dl.patch
@@ -0,0 +1,25 @@
+Also link to -ldl to prevent undefined references.
+
+--- a/libcxxabi/src/CMakeLists.txt
++++ b/libcxxabi/src/CMakeLists.txt
+@@ -73,6 +73,7 @@
+   endif()
+ 
+   add_library_flags_if(LIBCXXABI_HAS_C_LIB c)
++  add_library_flags_if(LIBCXXABI_HAS_C_LIB dl)
+ endif()
+ 
+ if (LIBCXXABI_USE_LLVM_UNWINDER)
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -745,6 +745,10 @@
+     target_link_libraries(${target} PRIVATE m)
+   endif()
+ 
++  if (LIBCXX_HAS_C_LIB)
++    target_link_libraries(${target} PRIVATE dl)
++  endif()
++
+   if (LIBCXX_HAS_RT_LIB)
+     target_link_libraries(${target} PRIVATE rt)
+   endif()
diff --git a/srcpkgs/llvm14/patches/lldb-musl.patch b/srcpkgs/llvm14/patches/lldb-musl.patch
new file mode 100644
index 000000000000..601c0d138523
--- /dev/null
+++ b/srcpkgs/llvm14/patches/lldb-musl.patch
@@ -0,0 +1,31 @@
+--- a/lldb/source/Plugins/Process/Linux/Procfs.h
++++ b/lldb/source/Plugins/Process/Linux/Procfs.h
+@@ -10,21 +10,12 @@
+ // sys/procfs.h on Android/Linux for all supported architectures.
+ 
+ #include <sys/ptrace.h>
++#include <asm/ptrace.h>
+ 
+-#ifdef __ANDROID__
+-#if defined(__arm64__) || defined(__aarch64__)
+-typedef unsigned long elf_greg_t;
+-typedef elf_greg_t
+-    elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
+-typedef struct user_fpsimd_state elf_fpregset_t;
+-#ifndef NT_FPREGSET
+-#define NT_FPREGSET NT_PRFPREG
+-#endif // NT_FPREGSET
+-#elif defined(__mips__)
+-#ifndef NT_FPREGSET
+-#define NT_FPREGSET NT_PRFPREG
+-#endif // NT_FPREGSET
+-#endif
+-#else // __ANDROID__
++#if !defined(__GLIBC__) && defined(__powerpc__)
++#define pt_regs musl_pt_regs
++#include <sys/procfs.h>
++#undef pt_regs
++#else
+ #include <sys/procfs.h>
+-#endif // __ANDROID__
++#endif
diff --git a/srcpkgs/llvm14/patches/llvm-001-musl.patch b/srcpkgs/llvm14/patches/llvm-001-musl.patch
new file mode 100644
index 000000000000..f2a3f8d62813
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-001-musl.patch
@@ -0,0 +1,57 @@
+From faca3fbd15d0c3108493c3c54cd93138e049ac43 Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe@gmail.com>
+Date: Tue, 8 Sep 2015 22:03:02 +0200
+Subject: [PATCH 3/3] musl
+
+---
+ include/llvm/Analysis/TargetLibraryInfo.h | 9 +++++++++
+ lib/Support/DynamicLibrary.cpp            | 2 +-
+ lib/Support/Unix/Signals.inc              | 6 +++---
+ utils/unittest/googletest/src/gtest.cc    | 1 +
+ 5 files changed, 17 insertions(+), 6 deletions(-)
+
+diff --git a/include/llvm/Analysis/TargetLibraryInfo.h b/include/llvm/Analysis/TargetLibraryInfo.h
+index 34a8a1e3..1214ece5 100644
+--- a/llvm/include/llvm/Analysis/TargetLibraryInfo.h
++++ b/llvm/include/llvm/Analysis/TargetLibraryInfo.h
+@@ -18,6 +18,15 @@
+ #include "llvm/IR/PassManager.h"
+ #include "llvm/Pass.h"
+ 
++#undef fopen64
++#undef fseeko64
++#undef fstat64
++#undef fstatvfs64
++#undef ftello64
++#undef lstat64
++#undef stat64
++#undef tmpfile64
++
+ namespace llvm {
+ template <typename T> class ArrayRef;
+ class Triple;
+diff --git a/lib/Support/Unix/DynamicLibrary.inc b/lib/Support/Unix/DynamicLibrary.inc
+index a2a37996..2f86c470 100644
+--- a/llvm/lib/Support/Unix/DynamicLibrary.inc
++++ b/llvm/lib/Support/Unix/DynamicLibrary.inc
+@@ -102,7 +102,7 @@ static void *DoSearch(const char* SymbolName) {
+ 
+ // This macro returns the address of a well-known, explicit symbol
+ #define EXPLICIT_SYMBOL(SYM) \
+-   if (!strcmp(SymbolName, #SYM)) return &SYM
++   if (!strcmp(SymbolName, #SYM)) return (void *)&SYM
+ 
+ // Under glibc we have a weird situation. The stderr/out/in symbols are both
+ // macros and global variables because of standards requirements. So, we
+diff --git a/utils/unittest/googletest/src/gtest.cc b/utils/unittest/googletest/src/gtest.cc
+index d882ab2e..f1fb12d0 100644
+--- a/llvm/utils/unittest/googletest/src/gtest.cc
++++ b/llvm/utils/unittest/googletest/src/gtest.cc
+@@ -128,6 +128,7 @@
+ 
+ #if GTEST_CAN_STREAM_RESULTS_
+ # include <arpa/inet.h>  // NOLINT
++# include <sys/socket.h>  // NOLINT
+ # include <netdb.h>  // NOLINT
+ # include <sys/socket.h>  // NOLINT
+ # include <sys/types.h>  // NOLINT
diff --git a/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch b/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
new file mode 100644
index 000000000000..0071d964bd37
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
@@ -0,0 +1,30 @@
+This patches LLVM to use ELFv2 on ppc64 unconditionally unless overridden. We
+need this because unlike most distros we use ELFv2 for both glibc and musl
+on big endian ppc64.
+
+diff --git a/lib/Target/PowerPC/PPCTargetMachine.cpp b/lib/Target/PowerPC/PPCTargetMachine.cpp
+index 0634833e..b7cbc2e7 100644
+--- a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
++++ b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
+@@ -222,9 +222,8 @@ static PPCTargetMachine::PPCABI computeTargetABI(const Triple &TT,
+ 
+   switch (TT.getArch()) {
+   case Triple::ppc64le:
+-    return PPCTargetMachine::PPC_ABI_ELFv2;
+   case Triple::ppc64:
+-    return PPCTargetMachine::PPC_ABI_ELFv1;
++    return PPCTargetMachine::PPC_ABI_ELFv2;
+   default:
+     return PPCTargetMachine::PPC_ABI_UNKNOWN;
+   }
+diff --git a/test/CodeGen/PowerPC/ppc64-elf-abi.ll b/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+index 8b1cf6b5..296a2afa 100644
+--- a/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
++++ b/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+@@ -1,4 +1,5 @@
+-; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv1
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-musl < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv1 < %s | FileCheck %s -check-prefix=CHECK-ELFv1
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv2 < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
diff --git a/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch b/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
new file mode 100644
index 000000000000..b5d15974375d
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
@@ -0,0 +1,11 @@
+--- a/llvm/lib/Target/PowerPC/PPCSubtarget.cpp
++++ b/llvm/lib/Target/PowerPC/PPCSubtarget.cpp
+@@ -165,7 +165,7 @@ void PPCSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) {
+ 
+   if ((TargetTriple.isOSFreeBSD() && TargetTriple.getOSMajorVersion() >= 13) ||
+       TargetTriple.isOSNetBSD() || TargetTriple.isOSOpenBSD() ||
+-      TargetTriple.isMusl())
++      isTargetLinux())
+     SecurePlt = true;
+ 
+   if (HasSPE && IsPPC64)
diff --git a/srcpkgs/llvm14/patches/llvm-004-override-opt.patch b/srcpkgs/llvm14/patches/llvm-004-override-opt.patch
new file mode 100644
index 000000000000..51d0e4b31b32
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-004-override-opt.patch
@@ -0,0 +1,18 @@
+This allows us to override the optimization level as not all platforms can
+deal with -O3.
+
+--- a/llvm/CMakeLists.txt
++++ b/llvm/CMakeLists.txt
+@@ -918,6 +918,12 @@ if( MINGW AND NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" )
+   llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "-O2")
+ endif()
+ 
++set(VOID_CXX_OPT_FLAGS "" CACHE STRING "Optimization level to use")
++
++if (NOT VOID_CXX_OPT_FLAGS STREQUAL "")
++    llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "${VOID_CXX_OPT_FLAGS}")
++endif()
++
+ # Put this before tblgen. Else we have a circular dependence.
+ add_subdirectory(lib/Demangle)
+ add_subdirectory(lib/Support)
diff --git a/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch b/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
new file mode 100644
index 000000000000..d332687b9d92
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
@@ -0,0 +1,36 @@
+From f3dbdd49c06bfafc1d6138094cf42889c14d38b6 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Sun, 3 Nov 2019 10:57:27 -0600
+Subject: [PATCH] [LLVM][PowerPC] Assume BigPIC if no PIC level is specified
+
+---
+ llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp  | 2 +-
+ llvm/lib/Target/PowerPC/PPCMCInstLower.cpp | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/Target/PowerPC/PPCAsmPrinter.cpp b/lib/Target/PowerPC/PPCAsmPrinter.cpp
+index cce21f32..87ca5f9b 100644
+--- a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
++++ b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
+@@ -520,7 +520,7 @@ void PPCAsmPrinter::EmitTlsCall(const MachineInstr *MI,
+ 
+   // Add 32768 offset to the symbol so we follow up the latest GOT/PLT ABI.
+   if (Kind == MCSymbolRefExpr::VK_PLT && Subtarget->isSecurePlt() &&
+-      M->getPICLevel() == PICLevel::BigPIC)
++      M->getPICLevel() != PICLevel::SmallPIC)
+     TlsRef = MCBinaryExpr::createAdd(
+         TlsRef, MCConstantExpr::create(32768, OutContext), OutContext);
+   const MachineOperand &MO = MI->getOperand(2);
+diff --git a/lib/Target/PowerPC/PPCMCInstLower.cpp b/lib/Target/PowerPC/PPCMCInstLower.cpp
+index 5cc180d7..a5b02565 100644
+--- a/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
++++ b/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
+@@ -117,7 +117,7 @@ static MCOperand GetSymbolRef(const MachineOperand &MO, const MCSymbol *Symbol,
+   const MCExpr *Expr = MCSymbolRefExpr::create(Symbol, RefKind, Ctx);
+   // If -msecure-plt -fPIC, add 32768 to symbol.
+   if (Subtarget->isSecurePlt() && TM.isPositionIndependent() &&
+-      M->getPICLevel() == PICLevel::BigPIC &&
++      M->getPICLevel() != PICLevel::SmallPIC &&
+       MO.getTargetFlags() == PPCII::MO_PLT)
+     Expr =
+         MCBinaryExpr::createAdd(Expr, MCConstantExpr::create(32768, Ctx), Ctx);
diff --git a/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch b/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
new file mode 100644
index 000000000000..a00abd216665
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
@@ -0,0 +1,25 @@
+Fix failures in AllocationTests/MappedMemoryTest.* on aarch64:
+
+    Failing Tests (8):
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.AllocAndRelease/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.DuplicateNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.EnabledWrite/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.MultipleAllocAndRelease/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.SuccessiveNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.UnalignedNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.ZeroNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.ZeroSizeNear/3
+
+Upstream-Issue: https://bugs.llvm.org/show_bug.cgi?id=14278#c10
+
+--- a/llvm/lib/Support/Unix/Memory.inc
++++ b/llvm/lib/Support/Unix/Memory.inc
+@@ -58,7 +58,7 @@ static int getPosixProtectionFlags(unsigned Flags) {
+     return PROT_READ | PROT_WRITE | PROT_EXEC;
+   case llvm::sys::Memory::MF_EXEC:
+ #if (defined(__FreeBSD__) || defined(__POWERPC__) || defined (__ppc__) || \
+-     defined(_POWER) || defined(_ARCH_PPC))
++     defined(_POWER) || defined(_ARCH_PPC) || (defined(__linux__) && defined(__aarch64__)))
+     // On PowerPC, having an executable page that has no read permission
+     // can have unintended consequences.  The function InvalidateInstruction-
+     // Cache uses instructions dcbf and icbi, both of which are treated by
diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
new file mode 100644
index 000000000000..3e7e6ab2c00b
--- /dev/null
+++ b/srcpkgs/llvm14/template
@@ -0,0 +1,424 @@
+# Template file for 'llvm14'
+pkgname=llvm14
+version=14.0.3
+revision=1
+wrksrc="llvm-project-${version}.src"
+build_wrksrc=llvm
+build_style=cmake
+configure_args="
+ -DCMAKE_BUILD_TYPE=Release -Wno-dev
+ -DENABLE_LINKER_BUILD_ID=YES
+ -DLLDB_USE_SYSTEM_SIX=YES
+ -DLIBCXX_CXX_ABI=libcxxabi
+ -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
+ -DLIBCXXABI_USE_LLVM_UNWINDER=YES
+ -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
+ -DLIBOMP_ENABLE_SHARED=YES
+ -DLIBOMP_INSTALL_ALIASES=NO
+ -DLLVM_INCLUDE_DOCS=YES
+ -DLLVM_BUILD_DOCS=YES
+ -DLLVM_ENABLE_SPHINX=YES
+ -DSPHINX_WARNINGS_AS_ERRORS=NO
+ -DLLVM_INSTALL_UTILS=YES
+ -DLLVM_BUILD_LLVM_DYLIB=YES
+ -DLLVM_LINK_LLVM_DYLIB=YES
+ -DLLVM_ENABLE_RTTI=YES
+ -DLLVM_ENABLE_FFI=YES
+ -DLLVM_BINUTILS_INCDIR=/usr/include"
+hostmakedepends="perl python3 zlib-devel libffi-devel swig python3-Sphinx
+ python3-recommonmark python3-sphinx-automodapi"
+makedepends="python3-devel zlib-devel elfutils-devel libffi-devel libedit-devel
+ libxml2-devel binutils-devel libatomic-devel"
+depends="libllvm14>=${version}_${revision}"
+short_desc="Low Level Virtual Machine"
+maintainer="q66 <daniel@octaforge.org>"
+license="Apache-2.0"
+homepage="https://www.llvm.org"
+distfiles="https://github.com/llvm/llvm-project/releases/download/llvmorg-${version}/llvm-project-${version}.src.tar.xz"
+checksum=44d3e7a784d5cf805e72853bb03f218bd1058d448c03ca883dabbebc99204e0c
+lib32disabled=yes
+python_version=3
+
+if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+	configure_args+=" -DLIBCXX_HAS_MUSL_LIBC=YES"
+	makedepends+=" libexecinfo-devel"
+	depends+=" libexecinfo-devel"
+fi
+
+# "operand out of range" assembler failures
+case "$XBPS_TARGET_MACHINE" in
+	ppc64*) ;;
+	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
+esac
+
+_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
+
+_lldb_enable=yes
+_libomp_enable=no
+
+case "$XBPS_TARGET_MACHINE" in
+	ppc64le*) ;;
+	ppc*|i686*) _lldb_enable=no ;;
+esac
+
+case "$XBPS_TARGET_MACHINE" in
+	x86_64*|aarch64*|ppc64*) _libomp_enable=yes;;
+esac
+
+subpackages="clang-tools-extra"
+
+# must go before clang
+if [ "$_libomp_enable" = "yes" ]; then
+	_enabled_projects+=";openmp"
+	subpackages+=" libomp libomp-devel"
+	# because of cmake nonsense referencing libomptarget.so.*
+	depends+=" libomp>=${version}_${revision}"
+fi
+
+subpackages+=" clang clang-analyzer libclang libclang-cpp
+ llvm-libunwind llvm-libunwind-devel libcxx libcxx-devel
+ libcxxabi libcxxabi-devel libllvm14"
+
+if [ "$_lldb_enable" = "yes" ]; then
+	# XXX fails to cross compile due to python
+	_enabled_projects+=";lldb"
+	subpackages+=" lldb lldb-devel"
+fi
+
+subpackages+=" lld lld-devel"
+
+configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+
+post_patch() {
+	if [ "$_lldb_enable" = "yes" ]; then
+		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+			vsed -i 's|__ptrace_request|int|g' \
+				${wrksrc}/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
+		fi
+		# disable docs for lldb as they fail to generate
+		vsed -i '/add_subdirectory(docs)/d' \
+			${wrksrc}/lldb/CMakeLists.txt
+	fi
+
+	# update config.guess for better platform detection
+	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
+		${wrksrc}/llvm/cmake
+
+	# fix linker failures on some archs
+	vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
+		${wrksrc}/libcxxabi/cmake/config-ix.cmake
+	vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
+		${wrksrc}/libcxxabi/cmake/config-ix.cmake
+
+	# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*) ;;
+		ppc*-musl|i686-musl|mips*-musl)
+			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
+				${wrksrc}/libunwind/src/CMakeLists.txt
+			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
+				${wrksrc}/libcxxabi/src/CMakeLists.txt
+			vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
+			;;
+	esac
+
+	case "$XBPS_TARGET_MACHINE" in
+		x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
+			vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
+				${wrksrc}/compiler-rt/CMakeLists.txt
+			;;
+		arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
+			vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
+				${wrksrc}/compiler-rt/cmake/config-ix.cmake
+			;;
+	esac
+}
+
+pre_configure() {
+	local triplet
+
+	# Vastly reduce size of debugging symbols:
+	CFLAGS=${CFLAGS/ -g/ -g1}
+	CXXFLAGS=${CXXFLAGS/ -g/ -g1}
+
+	# since gcc9, the build likes to blow up for ppc32 apparently because
+	# of clang being too large for a 24-bit relative call to the PLT, so
+	# optimize for size instead
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*) ;;
+		mips*-musl|ppc*) configure_args+=" -DVOID_CXX_OPT_FLAGS=-Os" ;;
+	esac
+
+	if [ "$CROSS_BUILD" ]; then
+		msg_normal "Building host tblgen\n"
+		mkdir -p build/HOST
+		cd build/HOST
+		CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
+			CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
+			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
+			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
+		make ${makejobs} -C utils/TableGen
+		make ${makejobs} -C tools/clang/utils/TableGen
+		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
+		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
+		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
+		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
+		cd ../..
+	fi
+
+	case "$XBPS_TARGET_MACHINE" in
+		i686*) _arch="X86";;
+		x86_64*) _arch="X86";;
+		armv5*) _arch="Armv5te";;
+		armv6*) _arch="Armv6";;
+		armv7*) _arch="Armv7";;
+		aarch64*) _arch="AArch64";;
+		mips*) _arch="Mips";;
+		ppc*) _arch="PowerPC";;
+		riscv64*) _arch="RISCV64";;
+	esac
+
+	triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
+
+	configure_args+=" -DLLVM_TARGET_ARCH=${_arch}"
+	configure_args+=" -DLLVM_HOST_TRIPLE=${triplet}"
+	configure_args+=" -DLLVM_DEFAULT_TARGET_TRIPLE=${triplet}"
+}
+
+do_install() {
+	cd build
+	cmake -DCMAKE_INSTALL_PREFIX=${DESTDIR}/usr -P cmake_install.cmake
+
+	# Required for multilib.
+	if [ "$XBPS_TARGET_MACHINE" = "x86_64" ]; then
+		for _header in llvm-config; do
+			mv ${DESTDIR}/usr/include/llvm/Config/${_header}{,-64}.h
+			vinstall ${FILESDIR}/llvm-Config-${_header}.h 644 \
+				usr/include/llvm/Config ${_header}.h
+		done
+	fi
+
+	# Remove llvm-config-host in cross builds.
+	if [ "$CROSS_BUILD" ]; then
+		rm -f ${DESTDIR}/usr/bin/llvm-config-host
+	fi
+
+	# Install libcxxabi headers
+	vinstall ${wrksrc}/libcxxabi/include/__cxxabi_config.h 644 usr/include
+	vinstall ${wrksrc}/libcxxabi/include/cxxabi.h 644 usr/include
+
+	# Install libunwind headers
+	vinstall ${wrksrc}/libunwind/include/__libunwind_config.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/libunwind.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/unwind.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/mach-o/compact_unwind_encoding.h \
+		644 usr/include/mach-o
+}
+
+clang-analyzer_package() {
+	pycompile_dirs="usr/share/scan-view"
+	depends="clang-${version}_${revision} python3 perl"
+	short_desc+=" - A source code analysis framework"
+	homepage="https://clang-analyzer.llvm.org/"
+	pkg_install() {
+		vmove usr/share/man/man1/scan-build.1
+		vmove "/usr/bin/scan-*"
+		vmove "/usr/share/scan-*"
+		vmove "/usr/libexec/*analyzer"
+	}
+}
+
+clang-tools-extra_package() {
+	lib32disabled=yes
+	depends="clang-${version}_${revision} python3"
+	short_desc+=" - Extra Clang tools"
+	homepage="https://clang.llvm.org/extra/"
+	pkg_install() {
+		vmove usr/include/clang-tidy
+		vmove usr/bin/clang-apply-replacements
+		vmove usr/bin/clang-query
+		vmove usr/bin/clang-rename
+		vmove usr/bin/clang-tidy
+		vmove usr/bin/diagtool
+		vmove usr/bin/find-all-symbols
+		vmove usr/bin/hmaptool
+		vmove usr/bin/modularize
+		vmove usr/bin/pp-trace
+		vmove usr/bin/sancov
+		vmove "usr/lib/libclangApplyReplacements*"
+		vmove "usr/lib/libclangQuery*"
+		vmove "usr/lib/libclangTidy*"
+		vmove "usr/share/clang/*tidy*"
+		vmove usr/share/doc/clang-tools
+		vmove usr/share/man/man1/extraclangtools.1
+		vmove usr/share/man/man1/diagtool.1
+	}
+}
+
+clang_package() {
+	lib32disabled=yes
+	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
+	 libclang-${version}_${revision}"
+	short_desc+=" - C language family frontend"
+	homepage="https://clang.llvm.org/"
+	pkg_install() {
+		vmove usr/include/clang
+		vmove usr/include/clang-c
+		vmove "usr/bin/*clang*"
+		vmove usr/bin/c-index-test
+		vmove usr/lib/clang
+		vmove usr/lib/cmake/clang
+		vmove "usr/lib/libclang*.a"
+		vmove "usr/lib/libclang*.so"
+		vmove usr/share/clang
+		vmove usr/share/doc/clang
+		vmove usr/share/man/man1/clang.1
+	}
+}
+
+libclang_package() {
+	short_desc+=" - C frontend runtime library"
+	pkg_install() {
+		vmove "usr/lib/libclang.so.*"
+	}
+}
+
+libclang-cpp_package() {
+	short_desc+=" - C frontend runtime library (C++ interface)"
+	pkg_install() {
+		vmove "usr/lib/libclang-cpp.so.*"
+	}
+}
+
+lld_package() {
+	lib32disabled=yes
+	short_desc+=" - linker"
+	homepage="https://lld.llvm.org"
+	pkg_install() {
+		vmove usr/bin/lld*
+		vmove usr/bin/wasm-ld
+		vmove usr/bin/ld.lld*
+		vmove usr/bin/ld64.lld*
+		vmove usr/share/doc/lld
+	}
+}
+
+lld-devel_package() {
+	lib32disabled=yes
+	short_desc+=" - linker - development files"
+	homepage="https://lld.llvm.org"
+	depends="lld>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include/lld
+		vmove usr/lib/cmake/lld
+		vmove "usr/lib/liblld*a"
+	}
+}
+
+lldb_package() {
+	lib32disabled=yes
+	depends+=" python3-six"
+	short_desc+=" - LLDB debugger"
+	homepage="https://lldb.llvm.org/"
+	pkg_install() {
+		vmove usr/bin/*lldb*
+		vmove usr/lib/liblldb*so.*
+		vmove /usr/lib/python*
+	}
+}
+
+lldb-devel_package() {
+	lib32disabled=yes
+	depends="lldb>=${version}_${revision}"
+	short_desc+=" - LLDB debugger - development files"
+	pkg_install() {
+		vmove usr/include/lldb
+		vmove "usr/lib/liblldb*.so"
+	}
+}
+
+llvm-libunwind_package() {
+	short_desc+=" - libunwind"
+	pkg_install() {
+		vmove "usr/lib/libunwind.so.*"
+	}
+}
+
+llvm-libunwind-devel_package() {
+	short_desc+=" - libunwind - development files"
+	depends="llvm-libunwind>=${version}_${revision}"
+	conflicts="libunwind-devel>=0"
+	pkg_install() {
+		vmove usr/lib/libunwind.so
+		vmove usr/lib/libunwind.a
+		vmove "usr/include/*unwind*"
+		vmove usr/include/mach-o
+		vmove usr/share/doc/libunwind
+	}
+}
+
+libcxxabi_package() {
+	short_desc+=" - low level support for libc++"
+	pkg_install() {
+		vmove "usr/lib/libc++abi.so.*"
+	}
+}
+
+libcxxabi-devel_package() {
+	short_desc+=" - low level support for libc++ - development files"
+	depends="libcxxabi>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/lib/libc++abi.so
+		vmove usr/lib/libc++abi.a
+		vmove "usr/include/*cxxabi*"
+	}
+}
+
+libcxx_package() {
+	short_desc+=" - C++ standard library"
+	pkg_install() {
+		vmove "usr/lib/libc++.so.*"
+	}
+}
+
+libcxx-devel_package() {
+	short_desc+=" - C++ standard library - development files"
+	depends="libcxx>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/lib/libc++.so
+		vmove usr/lib/libc++.a
+		vmove usr/lib/libc++experimental.a
+		vmove usr/include/c++
+		vmove usr/share/doc/libcxx
+	}
+}
+
+libomp_package() {
+	short_desc+=" - Clang OpenMP support library"
+	pkg_install() {
+		vmove usr/lib/libomp.so
+		vmove "usr/lib/libomptarget.rtl.*.so"
+		vmove usr/lib/libarcher.so
+		vmove "usr/lib/libomp*.so.*"
+	}
+}
+
+libomp-devel_package() {
+	short_desc+=" - Clang OpenMP support library - development files"
+	depends="libomp>=${version}_${revision}"
+	pkg_install() {
+		vmove "usr/lib/libomp*.so"
+		vmove "usr/lib/libarcher*"
+		vmove "usr/include/omp*.h"
+		vmove "usr/lib/clang/${version}/include/omp*.h"
+		vmove usr/share/man/man1/llvmopenmp.1
+		vmove usr/share/doc/openmp
+	}
+}
+
+libllvm14_package() {
+	short_desc+=" - runtime library"
+	pkg_install() {
+		vmove "usr/lib/libLLVM-*.so*"
+	}
+}
diff --git a/srcpkgs/llvm14/update b/srcpkgs/llvm14/update
new file mode 100644
index 000000000000..e95cf26b3586
--- /dev/null
+++ b/srcpkgs/llvm14/update
@@ -0,0 +1,3 @@
+site="https://github.com/llvm/llvm-project/releases"
+pattern="llvmorg-\K(\d+.){2}\d+(-rc\d+)?"
+ignore="*-rc*"

From 8438d62e818f41e2c2663bb6ed0e30d730118cad Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:16:07 +0200
Subject: [PATCH 02/29] llvm: update to 14.0.3.

---
 srcpkgs/llvm/template | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/llvm/template b/srcpkgs/llvm/template
index a92db6f94f9f..d226c61c734e 100644
--- a/srcpkgs/llvm/template
+++ b/srcpkgs/llvm/template
@@ -1,10 +1,10 @@
 # Template file for 'llvm'
 pkgname=llvm
-version=12.0.0
+version=14.0.3
 revision=1
 build_style=meta
-depends="llvm12"
-replaces="llvm11>=0 llvm10>=0 llvm9>=0 llvm8>=0 llvm7>=0 llvm6.0>=0 llvm3.9>=0"
+depends="llvm14"
+replaces="llvm13>=0 llvm12>=0 llvm11>=0 llvm10>=0 llvm9>=0 llvm8>=0 llvm7>=0 llvm6.0>=0 llvm3.9>=0"
 short_desc="LLVM meta package"
 maintainer="Enno Boland <gottox@voidlinux.org>"
 license="Public Domain"

From 92edaa1759b7b52e98fd6a3adf5a761334849304 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:36:32 +0200
Subject: [PATCH 03/29] llvm12: drop non-llvm components

---
 ...clang-001-fix-unwind-chain-inclusion.patch |  44 ---
 .../patches/clang-002-add-musl-triples.patch  | 110 -------
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 -
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ---
 .../compiler-rt-aarch64-ucontext.patch        |  11 -
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 --
 .../llvm12/patches/compiler-rt-size_t.patch   |  10 -
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 ----
 srcpkgs/llvm12/patches/libcxx-musl.patch      |  26 --
 srcpkgs/llvm12/patches/libcxx-ppc.patch       |  22 --
 .../llvm12/patches/libcxx-ssp-nonshared.patch |  11 -
 srcpkgs/llvm12/patches/libcxxabi-dl.patch     |  25 --
 srcpkgs/llvm12/patches/libunwind-ppc32.patch  |  63 ----
 srcpkgs/llvm12/patches/lldb-musl.patch        |  31 --
 .../llvm12/patches/ppc32-compiler-rt.patch    |  21 --
 srcpkgs/llvm12/template                       | 301 +-----------------
 16 files changed, 1 insertion(+), 832 deletions(-)
 delete mode 100644 srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-size_t.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-ppc.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxxabi-dl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libunwind-ppc32.patch
 delete mode 100644 srcpkgs/llvm12/patches/lldb-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/ppc32-compiler-rt.patch

diff --git a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
deleted file mode 100644
index e4eaa7783e7a..000000000000
--- a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 352974169f0d2b5da3d5321f588f5e3b5941330e Mon Sep 17 00:00:00 2001
-From: Andrea Brancaleoni <miwaxe@gmail.com>
-Date: Tue, 8 Sep 2015 22:14:57 +0200
-Subject: [PATCH 2/7] fix unwind chain inclusion
-
----
- lib/Headers/unwind.h | 9 +++++----
- 1 file changed, 5 insertions(+), 4 deletions(-)
-
-diff --git a/lib/Headers/unwind.h b/lib/Headers/unwind.h
-index 303d792..44e10cc 100644
---- a/clang/lib/Headers/unwind.h
-+++ b/clang/lib/Headers/unwind.h
-@@ -9,9 +9,6 @@
- 
- /* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/
- 
--#ifndef __CLANG_UNWIND_H
--#define __CLANG_UNWIND_H
--
- #if defined(__APPLE__) && __has_include_next(<unwind.h>)
- /* Darwin (from 11.x on) provide an unwind.h. If that's available,
-  * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE,
-@@ -39,6 +36,9 @@
- # endif
- #else
- 
-+#ifndef __CLANG_UNWIND_H
-+#define __CLANG_UNWIND_H
-+
- #include <stdint.h>
- 
- #ifdef __cplusplus
-@@ -322,6 +322,7 @@ _Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *);
- }
- #endif
- 
-+#endif /* __CLANG_UNWIND_H */
-+
- #endif
- 
--#endif /* __CLANG_UNWIND_H */
--- 
-2.5.1
diff --git a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
deleted file mode 100644
index 25688d40dbc2..000000000000
--- a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
+++ /dev/null
@@ -1,110 +0,0 @@
---- a/clang/lib/Driver/ToolChains/Gnu.cpp
-+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
-@@ -2086,7 +2086,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
-                                              "armv7hl-redhat-linux-gnueabi",
-                                              "armv6hl-suse-linux-gnueabi",
--                                             "armv7hl-suse-linux-gnueabi"};
-+                                             "armv7hl-suse-linux-gnueabi",
-+                                             "armv7l-linux-gnueabihf"};
-   static const char *const ARMebLibDirs[] = {"/lib"};
-   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
-                                              "armeb-linux-androideabi"};
-@@ -2153,8 +2154,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
-   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
-   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
--                                             "powerpcle-unknown-linux-gnu",
--                                             "powerpcle-linux-musl"};
-+                                             "powerpcle-unknown-linux-gnu"};
- 
-   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
-   static const char *const PPC64Triples[] = {
-@@ -2235,6 +2235,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-     return;
-   }
- 
-+  if (TargetTriple.isMusl()) {
-+    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
-+    static const char *const ARMHFMuslTriples[] = {
-+        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
-+    };
-+    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
-+    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
-+    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
-+    static const char *const MIPSMuslTriples[] = {
-+        "mips-linux-musl", "mipsel-linux-musl",
-+        "mipsel-linux-muslhf", "mips-linux-muslhf"
-+    };
-+    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
-+    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
-+    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
-+    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
-+
-+    switch (TargetTriple.getArch()) {
-+    case llvm::Triple::aarch64:
-+      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
-+      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
-+      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
-+      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
-+      break;
-+    case llvm::Triple::arm:
-+      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
-+      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
-+        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
-+      } else {
-+        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
-+      }
-+      break;
-+    case llvm::Triple::x86_64:
-+      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-+      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
-+      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-+      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
-+      break;
-+    case llvm::Triple::x86:
-+      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-+      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
-+      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-+      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
-+      break;
-+    case llvm::Triple::mips:
-+      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
-+      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
-+      break;
-+    case llvm::Triple::ppc:
-+      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
-+      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
-+      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
-+      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
-+      break;
-+    case llvm::Triple::ppcle:
-+      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
-+      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
-+      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
-+      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
-+      break;
-+    case llvm::Triple::ppc64:
-+      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
-+      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
-+      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
-+      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
-+      break;
-+    case llvm::Triple::ppc64le:
-+      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
-+      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
-+      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
-+      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
-+      break;
-+    default:
-+      break;
-+    }
-+    TripleAliases.push_back(TargetTriple.str());
-+    if (TargetTriple.str() != BiarchTriple.str())
-+      BiarchTripleAliases.push_back(BiarchTriple.str());
-+    return;
-+  }
-+
-   // Android targets should not use GNU/Linux tools or libraries.
-   if (TargetTriple.isAndroid()) {
-     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
deleted file mode 100644
index 4ad6412d1e6c..000000000000
--- a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/clang/lib/Driver/ToolChains/Linux.cpp
-+++ b/clang/lib/Driver/ToolChains/Linux.cpp
-@@ -504,10 +504,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
-     Loader = "ld.so.1";
-     break;
-   case llvm::Triple::ppc64:
--    LibDir = "lib64";
--    Loader =
--        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
--    break;
-   case llvm::Triple::ppc64le:
-     LibDir = "lib64";
-     Loader =
diff --git a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
deleted file mode 100644
index 21fc8003c5f1..000000000000
--- a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
+++ /dev/null
@@ -1,48 +0,0 @@
---- a/clang/lib/Basic/Targets/PPC.h
-+++ b/clang/lib/Basic/Targets/PPC.h
-@@ -415,11 +415,10 @@ public:
-       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
-     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
-       DataLayout = "e-m:e-i64:64-n32:64";
--      ABI = "elfv2";
-     } else {
-       DataLayout = "E-m:e-i64:64-n32:64";
--      ABI = "elfv1";
-     }
-+    ABI = "elfv2";
- 
-     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
-       LongDoubleWidth = LongDoubleAlign = 64;
---- a/clang/lib/CodeGen/TargetInfo.cpp
-+++ b/clang/lib/CodeGen/TargetInfo.cpp
-@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
-       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
- 
-     if (Triple.isOSBinFormatELF()) {
--      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
--      if (getTarget().getABI() == "elfv2")
--        Kind = PPC64_SVR4_ABIInfo::ELFv2;
-+      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
-+      if (getTarget().getABI() == "elfv1")
-+        Kind = PPC64_SVR4_ABIInfo::ELFv1;
-       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
- 
-       return SetCGInfo(
---- a/clang/lib/Driver/ToolChains/Clang.cpp
-+++ b/clang/lib/Driver/ToolChains/Clang.cpp
-@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
-   const llvm::Triple &T = getToolChain().getTriple();
-   if (T.isOSBinFormatELF()) {
-     switch (getToolChain().getArch()) {
--    case llvm::Triple::ppc64: {
--      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
--          T.isOSOpenBSD() || T.isMusl())
--        ABIName = "elfv2";
--      else
--        ABIName = "elfv1";
--      break;
--    }
-+    case llvm::Triple::ppc64:
-     case llvm::Triple::ppc64le:
-       ABIName = "elfv2";
-       break;
diff --git a/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch b/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
deleted file mode 100644
index 893c059d7b8d..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp.orig
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-@@ -1799,7 +1799,7 @@
- 
- static bool Aarch64GetESR(ucontext_t *ucontext, u64 *esr) {
-   static const u32 kEsrMagic = 0x45535201;
--  u8 *aux = ucontext->uc_mcontext.__reserved;
-+  u8 *aux = reinterpret_cast<u8 *>(ucontext->uc_mcontext.__reserved);
-   while (true) {
-     _aarch64_ctx *ctx = (_aarch64_ctx *)aux;
-     if (ctx->size == 0) break;
diff --git a/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch b/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
deleted file mode 100644
index 35f16d24f340..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
+++ /dev/null
@@ -1,35 +0,0 @@
---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-@@ -74,6 +74,10 @@
- #include <sys/utsname.h>
- #endif
- 
-+#if SANITIZER_LINUX && defined(__powerpc__)
-+#include <asm/ptrace.h>
-+#endif
-+
- #if SANITIZER_LINUX && !SANITIZER_ANDROID
- #include <sys/personality.h>
- #endif
---- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
-@@ -92,7 +92,7 @@
- # include <utime.h>
- # include <sys/ptrace.h>
- #if defined(__mips64) || defined(__aarch64__) || defined(__arm__) || \
--    SANITIZER_RISCV64
-+    defined(__powerpc__) || SANITIZER_RISCV64
- #  include <asm/ptrace.h>
- #  ifdef __arm__
- typedef struct user_fpregs elf_fpregset_t;
---- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
-@@ -31,7 +31,7 @@
- #include <sys/types.h> // for pid_t
- #include <sys/uio.h> // for iovec
- #include <elf.h> // for NT_PRSTATUS
--#if (defined(__aarch64__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
-+#if (defined(__aarch64__) || defined(__powerpc__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
- // GLIBC 2.20+ sys/user does not include asm/ptrace.h
- # include <asm/ptrace.h>
- #endif
diff --git a/srcpkgs/llvm12/patches/compiler-rt-size_t.patch b/srcpkgs/llvm12/patches/compiler-rt-size_t.patch
deleted file mode 100644
index 2c63063a5e9e..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-size_t.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/compiler-rt/lib/fuzzer/FuzzerInterceptors.cpp.orig
-+++ b/compiler-rt/lib/fuzzer/FuzzerInterceptors.cpp
-@@ -25,6 +25,7 @@
-   }
- 
- #include <cassert>
-+#include <cstddef>
- #include <cstdint>
- #include <dlfcn.h> // for dlsym()
- 
diff --git a/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch b/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
deleted file mode 100644
index d0b61c80c897..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
+++ /dev/null
@@ -1,62 +0,0 @@
---- a/compiler-rt/lib/xray/xray_powerpc64.inc
-+++ b/compiler-rt/lib/xray/xray_powerpc64.inc
-@@ -12,7 +12,13 @@
- 
- #include <cstdint>
- #include <mutex>
-+#ifdef __GLIBC__
- #include <sys/platform/ppc.h>
-+#else
-+#include <cctype>
-+#include <cstring>
-+#include <cstdlib>
-+#endif
- 
- #include "xray_defs.h"
- 
-@@ -20,13 +26,45 @@ namespace __xray {
- 
- ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
-   CPU = 0;
-+#ifdef __GLIBC__
-   return __ppc_get_timebase();
-+#else
-+  return __builtin_ppc_get_timebase();
-+#endif
- }
- 
- inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
-   static std::mutex M;
-   std::lock_guard<std::mutex> Guard(M);
-+#ifdef __GLIBC__
-   return __ppc_get_timebase_freq();
-+#else
-+  /* FIXME: a less dirty implementation? */
-+  static uint64_t base;
-+  if (!base) {
-+    FILE *f = fopen("/proc/cpuinfo", "rb");
-+    if (f) {
-+      ssize_t nr;
-+      /* virtually always big enough to hold the line */
-+      char buf[512];
-+      while (fgets(buf, sizeof(buf), f)) {
-+        char *ret = strstr(buf, "timebase");
-+        if (!ret) {
-+          continue;
-+        }
-+        ret += sizeof("timebase") - 1;
-+        ret = strchr(ret, ':');
-+        if (!ret) {
-+          continue;
-+        }
-+        base = strtoul(ret + 1, nullptr, 10);
-+        break;
-+      }
-+      fclose(f);
-+    }
-+  }
-+  return base;
-+#endif
- }
- 
- inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
diff --git a/srcpkgs/llvm12/patches/libcxx-musl.patch b/srcpkgs/llvm12/patches/libcxx-musl.patch
deleted file mode 100644
index bbd31ffc2cb1..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-musl.patch
+++ /dev/null
@@ -1,26 +0,0 @@
---- a/libcxx/include/locale
-+++ b/libcxx/include/locale
-@@ -742,7 +742,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
-         typename remove_reference<decltype(errno)>::type __save_errno = errno;
-         errno = 0;
-         char *__p2;
-+#if defined(__linux__) && !defined(__GLIBC__)
-+        long long __ll = strtoll(__a, &__p2, __base);
-+#else
-         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
-+#endif
-         typename remove_reference<decltype(errno)>::type __current_errno = errno;
-         if (__current_errno == 0)
-             errno = __save_errno;
-@@ -782,7 +786,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
-         typename remove_reference<decltype(errno)>::type __save_errno = errno;
-         errno = 0;
-         char *__p2;
-+#if defined(__linux__) && !defined(__GLIBC__)
-+        unsigned long long __ll = strtoull(__a, &__p2, __base);
-+#else
-         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
-+#endif
-         typename remove_reference<decltype(errno)>::type __current_errno = errno;
-         if (__current_errno == 0)
-             errno = __save_errno;
diff --git a/srcpkgs/llvm12/patches/libcxx-ppc.patch b/srcpkgs/llvm12/patches/libcxx-ppc.patch
deleted file mode 100644
index 7a92f8004e1c..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-ppc.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-This ensures `is_iec559` is defined correctly under all long double ABIs,
-including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__`
-is not defined on gcc.
-
---- a/libcxx/include/limits
-+++ b/libcxx/include/limits
-@@ -426,8 +426,14 @@ protected:
-     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
-     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
- 
--#if (defined(__ppc__) || defined(__ppc64__))
-+#if defined(__powerpc__) || defined(__powerpc64__)
-+#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__)
-+    /* IEEE 754 quadruple or double precision */
-+    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
-+#else
-+    /* 128-bit IBM double-double */
-     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
-+#endif
- #else
-     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
- #endif
diff --git a/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch b/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
deleted file mode 100644
index 70292beb2fcd..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/libcxx/CMakeLists.txt
-+++ b/libcxx/CMakeLists.txt
-@@ -769,6 +769,8 @@ function(cxx_link_system_libraries target)
-     target_link_libraries(${target} PRIVATE atomic)
-   endif()
- 
-+#ssp  target_link_libraries(${target} PRIVATE ssp_nonshared)
-+
-   if (MINGW)
-     target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
-   endif()
diff --git a/srcpkgs/llvm12/patches/libcxxabi-dl.patch b/srcpkgs/llvm12/patches/libcxxabi-dl.patch
deleted file mode 100644
index 3a15f9db8c98..000000000000
--- a/srcpkgs/llvm12/patches/libcxxabi-dl.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-Also link to -ldl to prevent undefined references.
-
---- a/libcxxabi/src/CMakeLists.txt
-+++ b/libcxxabi/src/CMakeLists.txt
-@@ -73,6 +73,7 @@
-   endif()
- 
-   add_library_flags_if(LIBCXXABI_HAS_C_LIB c)
-+  add_library_flags_if(LIBCXXABI_HAS_C_LIB dl)
- endif()
- 
- if (LIBCXXABI_USE_LLVM_UNWINDER)
---- a/libcxx/CMakeLists.txt
-+++ b/libcxx/CMakeLists.txt
-@@ -745,6 +745,10 @@
-     target_link_libraries(${target} PRIVATE m)
-   endif()
- 
-+  if (LIBCXX_HAS_C_LIB)
-+    target_link_libraries(${target} PRIVATE dl)
-+  endif()
-+
-   if (LIBCXX_HAS_RT_LIB)
-     target_link_libraries(${target} PRIVATE rt)
-   endif()
diff --git a/srcpkgs/llvm12/patches/libunwind-ppc32.patch b/srcpkgs/llvm12/patches/libunwind-ppc32.patch
deleted file mode 100644
index 74aa7576ecf9..000000000000
--- a/srcpkgs/llvm12/patches/libunwind-ppc32.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-This fixes build at least with gcc9 which does not define `__ppc__`.
-
---- a/libunwind/include/__libunwind_config.h
-+++ b/libunwind/include/__libunwind_config.h
-@@ -49,7 +49,7 @@
- #  define _LIBUNWIND_CONTEXT_SIZE 167
- #  define _LIBUNWIND_CURSOR_SIZE 179
- #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64
--# elif defined(__ppc__)
-+# elif defined(__powerpc__)
- #  define _LIBUNWIND_TARGET_PPC 1
- #  define _LIBUNWIND_CONTEXT_SIZE 117
- #  define _LIBUNWIND_CURSOR_SIZE 124
---- a/libunwind/src/UnwindRegistersRestore.S
-+++ b/libunwind/src/UnwindRegistersRestore.S
-@@ -392,7 +392,7 @@ Lnovec:
-   PPC64_LR(3)
-   bctr
- 
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- 
- DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind13Registers_ppc6jumptoEv)
- //
---- a/libunwind/src/UnwindRegistersSave.S
-+++ b/libunwind/src/UnwindRegistersSave.S
-@@ -554,7 +554,7 @@ DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext)
-   blr
- 
- 
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- 
- //
- // extern int unw_getcontext(unw_context_t* thread_state)
---- a/libunwind/src/config.h
-+++ b/libunwind/src/config.h
-@@ -95,12 +95,12 @@
- #define _LIBUNWIND_BUILD_SJLJ_APIS
- #endif
- 
--#if defined(__i386__) || defined(__x86_64__) || defined(__ppc__) || defined(__ppc64__) || defined(__powerpc64__)
-+#if defined(__i386__) || defined(__x86_64__) || defined(__powerpc__) || defined(__powerpc64__)
- #define _LIBUNWIND_SUPPORT_FRAME_APIS
- #endif
- 
- #if defined(__i386__) || defined(__x86_64__) ||                                \
--    defined(__ppc__) || defined(__ppc64__) || defined(__powerpc64__) ||        \
-+    defined(__powerpc__) || defined(__powerpc64__) ||                          \
-     (!defined(__APPLE__) && defined(__arm__)) ||                               \
-     (defined(__arm64__) || defined(__aarch64__)) ||                            \
-     defined(__mips__)
---- a/libunwind/src/libunwind.cpp
-+++ b/libunwind/src/libunwind.cpp
-@@ -42,7 +42,7 @@ _LIBUNWIND_HIDDEN int __unw_init_local(unw_cursor_t *cursor,
- # define REGISTER_KIND Registers_x86_64
- #elif defined(__powerpc64__)
- # define REGISTER_KIND Registers_ppc64
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- # define REGISTER_KIND Registers_ppc
- #elif defined(__aarch64__)
- # define REGISTER_KIND Registers_arm64
diff --git a/srcpkgs/llvm12/patches/lldb-musl.patch b/srcpkgs/llvm12/patches/lldb-musl.patch
deleted file mode 100644
index 601c0d138523..000000000000
--- a/srcpkgs/llvm12/patches/lldb-musl.patch
+++ /dev/null
@@ -1,31 +0,0 @@
---- a/lldb/source/Plugins/Process/Linux/Procfs.h
-+++ b/lldb/source/Plugins/Process/Linux/Procfs.h
-@@ -10,21 +10,12 @@
- // sys/procfs.h on Android/Linux for all supported architectures.
- 
- #include <sys/ptrace.h>
-+#include <asm/ptrace.h>
- 
--#ifdef __ANDROID__
--#if defined(__arm64__) || defined(__aarch64__)
--typedef unsigned long elf_greg_t;
--typedef elf_greg_t
--    elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
--typedef struct user_fpsimd_state elf_fpregset_t;
--#ifndef NT_FPREGSET
--#define NT_FPREGSET NT_PRFPREG
--#endif // NT_FPREGSET
--#elif defined(__mips__)
--#ifndef NT_FPREGSET
--#define NT_FPREGSET NT_PRFPREG
--#endif // NT_FPREGSET
--#endif
--#else // __ANDROID__
-+#if !defined(__GLIBC__) && defined(__powerpc__)
-+#define pt_regs musl_pt_regs
-+#include <sys/procfs.h>
-+#undef pt_regs
-+#else
- #include <sys/procfs.h>
--#endif // __ANDROID__
-+#endif
diff --git a/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch b/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch
deleted file mode 100644
index 8e0a9a779d1b..000000000000
--- a/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-commit ba4ede595ff9599232f5dd2b4384c243137b53fc
-Author: Daniel Kolesa <daniel@octaforge.org>
-Date:   Tue Jun 22 23:40:54 2021 +0200
-
-    enable compiler-rt support for ppc32
-
-diff --git a/compiler-rt/cmake/base-config-ix.cmake b/compiler-rt/cmake/base-config-ix.cmake
-index 1edab43..5c0c8a2 100644
---- a/compiler-rt/cmake/base-config-ix.cmake
-+++ b/compiler-rt/cmake/base-config-ix.cmake
-@@ -182,9 +182,7 @@ macro(test_targets)
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc64le")
-       test_target_arch(powerpc64le "" "-m64")
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc")
--      if(CMAKE_SYSTEM_NAME MATCHES "AIX")
--        test_target_arch(powerpc "" "-m32")
--      endif()
-+      test_target_arch(powerpc "" "-m32")
-       test_target_arch(powerpc64 "" "-m64")
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "s390x")
-       test_target_arch(s390x "" "")
diff --git a/srcpkgs/llvm12/template b/srcpkgs/llvm12/template
index 7ce18028e4a3..7b361bbbf5bc 100644
--- a/srcpkgs/llvm12/template
+++ b/srcpkgs/llvm12/template
@@ -1,25 +1,17 @@
 # Template file for 'llvm12'
 pkgname=llvm12
 version=12.0.1
-revision=2
+revision=3
 wrksrc="llvm-project-${version}.src"
 build_wrksrc=llvm
 build_style=cmake
 configure_args="
  -DCMAKE_BUILD_TYPE=Release -Wno-dev
  -DENABLE_LINKER_BUILD_ID=YES
- -DLLDB_USE_SYSTEM_SIX=YES
- -DLIBCXX_CXX_ABI=libcxxabi
- -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
- -DLIBCXXABI_USE_LLVM_UNWINDER=YES
- -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
- -DLIBOMP_ENABLE_SHARED=YES
- -DLIBOMP_INSTALL_ALIASES=NO
  -DLLVM_INCLUDE_DOCS=YES
  -DLLVM_BUILD_DOCS=YES
  -DLLVM_ENABLE_SPHINX=YES
  -DSPHINX_WARNINGS_AS_ERRORS=NO
- -DLLVM_INSTALL_UTILS=YES
  -DLLVM_BUILD_LLVM_DYLIB=YES
  -DLLVM_LINK_LLVM_DYLIB=YES
  -DLLVM_ENABLE_RTTI=YES
@@ -51,87 +43,10 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
-_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
-
-_lldb_enable=yes
-_libomp_enable=no
-
-case "$XBPS_TARGET_MACHINE" in
-	ppc64le*) ;;
-	ppc*|i686*) _lldb_enable=no ;;
-esac
-
-case "$XBPS_TARGET_MACHINE" in
-	x86_64*|aarch64*|ppc64*) _libomp_enable=yes;;
-esac
-
-subpackages="clang-tools-extra"
-
-# must go before clang
-if [ "$_libomp_enable" = "yes" ]; then
-	_enabled_projects+=";openmp"
-	subpackages+=" libomp libomp-devel"
-	# because of cmake nonsense referencing libomptarget.so.*
-	depends+=" libomp>=${version}_${revision}"
-fi
-
-subpackages+=" clang clang-analyzer libclang libclang-cpp
- llvm-libunwind llvm-libunwind-devel libcxx libcxx-devel
- libcxxabi libcxxabi-devel libllvm12"
-
-if [ "$_lldb_enable" = "yes" ]; then
-	# XXX fails to cross compile due to python
-	_enabled_projects+=";lldb"
-	subpackages+=" lldb lldb-devel"
-fi
-
-subpackages+=" lld lld-devel"
-
-configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
-
 post_patch() {
-	if [ "$_lldb_enable" = "yes" ]; then
-		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
-			vsed -i 's|__ptrace_request|int|g' \
-				${wrksrc}/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
-		fi
-		# disable docs for lldb as they fail to generate
-		vsed -i '/add_subdirectory(docs)/d' \
-			${wrksrc}/lldb/CMakeLists.txt
-	fi
-
 	# update config.guess for better platform detection
 	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
 		${wrksrc}/llvm/cmake
-
-	# fix linker failures on some archs
-	vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
-		${wrksrc}/libcxxabi/cmake/config-ix.cmake
-	vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
-		${wrksrc}/libcxxabi/cmake/config-ix.cmake
-
-	# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
-	case "$XBPS_TARGET_MACHINE" in
-		ppc64*) ;;
-		ppc*-musl|i686-musl|mips*-musl)
-			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
-				${wrksrc}/libunwind/src/CMakeLists.txt
-			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
-				${wrksrc}/libcxxabi/src/CMakeLists.txt
-			vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
-			;;
-	esac
-
-	case "$XBPS_TARGET_MACHINE" in
-		x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
-			vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
-				${wrksrc}/compiler-rt/CMakeLists.txt
-			;;
-		arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
-			vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
-				${wrksrc}/compiler-rt/cmake/config-ix.cmake
-			;;
-	esac
 }
 
 pre_configure() {
@@ -158,10 +73,8 @@ pre_configure() {
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
 			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
 		make ${makejobs} -C utils/TableGen
-		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
 		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
-		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
 		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
 		cd ../..
 	fi
@@ -202,218 +115,6 @@ do_install() {
 	if [ "$CROSS_BUILD" ]; then
 		rm -f ${DESTDIR}/usr/bin/llvm-config-host
 	fi
-
-	# Install libcxxabi headers
-	vinstall ${wrksrc}/libcxxabi/include/__cxxabi_config.h 644 usr/include
-	vinstall ${wrksrc}/libcxxabi/include/cxxabi.h 644 usr/include
-
-	# Install libunwind headers
-	vinstall ${wrksrc}/libunwind/include/__libunwind_config.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/libunwind.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/unwind.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/mach-o/compact_unwind_encoding.h \
-		644 usr/include/mach-o
-}
-
-clang-analyzer_package() {
-	pycompile_dirs="usr/share/scan-view"
-	depends="clang-${version}_${revision} python3 perl"
-	short_desc+=" - A source code analysis framework"
-	homepage="https://clang-analyzer.llvm.org/"
-	pkg_install() {
-		vmove usr/share/man/man1/scan-build.1
-		vmove "/usr/bin/scan-*"
-		vmove "/usr/share/scan-*"
-		vmove "/usr/libexec/*analyzer"
-	}
-}
-
-clang-tools-extra_package() {
-	lib32disabled=yes
-	depends="clang-${version}_${revision} python3"
-	short_desc+=" - Extra Clang tools"
-	homepage="https://clang.llvm.org/extra/"
-	pkg_install() {
-		vmove usr/include/clang-tidy
-		vmove usr/bin/clang-apply-replacements
-		vmove usr/bin/clang-query
-		vmove usr/bin/clang-rename
-		vmove usr/bin/clang-tidy
-		vmove usr/bin/diagtool
-		vmove usr/bin/find-all-symbols
-		vmove usr/bin/hmaptool
-		vmove usr/bin/modularize
-		vmove usr/bin/pp-trace
-		vmove usr/bin/sancov
-		vmove "usr/lib/libclangApplyReplacements*"
-		vmove "usr/lib/libclangQuery*"
-		vmove "usr/lib/libclangTidy*"
-		vmove "usr/share/clang/*tidy*"
-		vmove usr/share/doc/clang-tools
-		vmove usr/share/man/man1/extraclangtools.1
-		vmove usr/share/man/man1/diagtool.1
-	}
-}
-
-clang_package() {
-	lib32disabled=yes
-	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
-	 libclang-${version}_${revision}"
-	short_desc+=" - C language family frontend"
-	homepage="https://clang.llvm.org/"
-	pkg_install() {
-		vmove usr/include/clang
-		vmove usr/include/clang-c
-		vmove "usr/bin/*clang*"
-		vmove usr/bin/c-index-test
-		vmove usr/lib/clang
-		vmove usr/lib/cmake/clang
-		vmove "usr/lib/libclang*.a"
-		vmove "usr/lib/libclang*.so"
-		vmove usr/share/clang
-		vmove usr/share/doc/clang
-		vmove usr/share/man/man1/clang.1
-	}
-}
-
-libclang_package() {
-	short_desc+=" - C frontend runtime library"
-	pkg_install() {
-		vmove "usr/lib/libclang.so.*"
-	}
-}
-
-libclang-cpp_package() {
-	short_desc+=" - C frontend runtime library (C++ interface)"
-	pkg_install() {
-		vmove "usr/lib/libclang-cpp.so.*"
-	}
-}
-
-lld_package() {
-	lib32disabled=yes
-	short_desc+=" - linker"
-	homepage="https://lld.llvm.org"
-	pkg_install() {
-		vmove usr/bin/lld*
-		vmove usr/bin/wasm-ld
-		vmove usr/bin/ld.lld*
-		vmove usr/bin/ld64.lld*
-		vmove usr/share/doc/lld
-	}
-}
-
-lld-devel_package() {
-	lib32disabled=yes
-	short_desc+=" - linker - development files"
-	homepage="https://lld.llvm.org"
-	depends="lld>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/include/lld
-		vmove usr/lib/cmake/lld
-		vmove "usr/lib/liblld*a"
-	}
-}
-
-lldb_package() {
-	lib32disabled=yes
-	depends+=" python3-six"
-	short_desc+=" - LLDB debugger"
-	homepage="https://lldb.llvm.org/"
-	pkg_install() {
-		vmove usr/bin/*lldb*
-		vmove usr/lib/liblldb*so.*
-		vmove /usr/lib/python*
-	}
-}
-
-lldb-devel_package() {
-	lib32disabled=yes
-	depends="lldb>=${version}_${revision}"
-	short_desc+=" - LLDB debugger - development files"
-	pkg_install() {
-		vmove usr/include/lldb
-		vmove "usr/lib/liblldb*.so"
-	}
-}
-
-llvm-libunwind_package() {
-	short_desc+=" - libunwind"
-	pkg_install() {
-		vmove "usr/lib/libunwind.so.*"
-	}
-}
-
-llvm-libunwind-devel_package() {
-	short_desc+=" - libunwind - development files"
-	depends="llvm-libunwind>=${version}_${revision}"
-	conflicts="libunwind-devel>=0"
-	pkg_install() {
-		vmove usr/lib/libunwind.so
-		vmove usr/lib/libunwind.a
-		vmove "usr/include/*unwind*"
-		vmove usr/include/mach-o
-		vmove usr/share/doc/libunwind
-	}
-}
-
-libcxxabi_package() {
-	short_desc+=" - low level support for libc++"
-	pkg_install() {
-		vmove "usr/lib/libc++abi.so.*"
-	}
-}
-
-libcxxabi-devel_package() {
-	short_desc+=" - low level support for libc++ - development files"
-	depends="libcxxabi>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/lib/libc++abi.so
-		vmove usr/lib/libc++abi.a
-		vmove "usr/include/*cxxabi*"
-	}
-}
-
-libcxx_package() {
-	short_desc+=" - C++ standard library"
-	pkg_install() {
-		vmove "usr/lib/libc++.so.*"
-	}
-}
-
-libcxx-devel_package() {
-	short_desc+=" - C++ standard library - development files"
-	depends="libcxx>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/lib/libc++.so
-		vmove usr/lib/libc++.a
-		vmove usr/lib/libc++experimental.a
-		vmove usr/include/c++
-		vmove usr/share/doc/libcxx
-	}
-}
-
-libomp_package() {
-	short_desc+=" - Clang OpenMP support library"
-	pkg_install() {
-		vmove usr/lib/libomp.so
-		vmove "usr/lib/libomptarget.rtl.*.so"
-		vmove usr/lib/libarcher.so
-		vmove "usr/lib/libomp*.so.*"
-	}
-}
-
-libomp-devel_package() {
-	short_desc+=" - Clang OpenMP support library - development files"
-	depends="libomp>=${version}_${revision}"
-	pkg_install() {
-		vmove "usr/lib/libomp*.so"
-		vmove "usr/lib/libarcher*"
-		vmove "usr/include/omp*.h"
-		vmove "usr/lib/clang/${version}/include/omp*.h"
-		vmove usr/share/man/man1/llvmopenmp.1
-		vmove usr/share/doc/openmp
-	}
 }
 
 libllvm12_package() {

From dd0a815073454885bd6e389186b3464ba9a421a9 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 14:00:28 +0200
Subject: [PATCH 04/29] New packages: clang12, libclang12, libclang12-cpp,
 lld12, lld12-devel.

---
 common/shlibs                                 |   2 +
 srcpkgs/clang12                               |   1 +
 srcpkgs/libclang12                            |   1 +
 srcpkgs/libclang12-cpp                        |   1 +
 srcpkgs/lld12                                 |   1 +
 srcpkgs/lld12-devel                           |   1 +
 ...clang-001-fix-unwind-chain-inclusion.patch |  44 +++++++
 .../patches/clang-002-add-musl-triples.patch  | 110 ++++++++++++++++++
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 +++
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ++++++++
 srcpkgs/llvm12/template                       |  71 +++++++++++
 11 files changed, 293 insertions(+)
 create mode 120000 srcpkgs/clang12
 create mode 120000 srcpkgs/libclang12
 create mode 120000 srcpkgs/libclang12-cpp
 create mode 120000 srcpkgs/lld12
 create mode 120000 srcpkgs/lld12-devel
 create mode 100644 srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch

diff --git a/common/shlibs b/common/shlibs
index 81acc39defb4..86f4c9060d3b 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -975,6 +975,8 @@ libuchardet.so.0 uchardet-0.0.6_1
 libgtksourceviewmm-3.0.so.0 gtksourceviewmm-3.2.0_1
 libyajl.so.2 yajl-2.0.1_1
 libconfuse.so.2 confuse-3.2.1_1
+libclang.so.12 libclang12-12.0.0_1
+libclang-cpp.so.12 libclang12-cpp-12.0.0_1
 liblldb.so.14 lldb-14.0.3_1
 libclang.so.14 libclang-14.0.3_1
 libclang-cpp.so.14 libclang-cpp-14.0.3_1
diff --git a/srcpkgs/clang12 b/srcpkgs/clang12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/clang12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/libclang12 b/srcpkgs/libclang12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/libclang12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/libclang12-cpp b/srcpkgs/libclang12-cpp
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/libclang12-cpp
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/lld12 b/srcpkgs/lld12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/lld12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/lld12-devel b/srcpkgs/lld12-devel
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/lld12-devel
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
new file mode 100644
index 000000000000..e4eaa7783e7a
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
@@ -0,0 +1,44 @@
+From 352974169f0d2b5da3d5321f588f5e3b5941330e Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe@gmail.com>
+Date: Tue, 8 Sep 2015 22:14:57 +0200
+Subject: [PATCH 2/7] fix unwind chain inclusion
+
+---
+ lib/Headers/unwind.h | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/lib/Headers/unwind.h b/lib/Headers/unwind.h
+index 303d792..44e10cc 100644
+--- a/clang/lib/Headers/unwind.h
++++ b/clang/lib/Headers/unwind.h
+@@ -9,9 +9,6 @@
+ 
+ /* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/
+ 
+-#ifndef __CLANG_UNWIND_H
+-#define __CLANG_UNWIND_H
+-
+ #if defined(__APPLE__) && __has_include_next(<unwind.h>)
+ /* Darwin (from 11.x on) provide an unwind.h. If that's available,
+  * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE,
+@@ -39,6 +36,9 @@
+ # endif
+ #else
+ 
++#ifndef __CLANG_UNWIND_H
++#define __CLANG_UNWIND_H
++
+ #include <stdint.h>
+ 
+ #ifdef __cplusplus
+@@ -322,6 +322,7 @@ _Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *);
+ }
+ #endif
+ 
++#endif /* __CLANG_UNWIND_H */
++
+ #endif
+ 
+-#endif /* __CLANG_UNWIND_H */
+-- 
+2.5.1
diff --git a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
new file mode 100644
index 000000000000..25688d40dbc2
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
@@ -0,0 +1,110 @@
+--- a/clang/lib/Driver/ToolChains/Gnu.cpp
++++ b/clang/lib/Driver/ToolChains/Gnu.cpp
+@@ -2086,7 +2086,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
+                                              "armv7hl-redhat-linux-gnueabi",
+                                              "armv6hl-suse-linux-gnueabi",
+-                                             "armv7hl-suse-linux-gnueabi"};
++                                             "armv7hl-suse-linux-gnueabi",
++                                             "armv7l-linux-gnueabihf"};
+   static const char *const ARMebLibDirs[] = {"/lib"};
+   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
+                                              "armeb-linux-androideabi"};
+@@ -2153,8 +2154,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
+   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
+   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
+-                                             "powerpcle-unknown-linux-gnu",
+-                                             "powerpcle-linux-musl"};
++                                             "powerpcle-unknown-linux-gnu"};
+ 
+   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
+   static const char *const PPC64Triples[] = {
+@@ -2235,6 +2235,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+     return;
+   }
+ 
++  if (TargetTriple.isMusl()) {
++    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
++    static const char *const ARMHFMuslTriples[] = {
++        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
++    };
++    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
++    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
++    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
++    static const char *const MIPSMuslTriples[] = {
++        "mips-linux-musl", "mipsel-linux-musl",
++        "mipsel-linux-muslhf", "mips-linux-muslhf"
++    };
++    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
++    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
++    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
++    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
++
++    switch (TargetTriple.getArch()) {
++    case llvm::Triple::aarch64:
++      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      break;
++    case llvm::Triple::arm:
++      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
++      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
++        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
++      } else {
++        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
++      }
++      break;
++    case llvm::Triple::x86_64:
++      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      break;
++    case llvm::Triple::x86:
++      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      break;
++    case llvm::Triple::mips:
++      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
++      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
++      break;
++    case llvm::Triple::ppc:
++      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      break;
++    case llvm::Triple::ppcle:
++      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      break;
++    case llvm::Triple::ppc64:
++      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      break;
++    case llvm::Triple::ppc64le:
++      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      break;
++    default:
++      break;
++    }
++    TripleAliases.push_back(TargetTriple.str());
++    if (TargetTriple.str() != BiarchTriple.str())
++      BiarchTripleAliases.push_back(BiarchTriple.str());
++    return;
++  }
++
+   // Android targets should not use GNU/Linux tools or libraries.
+   if (TargetTriple.isAndroid()) {
+     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
new file mode 100644
index 000000000000..4ad6412d1e6c
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
@@ -0,0 +1,13 @@
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -504,10 +504,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+     Loader = "ld.so.1";
+     break;
+   case llvm::Triple::ppc64:
+-    LibDir = "lib64";
+-    Loader =
+-        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
+-    break;
+   case llvm::Triple::ppc64le:
+     LibDir = "lib64";
+     Loader =
diff --git a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
new file mode 100644
index 000000000000..21fc8003c5f1
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
@@ -0,0 +1,48 @@
+--- a/clang/lib/Basic/Targets/PPC.h
++++ b/clang/lib/Basic/Targets/PPC.h
+@@ -415,11 +415,10 @@ public:
+       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
+     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
+       DataLayout = "e-m:e-i64:64-n32:64";
+-      ABI = "elfv2";
+     } else {
+       DataLayout = "E-m:e-i64:64-n32:64";
+-      ABI = "elfv1";
+     }
++    ABI = "elfv2";
+ 
+     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
+       LongDoubleWidth = LongDoubleAlign = 64;
+--- a/clang/lib/CodeGen/TargetInfo.cpp
++++ b/clang/lib/CodeGen/TargetInfo.cpp
+@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
+       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
+ 
+     if (Triple.isOSBinFormatELF()) {
+-      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
+-      if (getTarget().getABI() == "elfv2")
+-        Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      if (getTarget().getABI() == "elfv1")
++        Kind = PPC64_SVR4_ABIInfo::ELFv1;
+       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
+ 
+       return SetCGInfo(
+--- a/clang/lib/Driver/ToolChains/Clang.cpp
++++ b/clang/lib/Driver/ToolChains/Clang.cpp
+@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
+   const llvm::Triple &T = getToolChain().getTriple();
+   if (T.isOSBinFormatELF()) {
+     switch (getToolChain().getArch()) {
+-    case llvm::Triple::ppc64: {
+-      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
+-          T.isOSOpenBSD() || T.isMusl())
+-        ABIName = "elfv2";
+-      else
+-        ABIName = "elfv1";
+-      break;
+-    }
++    case llvm::Triple::ppc64:
+     case llvm::Triple::ppc64le:
+       ABIName = "elfv2";
+       break;
diff --git a/srcpkgs/llvm12/template b/srcpkgs/llvm12/template
index 7b361bbbf5bc..274b57183654 100644
--- a/srcpkgs/llvm12/template
+++ b/srcpkgs/llvm12/template
@@ -43,6 +43,12 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
+_enabled_projects="clang;lld"
+
+subpackages+=" clang12 libclang12 libclang12-cpp libllvm12 lld12 lld12-devel"
+
+configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+
 post_patch() {
 	# update config.guess for better platform detection
 	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
@@ -73,8 +79,10 @@ pre_configure() {
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
 			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
 		make ${makejobs} -C utils/TableGen
+		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
 		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
+		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
 		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
 		cd ../..
 	fi
@@ -117,6 +125,69 @@ do_install() {
 	fi
 }
 
+clang12_package() {
+	conflicts="clang"
+	lib32disabled=yes
+	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
+	 libclang12-${version}_${revision}"
+	short_desc+=" - C language family frontend"
+	homepage="https://clang.llvm.org/"
+	pkg_install() {
+		vmove usr/include/clang
+		vmove usr/include/clang-c
+		vmove "usr/bin/*clang*"
+		vmove usr/bin/c-index-test
+		vmove usr/lib/clang
+		vmove usr/lib/cmake/clang
+		vmove "usr/lib/libclang*.a"
+		vmove "usr/lib/libclang*.so"
+		vmove usr/share/clang
+		vmove usr/share/doc/clang
+		vmove usr/share/man/man1/clang.1
+	}
+}
+
+libclang12_package() {
+	short_desc+=" - C frontend runtime library"
+	pkg_install() {
+		vmove "usr/lib/libclang.so.*"
+	}
+}
+
+libclang12-cpp_package() {
+	short_desc+=" - C frontend runtime library (C++ interface)"
+	pkg_install() {
+		vmove "usr/lib/libclang-cpp.so.*"
+	}
+}
+
+lld12_package() {
+	conflicts="lld"
+	lib32disabled=yes
+	short_desc+=" - linker"
+	homepage="https://lld.llvm.org"
+	pkg_install() {
+		vmove usr/bin/lld*
+		vmove usr/bin/wasm-ld
+		vmove usr/bin/ld.lld*
+		vmove usr/bin/ld64.lld*
+		vmove usr/share/doc/lld
+	}
+}
+
+lld12-devel_package() {
+	conflicts="lld-devel"
+	lib32disabled=yes
+	short_desc+=" - linker - development files"
+	homepage="https://lld.llvm.org"
+	depends="lld12>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include/lld
+		vmove usr/lib/cmake/lld
+		vmove "usr/lib/liblld*a"
+	}
+}
+
 libllvm12_package() {
 	short_desc+=" - runtime library"
 	pkg_install() {

From 78d156cc0e8cbf8d6628dc316523878417e952be Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 05/29] chromium: update for llvm14

---
 srcpkgs/chromium/template | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/srcpkgs/chromium/template b/srcpkgs/chromium/template
index 0dce8772fdb8..8b604a349229 100644
--- a/srcpkgs/chromium/template
+++ b/srcpkgs/chromium/template
@@ -2,7 +2,7 @@
 pkgname=chromium
 # See https://chromiumdash.appspot.com/releases?platform=Linux for the latest version
 version=101.0.4951.41
-revision=1
+revision=2
 archs="i686* x86_64* aarch64* armv7l* ppc64le*"
 short_desc="Google's attempt at creating a safer, faster, and more stable browser"
 maintainer="Duncaen <duncaen@voidlinux.org>"
@@ -20,7 +20,7 @@ desc_option_debug="Build with debug symbols"
 desc_option_js_optimize="Optimize the JS used for Chromium's UI"
 desc_option_pipewire="Enable support for screen sharing for WebRTC via PipeWire"
 
-hostmakedepends="$(vopt_if clang "clang lld llvm12") python python3 pkgconf perl gperf bison ninja nodejs hwids
+hostmakedepends="$(vopt_if clang "clang lld llvm14") python python3 pkgconf perl gperf bison ninja nodejs hwids
  libatomic-devel libevent-devel libglib-devel $(vopt_if js_optimize openjdk) wayland-devel libepoxy-devel"
 makedepends="libpng-devel gtk+-devel gtk+3-devel nss-devel pciutils-devel
  libXi-devel libgcrypt-devel libgnome-keyring-devel cups-devel elfutils-devel
@@ -266,12 +266,6 @@ do_configure() {
 		'disable_fieldtrial_testing_config=true'
 
 		'is_official_build=true'
-
-		# segfaults with llvm-12.0.1
-		'is_cfi=false'
-		'use_thin_lto=false'
-		'use_cfi_icall=false'
-		'chrome_pgo_phase=0'
 	)
 
 	if [ "$CROSS_BUILD" ]; then

From bc3cf98e2b9f6019b8ca00c820a3b358b091d1a9 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 06/29] ghdl: update for llvm14

---
 srcpkgs/ghdl/patches/{llvm12.patch => llvm.patch} | 2 ++
 srcpkgs/ghdl/template                             | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)
 rename srcpkgs/ghdl/patches/{llvm12.patch => llvm.patch} (82%)

diff --git a/srcpkgs/ghdl/patches/llvm12.patch b/srcpkgs/ghdl/patches/llvm.patch
similarity index 82%
rename from srcpkgs/ghdl/patches/llvm12.patch
rename to srcpkgs/ghdl/patches/llvm.patch
index 8d2f76bfda06..9201816ae053 100644
--- a/srcpkgs/ghdl/patches/llvm12.patch
+++ b/srcpkgs/ghdl/patches/llvm.patch
@@ -7,6 +7,8 @@ index c1c1a6d..dad7c38 100755
         check_version 10.0 $llvm_version ||
         check_version 11.0 $llvm_version ||
 +       check_version 12.0 $llvm_version ||
++       check_version 13.0 $llvm_version ||
++       check_version 14.0 $llvm_version ||
         false; then
      echo "Debugging is enabled with llvm $llvm_version"
    else
diff --git a/srcpkgs/ghdl/template b/srcpkgs/ghdl/template
index e756d8c3cd87..9ca1169b22bd 100644
--- a/srcpkgs/ghdl/template
+++ b/srcpkgs/ghdl/template
@@ -7,7 +7,7 @@
 pkgname=ghdl
 reverts="20181129_1"
 version=1.0.0
-revision=1
+revision=2
 build_style=configure
 configure_args="--prefix=/usr --srcdir=.. --incdir=lib/ghdl/include"
 makedepends="zlib-devel"

From 8744d7d79b7b6f2bdf5e89453a5f8584fdb99df8 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 07/29] qt5: rebuild for llvm14

---
 srcpkgs/qt5/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index ee788fad2019..25f15583a42d 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -3,7 +3,7 @@ pkgname=qt5
 version=5.15.3+20220222
 # commit fcca82ca40a5d8a02a4ddd90846d070f2c58cfad
 # base repo: https://invent.kde.org/qt/qt/qt5
-revision=3
+revision=4
 build_style=meta
 hostmakedepends="cmake clang flex perl glib-devel pkg-config
  python re2c ruby which"

From fdc1b9b45f51d61cb9e93148eb181103a6188f85 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 08/29] tilix: rebuild for llvm14

---
 srcpkgs/tilix/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/tilix/template b/srcpkgs/tilix/template
index d8f014bc78c5..ac1bf7dd3bdd 100644
--- a/srcpkgs/tilix/template
+++ b/srcpkgs/tilix/template
@@ -1,7 +1,7 @@
 # Template file for 'tilix'
 pkgname=tilix
 version=1.9.4
-revision=3
+revision=4
 build_style=meson
 configure_args="-Db_lto=false"
 hostmakedepends="automake gettext-devel gdk-pixbuf glib-devel ldc po4a pkg-config

From 5a1cbff7e2cb513167841e803e7f1f4d905842b4 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 09/29] shiboken2: rebuild for llvm14

---
 srcpkgs/shiboken2/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/shiboken2/template b/srcpkgs/shiboken2/template
index b56613229c13..ab9d2c4cb8f9 100644
--- a/srcpkgs/shiboken2/template
+++ b/srcpkgs/shiboken2/template
@@ -1,7 +1,7 @@
 # Template file for 'shiboken2'
 pkgname=shiboken2
 version=5.15.2
-revision=4
+revision=5
 _pkgname="pyside-setup-opensource-src-${version}"
 wrksrc="${_pkgname/%5.14.2.1/5.14.2}"
 build_wrksrc="sources/shiboken2"

From c448e99709e362dd785b7348faec90e85e0ea8ab Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 10/29] gnome-builder: rebuild for llvm14

---
 srcpkgs/gnome-builder/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/gnome-builder/template b/srcpkgs/gnome-builder/template
index 93559b21774f..5a5a51893ae8 100644
--- a/srcpkgs/gnome-builder/template
+++ b/srcpkgs/gnome-builder/template
@@ -1,7 +1,7 @@
 # Template file for 'gnome-builder'
 pkgname=gnome-builder
 version=41.3
-revision=1
+revision=2
 build_style=meson
 build_helper=qemu
 configure_args="-Dhelp=true -Dnetwork_tests=false"

From c580f7815d7a81d7c4bd56bd27ebcd22b82635d6 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 11/29] bcc: rebuild for llvm14

---
 srcpkgs/bcc/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/bcc/template b/srcpkgs/bcc/template
index 54509b63d5a7..2cfa0a2977d0 100644
--- a/srcpkgs/bcc/template
+++ b/srcpkgs/bcc/template
@@ -1,7 +1,7 @@
 # Template file for 'bcc'
 pkgname=bcc
 version=0.24.0
-revision=1
+revision=2
 wrksrc="bcc"
 build_style=cmake
 configure_args="-DREVISION=${version} -DENABLE_LLVM_SHARED=1"

From 46690d5c043d37c6b3209ce8098e1a7cd85ab123 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 12/29] mesa: rebuild for llvm14

---
 srcpkgs/mesa/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/mesa/template b/srcpkgs/mesa/template
index c90500de7416..8f08262fb135 100644
--- a/srcpkgs/mesa/template
+++ b/srcpkgs/mesa/template
@@ -1,7 +1,7 @@
 # Template file for 'mesa'
 pkgname=mesa
 version=21.3.7
-revision=1
+revision=2
 build_style=meson
 configure_args="-Dglvnd=true -Dshared-glapi=enabled -Dgbm=enabled -Degl=enabled
  -Dosmesa=true -Dgles1=enabled -Dgles2=enabled -Dglx=dri -Ddri3=enabled

From 127a0bb67ac383aecbbe9025649c63cc2ae4a743 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 13/29] juCi++: rebuild for llvm14

---
 srcpkgs/juCi++/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/juCi++/template b/srcpkgs/juCi++/template
index 1a7604b44a00..5103324dec20 100644
--- a/srcpkgs/juCi++/template
+++ b/srcpkgs/juCi++/template
@@ -1,7 +1,7 @@
 # Template file for 'juCi++'
 pkgname=juCi++
 version=1.6.2
-revision=2
+revision=3
 _libclangmm_commit="b342f4dd6de4fe509a692a4b4fcfc7e24aae9590"
 _tiny_commit="c9c8bf810ddad8cd17882b9a9ee628a690e779f5"
 wrksrc="jucipp-v${version}"

From 394ee70e8242cfee71f4afee3dc30ef81f0e7cff Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 14/29] kdevelop: rebuild for llvm14

---
 srcpkgs/kdevelop/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/kdevelop/template b/srcpkgs/kdevelop/template
index 010185849d80..abf08c313071 100644
--- a/srcpkgs/kdevelop/template
+++ b/srcpkgs/kdevelop/template
@@ -1,7 +1,7 @@
 # Template file for 'kdevelop'
 pkgname=kdevelop
 version=21.12.3
-revision=1
+revision=2
 build_style=cmake
 configure_args="-DBUILD_TESTING=OFF"
 hostmakedepends="extra-cmake-modules qt5-qmake qt5-host-tools qt5-tools

From b8e909079e1f1f70b87876da73ad6b1718f2a24d Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 15/29] codelite: rebuild for llvm14

---
 srcpkgs/codelite/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/codelite/template b/srcpkgs/codelite/template
index 3a993a2c0cfb..24e2c879dd45 100644
--- a/srcpkgs/codelite/template
+++ b/srcpkgs/codelite/template
@@ -1,7 +1,7 @@
 # Template file for 'codelite'
 pkgname=codelite
 version=15.0.6
-revision=1
+revision=2
 build_style=cmake
 build_helper=cmake-wxWidgets-gtk3
 configure_args="-DWITH_PCH=0 -DWITH_WX_CONFIG=wx-config-gtk3

From 72aad906e80a17ccc97398f1324176e9d0cf3857 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 16/29] ccls: rebuild for llvm14

---
 srcpkgs/ccls/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/ccls/template b/srcpkgs/ccls/template
index fbb7c6847bc1..40aba3b55bfe 100644
--- a/srcpkgs/ccls/template
+++ b/srcpkgs/ccls/template
@@ -1,7 +1,7 @@
 # Template file for 'ccls'
 pkgname=ccls
 version=0.20210330
-revision=2
+revision=3
 build_style=cmake
 hostmakedepends="clang-tools-extra"
 makedepends="llvm ncurses-devel rapidjson zlib-devel clang-tools-extra"

From 313b9dcaed208ddc1198390cdf5d0f60e01c00c1 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 17/29] clazy: rebuild for llvm14

---
 srcpkgs/clazy/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/clazy/template b/srcpkgs/clazy/template
index 11f3bab55aef..f81de08ab836 100644
--- a/srcpkgs/clazy/template
+++ b/srcpkgs/clazy/template
@@ -1,7 +1,7 @@
 # Template file for 'clazy'
 pkgname=clazy
 version=1.11
-revision=1
+revision=2
 build_style=cmake
 build_helper=qemu
 hostmakedepends="llvm"

From 4550c56aeda7a1fb90cc0c8f1b584a2d1c2ea400 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 18/29] bpftrace: rebuild for llvm14

---
 srcpkgs/bpftrace/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/bpftrace/template b/srcpkgs/bpftrace/template
index 28ab3c626399..eb2480d2230e 100644
--- a/srcpkgs/bpftrace/template
+++ b/srcpkgs/bpftrace/template
@@ -1,7 +1,7 @@
 # Template file for 'bpftrace'
 pkgname=bpftrace
 version=0.14.1
-revision=1
+revision=2
 archs="x86_64* aarch64* ppc64*"
 build_style=cmake
 configure_args="-DBUILD_TESTING=OFF"  # needs root to run

From bd26ab8eff3ab9fc7c1450122507057bda8429fb Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 19/29] rtags: rebuild for llvm14

---
 srcpkgs/rtags/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/rtags/template b/srcpkgs/rtags/template
index b496a1b0e721..9b161e690d76 100644
--- a/srcpkgs/rtags/template
+++ b/srcpkgs/rtags/template
@@ -1,7 +1,7 @@
 # Template file for 'rtags'
 pkgname=rtags
 version=2.38
-revision=5
+revision=6
 build_style=cmake
 # Don't run tests in do_install, please.
 configure_args="-DSKIP_CTEST=TRUE"

From 85c1d5ed55c9cfec26fb359efdf77773f30bc64c Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:07:19 +0200
Subject: [PATCH 20/29] beignet: remove package

---
 srcpkgs/beignet/patches/cl_uint.patch         |  22 -
 ...419a0008e38ef2d9d255d9e9c74e9fba084b.patch | 134 ---
 srcpkgs/beignet/patches/llvm06.patch          |  33 -
 srcpkgs/beignet/patches/llvm08.patch          |  56 --
 srcpkgs/beignet/patches/llvm09.patch          | 111 ---
 srcpkgs/beignet/patches/llvm10.patch          | 347 -------
 srcpkgs/beignet/patches/llvm11.patch          | 937 ------------------
 srcpkgs/beignet/patches/llvm12.patch          | 115 ---
 srcpkgs/beignet/patches/musl.patch            |  11 -
 srcpkgs/beignet/template                      |  22 -
 srcpkgs/beignet/update                        |   1 -
 srcpkgs/removed-packages/template             |   3 +-
 12 files changed, 2 insertions(+), 1790 deletions(-)
 delete mode 100644 srcpkgs/beignet/patches/cl_uint.patch
 delete mode 100644 srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm06.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm08.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm09.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm10.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm11.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm12.patch
 delete mode 100644 srcpkgs/beignet/patches/musl.patch
 delete mode 100644 srcpkgs/beignet/template
 delete mode 100644 srcpkgs/beignet/update

diff --git a/srcpkgs/beignet/patches/cl_uint.patch b/srcpkgs/beignet/patches/cl_uint.patch
deleted file mode 100644
index 86ba00f04e95..000000000000
--- a/srcpkgs/beignet/patches/cl_uint.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/src/cl_api_kernel.c	2017-09-22 10:05:22.000000000 +0200
-+++ b/src/cl_api_kernel.c	2020-03-24 18:27:40.186485887 +0100
-@@ -151,7 +151,7 @@
-         fixed_local_sz[0] = 16;
-         fixed_local_sz[1] = 1;
-       } else {
--        uint j, maxDimSize = 64 /* from 64? */, maxGroupSize = 256; //MAX_WORK_GROUP_SIZE may too large
-+        cl_uint j, maxDimSize = 64 /* from 64? */, maxGroupSize = 256; //MAX_WORK_GROUP_SIZE may too large
-         size_t realGroupSize = 1;
-         for (i = 0; i < work_dim; i++) {
-           for (j = maxDimSize; j > 1; j--) {
---- a/src/cl_enqueue.c	2017-09-22 10:05:22.000000000 +0200
-+++ b/src/cl_enqueue.c	2020-03-24 18:30:12.031479833 +0100
-@@ -494,7 +494,7 @@
- cl_int cl_enqueue_svm_free(enqueue_data *data, cl_int status) {
-   int i;
-   void **pointers = data->pointers;
--  uint num_svm_ptrs = data->size;
-+  cl_uint num_svm_ptrs = data->size;
-   cl_int err = CL_SUCCESS;
- 
-   if (status != CL_COMPLETE)
diff --git a/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch b/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
deleted file mode 100644
index 8de9e6e2f093..000000000000
--- a/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
+++ /dev/null
@@ -1,134 +0,0 @@
-From e1b2419a0008e38ef2d9d255d9e9c74e9fba084b Mon Sep 17 00:00:00 2001
-From: "Rebecca N. Palmer" <rebecca_palmer@zoho.com>
-Date: Sat, 21 Jul 2018 20:05:54 +0100
-Subject: Add preliminary LLVM 7 support
-
-This is preliminary because LLVM 7 has not been released yet:
-it was tested with the snapshot from Debian experimental (svn336894).
-
-1.Change linking order, as clangCodeGen now links to clangFrontend
-2.Pass references not pointers to WriteBitcodeToFile and CloneModule
-3.Add the headers that LoopSimplifyID, LCSSAID and
-some create*Pass have moved to
-4.Define our DEBUG whether or not we just undefined LLVM's
-(theirs is now LLVM_DEBUG, but we never actually use it)
-
-Signed-off-by: Rebecca N. Palmer <rebecca_palmer@zoho.com>
-Reviewed-by: Yang Rong <rong.r.yang@intel.com>
----
- CMake/FindLLVM.cmake                     | 2 +-
- backend/src/backend/gen_program.cpp      | 8 ++++++++
- backend/src/backend/program.cpp          | 4 ++++
- backend/src/llvm/ExpandLargeIntegers.cpp | 2 +-
- backend/src/llvm/llvm_bitcode_link.cpp   | 4 ++++
- backend/src/llvm/llvm_includes.hpp       | 4 ++++
- 6 files changed, 22 insertions(+), 2 deletions(-)
-
-diff --git a/CMake/FindLLVM.cmake b/CMake/FindLLVM.cmake
-index 5457f24..f882589 100644
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -113,10 +113,10 @@ macro(add_one_lib name)
- endmacro()
- 
- #Assume clang lib path same as llvm lib path
-+add_one_lib("clangCodeGen")
- add_one_lib("clangFrontend")
- add_one_lib("clangSerialization")
- add_one_lib("clangDriver")
--add_one_lib("clangCodeGen")
- add_one_lib("clangSema")
- add_one_lib("clangStaticAnalyzerFrontend")
- add_one_lib("clangStaticAnalyzerCheckers")
-diff --git a/backend/src/backend/gen_program.cpp b/backend/src/backend/gen_program.cpp
-index 274c99c..4159234 100644
---- a/backend/src/backend/gen_program.cpp
-+++ b/backend/src/backend/gen_program.cpp
-@@ -454,7 +454,11 @@ namespace gbe {
- #ifdef GBE_COMPILER_AVAILABLE
-       std::string str;
-       llvm::raw_string_ostream OS(str);
-+#if LLVM_VERSION_MAJOR >= 7
-+      llvm::WriteBitcodeToFile(*((llvm::Module*)prog->module), OS);
-+#else
-       llvm::WriteBitcodeToFile((llvm::Module*)prog->module, OS);
-+#endif
-       std::string& bin_str = OS.str();
-       int llsz = bin_str.size();
-       *binary = (char *)malloc(sizeof(char) * (llsz+1) );
-@@ -545,7 +549,11 @@ namespace gbe {
-                                     &modRef);
-         src = llvm::unwrap(modRef);
-       }
-+#if LLVM_VERSION_MAJOR >= 7
-+      llvm::Module* clone = llvm::CloneModule(*src).release();
-+#else
-       llvm::Module* clone = llvm::CloneModule(src).release();
-+#endif
-       if (LLVMLinkModules2(wrap(dst), wrap(clone))) {
- #elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-       if (LLVMLinkModules(wrap(dst), wrap(src), LLVMLinkerPreserveSource_Removed, &errMsg)) {
-diff --git a/backend/src/backend/program.cpp b/backend/src/backend/program.cpp
-index c37c595..b36f7b4 100644
---- a/backend/src/backend/program.cpp
-+++ b/backend/src/backend/program.cpp
-@@ -794,7 +794,11 @@ namespace gbe {
-       llvm::raw_fd_ostream ostream (dumpSPIRBinaryName.c_str(),
-                                     err, llvm::sys::fs::F_None);
-       if (!err)
-+#if LLVM_VERSION_MAJOR<7
-         llvm::WriteBitcodeToFile(*out_module, ostream);
-+#else
-+        llvm::WriteBitcodeToFile(**out_module, ostream);
-+#endif
-     }
- #endif
-     return true;
-diff --git a/backend/src/llvm/ExpandLargeIntegers.cpp b/backend/src/llvm/ExpandLargeIntegers.cpp
-index 8515dc1..4aec44e 100644
---- a/backend/src/llvm/ExpandLargeIntegers.cpp
-+++ b/backend/src/llvm/ExpandLargeIntegers.cpp
-@@ -99,8 +99,8 @@ using namespace llvm;
- 
- #ifdef DEBUG
-   #undef DEBUG
--  #define DEBUG(...)
- #endif
-+#define DEBUG(...)
- // Break instructions up into no larger than 64-bit chunks.
- static const unsigned kChunkBits = 64;
- static const unsigned kChunkBytes = kChunkBits / CHAR_BIT;
-diff --git a/backend/src/llvm/llvm_bitcode_link.cpp b/backend/src/llvm/llvm_bitcode_link.cpp
-index ef56e4c..4c3e20e 100644
---- a/backend/src/llvm/llvm_bitcode_link.cpp
-+++ b/backend/src/llvm/llvm_bitcode_link.cpp
-@@ -340,7 +340,11 @@ namespace gbe
-     /* We use beignet's bitcode as dst because it will have a lot of
-        lazy functions which will not be loaded. */
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 39
-+#if LLVM_VERSION_MAJOR >= 7
-+    llvm::Module * linked_module = llvm::CloneModule(*(llvm::Module*)mod).release();
-+#else
-     llvm::Module * linked_module = llvm::CloneModule((llvm::Module*)mod).release();
-+#endif
-     if(LLVMLinkModules2(wrap(clonedLib), wrap(linked_module))) {
- #else
-     char* errorMsg;
-diff --git a/backend/src/llvm/llvm_includes.hpp b/backend/src/llvm/llvm_includes.hpp
-index 184553a..ffccf02 100644
---- a/backend/src/llvm/llvm_includes.hpp
-+++ b/backend/src/llvm/llvm_includes.hpp
-@@ -89,6 +89,10 @@
- #include "llvm/CodeGen/IntrinsicLowering.h"
- 
- #include "llvm/Transforms/Scalar.h"
-+#if LLVM_VERSION_MAJOR >= 7
-+#include "llvm/Transforms/Utils.h"
-+#include "llvm/Transforms/InstCombine/InstCombine.h"
-+#endif
- #include "llvm/MC/MCAsmInfo.h"
- #include "llvm/MC/MCContext.h"
- #include "llvm/MC/MCInstrInfo.h"
--- 
-cgit v1.1
-
diff --git a/srcpkgs/beignet/patches/llvm06.patch b/srcpkgs/beignet/patches/llvm06.patch
deleted file mode 100644
index 3389e66c82df..000000000000
--- a/srcpkgs/beignet/patches/llvm06.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-Source: Arch Linux
-Upstream: unknown
-Reason: fixes llvm6 compilation
-
---- a/backend/src/llvm/llvm_to_gen.cpp	2017-10-24 09:04:48.000000000 +0300
-+++ b/backend/src/llvm/llvm_to_gen.cpp	2018-03-16 16:08:54.669963824 +0200
-@@ -322,7 +322,11 @@ namespace gbe
-     DataLayout DL(&mod);
-     
-     gbeDiagnosticContext dc;
-+#if LLVM_VERSION_MAJOR >= 6
-+    mod.getContext().setDiagnosticHandlerCallBack(&gbeDiagnosticHandler,&dc);
-+#else
-     mod.getContext().setDiagnosticHandler(&gbeDiagnosticHandler,&dc);
-+#endif
- 
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-     mod.setDataLayout(DL);
---- a/backend/src/llvm/llvm_unroll.cpp	2017-10-24 09:04:48.000000000 +0300
-+++ b/backend/src/llvm/llvm_unroll.cpp	2018-03-16 16:09:47.736403557 +0200
-@@ -205,7 +205,9 @@ namespace gbe {
-           if (parentTripCount != 0 && currTripCount * parentTripCount > 32) {
-             //Don't change the unrollID if doesn't force unroll.
-             //setUnrollID(parentL, false);
--#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-+#if LLVM_VERSION_MAJOR >= 6
-+            loopInfo.erase(parentL);
-+#elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-             loopInfo.markAsRemoved(parentL);
- #else
-             LPM.deleteLoopFromQueue(parentL);
-Only in Beignet-1.3.2-Source: build
-
diff --git a/srcpkgs/beignet/patches/llvm08.patch b/srcpkgs/beignet/patches/llvm08.patch
deleted file mode 100644
index a0c5e7a7c4f7..000000000000
--- a/srcpkgs/beignet/patches/llvm08.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 75c152599a7c1739e6dadcdb9b377acf7e44d9cf Mon Sep 17 00:00:00 2001
-From: Jan Beich <jbeich@FreeBSD.org>
-Date: Wed, 30 Jan 2019 12:42:34 +0000
-Subject: [PATCH] lang/beignet: unbreak with llvm80
-
-Regressed by https://github.com/llvm/llvm-project/commit/721d95713a9e
-
-unable to load /usr/local/lib/beignet//libgbeinterp.so which is part of the driver, please check!
-ld-elf.so.1: /usr/local/lib/beignet//libgbeinterp.so: Undefined symbol "_ZN4llvm24DisableABIBreakingChecksE"
-
-Regressed by https://github.com/llvm/llvm-project/commit/4a2d58e16acc
-
-backend/src/llvm/llvm_gen_backend.cpp:3076:5: error:
-      unknown type name 'TerminatorInst'
-    TerminatorInst *term = bb->getTerminator();
-    ^
-backend/src/llvm/llvm_gen_backend.cpp:3083:5: error:
-      unknown type name 'TerminatorInst'
-    TerminatorInst *term = bb->getTerminator();
-    ^
-
---- a/backend/src/CMakeLists.txt	2017-09-22 08:05:22 UTC
-+++ b/backend/src/CMakeLists.txt
-@@ -168,6 +168,7 @@ add_dependencies(gbe beignet_bitcode)
- endif (NOT (USE_STANDALONE_GBE_COMPILER STREQUAL "true"))
- 
- add_library(gbeinterp SHARED gbe_bin_interpreter.cpp)
-+target_link_libraries(gbeinterp ${LLVM_MODULE_LIBS})
- 
- if (LLVM_VERSION_NODOT VERSION_EQUAL 34)
-   find_library(TERMINFO NAMES tinfo ncurses)
---- a/backend/src/llvm/llvm_gen_backend.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -3073,14 +3073,22 @@ namespace gbe
- 
- 
-   static unsigned getChildNo(BasicBlock *bb) {
-+#if LLVM_VERSION_MAJOR < 8
-     TerminatorInst *term = bb->getTerminator();
-+#else
-+    Instruction *term = bb->getTerminator();
-+#endif
-     return term->getNumSuccessors();
-   }
- 
-   // return NULL if index out-range of children number
-   static BasicBlock *getChildPossible(BasicBlock *bb, unsigned index) {
- 
-+#if LLVM_VERSION_MAJOR < 8
-     TerminatorInst *term = bb->getTerminator();
-+#else
-+    Instruction *term = bb->getTerminator();
-+#endif
-     unsigned childNo = term->getNumSuccessors();
-     BasicBlock *child = NULL;
-     if(index < childNo) {
diff --git a/srcpkgs/beignet/patches/llvm09.patch b/srcpkgs/beignet/patches/llvm09.patch
deleted file mode 100644
index acaeceabb6dd..000000000000
--- a/srcpkgs/beignet/patches/llvm09.patch
+++ /dev/null
@@ -1,111 +0,0 @@
-Source: FreeBSD + q66
-
-Mostly FreeBSD other than FindLLVM.cmake changes.
-Linking against clang-cpp does not work for us.
-
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -140,6 +140,7 @@ add_one_lib("clangStaticAnalyzerCore")
- add_one_lib("clangAnalysis")
- add_one_lib("clangEdit")
- add_one_lib("clangAST")
-+add_one_lib("clangASTMatchers")
- add_one_lib("clangParse")
- add_one_lib("clangSema")
- add_one_lib("clangLex")
---- a/backend/src/llvm/llvm_intrinsic_lowering.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_intrinsic_lowering.cpp
-@@ -77,7 +77,11 @@ namespace gbe {
-         std::vector<Type *> ParamTys;
-         for (Value** I = ArgBegin; I != ArgEnd; ++I)
-           ParamTys.push_back((*I)->getType());
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+        FunctionCallee FCache = M->getOrInsertFunction(NewFn,
-+#else
-         Constant* FCache = M->getOrInsertFunction(NewFn,
-+#endif
-                                         FunctionType::get(RetTy, ParamTys, false));
- 
-         IRBuilder<> Builder(CI->getParent(), BasicBlock::iterator(CI));
---- a/backend/src/llvm/llvm_sampler_fix.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp
-@@ -82,7 +82,11 @@ namespace gbe {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-           Module *M = I->getParent()->getParent()->getParent();
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+          FunctionCallee samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#endif
- #else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType(), nullptr);
- #endif
-@@ -124,7 +128,11 @@ namespace gbe {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-           Module *M = I->getParent()->getParent()->getParent();
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+          FunctionCallee samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#endif
- #else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType(), nullptr);
- #endif
---- a/backend/src/llvm/llvm_profiling.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_profiling.cpp
-@@ -163,10 +163,18 @@ namespace gbe
-       // __gen_ocl_store_timestamp(int nth, int type);
-       Value *Args[2] = {ConstantInt::get(intTy, pointNum++), ConstantInt::get(intTy, profilingType)};
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+      builder->CreateCall(module->getOrInsertFunction(
-+#else
-       builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-+#endif
-               "__gen_ocl_calc_timestamp", Type::getVoidTy(module->getContext()),
-               IntegerType::getInt32Ty(module->getContext()),
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+              IntegerType::getInt32Ty(module->getContext())),
-+#else
-               IntegerType::getInt32Ty(module->getContext()))),
-+#endif
-               ArrayRef<Value*>(Args));
- #else
-       builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-@@ -185,10 +193,18 @@ namespace gbe
-     Value *Args2[2] = {profilingBuf, ConstantInt::get(intTy, profilingType)};
- 
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+    builder->CreateCall(module->getOrInsertFunction(
-+#else
-     builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-+#endif
-             "__gen_ocl_store_profiling", Type::getVoidTy(module->getContext()),
-             ptrTy,
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+            IntegerType::getInt32Ty(module->getContext())),
-+#else
-             IntegerType::getInt32Ty(module->getContext()))),
-+#endif
-             ArrayRef<Value*>(Args2));
- #else
-     builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
---- a/backend/src/llvm/llvm_device_enqueue.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_device_enqueue.cpp
-@@ -398,8 +398,13 @@ namespace gbe {
-               std::vector<Type *> ParamTys;
-               for (Value** iter = args.begin(); iter != args.end(); ++iter)
-                 ParamTys.push_back((*iter)->getType());
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+              CallInst* newCI = builder.CreateCall(mod->getOrInsertFunction(
-+                              "__gen_enqueue_kernel_slm", FunctionType::get(intTy, ParamTys, false)), args);
-+#else
-               CallInst* newCI = builder.CreateCall(cast<llvm::Function>(mod->getOrInsertFunction(
-                               "__gen_enqueue_kernel_slm", FunctionType::get(intTy, ParamTys, false))), args);
-+#endif
-               CI->replaceAllUsesWith(newCI);
-               deadInsnSet.insert(CI);
-             }
diff --git a/srcpkgs/beignet/patches/llvm10.patch b/srcpkgs/beignet/patches/llvm10.patch
deleted file mode 100644
index 8aafe48a240d..000000000000
--- a/srcpkgs/beignet/patches/llvm10.patch
+++ /dev/null
@@ -1,347 +0,0 @@
-diff --git CMake/FindLLVM.cmake CMake/FindLLVM.cmake
-index 0a59e47..6e90923 100644
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -104,28 +104,16 @@ string(REGEX REPLACE " *\n" "" LLVM_SYSTEM_LIBS ${LLVM_SYSTEM_LIBS_ORIG})
- endif (LLVM_SYSTEM_LIBS_ORIG)
- endif (LLVM_VERSION_NODOT VERSION_GREATER 34)
- 
-+#something harmless because whitespace at start is an error
-+set(CLANG_LIBRARIES "-ldl")
- macro(add_one_lib name)
-   FIND_LIBRARY(CLANG_LIB
-     NAMES ${name}
-     PATHS ${LLVM_LIBRARY_DIR} NO_DEFAULT_PATH)
--  set(CLANG_LIBRARIES ${CLANG_LIBRARIES} ${CLANG_LIB})
-+  set(CLANG_LIBRARIES "${CLANG_LIBRARIES} ${CLANG_LIB}")
-+  message(STATUS "clanglibs name ${name} this ${CLANG_LIB} all ${CLANG_LIBRARIES} ")
- 	unset(CLANG_LIB CACHE)
- endmacro()
- 
- #Assume clang lib path same as llvm lib path
--add_one_lib("clangCodeGen")
--add_one_lib("clangFrontend")
--add_one_lib("clangSerialization")
--add_one_lib("clangDriver")
--add_one_lib("clangSema")
--add_one_lib("clangStaticAnalyzerFrontend")
--add_one_lib("clangStaticAnalyzerCheckers")
--add_one_lib("clangStaticAnalyzerCore")
--add_one_lib("clangAnalysis")
--add_one_lib("clangEdit")
--add_one_lib("clangAST")
--add_one_lib("clangASTMatchers")
--add_one_lib("clangParse")
--add_one_lib("clangSema")
--add_one_lib("clangLex")
--add_one_lib("clangBasic")
-+add_one_lib("clang-cpp")
-diff --git CMakeLists.txt CMakeLists.txt
-index c11acbb..08f427d 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -79,7 +79,7 @@ elseif (COMPILER STREQUAL "CLANG")
- elseif (COMPILER STREQUAL "ICC")
-   set (CMAKE_C_CXX_FLAGS "${CMAKE_C_CXX_FLAGS}  -wd2928 -Wall -fPIC -fstrict-aliasing -fp-model fast -msse4.1 -Wl,-E")
- endif ()
--set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
-+set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof")
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
- set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
- set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
-diff --git backend/src/backend/program.cpp backend/src/backend/program.cpp
-index b36f7b4..e666031 100644
---- a/backend/src/backend/program.cpp
-+++ b/backend/src/backend/program.cpp
-@@ -694,9 +694,9 @@ namespace gbe {
- #endif
-                 );
- 
-+    llvm::cl::ResetAllOptionOccurrences();
-     clang::CompilerInvocation::CreateFromArgs(*CI,
--                                              &args[0],
--                                              &args[0] + args.size(),
-+                                              clang::ArrayRef<const char*>(args),
-                                               Diags);
-     // Create the compiler instance
-     clang::CompilerInstance Clang;
-@@ -1242,8 +1242,7 @@ EXTEND_QUOTE:
-       // Create the compiler invocation
-       std::unique_ptr<clang::CompilerInvocation> CI(new clang::CompilerInvocation);
-       return clang::CompilerInvocation::CreateFromArgs(*CI,
--                                                       &args[0],
--                                                       &args[0] + args.size(),
-+                                                       clang::ArrayRef<const char*>(args),
-                                                        Diags);
-     }
- #endif
-diff --git backend/src/llvm/llvm_gen_backend.cpp backend/src/llvm/llvm_gen_backend.cpp
-index c6fc30d..82441d8 100644
---- a/backend/src/llvm/llvm_gen_backend.cpp
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -575,10 +575,12 @@ namespace gbe
-         has_errors(false),
-         legacyMode(true)
-     {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-       initializeLoopInfoWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeLoopInfoPass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-       pass = PASS_EMIT_REGISTERS;
-     }
-diff --git backend/src/llvm/llvm_gen_backend.hpp backend/src/llvm/llvm_gen_backend.hpp
-index b4715b1..8e74f7a 100644
---- a/backend/src/llvm/llvm_gen_backend.hpp
-+++ b/backend/src/llvm/llvm_gen_backend.hpp
-@@ -130,10 +130,10 @@ namespace gbe
-   llvm::FunctionPass *createGenPass(ir::Unit &unit);
- 
-   /*! Remove the GEP instructions */
--  llvm::BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit);
-+  llvm::FunctionPass *createRemoveGEPPass(const ir::Unit &unit);
- 
-   /*! Merge load/store if possible */
--  llvm::BasicBlockPass *createLoadStoreOptimizationPass();
-+  llvm::FunctionPass *createLoadStoreOptimizationPass();
- 
-   /*! Scalarize all vector op instructions */
-   llvm::FunctionPass* createScalarizePass();
-@@ -141,7 +141,7 @@ namespace gbe
-   llvm::ModulePass* createBarrierNodupPass(bool);
- 
-   /*! Convert the Intrinsic call to gen function */
--  llvm::BasicBlockPass *createIntrinsicLoweringPass();
-+  llvm::FunctionPass *createIntrinsicLoweringPass();
- 
-   /*! Passer the printf function call. */
-   llvm::FunctionPass* createPrintfParserPass(ir::Unit &unit);
-diff --git backend/src/llvm/llvm_intrinsic_lowering.cpp backend/src/llvm/llvm_intrinsic_lowering.cpp
-index 94f0ce6..b5539e9 100644
---- a/backend/src/llvm/llvm_intrinsic_lowering.cpp
-+++ b/backend/src/llvm/llvm_intrinsic_lowering.cpp
-@@ -29,12 +29,12 @@
- using namespace llvm;
- 
- namespace gbe {
--    class InstrinsicLowering : public BasicBlockPass
-+    class InstrinsicLowering : public FunctionPass
-     {
-     public:
-       static char ID;
-       InstrinsicLowering() :
--        BasicBlockPass(ID) {}
-+        FunctionPass(ID) {}
- 
-       void getAnalysisUsage(AnalysisUsage &AU) const {
- 
-@@ -93,9 +93,9 @@ namespace gbe {
-         CI->eraseFromParent();
-         return NewCI;
-       }
--      virtual bool runOnBasicBlock(BasicBlock &BB)
-+      virtual bool runOnFunction(Function &F)
-       {
--        bool changedBlock = false;
-+        for (BasicBlock &BB : F) {
-         Module *M = BB.getParent()->getParent();
- 
-         DataLayout TD(M);
-@@ -159,13 +159,14 @@ namespace gbe {
-             }
-           }
-         }
--        return changedBlock;
-+        }
-+        return true;
-       }
-     };
- 
-     char InstrinsicLowering::ID = 0;
- 
--    BasicBlockPass *createIntrinsicLoweringPass() {
-+    FunctionPass *createIntrinsicLoweringPass() {
-       return new InstrinsicLowering();
-     }
- } // end namespace
-diff --git backend/src/llvm/llvm_loadstore_optimization.cpp backend/src/llvm/llvm_loadstore_optimization.cpp
-index 5aa38be..e314302 100644
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
-@@ -26,13 +26,13 @@
- 
- using namespace llvm;
- namespace gbe {
--  class GenLoadStoreOptimization : public BasicBlockPass {
-+  class GenLoadStoreOptimization : public FunctionPass {
- 
-   public:
-     static char ID;
-     ScalarEvolution *SE;
-     const DataLayout *TD;
--    GenLoadStoreOptimization() : BasicBlockPass(ID) {}
-+    GenLoadStoreOptimization() : FunctionPass(ID) {}
- 
-     void getAnalysisUsage(AnalysisUsage &AU) const {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-@@ -45,7 +45,9 @@ namespace gbe {
-       AU.setPreservesCFG();
-     }
- 
--    virtual bool runOnBasicBlock(BasicBlock &BB) {
-+    virtual bool runOnFunction(Function &F) {
-+        bool changedAnyBlock = false;
-+        for (BasicBlock &BB : F) {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-       SE = &getAnalysis<ScalarEvolutionWrapperPass>().getSE();
- #else
-@@ -59,7 +61,9 @@ namespace gbe {
-       #else
-         TD = getAnalysisIfAvailable<DataLayout>();
-       #endif
--      return optimizeLoadStore(BB);
-+           changedAnyBlock = optimizeLoadStore(BB) | changedAnyBlock;
-+        }
-+        return changedAnyBlock;
-     }
-     Type    *getValueType(Value *insn);
-     Value   *getPointerOperand(Value *I);
-@@ -148,7 +152,7 @@ namespace gbe {
-       values.push_back(merged[i]);
-     }
-     LoadInst *ld = cast<LoadInst>(merged[0]);
--    unsigned align = ld->getAlignment();
-+    MaybeAlign align = ld->getAlign();
-     unsigned addrSpace = ld->getPointerAddressSpace();
-     // insert before first load
-     Builder.SetInsertPoint(ld);
-@@ -231,7 +235,7 @@ namespace gbe {
- 
-     unsigned addrSpace = st->getPointerAddressSpace();
- 
--    unsigned align = st->getAlignment();
-+    MaybeAlign align = st->getAlign();
-     // insert before the last store
-     Builder.SetInsertPoint(merged[size-1]);
- 
-@@ -325,7 +329,7 @@ namespace gbe {
-     return changed;
-   }
- 
--  BasicBlockPass *createLoadStoreOptimizationPass() {
-+  FunctionPass *createLoadStoreOptimizationPass() {
-     return new GenLoadStoreOptimization();
-   }
- };
-diff --git backend/src/llvm/llvm_passes.cpp backend/src/llvm/llvm_passes.cpp
-index 10752a3..b8f2282 100644
---- a/backend/src/llvm/llvm_passes.cpp
-+++ b/backend/src/llvm/llvm_passes.cpp
-@@ -37,7 +37,7 @@
- #include "sys/map.hpp"
- 
- using namespace llvm;
--
-+template class cfg::Update<BasicBlock *>;
- namespace gbe
- {
-   bool isKernelFunction(const llvm::Function &F) {
-@@ -219,13 +219,13 @@ namespace gbe
-     return offset;
-   }
- 
--  class GenRemoveGEPPasss : public BasicBlockPass
-+  class GenRemoveGEPPasss : public FunctionPass
-   {
- 
-    public:
-     static char ID;
-     GenRemoveGEPPasss(const ir::Unit &unit) :
--      BasicBlockPass(ID),
-+      FunctionPass(ID),
-       unit(unit) {}
-     const ir::Unit &unit;
-     void getAnalysisUsage(AnalysisUsage &AU) const {
-@@ -242,16 +242,18 @@ namespace gbe
- 
-     bool simplifyGEPInstructions(GetElementPtrInst* GEPInst);
- 
--    virtual bool runOnBasicBlock(BasicBlock &BB)
-+    virtual bool runOnFunction(Function &F)
-     {
--      bool changedBlock = false;
-+      bool changedAnyBlock = false;
-+        for (BasicBlock &BB : F) {
-       iplist<Instruction>::iterator I = BB.getInstList().begin();
-       for (auto nextI = I, E = --BB.getInstList().end(); I != E; I = nextI) {
-         iplist<Instruction>::iterator I = nextI++;
-         if(GetElementPtrInst* gep = dyn_cast<GetElementPtrInst>(&*I))
--          changedBlock = (simplifyGEPInstructions(gep) || changedBlock);
-+          changedAnyBlock = (simplifyGEPInstructions(gep) | changedAnyBlock);
-       }
--      return changedBlock;
-+        }
-+      return changedAnyBlock;
-     }
-   };
- 
-@@ -367,7 +369,7 @@ namespace gbe
-     return true;
-   }
- 
--  BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit) {
-+  FunctionPass *createRemoveGEPPass(const ir::Unit &unit) {
-     return new GenRemoveGEPPasss(unit);
-   }
- } /* namespace gbe */
-diff --git backend/src/llvm/llvm_sampler_fix.cpp backend/src/llvm/llvm_sampler_fix.cpp
-index 2a097c8..863be6d 100644
---- a/backend/src/llvm/llvm_sampler_fix.cpp
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp
-@@ -33,10 +33,12 @@ namespace gbe {
-   class SamplerFix : public FunctionPass {
-   public:
-     SamplerFix() : FunctionPass(ID) {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
-       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-     }
- 
-diff --git backend/src/llvm/llvm_scalarize.cpp backend/src/llvm/llvm_scalarize.cpp
-index e9a2a66..e9d2ee4 100644
---- a/backend/src/llvm/llvm_scalarize.cpp
-+++ b/backend/src/llvm/llvm_scalarize.cpp
-@@ -96,10 +96,12 @@ namespace gbe {
- 
-     Scalarize() : FunctionPass(ID)
-     {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
-       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-     }
- 
-diff --git utests/CMakeLists.txt utests/CMakeLists.txt
-index 300d87a..64179c7 100644
---- a/utests/CMakeLists.txt
-+++ b/utests/CMakeLists.txt
-@@ -26,8 +26,8 @@ if (NOT NOT_BUILD_STAND_ALONE_UTEST)
-   # Threads
-   Find_Package(Threads)
- 
--  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
--  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
-+  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof -ffloat-store -fno-strict-aliasing")
-+  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS} -ffloat-store -fno-strict-aliasing") #compiler_{degrees,radians,function_argument2} use equality comparison of floats, compiler_long_bitcast uses aliasing
-   set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
-   set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
-   set (CMAKE_CXX_FLAGS_MINSIZEREL     "-Os -DNDEBUG -DGBE_DEBUG=0")
diff --git a/srcpkgs/beignet/patches/llvm11.patch b/srcpkgs/beignet/patches/llvm11.patch
deleted file mode 100644
index 2c3a4278943c..000000000000
--- a/srcpkgs/beignet/patches/llvm11.patch
+++ /dev/null
@@ -1,937 +0,0 @@
-Source: Snektron
-
-There were a few changes required for LLVM 11:
-* llvm::StringRef requires .str(), implicit conversion was removed
-* llvm::CallSite was removed, but the required methods are available on llvm::CallInst
-* VectorTyID was split into FixedVectorTyID and ScalableVectorTyID, FixedVectorTyID was used
-* CallInst::getCalledValue() was renamed to CallInst::getCalledOperand()
-* Implicit conversion from MaybeAlign to Align was removed, so MaybeAlign::valueOrOne was used instead.
-
---- a/backend/src/llvm/StripAttributes.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/StripAttributes.cpp	2020-11-09 19:04:19.641897141 +0100
-@@ -107,9 +107,8 @@
-        BB != E; ++BB) {
-     for (BasicBlock::iterator Inst = BB->begin(), E = BB->end();
-          Inst != E; ++Inst) {
--      CallSite Call(&*Inst);
--      if (Call)
--        Call.setCallingConv(CallingConv::C);
-+      if (CallInst* callInst = dyn_cast<CallInst>(&*Inst))
-+        callInst->setCallingConv(CallingConv::C);
-     }
-   }
-
---- a/backend/src/llvm/llvm_bitcode_link.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_bitcode_link.cpp	2020-11-09 17:04:09.633753428 +0100
-@@ -98,7 +98,7 @@
-         if (callFunc && callFunc->getIntrinsicID() != 0)
-           continue;
-
--        std::string fnName = call->getCalledValue()->stripPointerCasts()->getName();
-+        std::string fnName = call->getCalledOperand()->stripPointerCasts()->getName().str();
-
-         if (!MFS.insert(fnName).second) {
-           continue;
---- a/backend/src/llvm/llvm_device_enqueue.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_device_enqueue.cpp	2020-11-09 19:01:49.201915008 +0100
-@@ -45,7 +45,7 @@
-       return NULL;
-
-     /* This is a fake, to check the function bitcast is for block or not */
--    std::string fnName = Fn->getName();
-+    std::string fnName = Fn->getName().str();
-     if(fnName.find("_invoke") == std::string::npos)
-       return NULL;
-
-@@ -119,18 +119,18 @@
-       ParamTys.push_back(ty);
-     }
-     FunctionType* NewFT = FunctionType::get(Fn->getReturnType(), ParamTys, false);
--    Function* NewFn = Function::Create(NewFT, Function::ExternalLinkage, Fn->getName());
-+    Function* NewFn = Function::Create(NewFT, Function::ExternalLinkage, Fn->getName().str());
-     SmallVector<ReturnInst*, 8> Returns;
-
-     Function::arg_iterator NewFnArgIt = NewFn->arg_begin();
-     for (Function::arg_iterator I = Fn->arg_begin(), E = Fn->arg_end(); I != E; ++I) {
--      std::string ArgName = I->getName();
-+      std::string ArgName = I->getName().str();
-       NewFnArgIt->setName(ArgName);
-       VMap[&*I] = &(*NewFnArgIt++);
-     }
-     CloneFunctionInto(NewFn, Fn, VMap, /*ModuleLevelChanges=*/true, Returns);
-
--    Fn->setName("__d" + Fn->getName());
-+    Fn->setName("__d" + Fn->getName().str());
-     mod->getFunctionList().push_back(NewFn);
-     //mod->getOrInsertFunction(NewFn->getName(), NewFn->getFunctionType(),
-     //                         NewFn->getAttributes());
-@@ -147,7 +147,7 @@
-       argTypeNames.push_back(llvm::MDString::get(Context, "char*"));
-       argBaseTypeNames.push_back(llvm::MDString::get(Context, "char*"));
-       argTypeQuals.push_back(llvm::MDString::get(Context, ""));
--      argNames.push_back(llvm::MDString::get(Context, I->getName()));
-+      argNames.push_back(llvm::MDString::get(Context, I->getName().str()));
-     }
-
-     //If run to here, llvm version always > 3.9, add the version check just for build.
-@@ -198,7 +198,7 @@
-            * invoke pointer to store the index in the unit's block functions index.*/
-           Function *Fn = dyn_cast<Function>(bt->getOperand(0));
-
--          std::string fnName = Fn->getName();
-+          std::string fnName = Fn->getName().str();
-           int index = -1;
-           for(size_t i=0; i<unit.blockFuncs.size(); i++) {
-             if(unit.blockFuncs[i] == fnName) {
-@@ -241,7 +241,7 @@
-             //unnamed call function, parse the use to find the define of called function
-             SmallVector<Value*, 16> args(CI->op_begin(), CI->op_end()-1);
-
--            Value *v = CI->getCalledValue();
-+            Value *v = CI->getCalledOperand();
-             BitCastInst* bt = dyn_cast<BitCastInst>(v);
-             if(bt == NULL)
-               continue;
-@@ -316,7 +316,7 @@
-                   ConstantExpr *expr = dyn_cast<ConstantExpr>(c->getOperand(3));
-                   BitCastInst *bt = dyn_cast<BitCastInst>(expr->getAsInstruction());
-                   Function* f = dyn_cast<Function>(bt->getOperand(0));
--                  blocks[v] = f->getName();
-+                  blocks[v] = f->getName().str();
-                 }
-               }
-
-@@ -332,7 +332,7 @@
-           } else {
-             //handle enqueue_kernel function call
-             Function *fn = CI->getCalledFunction();
--            if (fn->getName().find("enqueue_kernel") == std::string::npos)
-+            if (fn->getName().str().find("enqueue_kernel") == std::string::npos)
-               continue;
-
-             //block parameter's index, 3 or 6
-@@ -361,7 +361,7 @@
-                   ConstantExpr *expr = dyn_cast<ConstantExpr>(c->getOperand(3));
-                   BitCastInst *bt = dyn_cast<BitCastInst>(expr->getAsInstruction());
-                   Function* f = dyn_cast<Function>(bt->getOperand(0));
--                  blocks[v] = f->getName();
-+                  blocks[v] = f->getName().str();
-                 }
-               }
-             } else if(isa<AllocaInst>(block)) {
---- a/backend/src/llvm/llvm_gen_backend.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_gen_backend.cpp	2020-11-09 18:33:50.919114327 +0100
-@@ -376,7 +376,7 @@
-           GBE_ASSERT(index == 0);
-           return this->_newScalar(value, key, type, index, uniform);
-           break;
--        case Type::VectorTyID:
-+        case Type::FixedVectorTyID:
-         {
-           auto vectorType = cast<VectorType>(type);
-           auto elementType = vectorType->getElementType();
-@@ -743,20 +743,20 @@
- #undef DECL_VISIT_FN
-
-     // Emit rounding instructions from gen native function
--    void emitRoundingCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode);
-+    void emitRoundingCallInst(CallInst &I, ir::Opcode opcode);
-     // Emit unary instructions from gen native function
--    void emitUnaryCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode, ir::Type = ir::TYPE_FLOAT);
-+    void emitUnaryCallInst(CallInst &I, ir::Opcode opcode, ir::Type = ir::TYPE_FLOAT);
-     // Emit unary instructions from gen native function
--    void emitAtomicInst(CallInst &I, CallSite &CS, ir::AtomicOps opcode);
-+    void emitAtomicInst(CallInst &I, ir::AtomicOps opcode);
-     // Emit workgroup instructions
--    void emitWorkGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode);
-+    void emitWorkGroupInst(CallInst &I, ir::WorkGroupOps opcode);
-     // Emit subgroup instructions
--    void emitSubGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode);
-+    void emitSubGroupInst(CallInst &I, ir::WorkGroupOps opcode);
-     // Emit subgroup instructions
--    void emitBlockReadWriteMemInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
--    void emitBlockReadWriteImageInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-+    void emitBlockReadWriteMemInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-+    void emitBlockReadWriteImageInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-
--    uint8_t appendSampler(CallSite::arg_iterator AI);
-+    uint8_t appendSampler(User::op_iterator AI);
-     uint8_t getImageID(CallInst &I);
-
-     // These instructions are not supported at all
-@@ -1320,13 +1320,13 @@
- #endif
-
-       if(typeNameNode) {
--        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
-+        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-       }
-       if(typeBaseNameNode) {
--        llvmInfo.typeBaseName= (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString();
-+        llvmInfo.typeBaseName= (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString().str();
-       }
--      llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
--      llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString();
-+      llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-+      llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString().str();
-       bool isImage = llvmInfo.isImageType();
-       bool isPipe = llvmInfo.isPipeType();
-       if (I->getType()->isPointerTy() || isImage || isPipe) {
-@@ -1531,7 +1531,7 @@
-             EltTy = getEltType(EltTy, TypeIndex);
-         }
-
--        ir::Constant cc = unit.getConstantSet().getConstant(pointer->getName());
-+        ir::Constant cc = unit.getConstantSet().getConstant(pointer->getName().str());
-         unsigned int defOffset = cc.getOffset();
-         relocs.push_back(ir::RelocEntry(offset, defOffset + constantOffset));
-
-@@ -1546,7 +1546,7 @@
-       return;
-     }
-     if (isa<GlobalVariable>(c)) {
--      ir::Constant cc = unit.getConstantSet().getConstant(c->getName());
-+      ir::Constant cc = unit.getConstantSet().getConstant(c->getName().str());
-       unsigned int defOffset = cc.getOffset();
-
-       relocs.push_back(ir::RelocEntry(offset, defOffset));
-@@ -1609,7 +1609,7 @@
-           }
-           break;
-         }
--      case Type::TypeID::VectorTyID:
-+      case Type::TypeID::FixedVectorTyID:
-         {
-           const ConstantDataSequential *cds = dyn_cast<ConstantDataSequential>(c);
-           const VectorType *vecTy = cast<VectorType>(type);
-@@ -1936,7 +1936,7 @@
-       case Type::PointerTyID:
-         regTranslator.newScalar(value, key, 0, uniform);
-         break;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         auto vectorType = cast<VectorType>(type);
-         const uint32_t elemNum = vectorType->getNumElements();
-@@ -2395,7 +2395,7 @@
- #endif
-         }
-         if(typeNameNode) {
--          llvmInfo.typeName = (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
-+          llvmInfo.typeName = (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-           //LLVM 3.9 image's type name include access qual, don't match OpenCL spec, erase them.
-           std::vector<std::string> filters = {"__read_only ", "__write_only "};
-           for (uint32_t i = 0; i < filters.size(); i++) {
-@@ -2406,16 +2406,16 @@
-           }
-         }
-         if(typeBaseNameNode){
--          llvmInfo.typeBaseName = (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString();
-+          llvmInfo.typeBaseName = (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString().str();
-         }
-         if(accessQualNode) {
--          llvmInfo.accessQual = (cast<MDString>(accessQualNode->getOperand(opID)))->getString();
-+          llvmInfo.accessQual = (cast<MDString>(accessQualNode->getOperand(opID)))->getString().str();
-         }
-         if(typeQualNode) {
--          llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString();
-+          llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString().str();
-         }
-         if(argNameNode){
--          llvmInfo.argName = (cast<MDString>(argNameNode->getOperand(opID)))->getString();
-+          llvmInfo.argName = (cast<MDString>(argNameNode->getOperand(opID)))->getString().str();
-         }
-
-         // function arguments are uniform values.
-@@ -3010,7 +3010,7 @@
-         } else {
-           this->newRegister(const_cast<GlobalVariable*>(&v));
-           ir::Register reg = regTranslator.getScalar(const_cast<GlobalVariable*>(&v), 0);
--          ir::Constant &con = unit.getConstantSet().getConstant(v.getName());
-+          ir::Constant &con = unit.getConstantSet().getConstant(v.getName().str());
-           if (!legacyMode) {
-             ir::Register regload = ctx.reg(getFamily(getType(ctx, v.getType())));
-             ctx.LOADI(getType(ctx, v.getType()), regload, ctx.newIntegerImmediate(con.getOffset(), getType(ctx, v.getType())));
-@@ -3212,7 +3212,7 @@
-         GBE_ASSERTM(false, "Unsupported calling convention");
-     }
-
--    ctx.startFunction(F.getName());
-+    ctx.startFunction(F.getName().str());
-
-     ir::Function &fn = ctx.getFunction();
-     this->regTranslator.clear();
-@@ -3810,9 +3810,9 @@
-
-   void GenWriter::regAllocateCallInst(CallInst &I) {
-     Value *dst = &I;
--    Value *Callee = I.getCalledValue();
-+    Value *Callee = I.getCalledOperand();
-     GBE_ASSERT(ctx.getFunction().getProfile() == ir::PROFILE_OCL);
--    GBE_ASSERT(isa<InlineAsm>(I.getCalledValue()) == false);
-+    GBE_ASSERT(isa<InlineAsm>(I.getCalledOperand()) == false);
-     if(I.getNumArgOperands()) GBE_ASSERT(I.hasStructRetAttr() == false);
-
-     // We only support a small number of intrinsics right now
-@@ -3870,7 +3870,7 @@
-       }
-     }
-     // Get the name of the called function and handle it
--    const std::string fnName = Callee->stripPointerCasts()->getName();
-+    const std::string fnName = Callee->stripPointerCasts()->getName().str();
-     auto genIntrinsicID = intrinsicMap.find(fnName);
-     switch (genIntrinsicID) {
-       case GEN_OCL_GET_GROUP_ID0:
-@@ -4166,7 +4166,7 @@
-     };
-   }
-
--  void GenWriter::emitRoundingCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode) {
-+  void GenWriter::emitRoundingCallInst(CallInst &I, ir::Opcode opcode) {
-     if (I.getType()->isHalfTy()) {
-       const ir::Register src = this->getRegister(I.getOperand(0));
-       const ir::Register srcFloat = ctx.reg(ir::FAMILY_DWORD);
-@@ -4177,14 +4177,14 @@
-       ctx.F32TO16(ir::TYPE_U16, ir::TYPE_FLOAT, dst, dstFloat);
-     } else {
-       GBE_ASSERT(I.getType()->isFloatTy());
--      this->emitUnaryCallInst(I,CS,opcode);
-+      this->emitUnaryCallInst(I,opcode);
-     }
-   }
-
--  void GenWriter::emitUnaryCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
-+  void GenWriter::emitUnaryCallInst(CallInst &I, ir::Opcode opcode, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--    CallSite::arg_iterator AE = CS.arg_end();
-+    User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-     GBE_ASSERT(AI != AE);
-     const ir::Register src = this->getRegister(*AI);
-@@ -4293,9 +4293,9 @@
-     this->emitAtomicInstHelper(opcode, type, dst, llvmPtr, payloadTuple);
-   }
-
--  void GenWriter::emitAtomicInst(CallInst &I, CallSite &CS, ir::AtomicOps opcode) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitAtomicInst(CallInst &I, ir::AtomicOps opcode) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-     Value *llvmPtr = *AI;
-     ir::AddressSpace addrSpace = addressSpaceLLVMToGen(llvmPtr->getType()->getPointerAddressSpace());
-@@ -4348,7 +4348,7 @@
-     }
-   }
-
--  void GenWriter::emitWorkGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode) {
-+  void GenWriter::emitWorkGroupInst(CallInst &I, ir::WorkGroupOps opcode) {
-     ir::Function &f = ctx.getFunction();
-
-     if (f.getwgBroadcastSLM() < 0 && opcode == ir::WORKGROUP_OP_BROADCAST) {
-@@ -4378,8 +4378,8 @@
-       GBE_ASSERT(f.gettidMapSLM() >= 0);
-     }
-
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     if (opcode == ir::WORKGROUP_OP_ALL || opcode == ir::WORKGROUP_OP_ANY) {
-@@ -4391,14 +4391,14 @@
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], 3);
-       ctx.WORKGROUP(opcode, (uint32_t)f.gettidMapSLM(), getRegister(&I), srcTuple, 3, ir::TYPE_S32);
-     } else if (opcode == ir::WORKGROUP_OP_BROADCAST) {
--      int argNum = CS.arg_size();
-+      int argNum = I.arg_size();
-       std::vector<ir::Register> src(argNum);
-       for (int i = 0; i < argNum; i++) {
-         src[i] = this->getRegister(*(AI++));
-       }
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], argNum);
-       ctx.WORKGROUP(ir::WORKGROUP_OP_BROADCAST, (uint32_t)f.getwgBroadcastSLM(), getRegister(&I), srcTuple, argNum,
--          getType(ctx, (*CS.arg_begin())->getType()));
-+          getType(ctx, (*I.arg_begin())->getType()));
-     } else {
-       ConstantInt *sign = dyn_cast<ConstantInt>(AI);
-       GBE_ASSERT(sign);
-@@ -4423,9 +4423,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitSubGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitSubGroupInst(CallInst &I, ir::WorkGroupOps opcode) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     if (opcode == ir::WORKGROUP_OP_ALL || opcode == ir::WORKGROUP_OP_ANY) {
-@@ -4435,7 +4435,7 @@
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], 1);
-       ctx.SUBGROUP(opcode, getRegister(&I), srcTuple, 1, ir::TYPE_S32);
-     } else if (opcode == ir::WORKGROUP_OP_BROADCAST) {
--      int argNum = CS.arg_size();
-+      int argNum = I.arg_size();
-       GBE_ASSERT(argNum == 2);
-       std::vector<ir::Register> src(argNum);
-       for (int i = 0; i < argNum; i++) {
-@@ -4443,7 +4443,7 @@
-       }
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], argNum);
-       ctx.SUBGROUP(ir::WORKGROUP_OP_BROADCAST, getRegister(&I), srcTuple, argNum,
--          getType(ctx, (*CS.arg_begin())->getType()));
-+          getType(ctx, (*I.arg_begin())->getType()));
-     } else {
-       ConstantInt *sign = dyn_cast<ConstantInt>(AI);
-       GBE_ASSERT(sign);
-@@ -4466,9 +4466,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitBlockReadWriteMemInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitBlockReadWriteMemInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     Value *llvmPtr = *(AI++);
-@@ -4522,9 +4522,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitBlockReadWriteImageInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitBlockReadWriteImageInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     const uint8_t imageID = getImageID(I);
-@@ -4557,7 +4557,7 @@
-
-   /* append a new sampler. should be called before any reference to
-    * a sampler_t value. */
--  uint8_t GenWriter::appendSampler(CallSite::arg_iterator AI) {
-+  uint8_t GenWriter::appendSampler(User::op_iterator AI) {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-     CallInst *TC = dyn_cast<CallInst>(*AI);
-     Constant *CPV = TC ? dyn_cast<Constant>(TC->getOperand(0)) : NULL;
-@@ -4595,10 +4595,9 @@
-         const ir::Function &fn = ctx.getFunction();
-
-         // Get the function arguments
--        CallSite CS(&I);
--        CallSite::arg_iterator AI = CS.arg_begin();
-+        User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--        CallSite::arg_iterator AE = CS.arg_end();
-+        User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-         switch (F->getIntrinsicID()) {
-           case Intrinsic::stacksave:
-@@ -4764,17 +4763,17 @@
-             ctx.MAD(srcType, dst, src0, src1, src2);
-           }
-           break;
--          case Intrinsic::sqrt: this->emitUnaryCallInst(I,CS,ir::OP_SQR); break;
--          case Intrinsic::ceil: this->emitRoundingCallInst(I,CS,ir::OP_RNDU); break;
--          case Intrinsic::trunc: this->emitRoundingCallInst(I,CS,ir::OP_RNDZ); break;
--          case Intrinsic::rint: this->emitRoundingCallInst(I,CS,ir::OP_RNDE); break;
--          case Intrinsic::floor: this->emitRoundingCallInst(I,CS,ir::OP_RNDD); break;
--          case Intrinsic::sin: this->emitUnaryCallInst(I,CS,ir::OP_SIN); break;
--          case Intrinsic::cos: this->emitUnaryCallInst(I,CS,ir::OP_COS); break;
--          case Intrinsic::log2: this->emitUnaryCallInst(I,CS,ir::OP_LOG); break;
--          case Intrinsic::exp2: this->emitUnaryCallInst(I,CS,ir::OP_EXP); break;
-+          case Intrinsic::sqrt: this->emitUnaryCallInst(I,ir::OP_SQR); break;
-+          case Intrinsic::ceil: this->emitRoundingCallInst(I,ir::OP_RNDU); break;
-+          case Intrinsic::trunc: this->emitRoundingCallInst(I,ir::OP_RNDZ); break;
-+          case Intrinsic::rint: this->emitRoundingCallInst(I,ir::OP_RNDE); break;
-+          case Intrinsic::floor: this->emitRoundingCallInst(I,ir::OP_RNDD); break;
-+          case Intrinsic::sin: this->emitUnaryCallInst(I,ir::OP_SIN); break;
-+          case Intrinsic::cos: this->emitUnaryCallInst(I,ir::OP_COS); break;
-+          case Intrinsic::log2: this->emitUnaryCallInst(I,ir::OP_LOG); break;
-+          case Intrinsic::exp2: this->emitUnaryCallInst(I,ir::OP_EXP); break;
-           case Intrinsic::bswap:
--            this->emitUnaryCallInst(I,CS,ir::OP_BSWAP, getUnsignedType(ctx, I.getType())); break;
-+            this->emitUnaryCallInst(I,ir::OP_BSWAP, getUnsignedType(ctx, I.getType())); break;
-           case Intrinsic::pow:
-           {
-             const ir::Register src0 = this->getRegister(*AI); ++AI;
-@@ -4794,21 +4793,20 @@
-         }
-       } else {
-         // Get the name of the called function and handle it
--        Value *Callee = I.getCalledValue();
--        const std::string fnName = Callee->stripPointerCasts()->getName();
-+        Value *Callee = I.getCalledOperand();
-+        const std::string fnName = Callee->stripPointerCasts()->getName().str();
-         auto genIntrinsicID = intrinsicMap.find(fnName);
-
-         // Get the function arguments
--        CallSite CS(&I);
--        CallSite::arg_iterator AI = CS.arg_begin();
-+        User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--        CallSite::arg_iterator AE = CS.arg_end();
-+        User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-
-         switch (genIntrinsicID) {
--          case GEN_OCL_FBH: this->emitUnaryCallInst(I,CS,ir::OP_FBH, ir::TYPE_U32); break;
--          case GEN_OCL_FBL: this->emitUnaryCallInst(I,CS,ir::OP_FBL, ir::TYPE_U32); break;
--          case GEN_OCL_CBIT: this->emitUnaryCallInst(I,CS,ir::OP_CBIT, getUnsignedType(ctx, (*AI)->getType())); break;
-+          case GEN_OCL_FBH: this->emitUnaryCallInst(I,ir::OP_FBH, ir::TYPE_U32); break;
-+          case GEN_OCL_FBL: this->emitUnaryCallInst(I,ir::OP_FBL, ir::TYPE_U32); break;
-+          case GEN_OCL_CBIT: this->emitUnaryCallInst(I,ir::OP_CBIT, getUnsignedType(ctx, (*AI)->getType())); break;
-           case GEN_OCL_ABS:
-           {
-             const ir::Register src = this->getRegister(*AI);
-@@ -4915,8 +4913,8 @@
-             ctx.REGION(dst, src, x.getIntegerValue());
-             break;
-           }
--          case GEN_OCL_RSQ: this->emitUnaryCallInst(I,CS,ir::OP_RSQ); break;
--          case GEN_OCL_RCP: this->emitUnaryCallInst(I,CS,ir::OP_RCP); break;
-+          case GEN_OCL_RSQ: this->emitUnaryCallInst(I,ir::OP_RSQ); break;
-+          case GEN_OCL_RCP: this->emitUnaryCallInst(I,ir::OP_RCP); break;
-           case GEN_OCL_FORCE_SIMD8: ctx.setSimdWidth(8); break;
-           case GEN_OCL_FORCE_SIMD16: ctx.setSimdWidth(16); break;
-           case GEN_OCL_LBARRIER: ctx.SYNC(ir::syncLocalBarrier); break;
-@@ -4947,31 +4945,31 @@
-             break;
-           }
-           case GEN_OCL_ATOMIC_ADD0:
--          case GEN_OCL_ATOMIC_ADD1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_ADD); break;
-+          case GEN_OCL_ATOMIC_ADD1: this->emitAtomicInst(I,ir::ATOMIC_OP_ADD); break;
-           case GEN_OCL_ATOMIC_SUB0:
--          case GEN_OCL_ATOMIC_SUB1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_SUB); break;
-+          case GEN_OCL_ATOMIC_SUB1: this->emitAtomicInst(I,ir::ATOMIC_OP_SUB); break;
-           case GEN_OCL_ATOMIC_AND0:
--          case GEN_OCL_ATOMIC_AND1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_AND); break;
-+          case GEN_OCL_ATOMIC_AND1: this->emitAtomicInst(I,ir::ATOMIC_OP_AND); break;
-           case GEN_OCL_ATOMIC_OR0:
--          case GEN_OCL_ATOMIC_OR1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_OR); break;
-+          case GEN_OCL_ATOMIC_OR1: this->emitAtomicInst(I,ir::ATOMIC_OP_OR); break;
-           case GEN_OCL_ATOMIC_XOR0:
--          case GEN_OCL_ATOMIC_XOR1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_XOR); break;
-+          case GEN_OCL_ATOMIC_XOR1: this->emitAtomicInst(I,ir::ATOMIC_OP_XOR); break;
-           case GEN_OCL_ATOMIC_XCHG0:
--          case GEN_OCL_ATOMIC_XCHG1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_XCHG); break;
-+          case GEN_OCL_ATOMIC_XCHG1: this->emitAtomicInst(I,ir::ATOMIC_OP_XCHG); break;
-           case GEN_OCL_ATOMIC_INC0:
--          case GEN_OCL_ATOMIC_INC1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_INC); break;
-+          case GEN_OCL_ATOMIC_INC1: this->emitAtomicInst(I,ir::ATOMIC_OP_INC); break;
-           case GEN_OCL_ATOMIC_DEC0:
--          case GEN_OCL_ATOMIC_DEC1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_DEC); break;
-+          case GEN_OCL_ATOMIC_DEC1: this->emitAtomicInst(I,ir::ATOMIC_OP_DEC); break;
-           case GEN_OCL_ATOMIC_UMIN0:
--          case GEN_OCL_ATOMIC_UMIN1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_UMIN); break;
-+          case GEN_OCL_ATOMIC_UMIN1: this->emitAtomicInst(I,ir::ATOMIC_OP_UMIN); break;
-           case GEN_OCL_ATOMIC_UMAX0:
--          case GEN_OCL_ATOMIC_UMAX1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_UMAX); break;
-+          case GEN_OCL_ATOMIC_UMAX1: this->emitAtomicInst(I,ir::ATOMIC_OP_UMAX); break;
-           case GEN_OCL_ATOMIC_IMIN0:
--          case GEN_OCL_ATOMIC_IMIN1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_IMIN); break;
-+          case GEN_OCL_ATOMIC_IMIN1: this->emitAtomicInst(I,ir::ATOMIC_OP_IMIN); break;
-           case GEN_OCL_ATOMIC_IMAX0:
--          case GEN_OCL_ATOMIC_IMAX1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_IMAX); break;
-+          case GEN_OCL_ATOMIC_IMAX1: this->emitAtomicInst(I,ir::ATOMIC_OP_IMAX); break;
-           case GEN_OCL_ATOMIC_CMPXCHG0:
--          case GEN_OCL_ATOMIC_CMPXCHG1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_CMPXCHG); break;
-+          case GEN_OCL_ATOMIC_CMPXCHG1: this->emitAtomicInst(I,ir::ATOMIC_OP_CMPXCHG); break;
-           case GEN_OCL_GET_IMAGE_WIDTH:
-           case GEN_OCL_GET_IMAGE_HEIGHT:
-           case GEN_OCL_GET_IMAGE_DEPTH:
-@@ -5429,48 +5427,48 @@
-             ctx.WAIT();
-             break;
-           }
--          case GEN_OCL_WORK_GROUP_ALL: this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_ALL); break;
--          case GEN_OCL_WORK_GROUP_ANY: this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_ANY); break;
-+          case GEN_OCL_WORK_GROUP_ALL: this->emitWorkGroupInst(I, ir::WORKGROUP_OP_ALL); break;
-+          case GEN_OCL_WORK_GROUP_ANY: this->emitWorkGroupInst(I, ir::WORKGROUP_OP_ANY); break;
-           case GEN_OCL_WORK_GROUP_BROADCAST:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_BROADCAST); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_BROADCAST); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_ADD); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_MAX); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_MIN); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-           case GEN_OCL_SUB_GROUP_BROADCAST:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_BROADCAST); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_BROADCAST); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_ADD); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_MAX); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_MIN); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-           case GEN_OCL_LRP:
-           {
-             const ir::Register dst  = this->getRegister(&I);
-@@ -5484,69 +5482,69 @@
-             break;
-           }
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, false, 1); break;
-+            this->emitBlockReadWriteMemInst(I, false, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, false, 2); break;
-+            this->emitBlockReadWriteMemInst(I, false, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, false, 4); break;
-+            this->emitBlockReadWriteMemInst(I, false, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, false, 8); break;
-+            this->emitBlockReadWriteMemInst(I, false, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, true, 1); break;
-+            this->emitBlockReadWriteMemInst(I, true, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, true, 2); break;
-+            this->emitBlockReadWriteMemInst(I, true, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, true, 4); break;
-+            this->emitBlockReadWriteMemInst(I, true, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, true, 8); break;
-+            this->emitBlockReadWriteMemInst(I, true, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, false, 1); break;
-+            this->emitBlockReadWriteImageInst(I, false, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, false, 2); break;
-+            this->emitBlockReadWriteImageInst(I, false, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, false, 4); break;
-+            this->emitBlockReadWriteImageInst(I, false, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, false, 8); break;
-+            this->emitBlockReadWriteImageInst(I, false, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, true, 1); break;
-+            this->emitBlockReadWriteImageInst(I, true, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, true, 2); break;
-+            this->emitBlockReadWriteImageInst(I, true, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, true, 4); break;
-+            this->emitBlockReadWriteImageInst(I, true, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, true, 8); break;
-+            this->emitBlockReadWriteImageInst(I, true, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, false, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, false, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, false, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, false, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, true, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, true, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, true, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, true, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, false, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, false, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, false, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, false, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, true, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, true, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, true, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, true, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 8, ir::TYPE_U16); break;
-           case GEN_OCL_GET_PIPE:
-           case GEN_OCL_MAKE_RID:
-           case GEN_OCL_GET_RID:
---- a/backend/src/llvm/llvm_includes.hpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_includes.hpp	2020-11-09 19:00:09.955926795 +0100
-@@ -103,7 +103,6 @@
-
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
- #include "llvm/IR/Mangler.h"
--#include "llvm/IR/CallSite.h"
- #include "llvm/IR/CFG.h"
- #include "llvm/IR/InstVisitor.h"
- #include "llvm/IR/IRPrintingPasses.h"
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-11-09 19:10:37.141852308 +0100
-@@ -160,7 +160,7 @@
-     Value *vecPtr = Builder.CreateBitCast(ld->getPointerOperand(),
-                                         PointerType::get(vecTy, addrSpace));
-     LoadInst *vecValue = Builder.CreateLoad(vecPtr);
--    vecValue->setAlignment(align);
-+    vecValue->setAlignment(align.valueOrOne());
-
-     for (unsigned i = 0; i < size; ++i) {
-       Value *S = Builder.CreateExtractElement(vecValue, Builder.getInt32(i));
-@@ -251,7 +251,7 @@
-       return;
-     Value *newPtr = Builder.CreateBitCast(stPointer, PointerType::get(vecTy, addrSpace));
-     StoreInst *newST = Builder.CreateStore(parent, newPtr);
--    newST->setAlignment(align);
-+    newST->setAlignment(align.valueOrOne());
-   }
-
-   // Find the safe iterator we can point to. If reorder happens, we need to
---- a/backend/src/llvm/llvm_passes.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_passes.cpp	2020-11-09 18:48:55.997006837 +0100
-@@ -95,7 +95,7 @@
-   {
-     switch (Ty->getTypeID()) {
-       case Type::VoidTyID: NOT_SUPPORTED;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         const VectorType* VecTy = cast<VectorType>(Ty);
-         uint32_t elemNum = VecTy->getNumElements();
-@@ -138,7 +138,7 @@
-       case Type::HalfTyID:    return 16;
-       case Type::FloatTyID:   return 32;
-       case Type::DoubleTyID:  return 64;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         const VectorType* VecTy = cast<VectorType>(Ty);
-         uint32_t numElem = VecTy->getNumElements();
-@@ -184,10 +184,12 @@
-     Type *elementType = NULL;
-     if (PointerType* ptrType = dyn_cast<PointerType>(eltTy))
-       elementType = ptrType->getElementType();
--    else if(SequentialType * seqType = dyn_cast<SequentialType>(eltTy))
--      elementType = seqType->getElementType();
--    else if(CompositeType * compTy= dyn_cast<CompositeType>(eltTy))
--      elementType = compTy->getTypeAtIndex(index);
-+    else if (ArrayType * arrType = dyn_cast<ArrayType>(eltTy))
-+      elementType = arrType->getElementType();
-+    else if(VectorType * vecType = dyn_cast<VectorType>(eltTy))
-+      elementType = vecType->getElementType();
-+    else if(StructType * structType = dyn_cast<StructType>(eltTy))
-+      elementType = structType->getTypeAtIndex(index);
-     GBE_ASSERT(elementType);
-     return elementType;
-   }
---- a/backend/src/llvm/llvm_printf_parser.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_printf_parser.cpp	2020-11-09 18:57:52.618943105 +0100
-@@ -323,8 +323,7 @@
-
-   bool PrintfParser::parseOnePrintfInstruction(CallInst * call)
-   {
--    CallSite CS(call);
--    CallSite::arg_iterator CI_FMT = CS.arg_begin();
-+    User::op_iterator CI_FMT = call->arg_begin();
-     int param_num = 0;
-
-     llvm::Constant* arg0 = dyn_cast<llvm::ConstantExpr>(*CI_FMT);
-@@ -341,7 +340,7 @@
-       return false;
-     }
-
--    std::string fmt = fmt_arg->getAsCString();
-+    std::string fmt = fmt_arg->getAsCString().str();
-     if (fmt.size() == 0)
-       return false;
-
-@@ -437,8 +436,8 @@
-         if ( callFunc->getIntrinsicID() != 0)
-           continue;
-
--        Value *Callee = call->getCalledValue();
--        const std::string fnName = Callee->getName();
-+        Value *Callee = call->getCalledOperand();
-+        const std::string fnName = Callee->getName().str();
-
-         if (fnName != "__gen_ocl_printf_stub" && fnName != "__gen_ocl_puts_stub")
-           continue;
-@@ -582,7 +581,7 @@
-             if (!fmt_arg || !fmt_arg->isCString()) {
-               return false;
-             }
--            slot.state.str = fmt_arg->getAsCString();
-+            slot.state.str = fmt_arg->getAsCString().str();
-             return true;
-           }
-           case PRINTF_CONVERSION_P: {
-@@ -595,10 +594,10 @@
-
-         break;
-
--      case Type::VectorTyID: {
--        Type* vect_type = arg->getType();
--        Type* elt_type = vect_type->getVectorElementType();
--        int vec_num = vect_type->getVectorNumElements();
-+      case Type::FixedVectorTyID: {
-+        VectorType* vect_type = dyn_cast<VectorType>(arg->getType());
-+        Type* elt_type = vect_type->getElementType();
-+        int vec_num = vect_type->getNumElements();
-         bool sign = false;
-
-         if (vec_num != slot.state.vector_n) {
---- a/backend/src/llvm/llvm_profiling.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_profiling.cpp	2020-11-09 18:59:50.120929150 +0100
-@@ -35,7 +35,6 @@
- #include "llvm/IR/IRBuilder.h"
-
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
--#include "llvm/IR/CallSite.h"
- #include "llvm/IR/CFG.h"
- #else
- #include "llvm/Support/CallSite.h"
---- a/backend/src/llvm/llvm_sampler_fix.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp	2020-11-09 17:01:09.407774832 +0100
-@@ -45,8 +45,8 @@
-     bool visitCallInst(CallInst *I) {
-       if(!I)
-         return false;
--      Value *Callee = I->getCalledValue();
--      const std::string fnName = Callee->getName();
-+      Value *Callee = I->getCalledOperand();
-+      const std::string fnName = Callee->getName().str();
-       bool changed = false;
-       Type *boolTy = IntegerType::get(I->getContext(), 1);
-       Type *i32Ty = IntegerType::get(I->getContext(), 32);
-@@ -59,7 +59,7 @@
-         Value *needFixVal;
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-         CallInst *init = dyn_cast<CallInst>(I->getOperand(0));
--        if (init && init->getCalledValue()->getName().compare("__translate_sampler_initializer"))
-+        if (init && init->getCalledOperand()->getName().compare("__translate_sampler_initializer"))
-         {
-           const ConstantInt *ci = dyn_cast<ConstantInt>(init->getOperand(0));
-           uint32_t samplerInt = ci->getZExtValue();
-@@ -113,7 +113,7 @@
-         Value *needFixVal;
-  #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-         CallInst *init = dyn_cast<CallInst>(I->getOperand(0));
--        if (init && init->getCalledValue()->getName().compare("__translate_sampler_initializer"))
-+        if (init && init->getCalledOperand()->getName().compare("__translate_sampler_initializer"))
-         {
-           const ConstantInt *ci = dyn_cast<ConstantInt>(init->getOperand(0));
-           uint32_t samplerInt = ci->getZExtValue();
---- a/backend/src/llvm/llvm_scalarize.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_scalarize.cpp	2020-11-09 18:51:16.888990104 +0100
-@@ -178,7 +178,7 @@
-       if(!type)
-         return type;
-       switch(type->getTypeID()) {
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       case Type::ArrayTyID:
-         return GetBasicType(type->getContainedType(0));
-       default:
-@@ -188,7 +188,7 @@
-     }
-
-     int GetComponentCount(const Type* type)  {
--      if (type && type->getTypeID() == Type::VectorTyID)
-+      if (type && type->getTypeID() == Type::FixedVectorTyID)
-         return llvm::dyn_cast<VectorType>(type)->getNumElements();
-       else
-         return 1;
-@@ -652,13 +652,12 @@
-           break;
-         }
-       } else {
--        Value *Callee = call->getCalledValue();
--        const std::string fnName = Callee->getName();
-+        Value *Callee = call->getCalledOperand();
-+        const std::string fnName = Callee->getName().str();
-         auto genIntrinsicID = intrinsicMap.find(fnName);
-
-         // Get the function arguments
--        CallSite CS(call);
--        CallSite::arg_iterator CI = CS.arg_begin() + 1;
-+        User::op_iterator CI = call->arg_begin() + 1;
-
-         switch (genIntrinsicID) {
-           case GEN_OCL_NOT_FOUND:
-@@ -729,7 +728,7 @@
-             extractFromVector(call);
-             break;
-           case GEN_OCL_PRINTF:
--            for (; CI != CS.arg_end(); ++CI)
-+            for (; CI != call->arg_end(); ++CI)
-               if ((*CI)->getType()->isVectorTy())
-                 *CI = InsertToVector(call, *CI);
-             break;
diff --git a/srcpkgs/beignet/patches/llvm12.patch b/srcpkgs/beignet/patches/llvm12.patch
deleted file mode 100644
index 6f8ab005c148..000000000000
--- a/srcpkgs/beignet/patches/llvm12.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-diff --git backend/src/llvm/ExpandLargeIntegers.cpp backend/src/llvm/ExpandLargeIntegers.cpp
-index 8515dc13..27080380 100644
---- a/backend/src/llvm/ExpandLargeIntegers.cpp
-+++ b/backend/src/llvm/ExpandLargeIntegers.cpp
-@@ -328,7 +328,7 @@ static Value *buildVectorOrScalar(ConversionState &State, IRBuilder<> &IRB, Smal
-     // splited, that's why these temporary values should be erased.
-     bool KeepInsert = isLegalBitSize(ElemTy->getPrimitiveSizeInBits() * ElemNo);
-     for (unsigned i = 0; i < ElemNo; ++i) {
--      Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo));
-+      Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo, false));
-       Value *idx = ConstantInt::get(IntTy, i);
-       vec = IRB.CreateInsertElement(tmp, Elements[i], idx);
-       if (!KeepInsert && !isa<Constant>(vec)) {
-@@ -373,7 +373,7 @@ static void unifyElementType(IRBuilder<> &IRB, SmallVector<Value *, 16> &Src, Sm
-       assert((Size % MinWidth) == 0);
- 
-       if (Size > MinWidth) {
--        VectorType *VecTy = VectorType::get(ElemTy, Size/MinWidth);
-+        VectorType *VecTy = VectorType::get(ElemTy, Size/MinWidth, false);
-         Value *Casted = IRB.CreateBitCast(Src[i], VecTy);
-         for (unsigned j = 0; j < Size/MinWidth; j++)
-           Dst.push_back(IRB.CreateExtractElement(Casted, ConstantInt::get(IntTy, j)));
-@@ -462,7 +462,7 @@ static void convertInstruction(Instruction *Inst, ConversionState &State,
-       unsigned ElemNo = Unified.size();
-       Type *ElemTy = Unified[0]->getType();
-       for (unsigned i = 0; i < ElemNo; ++i) {
--        Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo));
-+        Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo, false));
-         Value *idx = ConstantInt::get(IntTy, i);
-         vec = IRB.CreateInsertElement(tmp, Unified[i], idx);
-       }
-diff --git backend/src/llvm/llvm_gen_backend.cpp backend/src/llvm/llvm_gen_backend.cpp
-index c93d89cc..64d5b0e5 100644
---- a/backend/src/llvm/llvm_gen_backend.cpp
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -304,7 +304,7 @@ namespace gbe
-       TYPESIZEVEC(long,8)
-       TYPESIZEVEC(unsigned long,8)
-       else{
--        StructType *StrTy = M->getTypeByName("struct."+name);
-+        StructType *StrTy = StructType::getTypeByName(M->getContext(), "struct."+name);
-         if(StrTy)
-           return getTypeByteSize(unit,StrTy);
-       }
-diff --git backend/src/llvm/llvm_loadstore_optimization.cpp backend/src/llvm/llvm_loadstore_optimization.cpp
-index 5aa38bef..6b5c1bad 100644
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
-@@ -152,7 +152,7 @@ namespace gbe {
-     unsigned addrSpace = ld->getPointerAddressSpace();
-     // insert before first load
-     Builder.SetInsertPoint(ld);
--    VectorType *vecTy = VectorType::get(ld->getType(), size);
-+    VectorType *vecTy = VectorType::get(ld->getType(), size, false);
-     Value *vecPtr = Builder.CreateBitCast(ld->getPointerOperand(),
-                                         PointerType::get(vecTy, addrSpace));
-     LoadInst *vecValue = Builder.CreateLoad(vecPtr);
-@@ -236,7 +236,7 @@ namespace gbe {
-     Builder.SetInsertPoint(merged[size-1]);
- 
-     Type *dataTy = st->getValueOperand()->getType();
--    VectorType *vecTy = VectorType::get(dataTy, size);
-+    VectorType *vecTy = VectorType::get(dataTy, size, false);
-     Value * parent = UndefValue::get(vecTy);
-     for(unsigned i = 0; i < size; i++) {
-       parent = Builder.CreateInsertElement(parent, values[i], ConstantInt::get(IntegerType::get(st->getContext(), 32), i));
-diff --git backend/src/llvm/llvm_printf_parser.cpp backend/src/llvm/llvm_printf_parser.cpp
-index 6bb7c52a..af459cd2 100644
---- a/backend/src/llvm/llvm_printf_parser.cpp
-+++ b/backend/src/llvm/llvm_printf_parser.cpp
-@@ -630,7 +630,7 @@ error:
-             if (elt_type != elt_dst_type) {
-               Value *II = NULL;
-               for (int i = 0; i < vec_num; i++) {
--                Value *vec = II ? II : UndefValue::get(VectorType::get(elt_dst_type, vec_num));
-+                Value *vec = II ? II : UndefValue::get(VectorType::get(elt_dst_type, vec_num, false));
-                 Value *cv = ConstantInt::get(Type::getInt32Ty(elt_type->getContext()), i);
-                 Value *org = builder->CreateExtractElement(arg, cv);
-                 Value *cvt = builder->CreateIntCast(org, elt_dst_type, sign);
-@@ -658,7 +658,7 @@ error:
-             if (elt_type->getTypeID() != Type::FloatTyID) {
-               Value *II = NULL;
-               for (int i = 0; i < vec_num; i++) {
--                Value *vec = II ? II : UndefValue::get(VectorType::get(Type::getFloatTy(elt_type->getContext()), vec_num));
-+                Value *vec = II ? II : UndefValue::get(VectorType::get(Type::getFloatTy(elt_type->getContext()), vec_num, false));
-                 Value *cv = ConstantInt::get(Type::getInt32Ty(elt_type->getContext()), i);
-                 Value *org = builder->CreateExtractElement(arg, cv);
-                 Value* cvt  = builder->CreateFPCast(org, Type::getFloatTy(module->getContext()));
-diff --git backend/src/llvm/llvm_to_gen.cpp backend/src/llvm/llvm_to_gen.cpp
-index 7f7deffe..9e8ccc67 100644
---- a/backend/src/llvm/llvm_to_gen.cpp
-+++ b/backend/src/llvm/llvm_to_gen.cpp
-@@ -358,7 +358,7 @@ namespace gbe
-     passes.add(createScalarReplAggregatesPass(64, true, -1, -1, 64));
- #endif
-     passes.add(createLoadStoreOptimizationPass());
--    passes.add(createConstantPropagationPass());
-+    //passes.add(createConstantPropagationPass());
-     passes.add(createPromoteMemoryToRegisterPass());
-     if(optLevel > 0)
-       passes.add(createGVNPass());                 // Remove redundancies
-@@ -367,11 +367,11 @@ namespace gbe
-     passes.add(createScalarizePass());             // Expand all vector ops
-     passes.add(createExpandLargeIntegersPass());   // legalize large integer operation
-     passes.add(createInstructionCombiningPass());  // legalize will generate some silly instructions
--    passes.add(createConstantPropagationPass());   // propagate constant after scalarize/legalize
-+    //passes.add(createConstantPropagationPass());   // propagate constant after scalarize/legalize
-     passes.add(createExpandConstantExprPass());    // constant prop may generate ConstantExpr
-     passes.add(createPromoteIntegersPass());       // align integer size to power of two
-     passes.add(createRemoveGEPPass(unit));         // Constant prop may generate gep
--    passes.add(createDeadInstEliminationPass());   // Remove simplified instructions
-+    //passes.add(createDeadInstEliminationPass());   // Remove simplified instructions
-     passes.add(createCFGSimplificationPass());     // Merge & remove BBs
-     passes.add(createLowerSwitchPass());           // simplify cfg will generate switch-case instruction
-     if (profiling) {
diff --git a/srcpkgs/beignet/patches/musl.patch b/srcpkgs/beignet/patches/musl.patch
deleted file mode 100644
index cefafbb65588..000000000000
--- a/srcpkgs/beignet/patches/musl.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/backend/src/backend/gen/gen_mesa_disasm.c
-+++ b/backend/src/backend/gen/gen_mesa_disasm.c
-@@ -1137,7 +1137,7 @@ static uint32_t __conv_half_to_float(uint16_t h)
-       // Adjust mantissa so it's normalized (and keep
-       // track of exponent adjustment)
-       int e = -1;
--      uint m = i.mantissa;
-+      unsigned int m = i.mantissa;
-       do {
-         e++;
-         m <<= 1;
diff --git a/srcpkgs/beignet/template b/srcpkgs/beignet/template
deleted file mode 100644
index dce6bbb7ae24..000000000000
--- a/srcpkgs/beignet/template
+++ /dev/null
@@ -1,22 +0,0 @@
-# Template file for 'beignet'
-pkgname=beignet
-version=1.3.2
-revision=10
-archs="i686* x86_64*"
-wrksrc="Beignet-${version}-Source"
-build_style=cmake
-hostmakedepends="clang llvm pkg-config"
-makedepends="MesaLib-devel libedit-devel libffi-devel ocl-icd-devel zlib-devel
- libXfixes-devel"
-depends="ocl-icd"
-short_desc="Beignet GPGPU System for Intel GPUs"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://www.freedesktop.org/wiki/Software/Beignet/"
-distfiles="https://01.org/sites/default/files/${pkgname}-${version}-source.tar.gz"
-checksum=c555edba149de23243965a703f39f79fa06f15bcff5a3762b5544b0925010b43
-
-post_install() {
-	# remove CL headers, we do use opencl-headers instead.
-	rm -r ${DESTDIR}/usr/include
-}
diff --git a/srcpkgs/beignet/update b/srcpkgs/beignet/update
deleted file mode 100644
index ca41e0afe60c..000000000000
--- a/srcpkgs/beignet/update
+++ /dev/null
@@ -1 +0,0 @@
-site="https://01.org/beignet/downloads"
diff --git a/srcpkgs/removed-packages/template b/srcpkgs/removed-packages/template
index 0923c53cfc05..d59bd20f820c 100644
--- a/srcpkgs/removed-packages/template
+++ b/srcpkgs/removed-packages/template
@@ -1,7 +1,7 @@
 # Template file for 'removed-packages'
 pkgname=removed-packages
 version=0.1
-revision=69
+revision=70
 build_style=meta
 short_desc="Uninstalls packages removed from repository"
 maintainer="Piotr Wójcik <chocimier@tlen.pl>"
@@ -25,6 +25,7 @@ replaces="
  atom<=1.44.0_1
  avogadro-devel<=1.2.0_8
  avogadro<=1.2.0_8
+ beignet<=1.3.2_10
  bokken<=1.8_3
  bomi<=0.9.11_17
  burp-client<=1.4.40_13

From 97338ef68219b7d590bd10edc23bf882e6d2d9cb Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 21/29] ldc: rebuild for llvm14

---
 srcpkgs/ldc/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/ldc/template b/srcpkgs/ldc/template
index a27280dde3b8..e21bc6555e38 100644
--- a/srcpkgs/ldc/template
+++ b/srcpkgs/ldc/template
@@ -1,7 +1,7 @@
 # Template file for 'ldc'
 pkgname=ldc
 version=1.28.0
-revision=1
+revision=2
 wrksrc="ldc-${version}-src"
 build_style=cmake
 configure_args="

From 542f5c5ee5d187c465a6490af05c1133fe701723 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 22:31:25 +0200
Subject: [PATCH 22/29] ldc: update to 1.29.0.

---
 srcpkgs/ldc/template | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/srcpkgs/ldc/template b/srcpkgs/ldc/template
index e21bc6555e38..1d72a8805eb6 100644
--- a/srcpkgs/ldc/template
+++ b/srcpkgs/ldc/template
@@ -1,7 +1,7 @@
 # Template file for 'ldc'
 pkgname=ldc
-version=1.28.0
-revision=2
+version=1.29.0
+revision=1
 wrksrc="ldc-${version}-src"
 build_style=cmake
 configure_args="
@@ -11,7 +11,7 @@ configure_args="
  -DBASH_COMPLETION_COMPLETIONSDIR=/usr/share/bash-completion
  -DC_SYSTEM_LIBS='unwind;m;pthread;rt;dl'"
 conf_files="/etc/ldc2.conf"
-hostmakedepends="dmd llvm12 perl pkg-config"
+hostmakedepends="dmd llvm14 perl pkg-config"
 makedepends="libcurl-devel libffi-devel ncurses-devel zlib-devel
  llvm-libunwind-devel"
 depends="ldc-runtime llvm-libunwind-devel"
@@ -22,7 +22,7 @@ license="BSD-3-Clause, BSL-1.0"
 homepage="https://wiki.dlang.org/LDC"
 changelog="https://raw.githubusercontent.com/ldc-developers/ldc/master/CHANGELOG.md"
 distfiles="https://github.com/ldc-developers/ldc/releases/download/v${version}/ldc-${version}-src.tar.gz"
-checksum=17fee8bb535bcb8cda0a45947526555c46c045f302a7349cc8711b254e54cf09
+checksum=d0c066eb965467625d9c5e75c00c583451b9ffa363601f9e37275ca8a8aea140
 nopie=yes
 nocross="dmd compilation fails on cross"
 # tests timeout on musl; also require unpackaged python3-lit

From aedbfa1967184744cf68b38bb9b61cc8c6df6c5c Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 23/29] include-what-you-use: update to 0.18.

---
 srcpkgs/include-what-you-use/template | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/include-what-you-use/template b/srcpkgs/include-what-you-use/template
index b13bb7ee56af..297669f60459 100644
--- a/srcpkgs/include-what-you-use/template
+++ b/srcpkgs/include-what-you-use/template
@@ -1,6 +1,6 @@
 # Template file for 'include-what-you-use'
 pkgname=include-what-you-use
-version=0.16
+version=0.18
 revision=1
 wrksrc="${pkgname}"
 build_style=cmake
@@ -12,7 +12,7 @@ maintainer="Leah Neukirchen <leah@vuxu.org>"
 license="NCSA"
 homepage="https://include-what-you-use.org/"
 distfiles="https://include-what-you-use.org/downloads/${pkgname}-${version}.src.tar.gz"
-checksum=8d6fc9b255343bc1e5ec459e39512df1d51c60e03562985e0076036119ff5a1c
+checksum=9102fc8419294757df86a89ce6ec305f8d90a818d1f2598a139d15eb1894b8f3
 python_version=3
 
 post_install() {

From 7bb7e0998594c0853e98c3bfe8857c1deb7f9e45 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:18:24 +0200
Subject: [PATCH 24/29] SPIRV-LLVM-Translator: update to 14.0.0.

---
 common/shlibs                          |  1 +
 srcpkgs/SPIRV-LLVM-Translator/template | 11 ++++++-----
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/common/shlibs b/common/shlibs
index 86f4c9060d3b..df3eb79f921c 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -983,6 +983,7 @@ libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
 libLLVM-14.so libllvm14-14.0.3_1
+libLLVMSPIRVLib.so.14 SPIRV-LLVM-Translator-14.0.0_1
 libisofs.so.6 libisofs-0.6.24_1
 libmpack.so.0 libmpack-1.0.5_1
 libGeoIP.so.1 libgeoip-1.4.8_1
diff --git a/srcpkgs/SPIRV-LLVM-Translator/template b/srcpkgs/SPIRV-LLVM-Translator/template
index 2504cabed367..2277d062d992 100644
--- a/srcpkgs/SPIRV-LLVM-Translator/template
+++ b/srcpkgs/SPIRV-LLVM-Translator/template
@@ -1,19 +1,20 @@
 # Template file for 'SPIRV-LLVM-Translator'
 pkgname=SPIRV-LLVM-Translator
-version=12.0.0
+version=14.0.0
 revision=1
 build_style=cmake
 make_build_args="llvm-spirv"
-configure_args="-Wno-dev -DLLVM_LINK_LLVM_DYLIB=ON -DCMAKE_SKIP_RPATH=ON
- -DLLVM_SPIRV_INCLUDE_TESTS=OFF -DBUILD_SHARED_LIBS=ON"
+configure_args="-DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release
+ -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_SKIP_RPATH=ON -DLLVM_INCLUDE_TESTS=OFF
+ -DLLVM_LINK_LLVM_DYLIB=ON -DLLVM_EXTERNAL_LIT=/usr/bin/lit -Wno-dev -DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=/usr/include/spirv/ "
 hostmakedepends="clang clang-tools-extra llvm"
-makedepends="llvm"
+makedepends="llvm SPIRV-Headers"
 short_desc="API and commands for processing SPIR-V modules"
 maintainer="Orphaned <orphan@voidlinux.org>"
 license="NCSA"
 homepage="https://github.com/KhronosGroup/SPIRV-LLVM-Translator"
 distfiles="https://github.com/KhronosGroup/${pkgname}/archive/refs/tags/v${version}.tar.gz"
-checksum=6e4fad04203f25fcde4c308c53e9f59bd05a390978992db3212d4b63aff62108
+checksum=1afc52bb4e39aeb9b5b69324a201c81bd986364f347b559995eff6fd6f013318
 make_check=no
 
 post_install() {

From cddfa00dd1ed830105ca6d8480e086782f74b795 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:17:29 +0200
Subject: [PATCH 25/29] SPIRV-Headers: update to 1.3.211.0.

---
 srcpkgs/SPIRV-Headers/template | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/SPIRV-Headers/template b/srcpkgs/SPIRV-Headers/template
index 5dcf457c04c7..ce8288174e48 100644
--- a/srcpkgs/SPIRV-Headers/template
+++ b/srcpkgs/SPIRV-Headers/template
@@ -1,11 +1,13 @@
 # Template file for 'SPIRV-Headers'
 pkgname=SPIRV-Headers
-version=1.5.4.raytracing.fixed
+version=1.3.211.0
 revision=1
+reverts="1.5.4.raytracing.fixed"
+wrksrc=${pkgname}-sdk-${version}
 build_style=cmake
 short_desc="Machine-readable files for the SPIR-V Registry"
 maintainer="Orphaned <orphan@voidlinux.org>"
 license="GPL-3.0-or-later"
 homepage="https://github.com/KhronosGroup/SPIRV-Headers"
-distfiles="https://github.com/KhronosGroup/SPIRV-Headers/archive/${version}.tar.gz"
-checksum=df2ad2520be4d95a479fa248921065885bbf435a658349a7fc164ad7b26b68c6
+distfiles="https://github.com/KhronosGroup/SPIRV-Headers/archive/sdk-${version}.tar.gz"
+checksum=30a78e61bd812c75e09fdc7a319af206b1044536326bc3e85fea818376a12568

From f65e289140bd47a492e88429be7f5bfc7d252135 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:35:43 +0200
Subject: [PATCH 26/29] ispc: update to 1.17.0.

---
 .../ispc/patches/cmake-build-type-none.patch  |   18 -
 srcpkgs/ispc/patches/llvm12-001.patch         |   57 -
 srcpkgs/ispc/patches/llvm12-002.patch         |  923 --------
 srcpkgs/ispc/patches/llvm12-003.patch         | 1504 ------------
 srcpkgs/ispc/patches/llvm12-004.patch         |   34 -
 srcpkgs/ispc/patches/llvm12-005.patch         |  372 ---
 srcpkgs/ispc/patches/llvm12-006.patch         |  126 -
 srcpkgs/ispc/patches/llvm12-007.patch         |  160 --
 srcpkgs/ispc/patches/llvm12-008.patch         |  149 --
 srcpkgs/ispc/patches/llvm12-009.patch         | 2109 -----------------
 srcpkgs/ispc/template                         |    6 +-
 11 files changed, 3 insertions(+), 5455 deletions(-)
 delete mode 100644 srcpkgs/ispc/patches/cmake-build-type-none.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-001.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-002.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-003.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-004.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-005.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-006.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-007.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-008.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-009.patch

diff --git a/srcpkgs/ispc/patches/cmake-build-type-none.patch b/srcpkgs/ispc/patches/cmake-build-type-none.patch
deleted file mode 100644
index 411e353c7314..000000000000
--- a/srcpkgs/ispc/patches/cmake-build-type-none.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Index: ispc-1.15.0/CMakeLists.txt
-===================================================================
---- ispc-1.15.0.orig/CMakeLists.txt
-+++ ispc-1.15.0/CMakeLists.txt
-@@ -157,13 +157,6 @@ set(OUTPUT_RELEASE Release/bin)
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin )
- 
- if(CMAKE_BUILD_TYPE)
--    # Validate build type
--    set(CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo")
--
--    string(FIND "${CONFIGURATION_TYPES}" "${CMAKE_BUILD_TYPE}" MATCHED_CONFIG)
--    if (${MATCHED_CONFIG} EQUAL -1)
--         message(FATAL_ERROR "CMAKE_BUILD_TYPE (${CMAKE_BUILD_TYPE}) allows only the following values: ${CONFIGURATION_TYPES}")
--    endif()
- else(NOT CMAKE_BUILD_TYPE)
-     set(CMAKE_BUILD_TYPE "Release")
-     message(STATUS "Build type not specified: Use Release by default.")
diff --git a/srcpkgs/ispc/patches/llvm12-001.patch b/srcpkgs/ispc/patches/llvm12-001.patch
deleted file mode 100644
index 5f2d3f5a409e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-001.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 1c0f89dccb774f216c7f6e76a99ee907a1e641cb Mon Sep 17 00:00:00 2001
-From: Dmitry Babokin <dmitry.y.babokin@intel.com>
-Date: Tue, 22 Dec 2020 17:03:59 -0800
-Subject: [PATCH] Fix to work with LLVM trunk after llvm/llvm-project@41c3b2713
-
----
- src/ctx.cpp | 18 ++++++++++++------
- 1 file changed, 12 insertions(+), 6 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 6fbb8b9cf..977e9d222 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1473,11 +1473,15 @@ void FunctionEmitContext::AddDebugPos(llvm::Value *value, const SourcePos *pos,
-     llvm::Instruction *inst = llvm::dyn_cast<llvm::Instruction>(value);
-     if (inst != NULL && m->diBuilder) {
-         SourcePos p = pos ? *pos : currentPos;
--        if (p.first_line != 0)
-+        if (p.first_line != 0) {
-             // If first_line == 0, then we're in the middle of setting up
-             // the standard library or the like; don't add debug positions
-             // for those functions
--            inst->setDebugLoc(llvm::DebugLoc::get(p.first_line, p.first_column, scope ? scope : GetDIScope()));
-+            scope = scope ? scope : GetDIScope();
-+            llvm::DebugLoc diLoc =
-+                llvm::DILocation::get(scope->getContext(), p.first_line, p.first_column, scope, nullptr, false);
-+            inst->setDebugLoc(diLoc);
-+        }
-     }
- }
- 
-@@ -1518,9 +1522,10 @@ void FunctionEmitContext::EmitVariableDebugInfo(Symbol *sym) {
-     llvm::DILocalVariable *var = m->diBuilder->createAutoVariable(
-         scope, sym->name, sym->pos.GetDIFile(), sym->pos.first_line, diType, true /* preserve through opts */);
- 
-+    llvm::DebugLoc diLoc =
-+        llvm::DILocation::get(scope->getContext(), sym->pos.first_line, sym->pos.first_column, scope, nullptr, false);
-     llvm::Instruction *declareInst =
--        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(),
--                                    llvm::DebugLoc::get(sym->pos.first_line, sym->pos.first_column, scope), bblock);
-+        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(), diLoc, bblock);
-     AddDebugPos(declareInst, &sym->pos, scope);
- }
- 
-@@ -1535,9 +1540,10 @@ void FunctionEmitContext::EmitFunctionParameterDebugInfo(Symbol *sym, int argNum
-         m->diBuilder->createParameterVariable(scope, sym->name, argNum + 1, sym->pos.GetDIFile(), sym->pos.first_line,
-                                               diType, true /* preserve through opts */, flags);
- 
-+    llvm::DebugLoc diLoc =
-+        llvm::DILocation::get(scope->getContext(), sym->pos.first_line, sym->pos.first_column, scope, nullptr, false);
-     llvm::Instruction *declareInst =
--        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(),
--                                    llvm::DebugLoc::get(sym->pos.first_line, sym->pos.first_column, scope), bblock);
-+        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(), diLoc, bblock);
-     AddDebugPos(declareInst, &sym->pos, scope);
- }
- 
diff --git a/srcpkgs/ispc/patches/llvm12-002.patch b/srcpkgs/ispc/patches/llvm12-002.patch
deleted file mode 100644
index 0903f30da10d..000000000000
--- a/srcpkgs/ispc/patches/llvm12-002.patch
+++ /dev/null
@@ -1,923 +0,0 @@
-From 0597a79d084c014780136da906afe21d15e982cb Mon Sep 17 00:00:00 2001
-From: DeepakRajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Tue, 5 Jan 2021 13:53:30 -0800
-Subject: [PATCH] Remove LLVM 8.0 and LLVM 9.0. (#1966)
-
----
- .appveyor.yml                        |  3 --
- .travis.yml                          |  7 ---
- CMakeLists.txt                       | 12 ++----
- src/ast.cpp                          |  4 --
- src/ctx.cpp                          | 30 -------------
- src/gen/GlobalsLocalization.cpp      |  4 --
- src/ispc.cpp                         | 20 ---------
- src/ispc.h                           |  3 +-
- src/ispc_version.h                   |  4 +-
- src/main.cpp                         | 13 ------
- src/module.cpp                       | 27 ------------
- src/module.h                         |  2 -
- src/opt.cpp                          | 64 ++--------------------------
- src/type.cpp                         | 10 ++---
- tests/lit-tests/1771.ispc            |  1 -
- tests/lit-tests/1844.ispc            |  3 --
- tests/lit-tests/1926.ispc            |  2 -
- tests/lit-tests/cpus_x86.ispc        |  2 +
- tests/lit-tests/cpus_x86_llvm10.ispc | 11 -----
- tests/lit-tests/lit.cfg              |  5 ---
- 20 files changed, 14 insertions(+), 213 deletions(-)
- delete mode 100644 tests/lit-tests/cpus_x86_llvm10.ispc
-
-diff --git a/.appveyor.yml b/.appveyor.yml
-index 451a7b3e0..7945cca2a 100644
---- a/.appveyor.yml
-+++ b/.appveyor.yml
-@@ -41,8 +41,6 @@ environment:
-       LLVM_VERSION: latest
-     - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
-       LLVM_VERSION: 10.0
--    - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
--      LLVM_VERSION: 9.0
- 
- for:
- -
-@@ -62,7 +60,6 @@ for:
-         if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2019" ( (set generator="Visual Studio 16") & (set vsversion=2019))
-         set LLVM_TAR=llvm-11.0.0-win.vs2019-Release+Asserts-x86.arm.wasm.7z
-         if "%LLVM_VERSION%"=="10.0" (set LLVM_TAR=llvm-10.0.1-win.vs2019-Release+Asserts-x86.arm.wasm.zip)
--        if "%LLVM_VERSION%"=="9.0" (set LLVM_TAR=llvm-9.0.1-win.vs2017-Release+Asserts-x86.arm.wasm.zip)
-   install:
-     - ps: choco install --no-progress winflexbison3 wget 7zip
-     - cmd: |-
-diff --git a/.travis.yml b/.travis.yml
-index 2e96017a6..3a6b85264 100644
---- a/.travis.yml
-+++ b/.travis.yml
-@@ -108,13 +108,6 @@ jobs:
-         - LLVM_TAR=llvm-10.0.1-ubuntu16.04-Release+Asserts-x86.arm.wasm.tar.xz
-         - LLVM_REPO=https://github.com/dbabokin/llvm-project
-         - ISPC_HOME=$TRAVIS_BUILD_DIR
--    # LLVM 9.0 + Ubuntu 16.04: build, lit tests, examples (build + run), benchmarks (build + trial run)
--    - <<: *my_tag
--      env:
--        - LLVM_VERSION=9.0 OS=Ubuntu16.04
--        - LLVM_TAR=llvm-9.0.1-ubuntu16.04-Release+Asserts-x86.arm.wasm.tar.xz
--        - LLVM_REPO=https://github.com/dbabokin/llvm-project
--        - ISPC_HOME=$TRAVIS_BUILD_DIR
-     # WASM enabled build
-     # LLVM 11.0 + Ubuntu 16.04: build, lit tests, examples (build), benchmarks (build + trial run)
-     - <<: *my_tag
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 5fa863fcf..a6b3ed251 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -241,10 +241,8 @@ if (X86_ENABLED)
-         avx2-i8x32 avx2-i16x16
-         avx2-i32x4 avx2-i32x8 avx2-i32x16 avx2-i64x4
-         avx512knl-i32x16
--        avx512skx-i32x16 avx512skx-i32x8)
--    if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "10.0.0")
--        list(APPEND ISPC_TARGETS avx512skx-i8x64 avx512skx-i16x32)
--    endif()
-+        avx512skx-i32x16 avx512skx-i32x8
-+        avx512skx-i8x64 avx512skx-i16x32)
- endif()
- if (ARM_ENABLED)
-     list(APPEND ISPC_TARGETS neon-i8x16 neon-i16x8 neon-i32x4 neon-i32x8)
-@@ -259,11 +257,7 @@ if (WASM_ENABLED)
- endif()
- 
- set(CLANG_LIBRARY_LIST clangFrontend clangDriver clangSerialization clangParse clangSema clangAnalysis clangAST clangBasic clangEdit clangLex)
--set(LLVM_COMPONENTS engine ipo bitreader bitwriter instrumentation linker option)
--
--if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "10.0.0")
--    list(APPEND LLVM_COMPONENTS frontendopenmp)
--endif()
-+set(LLVM_COMPONENTS engine ipo bitreader bitwriter instrumentation linker option frontendopenmp)
- 
- if (X86_ENABLED)
-     list(APPEND LLVM_COMPONENTS x86)
-diff --git a/src/ast.cpp b/src/ast.cpp
-index 20f75a29c..5a43c4854 100644
---- a/src/ast.cpp
-+++ b/src/ast.cpp
-@@ -44,9 +44,7 @@
- #include "sym.h"
- #include "util.h"
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/TimeProfiler.h>
--#endif
- ///////////////////////////////////////////////////////////////////////////
- // ASTNode
- 
-@@ -62,9 +60,7 @@ void AST::AddFunction(Symbol *sym, Stmt *code) {
- }
- 
- void AST::GenerateIR() {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope TimeScope("GenerateIR");
--#endif
-     for (unsigned int i = 0; i < functions.size(); ++i)
-         functions[i]->GenerateIR();
- }
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 977e9d222..42c4ea09d 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -309,21 +309,13 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym, llvm::F
-             char buf[256];
-             snprintf(buf, sizeof(buf), "__off_all_on_mask_%s", g->target->GetISAString());
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_8_0
--            llvm::Constant *offFunc = m->module->getOrInsertFunction(buf, LLVMTypes::VoidType);
--#else // LLVM 9.0+
-             llvm::FunctionCallee offFuncCallee = m->module->getOrInsertFunction(buf, LLVMTypes::VoidType);
-             llvm::Constant *offFunc = llvm::cast<llvm::Constant>(offFuncCallee.getCallee());
--#endif
-             AssertPos(currentPos, llvm::isa<llvm::Function>(offFunc));
-             llvm::BasicBlock *offBB = llvm::BasicBlock::Create(*g->ctx, "entry", (llvm::Function *)offFunc, 0);
-             llvm::StoreInst *inst = new llvm::StoreInst(LLVMMaskAllOff, globalAllOnMaskPtr, offBB);
-             if (g->opt.forceAlignedMemory) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-                 inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-             }
-             llvm::ReturnInst::Create(*g->ctx, offBB);
-         }
-@@ -2288,11 +2280,7 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
- #endif
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-     }
- 
-     AddDebugPos(inst);
-@@ -2431,11 +2419,7 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-                 // vs the proper alignment in practice.)
-                 int align = 1;
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                inst->setAlignment(align);
--#else // LLVM 10.0+
-                 inst->setAlignment(llvm::MaybeAlign(align).valueOrOne());
--#endif
-             }
- 
-             AddDebugPos(inst);
-@@ -2649,11 +2633,7 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-         align = g->target->getNativeVectorAlignment();
- 
-     if (align != 0) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(align);
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(align).valueOrOne());
--#endif
-     }
-     // Don't add debugging info to alloca instructions
-     return inst;
-@@ -2926,11 +2906,7 @@ void FunctionEmitContext::StoreInst(llvm::Value *value, llvm::Value *ptr, const
-     llvm::StoreInst *inst = new llvm::StoreInst(value, ptr, bblock);
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-     }
- 
- #ifdef ISPC_GENX_ENABLED
-@@ -3025,16 +3001,10 @@ void FunctionEmitContext::MemcpyInst(llvm::Value *dest, llvm::Value *src, llvm::
-     }
-     if (align == NULL)
-         align = LLVMInt32(1);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_8_0
--    llvm::Constant *mcFunc =
--        m->module->getOrInsertFunction("llvm.memcpy.p0i8.p0i8.i64", LLVMTypes::VoidType, LLVMTypes::VoidPointerType,
--                                       LLVMTypes::VoidPointerType, LLVMTypes::Int64Type, LLVMTypes::BoolType);
--#else // LLVM 9.0+
-     llvm::FunctionCallee mcFuncCallee =
-         m->module->getOrInsertFunction("llvm.memcpy.p0i8.p0i8.i64", LLVMTypes::VoidType, LLVMTypes::VoidPointerType,
-                                        LLVMTypes::VoidPointerType, LLVMTypes::Int64Type, LLVMTypes::BoolType);
-     llvm::Constant *mcFunc = llvm::cast<llvm::Constant>(mcFuncCallee.getCallee());
--#endif
-     AssertPos(currentPos, mcFunc != NULL);
-     AssertPos(currentPos, llvm::isa<llvm::Function>(mcFunc));
- 
-diff --git a/src/gen/GlobalsLocalization.cpp b/src/gen/GlobalsLocalization.cpp
-index 193a66289..a176e9462 100644
---- a/src/gen/GlobalsLocalization.cpp
-+++ b/src/gen/GlobalsLocalization.cpp
-@@ -470,11 +470,7 @@ void GlobalsLocalization::LocalizeGlobals(LocalizationInfo &LI) {
-         Instruction &FirstI = *Fn->getEntryBlock().begin();
-         Type *ElemTy = GV->getType()->getElementType();
-         AllocaInst *Alloca = new AllocaInst(ElemTy, 0, GV->getName() + ".local", &FirstI);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        Alloca->setAlignment(GV->getAlignment());
--#else // LLVM 10.0+
-         Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()));
--#endif
-         if (!isa<UndefValue>(GV->getInitializer()))
-             new StoreInst(GV->getInitializer(), Alloca, &FirstI);
- 
-diff --git a/src/ispc.cpp b/src/ispc.cpp
-index e2d0f206e..fac5233f7 100644
---- a/src/ispc.cpp
-+++ b/src/ispc.cpp
-@@ -272,9 +272,7 @@ typedef enum {
-     CPU_Silvermont,
- 
-     CPU_ICX,
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     CPU_TGL,
--#endif
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-     CPU_ADL,
-     CPU_SPR,
-@@ -365,10 +363,8 @@ class AllCPUs {
- 
-         names[CPU_ICX].push_back("icelake-server");
-         names[CPU_ICX].push_back("icx");
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         names[CPU_TGL].push_back("tigerlake");
-         names[CPU_TGL].push_back("tgl");
--#endif
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-         names[CPU_ADL].push_back("alderlake");
-         names[CPU_ADL].push_back("adl");
-@@ -411,11 +407,9 @@ class AllCPUs {
-         compat[CPU_ADL] = Set(CPU_ADL, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont,
-                               CPU_SandyBridge, CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_None);
- #endif
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         compat[CPU_TGL] =
-             Set(CPU_TGL, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont, CPU_SandyBridge,
-                 CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_SKX, CPU_ICL, CPU_ICX, CPU_None);
--#endif
-         compat[CPU_ICX] = Set(CPU_ICX, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont,
-                               CPU_SandyBridge, CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_SKX, CPU_ICL, CPU_None);
- 
-@@ -556,9 +550,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-         case CPU_SPR:
- #endif
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         case CPU_TGL:
--#endif
-         case CPU_ICX:
-         case CPU_ICL:
-         case CPU_SKX:
-@@ -916,7 +908,6 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         }
-         break;
-     case ISPCTarget::avx512skx_i8x64:
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0 // LLVM 10.0+
-         // This target is enabled only for LLVM 10.0 and later
-         // because LLVM requires a number of fixes, which are
-         // committed to LLVM 11.0 and can be applied to 10.0, but not
-@@ -937,12 +928,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         this->m_hasVecPrefetch = false;
-         CPUfromISA = CPU_SKX;
-         break;
--#else
--        unsupported_target = true;
--        break;
--#endif
-     case ISPCTarget::avx512skx_i16x32:
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0 // LLVM 10.0+
-         // This target is enabled only for LLVM 10.0 and later
-         // because LLVM requires a number of fixes, which are
-         // committed to LLVM 11.0 and can be applied to 10.0, but not
-@@ -963,10 +949,6 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         this->m_hasVecPrefetch = false;
-         CPUfromISA = CPU_SKX;
-         break;
--#else
--        unsupported_target = true;
--        break;
--#endif
- #ifdef ISPC_ARM_ENABLED
-     case ISPCTarget::neon_i8x16:
-         this->m_isa = Target::NEON;
-@@ -1662,11 +1644,9 @@ Globals::Globals() {
-     isMultiTargetCompilation = false;
-     errorLimit = -1;
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     enableTimeTrace = false;
-     // set default granularity to 500.
-     timeTraceGranularity = 500;
--#endif
-     target = NULL;
-     ctx = new llvm::LLVMContext;
- 
-diff --git a/src/ispc.h b/src/ispc.h
-index e25d8830e..de357a21c 100644
---- a/src/ispc.h
-+++ b/src/ispc.h
-@@ -695,13 +695,12 @@ struct Globals {
- 
-     /* Number of errors to show in ISPC. */
-     int errorLimit;
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-+
-     /* When true, enable compile time tracing. */
-     bool enableTimeTrace;
- 
-     /* When compile time tracing is enabled, set time granularity. */
-     int timeTraceGranularity;
--#endif
- };
- 
- enum {
-diff --git a/src/ispc_version.h b/src/ispc_version.h
-index d781347fd..434b2d678 100644
---- a/src/ispc_version.h
-+++ b/src/ispc_version.h
-@@ -44,13 +44,11 @@
- 
- #define ISPC_LLVM_VERSION (LLVM_VERSION_MAJOR * 10000 + LLVM_VERSION_MINOR * 100)
- 
--#define ISPC_LLVM_8_0 80000
--#define ISPC_LLVM_9_0 90000
- #define ISPC_LLVM_10_0 100000
- #define ISPC_LLVM_11_0 110000
- #define ISPC_LLVM_12_0 120000
- 
--#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_8_0
-+#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_10_0
- #define LATEST_SUPPORTED_LLVM ISPC_LLVM_12_0
- 
- #ifdef __ispc__xstr
-diff --git a/src/main.cpp b/src/main.cpp
-index 8f64330cc..5c920eabc 100644
---- a/src/main.cpp
-+++ b/src/main.cpp
-@@ -55,9 +55,7 @@
- #include <llvm/Support/Signals.h>
- #include <llvm/Support/TargetRegistry.h>
- #include <llvm/Support/TargetSelect.h>
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/ToolOutputFile.h>
--#endif
- 
- #ifdef ISPC_HOST_IS_WINDOWS
- #define strcasecmp stricmp
-@@ -181,11 +179,9 @@ static void lPrintVersion() {
-     snprintf(targetHelp, sizeof(targetHelp), "[--target-os=<os>]\t\t\tSelect target OS.  <os>={%s}",
-              g->target_registry->getSupportedOSes().c_str());
-     PrintWithWordBreaks(targetHelp, 24, TerminalWidth(), stdout);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     printf("    [--time-trace]\t\t\tTurn on time profiler. Generates JSON file based on output filename.\n");
-     printf("    [--time-trace-granularity=<value>\tMinimum time granularity (in microseconds) traced by time "
-            "profiler.\n");
--#endif
-     printf("    [--version]\t\t\t\tPrint ispc version\n");
- #ifdef ISPC_GENX_ENABLED
-     printf("    [--vc-options=<\"-option1 -option2...\">]\t\t\t\tPass additional options to Vector Compiler backend\n");
-@@ -462,7 +458,6 @@ static void setCallingConv(VectorCallStatus vectorCall, Arch arch) {
-     }
- }
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- static void writeCompileTimeFile(const char *outFileName) {
-     llvm::SmallString<128> jsonFileName(outFileName);
-     jsonFileName.append(".json");
-@@ -479,7 +474,6 @@ static void writeCompileTimeFile(const char *outFileName) {
-     of->keep();
-     return;
- }
--#endif
- 
- static std::set<int> ParsingPhases(char *stages, ArgErrors &errorHandler) {
-     constexpr int parsing_limit = 100;
-@@ -791,12 +785,10 @@ int main(int Argc, char *Argv[]) {
-             }
-         } else if (!strncmp(argv[i], "--force-alignment=", 18)) {
-             g->forceAlignment = atoi(argv[i] + 18);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         } else if (!strcmp(argv[i], "--time-trace")) {
-             g->enableTimeTrace = true;
-         } else if (!strncmp(argv[i], "--time-trace-granularity=", 25)) {
-             g->timeTraceGranularity = atoi(argv[i] + 25);
--#endif
-         } else if (!strcmp(argv[i], "--woff") || !strcmp(argv[i], "-woff")) {
-             g->disableWarnings = true;
-             g->emitPerfWarnings = false;
-@@ -1059,7 +1051,6 @@ int main(int Argc, char *Argv[]) {
- 
-     // This needs to happen after the TargetOS is decided.
-     setCallingConv(vectorCall, arch);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     if (g->enableTimeTrace) {
-         llvm::timeTraceProfilerInitialize(g->timeTraceGranularity, "ispc");
-     }
-@@ -1077,9 +1068,5 @@ int main(int Argc, char *Argv[]) {
-         }
-         llvm::timeTraceProfilerCleanup();
-     }
--#else
--    int ret = Module::CompileAndOutput(file, arch, cpu, targets, flags, ot, outFileName, headerFileName, depsFileName,
--                                       depsTargetName, hostStubFileName, devStubFileName);
--#endif
-     return ret;
- }
-diff --git a/src/module.cpp b/src/module.cpp
-index fe7452df1..a85fec77a 100644
---- a/src/module.cpp
-+++ b/src/module.cpp
-@@ -170,9 +170,7 @@ Module::Module(const char *fn) {
-     module->setDataLayout(g->target->getDataLayout()->getStringRepresentation());
- 
-     if (g->generateDebuggingSymbols) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Create Debug Data");
--#endif
-         // To enable debug information on Windows, we have to let llvm know, that
-         // debug information should be emitted in CodeView format.
-         if (g->target_os == TargetOS::windows) {
-@@ -226,10 +224,8 @@ extern YY_BUFFER_STATE yy_create_buffer(FILE *, int);
- extern void yy_delete_buffer(YY_BUFFER_STATE);
- 
- int Module::CompileFile() {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope CompileFileTimeScope(
-         "CompileFile", llvm::StringRef(filename + ("_" + std::string(g->target->GetISAString()))));
--#endif
-     extern void ParserInit();
-     ParserInit();
- 
-@@ -238,18 +234,14 @@ int Module::CompileFile() {
-     // variable 'm' to be initialized and available (which it isn't until
-     // the Module constructor returns...)
-     {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("DefineStdlib");
--#endif
-         DefineStdlib(symbolTable, g->ctx, module, g->includeStdlib);
-     }
- 
-     bool runPreprocessor = g->runCPP;
- 
-     if (runPreprocessor) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Frontend parser");
--#endif
-         if (!IsStdin(filename)) {
-             // Try to open the file first, since otherwise we crash in the
-             // preprocessor if the file doesn't exist.
-@@ -268,9 +260,7 @@ int Module::CompileFile() {
-         yyparse();
-         yy_delete_buffer(strbuf);
-     } else {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Frontend parser");
--#endif
-         // No preprocessor, just open up the file if it's not stdin..
-         FILE *f = NULL;
-         if (IsStdin(filename)) {
-@@ -297,9 +287,7 @@ int Module::CompileFile() {
- 
-     if (diBuilder)
-         diBuilder->finalize();
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope TimeScope("Optimize");
--#endif
-     if (errorCount == 0)
-         Optimize(module, g->opt.level);
- 
-@@ -1243,15 +1231,8 @@ bool Module::writeObjectFileOrAssembly(llvm::TargetMachine *targetMachine, llvm:
-                                        const char *outFileName) {
-     // Figure out if we're generating object file or assembly output, and
-     // set binary output for object files
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    Assert(!g->target->isGenXTarget());
--    llvm::TargetMachine::CodeGenFileType fileType =
--        (outputType == Object) ? llvm::TargetMachine::CGFT_ObjectFile : llvm::TargetMachine::CGFT_AssemblyFile;
--    bool binary = (fileType == llvm::TargetMachine::CGFT_ObjectFile);
--#else // LLVM 10.0+
-     llvm::CodeGenFileType fileType = (outputType == Object) ? llvm::CGFT_ObjectFile : llvm::CGFT_AssemblyFile;
-     bool binary = (fileType == llvm::CGFT_ObjectFile);
--#endif
- 
-     llvm::sys::fs::OpenFlags flags = binary ? llvm::sys::fs::F_None : llvm::sys::fs::F_Text;
- 
-@@ -2219,11 +2200,7 @@ void Module::execPreprocessor(const char *infilename, llvm::raw_string_ostream *
-     inst.setTarget(target);
-     inst.createSourceManager(inst.getFileManager());
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    clang::FrontendInputFile inputFile(infilename, clang::InputKind::Unknown);
--#else // LLVM 10.0+
-     clang::FrontendInputFile inputFile(infilename, clang::InputKind());
--#endif
- 
-     inst.InitializeSourceManager(inputFile);
- 
-@@ -2722,9 +2699,7 @@ int Module::CompileAndOutput(const char *srcFile, Arch arch, const char *cpu, st
- 
-         m = new Module(srcFile);
-         if (m->CompileFile() == 0) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-             llvm::TimeTraceScope TimeScope("Backend");
--#endif
- #ifdef ISPC_GENX_ENABLED
-             if (outputType == Asm || outputType == Object) {
-                 if (g->target->isGenXTarget()) {
-@@ -2855,9 +2830,7 @@ int Module::CompileAndOutput(const char *srcFile, Arch arch, const char *cpu, st
- 
-             m = new Module(srcFile);
-             int compileFileError = m->CompileFile();
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-             llvm::TimeTraceScope TimeScope("Backend");
--#endif
-             if (compileFileError == 0) {
-                 // Create the dispatch module, unless already created;
-                 // in the latter case, just do the checking
-diff --git a/src/module.h b/src/module.h
-index 61d3cfea0..603124d50 100644
---- a/src/module.h
-+++ b/src/module.h
-@@ -43,9 +43,7 @@
- 
- #include <llvm/IR/DebugInfo.h>
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/TimeProfiler.h>
--#endif
- 
- #ifdef ISPC_GENX_ENABLED
- #include "ocl_igc_interface/igc_ocl_device_ctx.h"
-diff --git a/src/opt.cpp b/src/opt.cpp
-index a655a8344..5b1ac7b63 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -66,6 +66,7 @@
- #include <llvm/IR/Instructions.h>
- #include <llvm/IR/IntrinsicInst.h>
- #include <llvm/IR/Intrinsics.h>
-+#include <llvm/IR/IntrinsicsX86.h>
- #include <llvm/IR/LegacyPassManager.h>
- #include <llvm/IR/Module.h>
- #include <llvm/IR/PatternMatch.h>
-@@ -85,9 +86,6 @@
- #include <llvm/Transforms/Scalar/InstSimplifyPass.h>
- #include <llvm/Transforms/Utils.h>
- #include <llvm/Transforms/Utils/BasicBlockUtils.h>
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
--#include <llvm/IR/IntrinsicsX86.h>
--#endif
- 
- #ifdef ISPC_HOST_IS_LINUX
- #include <alloca.h>
-@@ -1003,10 +1001,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
-                 name = LLVMGetName(callInst->getArgOperand(0), "_load");
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                llvm::Instruction *loadInst =
--                    new llvm::LoadInst(castPtr, name, false /* not volatile */, align, (llvm::Instruction *)NULL);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-                 llvm::Instruction *loadInst = new llvm::LoadInst(castPtr, name, false /* not volatile */,
-                                                                  llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
- #else
-@@ -1043,13 +1038,8 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedStore32 ? 4 : 8;
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                llvm::StoreInst *storeInst = new llvm::StoreInst(rvalue, castPtr, (llvm::Instruction *)NULL);
--                storeInst->setAlignment(align);
--#else
-                 llvm::StoreInst *storeInst = new llvm::StoreInst(rvalue, castPtr, (llvm::Instruction *)NULL,
-                                                                  llvm::MaybeAlign(align).valueOrOne());
--#endif
-                 lCopyMetadata(storeInst, callInst);
-                 llvm::ReplaceInstWithInst(callInst, storeInst);
- 
-@@ -1066,9 +1056,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool IntrinsicsOpt::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("IntrinsicsOpt::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -1239,9 +1227,7 @@ bool InstructionSimplifyPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool InstructionSimplifyPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("InstructionSimplifyPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -2974,16 +2960,10 @@ static bool lImproveMaskedStore(llvm::CallInst *callInst) {
- 
-             lvalue = new llvm::BitCastInst(lvalue, ptrType, "lvalue_to_ptr_type", callInst);
-             lCopyMetadata(lvalue, callInst);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--            store =
--                new llvm::StoreInst(rvalue, lvalue, false /* not volatile */,
--                                    g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align);
--#else
-             store = new llvm::StoreInst(
-                 rvalue, lvalue, false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-                     .valueOrOne());
--#endif
-         }
-         if (store != NULL) {
-             lCopyMetadata(store, callInst);
-@@ -3059,11 +3039,7 @@ static bool lImproveMaskedLoad(llvm::CallInst *callInst, llvm::BasicBlock::itera
-         {
-             llvm::Type *ptrType = llvm::PointerType::get(callInst->getType(), 0);
-             ptr = new llvm::BitCastInst(ptr, ptrType, "ptr_cast_for_load", callInst);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--            load = new llvm::LoadInst(ptr, callInst->getName(), false /* not volatile */,
--                                      g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align,
--                                      (llvm::Instruction *)NULL);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-             load = new llvm::LoadInst(
-                 ptr, callInst->getName(), false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-@@ -3129,9 +3105,7 @@ bool ImproveMemoryOpsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ImproveMemoryOpsPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ImproveMemoryOpsPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -3424,9 +3398,7 @@ llvm::Value *lGEPAndLoad(llvm::Value *basePtr, int64_t offset, int align, llvm::
-                          llvm::Type *type) {
-     llvm::Value *ptr = lGEPInst(basePtr, LLVMInt64(offset), "new_base", insertBefore);
-     ptr = new llvm::BitCastInst(ptr, llvm::PointerType::get(type, 0), "ptr_cast", insertBefore);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, align, insertBefore);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-     return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, llvm::MaybeAlign(align), insertBefore);
- #else // LLVM 11.0+
-     return new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-@@ -4135,9 +4107,7 @@ bool GatherCoalescePass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool GatherCoalescePass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("GatherCoalescePass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -4467,9 +4437,7 @@ bool ReplacePseudoMemoryOpsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplacePseudoMemoryOpsPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplacePseudoMemoryOpsPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -4573,9 +4541,7 @@ bool IsCompileTimeConstantPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool IsCompileTimeConstantPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("IsCompileTimeConstantPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5201,9 +5167,7 @@ bool PeepholePass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool PeepholePass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("PeepholePass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5299,9 +5263,7 @@ bool ReplaceStdlibShiftPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceStdlibShiftPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceStdlibShiftPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5399,9 +5361,7 @@ llvm::Instruction *FixBooleanSelectPass::fixSelect(llvm::SelectInst *sel, llvm::
- }
- 
- bool FixBooleanSelectPass::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("FixBooleanSelectPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
- 
-     return modifiedAny;
-@@ -5964,9 +5924,7 @@ bool GenXGatherCoalescing::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool GenXGatherCoalescing::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("GenXGatherCoalescing::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6113,9 +6071,7 @@ bool PromoteToPrivateMemoryPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool PromoteToPrivateMemoryPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("PromoteToPrivateMemoryPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6181,9 +6137,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceLLVMIntrinsics::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceLLVMIntrinsics::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6278,9 +6232,7 @@ bool ReplaceUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceUnsupportedInsts::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceUnsupportedInsts::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6369,9 +6321,7 @@ bool CheckUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool CheckUnsupportedInsts::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("CheckUnsupportedInsts::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6440,9 +6390,7 @@ bool MangleOpenCLBuiltins::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool MangleOpenCLBuiltins::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("MangleOpenCLBuiltins::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6828,9 +6776,7 @@ bool FixAddressSpace::runOnFunction(llvm::Function &F) {
-     // Transformations are correct when the function is not internal.
-     // This is due to address space calculation algorithm.
-     // TODO: problems can be met in case of Stack Calls
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("FixAddressSpace::runOnFunction", F.getName());
--#endif
-     if (F.getLinkage() == llvm::GlobalValue::LinkageTypes::InternalLinkage)
-         return false;
- 
-@@ -6854,9 +6800,7 @@ class DemotePHIs : public llvm::FunctionPass {
- char DemotePHIs::ID = 0;
- 
- bool DemotePHIs::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("DemotePHIs::runOnFunction", F.getName());
--#endif
-     if (F.isDeclaration() || skipFunction(F))
-         return false;
-     std::vector<llvm::Instruction *> WorkList;
-diff --git a/src/type.cpp b/src/type.cpp
-index 688a4e874..fa0cb04db 100644
---- a/src/type.cpp
-+++ b/src/type.cpp
-@@ -1822,14 +1822,10 @@ llvm::DIType *StructType::GetDIType(llvm::DIScope *scope) const {
-     llvm::DIFile *diFile = pos.GetDIFile();
-     llvm::DINamespace *diSpace = pos.GetDINamespace();
-     return m->diBuilder->createStructType(diSpace, GetString(), diFile,
--                                          pos.first_line,          // Line number
--                                          layout->getSizeInBits(), // Size in bits
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                                          layout->getAlignment() * 8, // Alignment in bits
--#else                                                                 // LLVM 10.0+
-+                                          pos.first_line,                     // Line number
-+                                          layout->getSizeInBits(),            // Size in bits
-                                           layout->getAlignment().value() * 8, // Alignment in bits
--#endif
--                                          llvm::DINode::FlagZero, // Flags
-+                                          llvm::DINode::FlagZero,             // Flags
-                                           NULL, elements);
- }
- 
-diff --git a/tests/lit-tests/1771.ispc b/tests/lit-tests/1771.ispc
-index 98064d84d..4feb73dd7 100644
---- a/tests/lit-tests/1771.ispc
-+++ b/tests/lit-tests/1771.ispc
-@@ -5,7 +5,6 @@
- // RUN: %{ispc} %s --target=sse4-i16x8 --emit-asm -o - | FileCheck %s -check-prefix=CHECKSSE4_I16X8
- // RUN: %{ispc} %s --target=sse4-i8x16 --emit-asm -o - | FileCheck %s -check-prefix=CHECKSSE4_I8X16
- 
--// REQUIRES: LLVM_10_0+
- // REQUIRES: X86_ENABLED
- 
- // CHECKAVX2_I32X8: {{[a-z]*xor[a-z]*}}  %xmm0, %xmm0, %xmm0
-diff --git a/tests/lit-tests/1844.ispc b/tests/lit-tests/1844.ispc
-index 793a8866c..189edf4c3 100644
---- a/tests/lit-tests/1844.ispc
-+++ b/tests/lit-tests/1844.ispc
-@@ -6,9 +6,6 @@
- 
- // REQUIRES: X86_ENABLED
- 
--// It doesn't work for anything earlier than 10.0, but it will not be fixed, so don't run.
--// REQUIRES: LLVM_10_0+
--
- extern uniform unsigned int64 var_6;
- extern uniform unsigned int16 var_11;
- extern uniform bool arr_201 [1] [15] [20];
-diff --git a/tests/lit-tests/1926.ispc b/tests/lit-tests/1926.ispc
-index 70f7cc3c2..7921c91a6 100644
---- a/tests/lit-tests/1926.ispc
-+++ b/tests/lit-tests/1926.ispc
-@@ -2,8 +2,6 @@
- // RUN: cat %T/1926.o.json \
- // RUN:   | FileCheck %s
- 
--// REQUIRES: LLVM_10_0+
--
- // CHECK: "traceEvents"
- // CHECK: "detail"
- export uniform int foo(uniform int a[], uniform int count) {
-diff --git a/tests/lit-tests/cpus_x86.ispc b/tests/lit-tests/cpus_x86.ispc
-index 516efdd4c..4d60186f6 100644
---- a/tests/lit-tests/cpus_x86.ispc
-+++ b/tests/lit-tests/cpus_x86.ispc
-@@ -24,6 +24,8 @@
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icl
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icelake-server
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icx
-+//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tigerlake
-+//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tgl
- 
- // REQUIRES: X86_ENABLED
- 
-diff --git a/tests/lit-tests/cpus_x86_llvm10.ispc b/tests/lit-tests/cpus_x86_llvm10.ispc
-deleted file mode 100644
-index ef00000e5..000000000
---- a/tests/lit-tests/cpus_x86_llvm10.ispc
-+++ /dev/null
-@@ -1,11 +0,0 @@
--// The test checks that cpu definitions (including all synonyms) are successfully consumed by compiler.
--
--//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tigerlake
--//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tgl
--
--// REQUIRES: X86_ENABLED
--// REQUIRES: LLVM_10_0+
--
--uniform int i;
--
--void foo() {}
-diff --git a/tests/lit-tests/lit.cfg b/tests/lit-tests/lit.cfg
-index 17016579d..045e69437 100644
---- a/tests/lit-tests/lit.cfg
-+++ b/tests/lit-tests/lit.cfg
-@@ -30,11 +30,6 @@ print("Config:")
- 
- # LLVM version
- llvm_version = LooseVersion(ispc_llvm_version_number)
--if llvm_version >= LooseVersion("10.0.0"):
--    print("LLVM_10_0+: YES")
--    config.available_features.add("LLVM_10_0+")
--else:
--    print("LLVM_10_0+: NO")
- 
- if llvm_version >= LooseVersion("12.0.0"):
-     print("LLVM_12_0+: YES")
diff --git a/srcpkgs/ispc/patches/llvm12-003.patch b/srcpkgs/ispc/patches/llvm12-003.patch
deleted file mode 100644
index 0423afc9e3f9..000000000000
--- a/srcpkgs/ispc/patches/llvm12-003.patch
+++ /dev/null
@@ -1,1504 +0,0 @@
-From 1851d18b213dbad169937076176b2d5509733c76 Mon Sep 17 00:00:00 2001
-From: Deepak Rajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Tue, 12 Jan 2021 22:15:12 -0800
-Subject: [PATCH] fixes #1821 - Removing LLVMGetName() and switching to
- LLVM::Twine.
-
----
- src/ctx.cpp      | 304 ++++++++++++++++++++++-------------------------
- src/ctx.h        |  72 +++++------
- src/expr.cpp     |  36 +++---
- src/llvmutil.cpp |  17 ---
- src/llvmutil.h   |   5 -
- src/opt.cpp      | 103 +++++++++-------
- 6 files changed, 255 insertions(+), 282 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 42c4ea09d..ded524b71 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1020,8 +1020,8 @@ void FunctionEmitContext::EmitCaseLabel(int value, bool checkMask, SourcePos pos
-     llvm::BasicBlock *bbCaseImpl = NULL;
-     if (emitGenXHardwareMask()) {
-         // Create basic block with actual case implementation
--        std::string bbName = bbCase->getName().str() + "_impl";
--        bbCaseImpl = CreateBasicBlock(bbName.c_str(), bbCase);
-+        llvm::Twine bbName = llvm::Twine(bbCase->getName()) + "_impl";
-+        bbCaseImpl = CreateBasicBlock(bbName, bbCase);
-     }
- #endif
- 
-@@ -1185,7 +1185,7 @@ bool FunctionEmitContext::initLabelBBlocks(ASTNode *node, void *data) {
-     if (ctx->labelMap.find(ls->name) != ctx->labelMap.end())
-         Error(ls->pos, "Multiple labels named \"%s\" in function.", ls->name.c_str());
-     else {
--        llvm::BasicBlock *bb = ctx->CreateBasicBlock(ls->name.c_str());
-+        llvm::BasicBlock *bb = ctx->CreateBasicBlock(ls->name);
-         ctx->labelMap[ls->name] = bb;
-     }
-     return true;
-@@ -1299,7 +1299,7 @@ llvm::Value *FunctionEmitContext::Any(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_any"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_any");
- }
- 
- llvm::Value *FunctionEmitContext::All(llvm::Value *mask) {
-@@ -1315,7 +1315,7 @@ llvm::Value *FunctionEmitContext::All(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_all"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_all");
- }
- 
- llvm::Value *FunctionEmitContext::None(llvm::Value *mask) {
-@@ -1331,7 +1331,7 @@ llvm::Value *FunctionEmitContext::None(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_none"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_none");
- }
- 
- llvm::Value *FunctionEmitContext::LaneMask(llvm::Value *v) {
-@@ -1349,7 +1349,7 @@ llvm::Value *FunctionEmitContext::LaneMask(llvm::Value *v) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, v, LLVMGetName(v, "_movmsk"));
-+    return CallInst(fmm, NULL, v, llvm::Twine(v->getName()) + "_movmsk");
- }
- 
- llvm::Value *FunctionEmitContext::MasksAllEqual(llvm::Value *v1, llvm::Value *v2) {
-@@ -1364,11 +1364,12 @@ llvm::Value *FunctionEmitContext::MasksAllEqual(llvm::Value *v1, llvm::Value *v2
- #else
-     if (g->target->getArch() == Arch::wasm32) {
-         llvm::Function *fmm = m->module->getFunction("__wasm_cmp_msk_eq");
--        return CallInst(fmm, NULL, {v1, v2}, LLVMGetName("wasm_cmp_msk_eq", v1, v2));
-+        return CallInst(fmm, NULL, {v1, v2}, ((llvm::Twine("wasm_cmp_msk_eq_") + v1->getName()) + "_") + v2->getName());
-     }
-     llvm::Value *mm1 = LaneMask(v1);
-     llvm::Value *mm2 = LaneMask(v2);
--    return CmpInst(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_EQ, mm1, mm2, LLVMGetName("equal", v1, v2));
-+    return CmpInst(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_EQ, mm1, mm2,
-+                   ((llvm::Twine("equal_") + v1->getName()) + "_") + v2->getName());
- #endif
- }
- 
-@@ -1392,7 +1393,7 @@ llvm::Value *FunctionEmitContext::GetStringPtr(const std::string &str) {
-     return new llvm::BitCastInst(lstrPtr, LLVMTypes::VoidPointerType, "str_void_ptr", bblock);
- }
- 
--llvm::BasicBlock *FunctionEmitContext::CreateBasicBlock(const char *name, llvm::BasicBlock *insertAfter) {
-+llvm::BasicBlock *FunctionEmitContext::CreateBasicBlock(const llvm::Twine &name, llvm::BasicBlock *insertAfter) {
-     llvm::BasicBlock *newBB = llvm::BasicBlock::Create(*g->ctx, name, llvmFunction);
-     if (insertAfter)
-         newBB->moveAfter(insertAfter);
-@@ -1416,14 +1417,15 @@ llvm::Value *FunctionEmitContext::I1VecToBoolVec(llvm::Value *b) {
- 
-         for (unsigned int i = 0; i < at->getNumElements(); ++i) {
-             llvm::Value *elt = ExtractInst(b, i);
--            llvm::Value *sext = SwitchBoolSize(elt, LLVMTypes::BoolVectorStorageType, LLVMGetName(elt, "_to_boolvec"));
-+            llvm::Value *sext =
-+                SwitchBoolSize(elt, LLVMTypes::BoolVectorStorageType, llvm::Twine(elt->getName()) + "_to_boolvec");
-             ret = InsertInst(ret, sext, i);
-         }
-         return ret;
-     } else {
-         // For non-array types, convert to 'LLVMTypes::BoolVectorType' if
-         // necessary.
--        return SwitchBoolSize(b, LLVMTypes::BoolVectorType, LLVMGetName(b, "_to_boolvec"));
-+        return SwitchBoolSize(b, LLVMTypes::BoolVectorType, llvm::Twine(b->getName()) + "_to_boolvec");
-     }
- }
- 
-@@ -1563,7 +1565,7 @@ static int lArrayVectorWidth(llvm::Type *t) {
- }
- 
- llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps inst, llvm::Value *v0, llvm::Value *v1,
--                                                 const char *name) {
-+                                                 const llvm::Twine &name) {
-     if (v0 == NULL || v1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1573,7 +1575,7 @@ llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps in
-     llvm::Type *type = v0->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *bop = llvm::BinaryOperator::Create(inst, v0, v1, name ? name : "", bblock);
-+        llvm::Instruction *bop = llvm::BinaryOperator::Create(inst, v0, v1, name, bblock);
-         AddDebugPos(bop);
-         return bop;
-     } else {
-@@ -1591,7 +1593,7 @@ llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps in
-     }
- }
- 
--llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const char *name) {
-+llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const llvm::Twine &name) {
-     if (v == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1603,14 +1605,14 @@ llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const char *name)
-     llvm::Type *type = v->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *binst = llvm::BinaryOperator::CreateNot(v, name ? name : "not", bblock);
-+        llvm::Instruction *binst = llvm::BinaryOperator::CreateNot(v, name.isTriviallyEmpty() ? "not" : name, bblock);
-         AddDebugPos(binst);
-         return binst;
-     } else {
-         llvm::Value *ret = llvm::UndefValue::get(type);
-         for (int i = 0; i < arraySize; ++i) {
-             llvm::Value *a = ExtractInst(v, i);
--            llvm::Value *op = llvm::BinaryOperator::CreateNot(a, name ? name : "not", bblock);
-+            llvm::Value *op = llvm::BinaryOperator::CreateNot(a, name.isTriviallyEmpty() ? "not" : name, bblock);
-             AddDebugPos(op);
-             ret = InsertInst(ret, op, i);
-         }
-@@ -1638,7 +1640,7 @@ static llvm::Type *lGetMatchingBoolVectorType(llvm::Type *type) {
- }
- 
- llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm::CmpInst::Predicate pred,
--                                          llvm::Value *v0, llvm::Value *v1, const char *name) {
-+                                          llvm::Value *v0, llvm::Value *v1, const llvm::Twine &name) {
-     if (v0 == NULL || v1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1648,7 +1650,8 @@ llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm
-     llvm::Type *type = v0->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *ci = llvm::CmpInst::Create(inst, pred, v0, v1, name ? name : "cmp", bblock);
-+        llvm::Instruction *ci =
-+            llvm::CmpInst::Create(inst, pred, v0, v1, name.isTriviallyEmpty() ? "cmp" : name, bblock);
-         AddDebugPos(ci);
-         return ci;
-     } else {
-@@ -1657,14 +1660,14 @@ llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm
-         for (int i = 0; i < arraySize; ++i) {
-             llvm::Value *a = ExtractInst(v0, i);
-             llvm::Value *b = ExtractInst(v1, i);
--            llvm::Value *op = CmpInst(inst, pred, a, b, name);
-+            llvm::Value *op = CmpInst(inst, pred, a, b, name.isTriviallyEmpty() ? "cmp" : name);
-             ret = InsertInst(ret, op, i);
-         }
-         return ret;
-     }
- }
- 
--llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const char *name) {
-+llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1704,21 +1707,19 @@ llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const char *n
-     return ret;
- }
- 
--llvm::Value *FunctionEmitContext::BitCastInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Value *FunctionEmitContext::BitCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_bitcast");
--
--    llvm::Instruction *inst = new llvm::BitCastInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::BitCastInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_bitcast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const char *name) {
-+llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1728,23 +1729,19 @@ llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const char *n
-         // no-op for varying pointers; they're already vectors of ints
-         return value;
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_ptr2int");
-     llvm::Type *type = LLVMTypes::PointerIntType;
--    llvm::Instruction *inst = new llvm::PtrToIntInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::PtrToIntInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_ptr2int");
--
-     llvm::Type *fromType = value->getType();
-     if (llvm::isa<llvm::VectorType>(fromType)) {
-         // varying pointer
-@@ -1752,27 +1749,26 @@ llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *t
-             // already the right type--done
-             return value;
-         else if (fromType->getScalarSizeInBits() > toType->getScalarSizeInBits())
--            return TruncInst(value, toType, name);
-+            return TruncInst(value, toType,
-+                             name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name);
-         else {
-             AssertPos(currentPos, fromType->getScalarSizeInBits() < toType->getScalarSizeInBits());
--            return ZExtInst(value, toType, name);
-+            return ZExtInst(value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name);
-         }
-     }
- 
--    llvm::Instruction *inst = new llvm::PtrToIntInst(value, toType, name, bblock);
-+    llvm::Instruction *inst = new llvm::PtrToIntInst(
-+        value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_int2ptr");
--
-     llvm::Type *fromType = value->getType();
-     if (llvm::isa<llvm::VectorType>(fromType)) {
-         // varying pointer
-@@ -1780,95 +1776,87 @@ llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *t
-             // done
-             return value;
-         else if (fromType->getScalarSizeInBits() > toType->getScalarSizeInBits())
--            return TruncInst(value, toType, name);
-+            return TruncInst(value, toType,
-+                             name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name);
-         else {
-             AssertPos(currentPos, fromType->getScalarSizeInBits() < toType->getScalarSizeInBits());
--            return ZExtInst(value, toType, name);
-+            return ZExtInst(value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name);
-         }
-     }
- 
--    llvm::Instruction *inst = new llvm::IntToPtrInst(value, toType, name, bblock);
-+    llvm::Instruction *inst = new llvm::IntToPtrInst(
-+        value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::TruncInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::TruncInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_trunc");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::TruncInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::TruncInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_trunc" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
- llvm::Instruction *FunctionEmitContext::CastInst(llvm::Instruction::CastOps op, llvm::Value *value, llvm::Type *type,
--                                                 const char *name) {
-+                                                 const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_cast");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = llvm::CastInst::Create(op, value, type, name, bblock);
-+    llvm::Instruction *inst = llvm::CastInst::Create(
-+        op, value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_cast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::FPCastInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::FPCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_cast");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = llvm::CastInst::CreateFPCast(value, type, name, bblock);
-+    llvm::Instruction *inst = llvm::CastInst::CreateFPCast(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_cast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::SExtInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::SExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_sext");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::SExtInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::SExtInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_sext" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::ZExtInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::ZExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_zext");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::ZExtInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::ZExtInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_zext" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
-@@ -1913,14 +1901,15 @@ llvm::Value *FunctionEmitContext::applyVaryingGEP(llvm::Value *basePtr, llvm::Va
-         scale = SmearUniform(scale);
-         Assert(index != NULL);
-         // offset = index * scale
--        offset = BinaryOperator(llvm::Instruction::Mul, scale, index, LLVMGetName("mul", scale, index));
-+        offset = BinaryOperator(llvm::Instruction::Mul, scale, index,
-+                                ((llvm::Twine("mul_") + scale->getName()) + "_") + index->getName());
-     }
- 
-     // For 64-bit targets, if we've been doing our offset calculations in
-     // 32 bits, we still have to convert to a 64-bit value before we
-     // actually add the offset to the pointer.
-     if (g->target->is32Bit() == false && g->opt.force32BitAddressing == true)
--        offset = SExtInst(offset, LLVMTypes::Int64VectorType, LLVMGetName(offset, "_to_64"));
-+        offset = SExtInst(offset, LLVMTypes::Int64VectorType, llvm::Twine(offset->getName()) + "_to_64");
- 
-     // Smear out the pointer to be varying; either the base pointer or the
-     // index must be varying for this method to be called.
-@@ -1929,7 +1918,7 @@ llvm::Value *FunctionEmitContext::applyVaryingGEP(llvm::Value *basePtr, llvm::Va
-     llvm::Value *varyingPtr = baseIsUniform ? SmearUniform(basePtr) : basePtr;
- 
-     // newPtr = ptr + offset
--    return BinaryOperator(llvm::Instruction::Add, varyingPtr, offset, LLVMGetName(basePtr, "_offset"));
-+    return BinaryOperator(llvm::Instruction::Add, varyingPtr, offset, llvm::Twine(basePtr->getName()) + "_offset");
- }
- 
- void FunctionEmitContext::MatchIntegerTypes(llvm::Value **v0, llvm::Value **v1) {
-@@ -2006,13 +1995,13 @@ llvm::Value *FunctionEmitContext::MakeSlicePointer(llvm::Value *ptr, llvm::Value
-     llvm::StructType *st = llvm::StructType::get(*g->ctx, eltTypes);
- 
-     llvm::Value *ret = llvm::UndefValue::get(st);
--    ret = InsertInst(ret, ptr, 0, LLVMGetName(ret, "_slice_ptr"));
--    ret = InsertInst(ret, offset, 1, LLVMGetName(ret, "_slice_offset"));
-+    ret = InsertInst(ret, ptr, 0, llvm::Twine(ret->getName()) + "_slice_ptr");
-+    ret = InsertInst(ret, offset, 1, llvm::Twine(ret->getName()) + "_slice_offset");
-     return ret;
- }
- 
- llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index, const Type *ptrRefType,
--                                                    const char *name) {
-+                                                    const llvm::Twine &name) {
-     if (basePtr == NULL || index == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2065,8 +2054,8 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
-         // uniform, so just emit the regular LLVM GEP instruction
-         llvm::Value *ind[1] = {index};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&ind[0], &ind[1]);
--        llvm::Instruction *inst =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "gep", bblock);
-+        llvm::Instruction *inst = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                                  name.isTriviallyEmpty() ? "gep" : name, bblock);
-         AddDebugPos(inst);
-         return inst;
-     } else
-@@ -2074,7 +2063,7 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
- }
- 
- llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0, llvm::Value *index1,
--                                                    const Type *ptrRefType, const char *name) {
-+                                                    const Type *ptrRefType, const llvm::Twine &name) {
-     if (basePtr == NULL || index0 == NULL || index1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2114,8 +2103,8 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
-         // uniform, so just emit the regular LLVM GEP instruction
-         llvm::Value *indices[2] = {index0, index1};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&indices[0], &indices[2]);
--        llvm::Instruction *inst =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "gep", bblock);
-+        llvm::Instruction *inst = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                                  name.isTriviallyEmpty() ? "gep" : name, bblock);
-         AddDebugPos(inst);
-         return inst;
-     } else {
-@@ -2138,7 +2127,7 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
- }
- 
- llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int elementNum, const Type *ptrRefType,
--                                                   const char *name, const PointerType **resultPtrType) {
-+                                                   const llvm::Twine &name, const PointerType **resultPtrType) {
-     if (resultPtrType != NULL)
-         AssertPos(currentPos, ptrRefType != NULL);
- 
-@@ -2195,8 +2184,8 @@ llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int
-         // If the pointer is uniform, we can use the regular LLVM GEP.
-         llvm::Value *offsets[2] = {LLVMInt32(0), LLVMInt32(elementNum)};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&offsets[0], &offsets[2]);
--        resultPtr =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "struct_offset", bblock);
-+        resultPtr = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                    name.isTriviallyEmpty() ? "struct_offset" : name, bblock);
-     } else {
-         // Otherwise do the math to find the offset and add it to the given
-         // varying pointers
-@@ -2237,7 +2226,7 @@ llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int
-         return resultPtr;
- }
- 
--llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if ((value == NULL) || (toType == NULL)) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2248,20 +2237,18 @@ llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type
-     llvm::Value *newBool = value;
-     if (g->target->getDataLayout()->getTypeSizeInBits(fromType) >
-         g->target->getDataLayout()->getTypeSizeInBits(toType)) {
--        if (name == NULL)
--            name = LLVMGetName(value, "_switchBool");
--        newBool = TruncInst(value, toType, name);
-+        newBool =
-+            TruncInst(value, toType, name.isTriviallyEmpty() ? (llvm::Twine(value->getName()) + "_switchBool") : name);
-     } else if (g->target->getDataLayout()->getTypeSizeInBits(fromType) <
-                g->target->getDataLayout()->getTypeSizeInBits(toType)) {
--        if (name == NULL)
--            name = LLVMGetName(value, "_switchBool");
--        newBool = SExtInst(value, toType, name);
-+        newBool =
-+            SExtInst(value, toType, name.isTriviallyEmpty() ? (llvm::Twine(value->getName()) + "_switchBool") : name);
-     }
- 
-     return newBool;
- }
- 
--llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, const char *name) {
-+llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, const llvm::Twine &name) {
-     if (ptr == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2270,13 +2257,13 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
-     llvm::PointerType *pt = llvm::dyn_cast<llvm::PointerType>(ptr->getType());
-     AssertPos(currentPos, pt != NULL);
- 
--    if (name == NULL)
--        name = LLVMGetName(ptr, "_load");
--
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    llvm::LoadInst *inst = new llvm::LoadInst(pt->getPointerElementType(), ptr, name, bblock);
-+    llvm::LoadInst *inst =
-+        new llvm::LoadInst(pt->getPointerElementType(), ptr,
-+                           name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name, bblock);
- #else
--    llvm::LoadInst *inst = new llvm::LoadInst(ptr, name, bblock);
-+    llvm::LoadInst *inst =
-+        new llvm::LoadInst(ptr, name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name, bblock);
- #endif
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
-@@ -2307,8 +2294,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
- static llvm::Value *lFinalSliceOffset(FunctionEmitContext *ctx, llvm::Value *ptr, const PointerType **ptrType) {
-     Assert(CastType<PointerType>(*ptrType) != NULL);
- 
--    llvm::Value *slicePtr = ctx->ExtractInst(ptr, 0, LLVMGetName(ptr, "_ptr"));
--    llvm::Value *sliceOffset = ctx->ExtractInst(ptr, 1, LLVMGetName(ptr, "_offset"));
-+    llvm::Value *slicePtr = ctx->ExtractInst(ptr, 0, llvm::Twine(ptr->getName()) + "_ptr");
-+    llvm::Value *sliceOffset = ctx->ExtractInst(ptr, 1, llvm::Twine(ptr->getName()) + "_offset");
- 
-     // slicePtr should be a pointer to an soa-width wide array of the
-     // final atomic/enum/pointer type
-@@ -2327,14 +2314,14 @@ static llvm::Value *lFinalSliceOffset(FunctionEmitContext *ctx, llvm::Value *ptr
-         slicePtr = ctx->BitCastInst(slicePtr, (*ptrType)->LLVMType(g->ctx));
- 
-     // And finally index based on the slice offset
--    return ctx->GetElementPtrInst(slicePtr, sliceOffset, *ptrType, LLVMGetName(slicePtr, "_final_gep"));
-+    return ctx->GetElementPtrInst(slicePtr, sliceOffset, *ptrType, llvm::Twine(slicePtr->getName()) + "_final_gep");
- }
- 
- /** Utility routine that loads from a uniform pointer to soa<> data,
-     returning a regular uniform (non-SOA result).
-  */
- llvm::Value *FunctionEmitContext::loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType,
--                                                     const char *name) {
-+                                                     const llvm::Twine &name) {
-     const Type *unifType = ptrType->GetBaseType()->GetAsUniformType();
- 
-     const CollectionType *ct = CastType<CollectionType>(ptrType->GetBaseType());
-@@ -2363,7 +2350,7 @@ llvm::Value *FunctionEmitContext::loadUniformFromSOA(llvm::Value *ptr, llvm::Val
- }
- 
- llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrRefType,
--                                           const char *name, bool one_elem) {
-+                                           const llvm::Twine &name, bool one_elem) {
-     if (ptr == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2371,9 +2358,6 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
- 
-     AssertPos(currentPos, ptrRefType != NULL && mask != NULL);
- 
--    if (name == NULL)
--        name = LLVMGetName(ptr, "_load");
--
-     const PointerType *ptrType;
-     const Type *elType;
-     if (CastType<ReferenceType>(ptrRefType) != NULL) {
-@@ -2393,7 +2377,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
- 
-     if (ptrType->IsUniformType()) {
-         if (ptrType->IsSlice()) {
--            return loadUniformFromSOA(ptr, mask, ptrType, name);
-+            return loadUniformFromSOA(ptr, mask, ptrType,
-+                                      name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name);
-         } else {
-             // FIXME: same issue as above load inst regarding alignment...
-             //
-@@ -2405,11 +2390,15 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-             const AtomicType *atomicType = CastType<AtomicType>(ptrType->GetBaseType());
- 
- #if ISPC_LLVM_VERSION <= ISPC_LLVM_10_0
--            llvm::LoadInst *inst = new llvm::LoadInst(ptr, name, false /* not volatile */, bblock);
-+            llvm::LoadInst *inst =
-+                new llvm::LoadInst(ptr, name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name,
-+                                   false /* not volatile */, bblock);
- #else // LLVM 11.0+
-             llvm::PointerType *ptr_type = llvm::dyn_cast<llvm::PointerType>(ptr->getType());
-             llvm::LoadInst *inst =
--                new llvm::LoadInst(ptr_type->getPointerElementType(), ptr, name, false /* not volatile */, bblock);
-+                new llvm::LoadInst(ptr_type->getPointerElementType(), ptr,
-+                                   name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name,
-+                                   false /* not volatile */, bblock);
- #endif
- 
-             if (atomicType != NULL && atomicType->IsVaryingType()) {
-@@ -2433,7 +2422,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-     } else {
-         // Otherwise we should have a varying ptr and it's time for a
-         // gather.
--        llvm::Value *gather_result = gather(ptr, ptrType, GetFullMask(), name);
-+        llvm::Value *gather_result = gather(ptr, ptrType, GetFullMask(),
-+                                            name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name);
-         if (!one_elem)
-             return gather_result;
- 
-@@ -2453,19 +2443,19 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-         // We can actually call either one, since both are i32s as far as
-         // LLVM's type system is concerned...
-         llvm::Function *fmm = mm[0]->function;
--        llvm::Value *int_mask = CallInst(fmm, NULL, mask, LLVMGetName(mask, "_movmsk"));
-+        llvm::Value *int_mask = CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_movmsk");
-         std::vector<Symbol *> lz;
-         m->symbolTable->LookupFunction("__count_trailing_zeros_i64", &lz);
-         llvm::Function *flz = lz[0]->function;
--        llvm::Value *elem_idx = CallInst(flz, NULL, int_mask, LLVMGetName(mask, "_clz"));
--        llvm::Value *elem = llvm::ExtractElementInst::Create(gather_result, elem_idx,
--                                                             LLVMGetName(gather_result, "_umasked_elem"), bblock);
-+        llvm::Value *elem_idx = CallInst(flz, NULL, int_mask, llvm::Twine(mask->getName()) + "_clz");
-+        llvm::Value *elem = llvm::ExtractElementInst::Create(
-+            gather_result, elem_idx, llvm::Twine(gather_result->getName()) + "_umasked_elem", bblock);
-         return elem;
-     }
- }
- 
- llvm::Value *FunctionEmitContext::gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask,
--                                         const char *name) {
-+                                         const llvm::Twine &name) {
-     // We should have a varying pointer if we get here...
-     AssertPos(currentPos, ptrType->IsVaryingType());
- 
-@@ -2602,7 +2592,8 @@ void FunctionEmitContext::addGSMetadata(llvm::Value *v, SourcePos pos) {
-     inst->setMetadata("last_column", md);
- }
- 
--llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *name, int align, bool atEntryBlock) {
-+llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const llvm::Twine &name, int align,
-+                                             bool atEntryBlock) {
-     if (llvmType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2615,12 +2606,12 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-         llvm::Instruction *retInst = allocaBlock->getTerminator();
-         AssertPos(currentPos, retInst);
-         unsigned AS = llvmFunction->getParent()->getDataLayout().getAllocaAddrSpace();
--        inst = new llvm::AllocaInst(llvmType, AS, name ? name : "", retInst);
-+        inst = new llvm::AllocaInst(llvmType, AS, name, retInst);
-     } else {
-         // Unless the caller overrode the default and wants it in the
-         // current basic block
-         unsigned AS = llvmFunction->getParent()->getDataLayout().getAllocaAddrSpace();
--        inst = new llvm::AllocaInst(llvmType, AS, name ? name : "", bblock);
-+        inst = new llvm::AllocaInst(llvmType, AS, name, bblock);
-     }
- 
-     // If no alignment was specified but we have an array of a uniform
-@@ -2639,7 +2630,8 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::AllocaInst(const Type *ptrType, const char *name, int align, bool atEntryBlock) {
-+llvm::Value *FunctionEmitContext::AllocaInst(const Type *ptrType, const llvm::Twine &name, int align,
-+                                             bool atEntryBlock) {
-     if (ptrType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3075,66 +3067,59 @@ llvm::Instruction *FunctionEmitContext::BranchInst(llvm::BasicBlock *trueBlock,
-     return b;
- }
- 
--llvm::Value *FunctionEmitContext::ExtractInst(llvm::Value *v, int elt, const char *name) {
-+llvm::Value *FunctionEmitContext::ExtractInst(llvm::Value *v, int elt, const llvm::Twine &name) {
-     if (v == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_extract_%d", elt);
--        name = LLVMGetName(v, buf);
--    }
-     llvm::Instruction *ei = NULL;
-     if (llvm::isa<llvm::VectorType>(v->getType()))
--        ei = llvm::ExtractElementInst::Create(v, LLVMInt32(elt), name, bblock);
-+        ei = llvm::ExtractElementInst::Create(
-+            v, LLVMInt32(elt),
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_extract_") + llvm::Twine(elt)) : name, bblock);
-     else
--        ei = llvm::ExtractValueInst::Create(v, elt, name, bblock);
-+        ei = llvm::ExtractValueInst::Create(
-+            v, elt, name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_extract_") + llvm::Twine(elt)) : name,
-+            bblock);
-     AddDebugPos(ei);
-     return ei;
- }
- 
--llvm::Value *FunctionEmitContext::InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const char *name) {
-+llvm::Value *FunctionEmitContext::InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const llvm::Twine &name) {
-     if (v == NULL || eltVal == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_insert_%d", elt);
--        name = LLVMGetName(v, buf);
--    }
--
-     llvm::Instruction *ii = NULL;
-     if (llvm::isa<llvm::VectorType>(v->getType()))
--        ii = llvm::InsertElementInst::Create(v, eltVal, LLVMInt32(elt), name, bblock);
-+        ii = llvm::InsertElementInst::Create(
-+            v, eltVal, LLVMInt32(elt),
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_insert_") + llvm::Twine(elt)) : name, bblock);
-     else
--        ii = llvm::InsertValueInst::Create(v, eltVal, elt, name, bblock);
-+        ii = llvm::InsertValueInst::Create(
-+            v, eltVal, elt,
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_insert_") + llvm::Twine(elt)) : name, bblock);
-     AddDebugPos(ii);
-     return ii;
- }
- 
--llvm::Value *FunctionEmitContext::ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const char *name) {
-+llvm::Value *FunctionEmitContext::ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask,
-+                                              const llvm::Twine &name) {
-     if (v1 == NULL || v2 == NULL || mask == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_shuffle");
--        name = LLVMGetName(v1, buf);
--    }
--
--    llvm::Instruction *ii = new llvm::ShuffleVectorInst(v1, v2, mask, name, bblock);
-+    llvm::Instruction *ii = new llvm::ShuffleVectorInst(
-+        v1, v2, mask, name.isTriviallyEmpty() ? (llvm::Twine(v1->getName()) + "_shuffle") : name, bblock);
- 
-     AddDebugPos(ii);
-     return ii;
- }
- 
--llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vecType, const char *name) {
-+llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vecType, const llvm::Twine &name) {
-     if (v == NULL || vecType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3148,12 +3133,6 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     Assert(ty && ty->getVectorElementType() == v->getType());
- #endif
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_broadcast");
--        name = LLVMGetName(v, buf);
--    }
--
-     // Generate the following sequence:
-     //   %name_init.i = insertelement <4 x i32> undef, i32 %val, i32 0
-     //   %name.i = shufflevector <4 x i32> %name_init.i, <4 x i32> undef,
-@@ -3163,7 +3142,7 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     llvm::Value *undef2 = llvm::UndefValue::get(vecType);
- 
-     // InsertElement
--    llvm::Twine tw = llvm::Twine(name) + llvm::Twine("_init");
-+    llvm::Twine tw = name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + llvm::Twine("_init");
-     llvm::Value *insert = InsertInst(undef1, v, 0, tw.str().c_str());
- 
-     // ShuffleVector
-@@ -3179,28 +3158,27 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-         llvm::ConstantVector::getSplat(llvm::ElementCount::get(static_cast<unsigned int>(ty->getNumElements()), false),
-                                        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
- #endif
--    llvm::Value *ret = ShuffleInst(insert, undef2, zeroVec, name);
-+    llvm::Value *ret = ShuffleInst(insert, undef2, zeroVec,
-+                                   name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name);
- 
-     return ret;
- }
- 
--llvm::PHINode *FunctionEmitContext::PhiNode(llvm::Type *type, int count, const char *name) {
--    llvm::PHINode *pn = llvm::PHINode::Create(type, count, name ? name : "phi", bblock);
-+llvm::PHINode *FunctionEmitContext::PhiNode(llvm::Type *type, int count, const llvm::Twine &name) {
-+    llvm::PHINode *pn = llvm::PHINode::Create(type, count, name.isTriviallyEmpty() ? "phi" : name, bblock);
-     AddDebugPos(pn);
-     return pn;
- }
- 
- llvm::Instruction *FunctionEmitContext::SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1,
--                                                   const char *name) {
-+                                                   const llvm::Twine &name) {
-     if (test == NULL || val0 == NULL || val1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(test, "_select");
--
--    llvm::Instruction *inst = llvm::SelectInst::Create(test, val0, val1, name, bblock);
-+    llvm::Instruction *inst = llvm::SelectInst::Create(
-+        test, val0, val1, name.isTriviallyEmpty() ? (llvm::Twine(test->getName()) + "_select") : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
-@@ -3226,7 +3204,7 @@ static unsigned int lCalleeArgCount(llvm::Value *callee, const FunctionType *fun
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType,
--                                           const std::vector<llvm::Value *> &args, const char *name) {
-+                                           const std::vector<llvm::Value *> &args, const llvm::Twine &name) {
-     if (func == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3258,9 +3236,9 @@ llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-         llvm::PointerType *func_ptr_type = llvm::dyn_cast<llvm::PointerType>(func->getType());
-         llvm::FunctionType *func_type = llvm::dyn_cast<llvm::FunctionType>(func_ptr_type->getPointerElementType());
--        llvm::CallInst *callinst = llvm::CallInst::Create(func_type, func, argVals, name ? name : "", bblock);
-+        llvm::CallInst *callinst = llvm::CallInst::Create(func_type, func, argVals, name, bblock);
- #else
--        llvm::CallInst *callinst = llvm::CallInst::Create(func, argVals, name ? name : "", bblock);
-+        llvm::CallInst *callinst = llvm::CallInst::Create(func, argVals, name, bblock);
- #endif
- 
-         // We could be dealing with a function pointer in which case this will not be a 'llvm::Function'.
-@@ -3464,14 +3442,14 @@ llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg,
--                                           const char *name) {
-+                                           const llvm::Twine &name) {
-     std::vector<llvm::Value *> args;
-     args.push_back(arg);
-     return CallInst(func, funcType, args, name);
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg0,
--                                           llvm::Value *arg1, const char *name) {
-+                                           llvm::Value *arg1, const llvm::Twine &name) {
-     std::vector<llvm::Value *> args;
-     args.push_back(arg0);
-     args.push_back(arg1);
-diff --git a/src/ctx.h b/src/ctx.h
-index 6e5ad74ba..48b3bb826 100644
---- a/src/ctx.h
-+++ b/src/ctx.h
-@@ -302,7 +302,7 @@ class FunctionEmitContext {
-     llvm::Value *GetStringPtr(const std::string &str);
- 
-     /** Create a new basic block with given name */
--    llvm::BasicBlock *CreateBasicBlock(const char *name, llvm::BasicBlock *insertAfter = NULL);
-+    llvm::BasicBlock *CreateBasicBlock(const llvm::Twine &name, llvm::BasicBlock *insertAfter = NULL);
- 
-     /** Given a vector with element type i1, return a vector of type
-         LLVMTypes::BoolVectorType.  This method handles the conversion for
-@@ -380,33 +380,33 @@ class FunctionEmitContext {
-         this also handles applying the given operation to the vector
-         elements. */
-     llvm::Value *BinaryOperator(llvm::Instruction::BinaryOps inst, llvm::Value *v0, llvm::Value *v1,
--                                const char *name = NULL);
-+                                const llvm::Twine &name = "");
- 
-     /** Emit the "not" operator.  Like BinaryOperator(), this also handles
-         a VectorType-based operand. */
--    llvm::Value *NotOperator(llvm::Value *v, const char *name = NULL);
-+    llvm::Value *NotOperator(llvm::Value *v, const llvm::Twine &name = "");
- 
-     /** Emit a comparison instruction.  If the operands are VectorTypes,
-         then a value for the corresponding boolean VectorType is
-         returned. */
-     llvm::Value *CmpInst(llvm::Instruction::OtherOps inst, llvm::CmpInst::Predicate pred, llvm::Value *v0,
--                         llvm::Value *v1, const char *name = NULL);
-+                         llvm::Value *v1, const llvm::Twine &name = "");
- 
-     /** Given a scalar value, return a vector of the same type (or an
-         array, for pointer types). */
--    llvm::Value *SmearUniform(llvm::Value *value, const char *name = NULL);
-+    llvm::Value *SmearUniform(llvm::Value *value, const llvm::Twine &name = "");
- 
--    llvm::Value *BitCastInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Value *PtrToIntInst(llvm::Value *value, const char *name = NULL);
--    llvm::Value *PtrToIntInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Value *IntToPtrInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+    llvm::Value *BitCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Value *PtrToIntInst(llvm::Value *value, const llvm::Twine &name = "");
-+    llvm::Value *PtrToIntInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Value *IntToPtrInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
- 
--    llvm::Instruction *TruncInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+    llvm::Instruction *TruncInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-     llvm::Instruction *CastInst(llvm::Instruction::CastOps op, llvm::Value *value, llvm::Type *type,
--                                const char *name = NULL);
--    llvm::Instruction *FPCastInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Instruction *SExtInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Instruction *ZExtInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+                                const llvm::Twine &name = "");
-+    llvm::Instruction *FPCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Instruction *SExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Instruction *ZExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
- 
-     /** Given two integer-typed values (but possibly one vector and the
-         other not, and or of possibly-different bit-widths), update their
-@@ -426,9 +426,9 @@ class FunctionEmitContext {
-         pointers.  The underlying type of the base pointer must be provided
-         via the ptrType parameter */
-     llvm::Value *GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index, const Type *ptrType,
--                                   const char *name = NULL);
-+                                   const llvm::Twine &name = "");
-     llvm::Value *GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0, llvm::Value *index1, const Type *ptrType,
--                                   const char *name = NULL);
-+                                   const llvm::Twine &name = "");
- 
-     /** This method returns a new pointer that represents offsetting the
-         given base pointer to point at the given element number of the
-@@ -436,26 +436,26 @@ class FunctionEmitContext {
-         pointer must be a pointer to a structure type.  The ptrType gives
-         the type of the pointer, though it may be NULL if the base pointer
-         is uniform. */
--    llvm::Value *AddElementOffset(llvm::Value *basePtr, int elementNum, const Type *ptrType, const char *name = NULL,
--                                  const PointerType **resultPtrType = NULL);
-+    llvm::Value *AddElementOffset(llvm::Value *basePtr, int elementNum, const Type *ptrType,
-+                                  const llvm::Twine &name = "", const PointerType **resultPtrType = NULL);
- 
-     /** Bool is stored as i8 and <WIDTH x i8> but represented in IR as i1 and
-      * <WIDTH x MASK>. This is a helper function to match bool size at storage
-      * interface. */
--    llvm::Value *SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const char *name = NULL);
-+    llvm::Value *SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name = "");
-     /** Load from the memory location(s) given by lvalue, using the given
-         mask.  The lvalue may be varying, in which case this corresponds to
-         a gather from the multiple memory locations given by the array of
-         pointer values given by the lvalue.  If the lvalue is not varying,
-         then both the mask pointer and the type pointer may be NULL. */
--    llvm::Value *LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrType, const char *name = NULL,
-+    llvm::Value *LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrType, const llvm::Twine &name = "",
-                           bool one_elem = false);
- 
-     /* Load from memory location(s) given.
-      * 'type' needs to be provided when storage type is different from IR type. For example,
-      * 'unform bool' is 'i1' in IR but stored as 'i8'.
-      * Otherwise leave this as NULL. */
--    llvm::Value *LoadInst(llvm::Value *ptr, const Type *type = NULL, const char *name = NULL);
-+    llvm::Value *LoadInst(llvm::Value *ptr, const Type *type = NULL, const llvm::Twine &name = "");
- 
-     /** Emits an alloca instruction to allocate stack storage for the given
-         type.  If a non-zero alignment is specified, the object is also
-@@ -463,7 +463,8 @@ class FunctionEmitContext {
-         instruction is added at the start of the function in the entry
-         basic block; if it should be added to the current basic block, then
-         the atEntryBlock parameter should be false. */
--    llvm::Value *AllocaInst(llvm::Type *llvmType, const char *name = NULL, int align = 0, bool atEntryBlock = true);
-+    llvm::Value *AllocaInst(llvm::Type *llvmType, const llvm::Twine &name = "", int align = 0,
-+                            bool atEntryBlock = true);
- 
-     /** Emits an alloca instruction to allocate stack storage for the given
-         type.  If a non-zero alignment is specified, the object is also
-@@ -474,7 +475,7 @@ class FunctionEmitContext {
-         This implementation is preferred when possible. It is needed when
-         storage type is different from IR type. For example,
-         'unform bool' is 'i1' in IR but stored as 'i8'. */
--    llvm::Value *AllocaInst(const Type *ptrType, const char *name = NULL, int align = 0, bool atEntryBlock = true);
-+    llvm::Value *AllocaInst(const Type *ptrType, const llvm::Twine &name = "", int align = 0, bool atEntryBlock = true);
- 
-     /** Standard store instruction; for this variant, the lvalue must be a
-         single pointer, not a varying lvalue.
-@@ -502,39 +503,41 @@ class FunctionEmitContext {
-     /** This convenience method maps to an llvm::ExtractElementInst if the
-         given value is a llvm::VectorType, and to an llvm::ExtractValueInst
-         otherwise. */
--    llvm::Value *ExtractInst(llvm::Value *v, int elt, const char *name = NULL);
-+    llvm::Value *ExtractInst(llvm::Value *v, int elt, const llvm::Twine &name = "");
- 
-     /** This convenience method maps to an llvm::InsertElementInst if the
-         given value is a llvm::VectorType, and to an llvm::InsertValueInst
-         otherwise. */
--    llvm::Value *InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const char *name = NULL);
-+    llvm::Value *InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const llvm::Twine &name = "");
- 
-     /** This convenience method maps to an llvm::ShuffleVectorInst. */
--    llvm::Value *ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const char *name = NULL);
-+    llvm::Value *ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const llvm::Twine &name = "");
- 
-     /** This convenience method to generate broadcast pattern. It takes a value
-         and a vector type. Type of the value must match element type of the
-         vector. */
--    llvm::Value *BroadcastValue(llvm::Value *v, llvm::Type *vecType, const char *name = NULL);
-+    llvm::Value *BroadcastValue(llvm::Value *v, llvm::Type *vecType, const llvm::Twine &name = "");
- 
--    llvm::PHINode *PhiNode(llvm::Type *type, int count, const char *name = NULL);
--    llvm::Instruction *SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1, const char *name = NULL);
-+    llvm::PHINode *PhiNode(llvm::Type *type, int count, const llvm::Twine &name = "");
-+    llvm::Instruction *SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1,
-+                                  const llvm::Twine &name = "");
- 
-     /** Emits IR to do a function call with the given arguments.  If the
-         function type is a varying function pointer type, its full type
-         must be provided in funcType.  funcType can be NULL if func is a
-         uniform function pointer. */
-     llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, const std::vector<llvm::Value *> &args,
--                          const char *name = NULL);
-+                          const llvm::Twine &name = "");
- 
-     /** This is a convenience method that issues a call instruction to a
-         function that takes just a single argument. */
--    llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg, const char *name = NULL);
-+    llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg,
-+                          const llvm::Twine &name = "");
- 
-     /** This is a convenience method that issues a call instruction to a
-         function that takes two arguments. */
-     llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg0, llvm::Value *arg1,
--                          const char *name = NULL);
-+                          const llvm::Twine &name = "");
- 
-     /** Launch an asynchronous task to run the given function, passing it
-         he given argument values. */
-@@ -756,9 +759,10 @@ class FunctionEmitContext {
-     void maskedStore(llvm::Value *value, llvm::Value *ptr, const Type *ptrType, llvm::Value *mask);
-     void storeUniformToSOA(llvm::Value *value, llvm::Value *ptr, llvm::Value *mask, const Type *valueType,
-                            const PointerType *ptrType);
--    llvm::Value *loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType, const char *name);
-+    llvm::Value *loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType,
-+                                    const llvm::Twine &name = "");
- 
--    llvm::Value *gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask, const char *name);
-+    llvm::Value *gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask, const llvm::Twine &name = "");
- 
-     llvm::Value *addVaryingOffsetsIfNeeded(llvm::Value *ptr, const Type *ptrType);
- };
-diff --git a/src/expr.cpp b/src/expr.cpp
-index 80cc3020a..6d38d1889 100644
---- a/src/expr.cpp
-+++ b/src/expr.cpp
-@@ -1021,11 +1021,11 @@ static llvm::Value *lEmitNegate(Expr *arg, SourcePos pos, FunctionEmitContext *c
-     ctx->SetDebugPos(pos);
-     if (type->IsFloatType()) {
-         llvm::Value *zero = llvm::ConstantFP::getZeroValueForNegation(type->LLVMType(g->ctx));
--        return ctx->BinaryOperator(llvm::Instruction::FSub, zero, argVal, LLVMGetName(argVal, "_negate"));
-+        return ctx->BinaryOperator(llvm::Instruction::FSub, zero, argVal, llvm::Twine(argVal->getName()) + "_negate");
-     } else {
-         llvm::Value *zero = lLLVMConstantValue(type, g->ctx, 0.);
-         AssertPos(pos, type->IsIntType());
--        return ctx->BinaryOperator(llvm::Instruction::Sub, zero, argVal, LLVMGetName(argVal, "_negate"));
-+        return ctx->BinaryOperator(llvm::Instruction::Sub, zero, argVal, llvm::Twine(argVal->getName()) + "_negate");
-     }
- }
- 
-@@ -1047,11 +1047,11 @@ llvm::Value *UnaryExpr::GetValue(FunctionEmitContext *ctx) const {
-         return lEmitNegate(expr, pos, ctx);
-     case LogicalNot: {
-         llvm::Value *argVal = expr->GetValue(ctx);
--        return ctx->NotOperator(argVal, LLVMGetName(argVal, "_logicalnot"));
-+        return ctx->NotOperator(argVal, llvm::Twine(argVal->getName()) + "_logicalnot");
-     }
-     case BitNot: {
-         llvm::Value *argVal = expr->GetValue(ctx);
--        return ctx->NotOperator(argVal, LLVMGetName(argVal, "_bitnot"));
-+        return ctx->NotOperator(argVal, llvm::Twine(argVal->getName()) + "_bitnot");
-     }
-     default:
-         FATAL("logic error");
-@@ -1518,7 +1518,8 @@ static llvm::Value *lEmitBinaryArith(BinaryExpr::Op op, llvm::Value *value0, llv
-             return NULL;
-         }
- 
--        return ctx->BinaryOperator(inst, value0, value1, LLVMGetName(opName, value0, value1));
-+        return ctx->BinaryOperator(inst, value0, value1,
-+                                   (((llvm::Twine(opName) + "_") + value0->getName()) + "_") + value1->getName());
-     }
- }
- 
-@@ -1563,7 +1564,7 @@ static llvm::Value *lEmitBinaryCmp(BinaryExpr::Op op, llvm::Value *e0Val, llvm::
-     }
- 
-     llvm::Value *cmp = ctx->CmpInst(isFloatOp ? llvm::Instruction::FCmp : llvm::Instruction::ICmp, pred, e0Val, e1Val,
--                                    LLVMGetName(opName, e0Val, e1Val));
-+                                    (((llvm::Twine(opName) + "_") + e0Val->getName()) + "_") + e1Val->getName());
-     // This is a little ugly: CmpInst returns i1 values, but we use vectors
-     // of i32s for varying bool values; type convert the result here if
-     // needed.
-@@ -4177,7 +4178,7 @@ static llvm::Value *lConvertToSlicePointer(FunctionEmitContext *ctx, llvm::Value
-     // offsets
-     llvm::Value *result = llvm::Constant::getNullValue(sliceStructType);
-     // And replace the pointer in the struct with the given pointer
--    return ctx->InsertInst(result, ptr, 0, LLVMGetName(ptr, "_slice"));
-+    return ctx->InsertInst(result, ptr, 0, llvm::Twine(ptr->getName()) + "_slice");
- }
- 
- /** If the given array index is a compile time constant, check to see if it
-@@ -4258,8 +4259,8 @@ llvm::Value *IndexExpr::GetLValue(FunctionEmitContext *ctx) const {
-         // Convert to a slice pointer if we're indexing into SOA data
-         basePtrValue = lConvertPtrToSliceIfNeeded(ctx, basePtrValue, &baseExprType);
- 
--        llvm::Value *ptr =
--            ctx->GetElementPtrInst(basePtrValue, indexValue, baseExprType, LLVMGetName(basePtrValue, "_offset"));
-+        llvm::Value *ptr = ctx->GetElementPtrInst(basePtrValue, indexValue, baseExprType,
-+                                                  llvm::Twine(basePtrValue->getName()) + "_offset");
-         return lAddVaryingOffsetsIfNeeded(ctx, ptr, GetLValueType());
-     }
- 
-@@ -4290,8 +4291,8 @@ llvm::Value *IndexExpr::GetLValue(FunctionEmitContext *ctx) const {
-     ctx->SetDebugPos(pos);
- 
-     // And do the actual indexing calculation..
--    llvm::Value *ptr =
--        ctx->GetElementPtrInst(basePtr, LLVMInt32(0), indexValue, basePtrType, LLVMGetName(basePtr, "_offset"));
-+    llvm::Value *ptr = ctx->GetElementPtrInst(basePtr, LLVMInt32(0), indexValue, basePtrType,
-+                                              llvm::Twine(basePtr->getName()) + "_offset");
-     return lAddVaryingOffsetsIfNeeded(ctx, ptr, GetLValueType());
- }
- 
-@@ -4788,15 +4789,14 @@ llvm::Value *VectorMemberExpr::GetValue(FunctionEmitContext *ctx) const {
-         for (size_t i = 0; i < identifier.size(); ++i) {
-             char idStr[2] = {identifier[i], '\0'};
-             llvm::Value *elementPtr =
--                ctx->AddElementOffset(basePtr, indices[i], basePtrType, LLVMGetName(basePtr, idStr));
-+                ctx->AddElementOffset(basePtr, indices[i], basePtrType, llvm::Twine(basePtr->getName()) + idStr);
-             llvm::Value *elementValue = ctx->LoadInst(elementPtr, elementMask, elementPtrType);
- 
--            const char *resultName = LLVMGetName(resultPtr, idStr);
--            llvm::Value *ptmp = ctx->AddElementOffset(resultPtr, i, NULL, resultName);
-+            llvm::Value *ptmp = ctx->AddElementOffset(resultPtr, i, NULL, llvm::Twine(resultPtr->getName()) + idStr);
-             ctx->StoreInst(elementValue, ptmp, elementPtrType, expr->GetType()->IsUniformType());
-         }
- 
--        return ctx->LoadInst(resultPtr, memberType, LLVMGetName(basePtr, "_swizzle"));
-+        return ctx->LoadInst(resultPtr, memberType, llvm::Twine(basePtr->getName()) + "_swizzle");
-     }
- }
- 
-@@ -4932,7 +4932,7 @@ llvm::Value *MemberExpr::GetValue(FunctionEmitContext *ctx) const {
- 
-     ctx->SetDebugPos(pos);
-     std::string suffix = std::string("_") + identifier;
--    return ctx->LoadInst(lvalue, mask, lvalueType, LLVMGetName(lvalue, suffix.c_str()));
-+    return ctx->LoadInst(lvalue, mask, lvalueType, llvm::Twine(lvalue->getName()) + suffix);
- }
- 
- const Type *MemberExpr::GetType() const { return NULL; }
-@@ -6502,7 +6502,7 @@ static llvm::Value *lTypeConvAtomic(FunctionEmitContext *ctx, llvm::Value *exprV
-                 // does for everyone else...
-                 Assert(cast);
-                 cast = ctx->SwitchBoolSize(cast, LLVMTypes::BoolVectorType->getElementType(),
--                                           LLVMGetName(cast, "to_i_bool"));
-+                                           llvm::Twine(cast->getName()) + "to_i_bool");
-             }
-         } else {
-             // fromType->IsVaryingType())
-@@ -8246,7 +8246,7 @@ llvm::Value *NewExpr::GetValue(FunctionEmitContext *ctx) const {
-         // pointer of the return type and to run the code for initializers,
-         // if present.
-         llvm::Type *ptrType = retType->LLVMType(g->ctx);
--        ptrValue = ctx->BitCastInst(ptrValue, ptrType, LLVMGetName(ptrValue, "_cast_ptr"));
-+        ptrValue = ctx->BitCastInst(ptrValue, ptrType, llvm::Twine(ptrValue->getName()) + "_cast_ptr");
- 
-         if (initExpr != NULL)
-             InitSymbol(ptrValue, allocType, initExpr, ctx, pos);
-diff --git a/src/llvmutil.cpp b/src/llvmutil.cpp
-index 970175dbf..d0becb9f5 100644
---- a/src/llvmutil.cpp
-+++ b/src/llvmutil.cpp
-@@ -1605,23 +1605,6 @@ llvm::Value *LLVMShuffleVectors(llvm::Value *v1, llvm::Value *v2, int32_t shuf[]
-     return new llvm::ShuffleVectorInst(v1, v2, vec, "shuffle", insertBefore);
- }
- 
--const char *LLVMGetName(llvm::Value *v, const char *s) {
--    if (v == NULL)
--        return s;
--    std::string ret = std::string(v->getName());
--    ret += s;
--    return strdup(ret.c_str());
--}
--
--const char *LLVMGetName(const char *op, llvm::Value *v1, llvm::Value *v2) {
--    std::string r = op;
--    r += "_";
--    r += v1->getName().str();
--    r += "_";
--    r += v2->getName().str();
--    return strdup(r.c_str());
--}
--
- #ifdef ISPC_GENX_ENABLED
- bool lIsSVMLoad(llvm::Instruction *inst) {
-     Assert(inst);
-diff --git a/src/llvmutil.h b/src/llvmutil.h
-index 42cce4d83..07d089bb4 100644
---- a/src/llvmutil.h
-+++ b/src/llvmutil.h
-@@ -328,11 +328,6 @@ extern llvm::Value *LLVMConcatVectors(llvm::Value *v1, llvm::Value *v2, llvm::In
- extern llvm::Value *LLVMShuffleVectors(llvm::Value *v1, llvm::Value *v2, int32_t shuf[], int shufSize,
-                                        llvm::Instruction *insertBefore);
- 
--/** Utility routines to concat strings with the names of existing values to
--    create meaningful new names for instruction values.
--*/
--extern const char *LLVMGetName(llvm::Value *v, const char *);
--extern const char *LLVMGetName(const char *op, llvm::Value *v1, llvm::Value *v2);
- #ifdef ISPC_GENX_ENABLED
- enum AddressSpace { Local, Global, External };
- 
-diff --git a/src/opt.cpp b/src/opt.cpp
-index 5b1ac7b63..9d6cae058 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -257,7 +257,7 @@ static bool lGetSourcePosFromMetadata(const llvm::Instruction *inst, SourcePos *
-     return true;
- }
- 
--static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, const char *name,
-+static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[2] = {arg0, arg1};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[2]);
-@@ -265,21 +265,22 @@ static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llv
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    const char *name, llvm::Instruction *insertBefore = NULL) {
-+                                    const llvm::Twine &name, llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[3] = {arg0, arg1, arg2};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[3]);
-     return llvm::CallInst::Create(func, newArgArray, name, insertBefore);
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, const char *name, llvm::Instruction *insertBefore = NULL) {
-+                                    llvm::Value *arg3, const llvm::Twine &name,
-+                                    llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[4] = {arg0, arg1, arg2, arg3};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[4]);
-     return llvm::CallInst::Create(func, newArgArray, name, insertBefore);
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, llvm::Value *arg4, const char *name,
-+                                    llvm::Value *arg3, llvm::Value *arg4, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[5] = {arg0, arg1, arg2, arg3, arg4};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[5]);
-@@ -287,7 +288,7 @@ static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llv
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, llvm::Value *arg4, llvm::Value *arg5, const char *name,
-+                                    llvm::Value *arg3, llvm::Value *arg4, llvm::Value *arg5, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[6] = {arg0, arg1, arg2, arg3, arg4, arg5};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[6]);
-@@ -991,23 +992,24 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 llvm::Type *returnType = callInst->getType();
-                 Assert(llvm::isa<llvm::VectorType>(returnType));
-                 // cast the i8 * to the appropriate type
--                const char *name = LLVMGetName(callInst->getArgOperand(0), "_cast");
--                llvm::Value *castPtr = new llvm::BitCastInst(callInst->getArgOperand(0),
--                                                             llvm::PointerType::get(returnType, 0), name, callInst);
-+                llvm::Value *castPtr =
-+                    new llvm::BitCastInst(callInst->getArgOperand(0), llvm::PointerType::get(returnType, 0),
-+                                          llvm::Twine(callInst->getArgOperand(0)->getName()) + "_cast", callInst);
-                 lCopyMetadata(castPtr, callInst);
-                 int align;
-                 if (g->opt.forceAlignedMemory)
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
--                name = LLVMGetName(callInst->getArgOperand(0), "_load");
- #if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
--                llvm::Instruction *loadInst = new llvm::LoadInst(castPtr, name, false /* not volatile */,
--                                                                 llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
-+                llvm::Instruction *loadInst =
-+                    new llvm::LoadInst(castPtr, llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load",
-+                                       false /* not volatile */, llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
- #else
-                 llvm::Instruction *loadInst = new llvm::LoadInst(
--                    llvm::dyn_cast<llvm::PointerType>(castPtr->getType())->getPointerElementType(), castPtr, name,
--                    false /* not volatile */, llvm::MaybeAlign(align).valueOrOne(), (llvm::Instruction *)NULL);
-+                    llvm::dyn_cast<llvm::PointerType>(castPtr->getType())->getPointerElementType(), castPtr,
-+                    llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load", false /* not volatile */,
-+                    llvm::MaybeAlign(align).valueOrOne(), (llvm::Instruction *)NULL);
- #endif
-                 lCopyMetadata(loadInst, callInst);
-                 llvm::ReplaceInstWithInst(callInst, loadInst);
-@@ -1028,9 +1030,9 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 // all lanes storing, so replace with a regular store
-                 llvm::Value *rvalue = callInst->getArgOperand(2);
-                 llvm::Type *storeType = rvalue->getType();
--                const char *name = LLVMGetName(callInst->getArgOperand(0), "_ptrcast");
--                llvm::Value *castPtr = new llvm::BitCastInst(callInst->getArgOperand(0),
--                                                             llvm::PointerType::get(storeType, 0), name, callInst);
-+                llvm::Value *castPtr =
-+                    new llvm::BitCastInst(callInst->getArgOperand(0), llvm::PointerType::get(storeType, 0),
-+                                          llvm::Twine(callInst->getArgOperand(0)->getName()) + "_ptrcast", callInst);
-                 lCopyMetadata(castPtr, callInst);
- 
-                 int align;
-@@ -1339,8 +1341,8 @@ static llvm::Value *lGetBasePointer(llvm::Value *v, llvm::Instruction *insertBef
-         if (t == NULL) {
-             return NULL;
-         } else {
--            return llvm::CastInst::Create(ci->getOpcode(), t, ci->getType()->getScalarType(), LLVMGetName(t, "_cast"),
--                                          insertBefore);
-+            return llvm::CastInst::Create(ci->getOpcode(), t, ci->getType()->getScalarType(),
-+                                          llvm::Twine(t->getName()) + "_cast", insertBefore);
-         }
-     }
- 
-@@ -1583,13 +1585,13 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-         if (co == NULL)
-             *constOffset = NULL;
-         else
--            *constOffset =
--                llvm::CastInst::Create(cast->getOpcode(), co, cast->getType(), LLVMGetName(co, "_cast"), insertBefore);
-+            *constOffset = llvm::CastInst::Create(cast->getOpcode(), co, cast->getType(),
-+                                                  llvm::Twine(co->getName()) + "_cast", insertBefore);
-         if (vo == NULL)
-             *variableOffset = NULL;
-         else
--            *variableOffset =
--                llvm::CastInst::Create(cast->getOpcode(), vo, cast->getType(), LLVMGetName(vo, "_cast"), insertBefore);
-+            *variableOffset = llvm::CastInst::Create(cast->getOpcode(), vo, cast->getType(),
-+                                                     llvm::Twine(vo->getName()) + "_cast", insertBefore);
-         return;
-     }
- 
-@@ -1608,16 +1610,18 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-             else if (c1 == NULL || llvm::isa<llvm::ConstantAggregateZero>(c1))
-                 *constOffset = c0;
-             else
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, c0, c1, LLVMGetName("add", c0, c1),
--                                                            insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, c0, c1, ((llvm::Twine("add_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
- 
-             if (v0 == NULL || llvm::isa<llvm::ConstantAggregateZero>(v0))
-                 *variableOffset = v1;
-             else if (v1 == NULL || llvm::isa<llvm::ConstantAggregateZero>(v1))
-                 *variableOffset = v0;
-             else
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, v0, v1,
--                                                               LLVMGetName("add", v0, v1), insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, v0, v1, ((llvm::Twine("add_") + v0->getName()) + "_") + v1->getName(),
-+                    insertBefore);
-             return;
-         } else if (bop->getOpcode() == llvm::Instruction::Shl) {
-             lExtractConstantOffset(op0, &c0, &v0, insertBefore);
-@@ -1633,10 +1637,12 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-                 *constOffset = vec;
-                 *variableOffset = NULL;
-             } else {
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Shl, c0, c1, LLVMGetName("shl", c0, c1),
--                                                            insertBefore);
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Shl, v0, c1,
--                                                               LLVMGetName("shl", v0, c1), insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Shl, c0, c1, ((llvm::Twine("shl_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Shl, v0, c1, ((llvm::Twine("shl_") + v0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-             }
-             return;
-         } else if (bop->getOpcode() == llvm::Instruction::Mul) {
-@@ -1648,25 +1654,30 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-             // Note that the first term is a constant and the last three are
-             // variable.
-             if (c0 != NULL && c1 != NULL)
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, c1, LLVMGetName("mul", c0, c1),
--                                                            insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Mul, c0, c1, ((llvm::Twine("mul_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-             else
-                 *constOffset = NULL;
- 
-             llvm::Value *va = NULL, *vb = NULL, *vc = NULL;
-             if (v0 != NULL && c1 != NULL)
--                va = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, c1, LLVMGetName("mul", v0, c1),
-+                va = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, c1,
-+                                                  ((llvm::Twine("mul_") + v0->getName()) + "_") + c1->getName(),
-                                                   insertBefore);
-             if (c0 != NULL && v1 != NULL)
--                vb = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, v1, LLVMGetName("mul", c0, v1),
-+                vb = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, v1,
-+                                                  ((llvm::Twine("mul_") + c0->getName()) + "_") + v1->getName(),
-                                                   insertBefore);
-             if (v0 != NULL && v1 != NULL)
--                vc = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, v1, LLVMGetName("mul", v0, v1),
-+                vc = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, v1,
-+                                                  ((llvm::Twine("mul_") + v0->getName()) + "_") + v1->getName(),
-                                                   insertBefore);
- 
-             llvm::Value *vab = NULL;
-             if (va != NULL && vb != NULL)
--                vab = llvm::BinaryOperator::Create(llvm::Instruction::Add, va, vb, LLVMGetName("add", va, vb),
-+                vab = llvm::BinaryOperator::Create(llvm::Instruction::Add, va, vb,
-+                                                   ((llvm::Twine("add_") + va->getName()) + "_") + vb->getName(),
-                                                    insertBefore);
-             else if (va != NULL)
-                 vab = va;
-@@ -1674,8 +1685,9 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-                 vab = vb;
- 
-             if (vab != NULL && vc != NULL)
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, vab, vc,
--                                                               LLVMGetName("add", vab, vc), insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, vab, vc, ((llvm::Twine("add_") + vab->getName()) + "_") + vc->getName(),
-+                    insertBefore);
-             else if (vab != NULL)
-                 *variableOffset = vab;
-             else
-@@ -1943,7 +1955,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-             // all zeros (i.e. a ConstantAggregateZero, but just in case,
-             // do the more general check with lVectorIs32BitInts().
-             variableOffset = new llvm::TruncInst(variableOffset, LLVMTypes::Int32VectorType,
--                                                 LLVMGetName(variableOffset, "_trunc"), insertBefore);
-+                                                 llvm::Twine(variableOffset->getName()) + "_trunc", insertBefore);
-         else
-             return false;
-     }
-@@ -1952,7 +1964,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-         if (lVectorIs32BitInts(constOffset)) {
-             // Truncate them so we have a 32-bit vector type for them.
-             constOffset = new llvm::TruncInst(constOffset, LLVMTypes::Int32VectorType,
--                                              LLVMGetName(constOffset, "_trunc"), insertBefore);
-+                                              llvm::Twine(constOffset->getName()) + "_trunc", insertBefore);
-         } else {
-             // FIXME: otherwise we just assume that all constant offsets
-             // can actually always fit into 32-bits...  (This could be
-@@ -1963,7 +1975,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-             // llvm::ConstantFoldInstruction() doesn't seem to be doing
-             // enough for us in some cases if we call it from here.
-             constOffset = new llvm::TruncInst(constOffset, LLVMTypes::Int32VectorType,
--                                              LLVMGetName(constOffset, "_trunc"), insertBefore);
-+                                              llvm::Twine(constOffset->getName()) + "_trunc", insertBefore);
-         }
-     }
- 
-@@ -2012,8 +2024,8 @@ static bool lOffsets32BitSafe(llvm::Value **offsetPtr, llvm::Instruction *insert
- 
-         // Alternatively, offset could be a sequence of adds terminating
-         // in safe constant vectors or a SExt.
--        *offsetPtr =
--            new llvm::TruncInst(offset, LLVMTypes::Int32VectorType, LLVMGetName(offset, "_trunc"), insertBefore);
-+        *offsetPtr = new llvm::TruncInst(offset, LLVMTypes::Int32VectorType, llvm::Twine(offset->getName()) + "_trunc",
-+                                         insertBefore);
-         return true;
-     } else
-         return false;
-@@ -2229,7 +2241,8 @@ static bool lGSToGSBaseOffsets(llvm::CallInst *callInst) {
-     }
-     // Cast the base pointer to a void *, since that's what the
-     // __pseudo_*_base_offsets_* functions want.
--    basePtr = new llvm::IntToPtrInst(basePtr, LLVMTypes::VoidPointerType, LLVMGetName(basePtr, "_2void"), callInst);
-+    basePtr = new llvm::IntToPtrInst(basePtr, LLVMTypes::VoidPointerType, llvm::Twine(basePtr->getName()) + "_2void",
-+                                     callInst);
-     lCopyMetadata(basePtr, callInst);
-     llvm::Function *gatherScatterFunc = info->baseOffsetsFunc;
- 
-@@ -2803,7 +2816,7 @@ static bool lGSToLoadStore(llvm::CallInst *callInst) {
-                 lCopyMetadata(ptr, callInst);
-                 Debug(pos, "Transformed gather to unaligned vector load!");
-                 llvm::Instruction *newCall =
--                    lCallInst(gatherInfo->loadMaskedFunc, ptr, mask, LLVMGetName(ptr, "_masked_load"));
-+                    lCallInst(gatherInfo->loadMaskedFunc, ptr, mask, llvm::Twine(ptr->getName()) + "_masked_load");
-                 lCopyMetadata(newCall, callInst);
-                 llvm::ReplaceInstWithInst(callInst, newCall);
-                 return true;
diff --git a/srcpkgs/ispc/patches/llvm12-004.patch b/srcpkgs/ispc/patches/llvm12-004.patch
deleted file mode 100644
index 3a94d8443a5e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-004.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From c03a5142444476a1caa5c2ba7fa2d92d7793d6f1 Mon Sep 17 00:00:00 2001
-From: Deepak Rajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Mon, 25 Jan 2021 09:22:49 -0800
-Subject: [PATCH] Fixing build on llvm trunk.
-
----
- src/ctx.cpp | 7 +++----
- 1 file changed, 3 insertions(+), 4 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index ded524b71..b60e6fe84 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1020,8 +1020,7 @@ void FunctionEmitContext::EmitCaseLabel(int value, bool checkMask, SourcePos pos
-     llvm::BasicBlock *bbCaseImpl = NULL;
-     if (emitGenXHardwareMask()) {
-         // Create basic block with actual case implementation
--        llvm::Twine bbName = llvm::Twine(bbCase->getName()) + "_impl";
--        bbCaseImpl = CreateBasicBlock(bbName, bbCase);
-+        bbCaseImpl = CreateBasicBlock(llvm::Twine(bbCase->getName()) + "_impl", bbCase);
-     }
- #endif
- 
-@@ -3142,8 +3141,8 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     llvm::Value *undef2 = llvm::UndefValue::get(vecType);
- 
-     // InsertElement
--    llvm::Twine tw = name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + llvm::Twine("_init");
--    llvm::Value *insert = InsertInst(undef1, v, 0, tw.str().c_str());
-+    llvm::Value *insert =
-+        InsertInst(undef1, v, 0, name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + "_init");
- 
-     // ShuffleVector
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
diff --git a/srcpkgs/ispc/patches/llvm12-005.patch b/srcpkgs/ispc/patches/llvm12-005.patch
deleted file mode 100644
index e3e96b00abfa..000000000000
--- a/srcpkgs/ispc/patches/llvm12-005.patch
+++ /dev/null
@@ -1,372 +0,0 @@
-From c1d0a51bf8416d42144de9e2bdd59825eaeff1ac Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Fri, 8 Jan 2021 14:13:49 -0800
-Subject: [PATCH] LLVM 11 support for gen code
-
----
- src/ctx.cpp                     |  13 ++-
- src/gen/GlobalsLocalization.cpp |   9 +-
- src/opt.cpp                     | 143 ++++++++++++++++++++++++--------
- 3 files changed, 124 insertions(+), 41 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index b60e6fe84..2a72e6837 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1,5 +1,5 @@
- /*
--  Copyright (c) 2010-2020, Intel Corporation
-+  Copyright (c) 2010-2021, Intel Corporation
-   All rights reserved.
- 
-   Redistribution and use in source and binary forms, with or without
-@@ -3685,8 +3685,17 @@ llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::
-     AssertPos(currentPos, llvm::isa<llvm::VectorType>(value->getType()));
-     llvm::VectorType *vt = llvm::dyn_cast<llvm::VectorType>(value->getType());
-     if (defaults == NULL) {
--        defaults = llvm::ConstantVector::getSplat(value->getType()->getVectorNumElements(),
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+        defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-+                                                  llvm::Constant::getNullValue(vt->getElementType()));
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+        defaults = llvm::ConstantVector::getSplat({static_cast<unsigned int>(vt->getNumElements()), false},
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
-+#else
-+        defaults = llvm::ConstantVector::getSplat(
-+            llvm::ElementCount::get(static_cast<unsigned int>(vt->getNumElements()), false),
-+            llvm::Constant::getNullValue(vt->getElementType()));
-+#endif
-     }
- 
-     auto Fn = llvm::GenXIntrinsic::getGenXDeclaration(m->module, llvm::GenXIntrinsic::genx_simdcf_predicate,
-diff --git a/src/gen/GlobalsLocalization.cpp b/src/gen/GlobalsLocalization.cpp
-index a176e9462..41f3b00e2 100644
---- a/src/gen/GlobalsLocalization.cpp
-+++ b/src/gen/GlobalsLocalization.cpp
-@@ -1,5 +1,5 @@
- /*
--  Copyright (c) 2014, 2016-2020, Intel Corporation
-+  Copyright (c) 2014, 2016-2021, Intel Corporation
-   All rights reserved.
- 
-   Redistribution and use in source and binary forms, with or without
-@@ -53,8 +53,10 @@
- #include <llvm/GenXIntrinsics/GenXIntrOpts.h>
- #include <llvm/GenXIntrinsics/GenXIntrinsics.h>
- #include <llvm/GenXIntrinsics/GenXMetadata.h>
--#include <llvm/IR/CFG.h>
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
- #include <llvm/IR/CallSite.h>
-+#endif
-+#include <llvm/IR/CFG.h>
- #include <llvm/IR/DebugInfo.h>
- #include <llvm/IR/Dominators.h>
- #include <llvm/IR/Function.h>
-@@ -470,7 +472,8 @@ void GlobalsLocalization::LocalizeGlobals(LocalizationInfo &LI) {
-         Instruction &FirstI = *Fn->getEntryBlock().begin();
-         Type *ElemTy = GV->getType()->getElementType();
-         AllocaInst *Alloca = new AllocaInst(ElemTy, 0, GV->getName() + ".local", &FirstI);
--        Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()));
-+        Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()).valueOrOne());
-+
-         if (!isa<UndefValue>(GV->getInitializer()))
-             new StoreInst(GV->getInitializer(), Alloca, &FirstI);
- 
-diff --git a/src/opt.cpp b/src/opt.cpp
-index d58d77f73..1789b8476 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -2899,15 +2899,17 @@ static llvm::Function *lGenXMaskedInt8Inst(llvm::Instruction *inst, bool isStore
- static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::Instruction *inst) {
-     Assert(g->target->isGenXTarget());
-     Assert(llvm::isa<llvm::VectorType>(val->getType()));
--    Assert(llvm::isPowerOf2_32(val->getType()->getVectorNumElements()));
--    Assert(val->getType()->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-+
-+    llvm::VectorType *valVecType = llvm::dyn_cast<llvm::VectorType>(val->getType());
-+    Assert(llvm::isPowerOf2_32(valVecType->getNumElements()));
-+    Assert(valVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
- 
-     // The data write of svm store must have a size that is a power of two from 16 to 128
-     // bytes. However for int8 type and simd width = 8, the data write size is 8.
-     // So we use masked store function here instead of svm store which process int8 type
-     // correctly.
--    if (val->getType()->getPrimitiveSizeInBits() / 8 < 16) {
--        Assert(val->getType()->getScalarType() == LLVMTypes::Int8Type);
-+    if (valVecType->getPrimitiveSizeInBits() / 8 < 16) {
-+        Assert(valVecType->getScalarType() == LLVMTypes::Int8Type);
-         if (llvm::Function *maskedFunc = lGenXMaskedInt8Inst(inst, true))
-             return llvm::dyn_cast<llvm::CallInst>(lCallInst(maskedFunc, ptr, val, LLVMMaskAllOn, ""));
-         else {
-@@ -2923,15 +2925,17 @@ static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::
- 
- static llvm::CallInst *lGenXLoadInst(llvm::Value *ptr, llvm::Type *retType, llvm::Instruction *inst) {
-     Assert(llvm::isa<llvm::VectorType>(retType));
--    Assert(llvm::isPowerOf2_32(retType->getVectorNumElements()));
--    Assert(retType->getPrimitiveSizeInBits());
--    Assert(retType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-+
-+    llvm::VectorType *retVecType = llvm::dyn_cast<llvm::VectorType>(retType);
-+    Assert(llvm::isPowerOf2_32(retVecType->getNumElements()));
-+    Assert(retVecType->getPrimitiveSizeInBits());
-+    Assert(retVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-     // The data read of svm load must have a size that is a power of two from 16 to 128
-     // bytes. However for int8 type and simd width = 8, the data read size is 8.
-     // So we use masked load function here instead of svm load which process int8 type
-     // correctly.
--    if (retType->getPrimitiveSizeInBits() / 8 < 16) {
--        Assert(retType->getScalarType() == LLVMTypes::Int8Type);
-+    if (retVecType->getPrimitiveSizeInBits() / 8 < 16) {
-+        Assert(retVecType->getScalarType() == LLVMTypes::Int8Type);
-         if (llvm::Function *maskedFunc = lGenXMaskedInt8Inst(inst, false))
-             return llvm::dyn_cast<llvm::CallInst>(lCallInst(maskedFunc, ptr, LLVMMaskAllOn, ""));
-         else {
-@@ -5622,15 +5626,24 @@ static bool lVectorizeGEPs(llvm::Value *ptr, std::vector<PtrUse> &ptrUses, std::
-         llvm::PtrToIntInst *ptrToInt =
-             new llvm::PtrToIntInst(ptr, LLVMTypes::Int64Type, "vectorized_ptrtoint", insertBefore);
-         llvm::Instruction *addr = llvm::BinaryOperator::CreateAdd(ptrToInt, offset, "vectorized_address", insertBefore);
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        llvm::Type *retType = llvm::FixedVectorType::get(scalar_type, reqSize / t_size);
-+#else
-         llvm::Type *retType = llvm::VectorType::get(scalar_type, reqSize / t_size);
-+#endif
-         llvm::Function *fn = llvm::GenXIntrinsic::getGenXDeclaration(
-             m->module, llvm::GenXIntrinsic::genx_svm_block_ld_unaligned, {retType, addr->getType()});
-         llvm::Instruction *ld = llvm::CallInst::Create(fn, {addr}, "vectorized_ld", insertBefore);
- 
-         if (loadingPtr) {
-             // Cast int to ptr via inttoptr
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            ld = new llvm::IntToPtrInst(ld, llvm::FixedVectorType::get(originalType, reqSize / t_size),
-+                                        "vectorized_inttoptr", insertBefore);
-+#else
-             ld = new llvm::IntToPtrInst(ld, llvm::VectorType::get(originalType, reqSize / t_size),
-                                         "vectorized_inttoptr", insertBefore);
-+#endif
-         }
- 
-         // Scalar extracts for all loaded elements
-@@ -6160,19 +6173,34 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-         llvm::Instruction *inst = &*I;
-         if (llvm::CallInst *ci = llvm::dyn_cast<llvm::CallInst>(inst)) {
-             llvm::Function *func = ci->getCalledFunction();
--            if (func && func->getName() == "llvm.trap") {
-+            if (func && func->getName().equals("llvm.trap")) {
-                 llvm::Type *argTypes[] = {LLVMTypes::Int1VectorType, LLVMTypes::Int16VectorType};
-                 // Description of parameters for genx_raw_send_noresult can be found in target-genx.ll
-                 auto Fn = +llvm::GenXIntrinsic::getGenXDeclaration(
-                     m->module, llvm::GenXIntrinsic::genx_raw_send_noresult, argTypes);
-                 llvm::SmallVector<llvm::Value *, 8> Args;
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 0));
--                Args.push_back(llvm::ConstantVector::getSplat(g->target->getNativeVectorWidth(),
--                                                              llvm::ConstantInt::getTrue(*g->ctx)));
-+                Args.push_back(llvm::ConstantVector::getSplat(
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+                    g->target->getNativeVectorWidth(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+                    {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
-+#else // LLVM 12.0+
-+                    llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-+#endif
-+                    llvm::ConstantInt::getTrue(*g->ctx)));
-+
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 39));
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 33554448));
-                 llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
--                    g->target->getNativeVectorWidth(), llvm::Constant::getNullValue(llvm::Type::getInt16Ty(*g->ctx)));
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+                    g->target->getNativeVectorWidth(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+                    {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
-+#else // LLVM 12.0+
-+                    llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-+#endif
-+                    llvm::Constant::getNullValue(llvm::Type::getInt16Ty(*g->ctx)));
-                 Args.push_back(zeroMask);
- 
-                 llvm::Instruction *newInst = llvm::CallInst::Create(Fn, Args, ci->getName());
-@@ -6181,7 +6209,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     modifiedAny = true;
-                     goto restart;
-                 }
--            } else if (func && func->getName() == "llvm.assume") {
-+            } else if (func && func->getName().equals("llvm.assume")) {
-                 ci->eraseFromParent();
-                 modifiedAny = true;
-                 goto restart;
-@@ -6335,7 +6363,7 @@ bool CheckUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 continue;
-             for (int i = 0; i < unsupportedFuncs.size(); i++) {
-                 std::smatch match;
--                std::string funcName = func->getName();
-+                std::string funcName = func->getName().str();
-                 if (std::regex_match(funcName, match, unsupportedFuncs[i])) {
-                     // We found unsupported function. Generate error and stop compilation.
-                     SourcePos pos;
-@@ -6418,12 +6446,14 @@ bool MangleOpenCLBuiltins::runOnBasicBlock(llvm::BasicBlock &bb) {
-             if (func->getName().startswith("__spirv_ocl")) {
-                 std::string mangledName;
-                 llvm::Type *retType = func->getReturnType();
--                std::string funcName = func->getName();
-+                std::string funcName = func->getName().str();
-                 std::vector<llvm::Type *> ArgTy;
-                 // spirv OpenCL builtins are used for double types only
--                Assert(retType->isVectorTy() && retType->getVectorElementType()->isDoubleTy() ||
-+                Assert(retType->isVectorTy() &&
-+                           llvm::dyn_cast<llvm::VectorType>(retType)->getElementType()->isDoubleTy() ||
-                        retType->isSingleValueType() && retType->isDoubleTy());
--                if (retType->isVectorTy() && retType->getVectorElementType()->isDoubleTy()) {
-+                if (retType->isVectorTy() &&
-+                    llvm::dyn_cast<llvm::VectorType>(retType)->getElementType()->isDoubleTy()) {
-                     ArgTy.push_back(LLVMTypes::DoubleVectorType);
-                     // _DvWIDTH suffix is used in target file to differentiate scalar
-                     // and vector versions of intrinsics. Here we remove this
-@@ -6511,8 +6541,15 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- 
-     // Cast offsets to int64
-     Offsets = new llvm::ZExtInst(
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        Offsets,
-+        llvm::FixedVectorType::get(LLVMTypes::Int64Type,
-+                                   llvm::dyn_cast<llvm::VectorType>(Offsets->getType())->getNumElements()),
-+        "svm_offset_zext", InsertBefore);
-+#else
-         Offsets, llvm::VectorType::get(LLVMTypes::Int64Type, Offsets->getType()->getVectorNumElements()),
-         "svm_offset_zext", InsertBefore);
-+#endif
- 
-     if (!llvm::isa<llvm::ConstantPointerNull>(Ptr)) {
-         // Cast ptr to int64
-@@ -6520,13 +6557,31 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- 
-         // Vectorize ptr
-         llvm::Value *undefInsertValue =
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            llvm::UndefValue::get(llvm::FixedVectorType::get(
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+#else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
-+#endif
-         address = llvm::InsertElementInst::Create(undefInsertValue, address, LLVMInt32(0), "svm_ptr_iei", InsertBefore);
-         llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+            {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
-+#else
-+        llvm::ElementCount::get(
-+                                llvm::dyn_cast<llvm::FixedVectorType>(addressType->getNumElements(), false),
-+#endif
-             llvm::Constant::getNullValue(llvm::Type::getInt32Ty(InsertBefore->getContext())));
-+
-         llvm::Value *undefShuffleValue =
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            llvm::UndefValue::get(llvm::FixedVectorType::get(
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+#else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
-+#endif
-         address = new llvm::ShuffleVectorInst(address, undefShuffleValue, zeroVec, "svm_ptr_svi", InsertBefore);
- 
-         // Calculate address
-@@ -6553,9 +6608,12 @@ llvm::Instruction *FixAddressSpace::processVectorLoad(llvm::LoadInst *LI) {
-     if (retType->getScalarType()->isPointerTy()) {
-         isPtrLoad = true;
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        retType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(retType)->getNumElements());
-+#else
-         retType = llvm::VectorType::get(scalarType, retType->getVectorNumElements());
-+#endif
-     }
--
-     llvm::Instruction *res = lGenXLoadInst(ptr, retType, llvm::dyn_cast<llvm::Instruction>(LI));
-     Assert(res);
- 
-@@ -6580,11 +6638,16 @@ llvm::Instruction *FixAddressSpace::processSVMVectorLoad(llvm::Instruction *CI)
-     ptr = new llvm::IntToPtrInst(ptr, llvm::PointerType::get(retType, 0), CI->getName() + "_inttoptr", CI);
-     llvm::Instruction *loadInst = NULL;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    loadInst = new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), loadInst,
--                                  CI->getName(), (llvm::Instruction *)NULL);
-+    loadInst = new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-+                                  CI->getName(), false /* not volatile */,
-+                                  llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne(),
-+                                  (llvm::Instruction *)NULL);
- #else
--    loadInst = new llvm::LoadInst(ptr, CI->getName(), (llvm::Instruction *)NULL);
-+    loadInst = new llvm::LoadInst(ptr, CI->getName(), false,
-+                                  llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne(),
-+                                  (llvm::Instruction *)NULL);
- #endif
-+
-     Assert(loadInst);
-     return loadInst;
- }
-@@ -6606,7 +6669,11 @@ llvm::Instruction *FixAddressSpace::processVectorStore(llvm::StoreInst *SI) {
-     // Note: it doesn't look like a normal case for GenX target
-     if (valType->getScalarType()->isPointerTy()) {
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        valType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(valType)->getNumElements());
-+#else
-         valType = llvm::VectorType::get(scalarType, valType->getVectorNumElements());
-+#endif
-         val = new llvm::PtrToIntInst(val, valType, "svm_st_val_ptrtoint", SI);
-     }
- 
-@@ -6631,12 +6698,8 @@ llvm::Instruction *FixAddressSpace::processSVMVectorStore(llvm::Instruction *CI)
-     ptr = new llvm::IntToPtrInst(ptr, llvm::PointerType::get(valType, 0), CI->getName() + "_inttoptr", CI);
- 
-     llvm::Instruction *storeInst = NULL;
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    loadInst = new llvm::StoreInst(val, llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(),
--                                   storeInst, CI->getName(), (llvm::Instruction *)NULL);
--#else
--    storeInst = new llvm::StoreInst(val, ptr, (llvm::Instruction *)NULL);
--#endif
-+    storeInst = new llvm::StoreInst(val, ptr, (llvm::Instruction *)NULL,
-+                                    llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
-     Assert(storeInst);
-     return storeInst;
- }
-@@ -6645,15 +6708,18 @@ llvm::Instruction *FixAddressSpace::createInt8WrRegion(llvm::Value *Val, llvm::V
-     int width = g->target->getVectorWidth();
- 
-     llvm::Value *Args[8];
--
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Args[0] = llvm::UndefValue::get(llvm::FixedVectorType::get(LLVMTypes::Int8Type, width * 4)); // old value
-+#else
-     Args[0] = llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int8Type, width * 4)); // old value
--    Args[1] = Val;                                                                          // value to store
--    Args[2] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);                              // vstride
--    Args[3] = llvm::ConstantInt::get(LLVMTypes::Int32Type, width);                          // width
--    Args[4] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 4);                              // stride
--    Args[5] = llvm::ConstantInt::get(LLVMTypes::Int16Type, 0);                              // offsets
--    Args[6] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);                              // parent width (ignored)
--    Args[7] = Mask;                                                                         // mask
-+#endif
-+    Args[1] = Val;                                                 // value to store
-+    Args[2] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);     // vstride
-+    Args[3] = llvm::ConstantInt::get(LLVMTypes::Int32Type, width); // width
-+    Args[4] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 4);     // stride
-+    Args[5] = llvm::ConstantInt::get(LLVMTypes::Int16Type, 0);     // offsets
-+    Args[6] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);     // parent width (ignored)
-+    Args[7] = Mask;                                                // mask
- 
-     llvm::Type *Tys[4];
- 
-@@ -6708,7 +6774,12 @@ llvm::Instruction *FixAddressSpace::processGatherScatterPrivate(llvm::CallInst *
-         return NULL;
- 
-     llvm::Value *address = calculateGatherScatterAddress(ptr, offsets, CI);
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    llvm::Type *i8VecType = llvm::FixedVectorType::get(LLVMTypes::Int8Type, width * 4);
-+#else
-     llvm::Type *i8VecType = llvm::VectorType::get(LLVMTypes::Int8Type, width * 4);
-+#endif
-+
-     bool isInt8 = (value->getType()->getScalarType() == LLVMTypes::Int8Type);
- 
-     Assert(address && "Bad gather/scatter address!");
diff --git a/srcpkgs/ispc/patches/llvm12-006.patch b/srcpkgs/ispc/patches/llvm12-006.patch
deleted file mode 100644
index a829ea48391e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-006.patch
+++ /dev/null
@@ -1,126 +0,0 @@
-From bb3f493d1fbd45c79e1d9dee67a0430ba313eaad Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 19 Jan 2021 11:07:33 -0800
-Subject: [PATCH] Fixed ifdefs for LLVM_11
-
----
- src/ctx.cpp |  6 +++---
- src/opt.cpp | 18 +++++++++---------
- 2 files changed, 12 insertions(+), 12 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 2a72e6837..527a02f30 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1691,7 +1691,7 @@ llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const llvm::T
-     if (llvm::Constant *const_val = llvm::dyn_cast<llvm::Constant>(value)) {
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         ret = llvm::ConstantVector::getSplat(g->target->getVectorWidth(), const_val);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-         ret =
-             llvm::ConstantVector::getSplat({static_cast<unsigned int>(g->target->getVectorWidth()), false}, const_val);
- #else // LLVM 12.0+
-@@ -3148,7 +3148,7 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-     llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
-         vecType->getVectorNumElements(), llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-     llvm::Constant *zeroVec =
-         llvm::ConstantVector::getSplat({static_cast<unsigned int>(ty->getNumElements()), false},
-                                        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
-@@ -3688,7 +3688,7 @@ llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-         defaults = llvm::ConstantVector::getSplat({static_cast<unsigned int>(vt->getNumElements()), false},
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
- #else
-diff --git a/src/opt.cpp b/src/opt.cpp
-index 1789b8476..3ff191a0a 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -1045,7 +1045,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                 llvm::Instruction *loadInst =
-                     new llvm::LoadInst(castPtr, llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load",
-                                        false /* not volatile */, llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
-@@ -1472,7 +1472,7 @@ static llvm::Value *lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offse
-                     llvm::Value *zeroMask =
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                         llvm::ConstantVector::getSplat(cv->getType()->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                         llvm::ConstantVector::getSplat(
-                             {llvm::dyn_cast<llvm::VectorType>(cv->getType())->getNumElements(), false},
- #else // LLVM 12.0+
-@@ -1495,7 +1495,7 @@ static llvm::Value *lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offse
-                         llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                             bop_var_type->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                             {llvm::dyn_cast<llvm::VectorType>(bop_var_type)->getNumElements(), false},
- #else // LLVM 12.0+
-                             llvm::ElementCount::get(
-@@ -2803,7 +2803,7 @@ static bool lGSToLoadStore(llvm::CallInst *callInst) {
-             llvm::Value *zeroMask =
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                 llvm::ConstantVector::getSplat(callInst->getType()->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                 llvm::ConstantVector::getSplat(
-                     {llvm::dyn_cast<llvm::VectorType>(callInst->getType())->getNumElements(), false},
- 
-@@ -3100,7 +3100,7 @@ static bool lImproveMaskedLoad(llvm::CallInst *callInst, llvm::BasicBlock::itera
-         {
-             llvm::Type *ptrType = llvm::PointerType::get(callInst->getType(), 0);
-             ptr = new llvm::BitCastInst(ptr, ptrType, "ptr_cast_for_load", callInst);
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             load = new llvm::LoadInst(
-                 ptr, callInst->getName(), false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-@@ -3459,7 +3459,7 @@ llvm::Value *lGEPAndLoad(llvm::Value *basePtr, int64_t offset, int align, llvm::
-                          llvm::Type *type) {
-     llvm::Value *ptr = lGEPInst(basePtr, LLVMInt64(offset), "new_base", insertBefore);
-     ptr = new llvm::BitCastInst(ptr, llvm::PointerType::get(type, 0), "ptr_cast", insertBefore);
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-     return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, llvm::MaybeAlign(align), insertBefore);
- #else // LLVM 11.0+
-     return new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-@@ -6183,7 +6183,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 Args.push_back(llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                     g->target->getNativeVectorWidth(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                     {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
- #else // LLVM 12.0+
-                     llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-@@ -6195,7 +6195,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                     g->target->getNativeVectorWidth(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                     {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
- #else // LLVM 12.0+
-                     llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-@@ -6567,7 +6567,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
-         llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-             {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
- #else
-         llvm::ElementCount::get(
diff --git a/srcpkgs/ispc/patches/llvm12-007.patch b/srcpkgs/ispc/patches/llvm12-007.patch
deleted file mode 100644
index 1b975f896c7e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-007.patch
+++ /dev/null
@@ -1,160 +0,0 @@
-From 62f5a6c37bf26fc25a7cf81868052d3472874610 Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 23 Mar 2021 23:07:30 -0700
-Subject: [PATCH] Do not generate function mask when it is not required
-
----
- src/ctx.cpp                    | 39 ++++++++++++++-------
- tests/lit-tests/full_mask.ispc | 63 ++++++++++++++++++++++++++++++++++
- 2 files changed, 90 insertions(+), 12 deletions(-)
- create mode 100644 tests/lit-tests/full_mask.ispc
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 527a02f30..9e775fc5c 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -231,10 +231,18 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym, llvm::F
-     internalMaskPointer = AllocaInst(LLVMTypes::MaskType, "internal_mask_memory");
-     StoreInst(LLVMMaskAllOn, internalMaskPointer);
- 
--    functionMaskValue = LLVMMaskAllOn;
--
--    fullMaskPointer = AllocaInst(LLVMTypes::MaskType, "full_mask_memory");
--    StoreInst(LLVMMaskAllOn, fullMaskPointer);
-+    // If the function doesn't have __mask in parameters, there is no need to
-+    // have function mask
-+    if ((func->GetType()->isExported &&
-+         (lf->getFunctionType()->getNumParams() == func->GetType()->GetNumParameters())) ||
-+        (func->GetType()->isUnmasked) || (func->GetType()->isTask)) {
-+        functionMaskValue = NULL;
-+        fullMaskPointer = NULL;
-+    } else {
-+        functionMaskValue = LLVMMaskAllOn;
-+        fullMaskPointer = AllocaInst(LLVMTypes::MaskType, "full_mask_memory");
-+        StoreInst(LLVMMaskAllOn, fullMaskPointer);
-+    }
- 
-     blockEntryMask = NULL;
-     breakLanesPtr = continueLanesPtr = NULL;
-@@ -389,20 +397,26 @@ llvm::BasicBlock *FunctionEmitContext::GetCurrentBasicBlock() { return bblock; }
- 
- void FunctionEmitContext::SetCurrentBasicBlock(llvm::BasicBlock *bb) { bblock = bb; }
- 
--llvm::Value *FunctionEmitContext::GetFunctionMask() { return functionMaskValue; }
-+llvm::Value *FunctionEmitContext::GetFunctionMask() { return fullMaskPointer ? functionMaskValue : LLVMMaskAllOn; }
- 
- llvm::Value *FunctionEmitContext::GetInternalMask() { return LoadInst(internalMaskPointer, NULL, "load_mask"); }
- 
- llvm::Value *FunctionEmitContext::GetFullMask() {
--    return BinaryOperator(llvm::Instruction::And, GetInternalMask(), functionMaskValue, "internal_mask&function_mask");
-+    return fullMaskPointer ? BinaryOperator(llvm::Instruction::And, GetInternalMask(), functionMaskValue,
-+                                            "internal_mask&function_mask")
-+                           : GetInternalMask();
- }
- 
--llvm::Value *FunctionEmitContext::GetFullMaskPointer() { return fullMaskPointer; }
-+llvm::Value *FunctionEmitContext::GetFullMaskPointer() {
-+    return fullMaskPointer ? fullMaskPointer : internalMaskPointer;
-+}
- 
- void FunctionEmitContext::SetFunctionMask(llvm::Value *value) {
--    functionMaskValue = value;
--    if (bblock != NULL)
--        StoreInst(GetFullMask(), fullMaskPointer);
-+    if (fullMaskPointer != NULL) {
-+        functionMaskValue = value;
-+        if (bblock != NULL)
-+            StoreInst(GetFullMask(), fullMaskPointer);
-+    }
- }
- 
- void FunctionEmitContext::SetBlockEntryMask(llvm::Value *value) { blockEntryMask = value; }
-@@ -410,7 +424,8 @@ void FunctionEmitContext::SetBlockEntryMask(llvm::Value *value) { blockEntryMask
- void FunctionEmitContext::SetInternalMask(llvm::Value *value) {
-     StoreInst(value, internalMaskPointer);
-     // kludge so that __mask returns the right value in ispc code.
--    StoreInst(GetFullMask(), fullMaskPointer);
-+    if (fullMaskPointer)
-+        StoreInst(GetFullMask(), fullMaskPointer);
- }
- 
- void FunctionEmitContext::SetInternalMaskAnd(llvm::Value *oldMask, llvm::Value *test) {
-@@ -1265,7 +1280,7 @@ void FunctionEmitContext::CurrentLanesReturned(Expr *expr, bool doCoherenceCheck
-         // lanes have returned
-         if (doCoherenceCheck) {
-             // if newReturnedLanes == functionMaskValue, get out of here!
--            llvm::Value *cmp = MasksAllEqual(functionMaskValue, newReturnedLanes);
-+            llvm::Value *cmp = MasksAllEqual(GetFunctionMask(), newReturnedLanes);
-             llvm::BasicBlock *bDoReturn = CreateBasicBlock("do_return");
-             llvm::BasicBlock *bNoReturn = CreateBasicBlock("no_return");
-             BranchInst(bDoReturn, bNoReturn, cmp);
-diff --git a/tests/lit-tests/full_mask.ispc b/tests/lit-tests/full_mask.ispc
-new file mode 100644
-index 000000000..ac0b0bca3
---- /dev/null
-+++ b/tests/lit-tests/full_mask.ispc
-@@ -0,0 +1,63 @@
-+// RUN: %{ispc} %s -DISPC_EXPORT --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_EXPORT %s
-+
-+// RUN: %{ispc} %s -DISPC_UNMASKED --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_UNMASKED %s
-+
-+// RUN: %{ispc} %s -DISPC_NOQUALIF --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_NOQUALIF %s
-+
-+// RUN: %{ispc} %s -DISPC_TASK --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_TASK %s
-+
-+struct Parameters {
-+    float *vout;
-+    int param;
-+};
-+
-+#ifdef ISPC_EXPORT
-+// CHECK_ISPC_EXPORT: define void @simple_export___
-+// CHECK_ISPC_EXPORT: %full_mask_memory = alloca
-+// CHECK_ISPC_EXPORT: define void @simple_export(
-+// CHECK_ISPC_EXPORT-NOT: %full_mask_memory = alloca
-+export void simple_export(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_UNMASKED
-+// CHECK_ISPC_UNMASKED: define void @simple_unmasked
-+// CHECK_ISPC_UNMASKED-NOT: %full_mask_memory = alloca
-+unmasked void simple_unmasked(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_NOQUALIF
-+// CHECK_ISPC_NOQUALIF: define void @simple
-+// CHECK_ISPC_NOQUALIF: %full_mask_memory = alloca
-+void simple(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_TASK
-+
-+// CHECK_ISPC_TASK: define void @simple_task
-+// CHECK_ISPC_TASK-NOT: %full_mask_memory = alloca
-+// CHECK_ISPC_TASK: define void @simple_entry_point__
-+// CHECK_ISPC_TASK: %full_mask_memory = alloca
-+// CHECK_ISPC_TASK: define void @simple_entry_point(
-+// CHECK_ISPC_TASK-NOT: %full_mask_memory = alloca
-+task void simple_task(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+export void simple_entry_point(void *uniform parameters, uniform int dim0, uniform int dim1, uniform int dim2) {
-+    launch[dim0, dim1, dim2] simple_task(parameters);
-+}
-+#endif
-\ No newline at end of file
diff --git a/srcpkgs/ispc/patches/llvm12-008.patch b/srcpkgs/ispc/patches/llvm12-008.patch
deleted file mode 100644
index c8413d8b7887..000000000000
--- a/srcpkgs/ispc/patches/llvm12-008.patch
+++ /dev/null
@@ -1,149 +0,0 @@
-From afad14227d9204a3c8a626ca608f5b43c3218fe9 Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 4 May 2021 11:43:52 -0700
-Subject: [PATCH] Fixed ISPC gen build for LLVM12
-
----
- src/ctx.cpp |  4 ++++
- src/opt.cpp | 43 +++++++++++++++++++++++++++++--------------
- 2 files changed, 33 insertions(+), 14 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 0c7050591..f7dc06939 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -3738,7 +3738,11 @@ llvm::Value *FunctionEmitContext::GenXSimdCFAny(llvm::Value *value) {
- 
- llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::Value *defaults) {
-     AssertPos(currentPos, llvm::isa<llvm::VectorType>(value->getType()));
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    llvm::FixedVectorType *vt = llvm::dyn_cast<llvm::FixedVectorType>(value->getType());
-+#else
-     llvm::VectorType *vt = llvm::dyn_cast<llvm::VectorType>(value->getType());
-+#endif
-     if (defaults == NULL) {
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-diff --git a/src/opt.cpp b/src/opt.cpp
-index cea4afa23..4e33d6b1a 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -2916,9 +2916,13 @@ static llvm::Function *lGenXMaskedInt8Inst(llvm::Instruction *inst, bool isStore
- 
- static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::Instruction *inst) {
-     Assert(g->target->isGenXTarget());
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Assert(llvm::isa<llvm::FixedVectorType>(val->getType()));
-+    llvm::FixedVectorType *valVecType = llvm::dyn_cast<llvm::FixedVectorType>(val->getType());
-+#else
-     Assert(llvm::isa<llvm::VectorType>(val->getType()));
--
-     llvm::VectorType *valVecType = llvm::dyn_cast<llvm::VectorType>(val->getType());
-+#endif
-     Assert(llvm::isPowerOf2_32(valVecType->getNumElements()));
-     Assert(valVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
- 
-@@ -2942,9 +2946,13 @@ static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::
- }
- 
- static llvm::CallInst *lGenXLoadInst(llvm::Value *ptr, llvm::Type *retType, llvm::Instruction *inst) {
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Assert(llvm::isa<llvm::FixedVectorType>(retType));
-+    llvm::FixedVectorType *retVecType = llvm::dyn_cast<llvm::FixedVectorType>(retType);
-+#else
-     Assert(llvm::isa<llvm::VectorType>(retType));
--
-     llvm::VectorType *retVecType = llvm::dyn_cast<llvm::VectorType>(retType);
-+#endif
-     Assert(llvm::isPowerOf2_32(retVecType->getNumElements()));
-     Assert(retVecType->getPrimitiveSizeInBits());
-     Assert(retVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-@@ -5485,8 +5493,13 @@ static void lCreateBlockLDUse(llvm::Instruction *currInst, std::vector<llvm::Ext
-         } else if (auto gather = lGetPseudoGather(llvm::dyn_cast<llvm::Instruction>(ui->getUser()))) {
-             // Collect idxs from gather and fix users
-             llvm::Value *res = llvm::UndefValue::get(gather->getType());
--            for (unsigned i = 0, end = llvm::dyn_cast<llvm::VectorType>(res->getType())->getNumElements(); i < end;
--                 ++i) {
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            for (unsigned i = 0, end = llvm::dyn_cast<llvm::FixedVectorType>(res->getType())->getNumElements(); i < end;
-+                 ++i)
-+#else
-+            for (unsigned i = 0, end = llvm::dyn_cast<llvm::VectorType>(res->getType())->getNumElements(); i < end; ++i)
-+#endif
-+            {
-                 // Get element via IEI
-                 res = llvm::InsertElementInst::Create(res, EEIs[ptrUse.idxs[curr_idx++]],
-                                                       llvm::ConstantInt::get(LLVMTypes::Int32Type, i),
-@@ -5522,10 +5535,11 @@ static bool lVectorizeGEPs(llvm::Value *ptr, std::vector<PtrUse> &ptrUses, std::
- 
-     // Adjust values for vector load
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    if (auto vecTy = llvm::dyn_cast<llvm::FixedVectorType>(type)) {
-+    if (auto vecTy = llvm::dyn_cast<llvm::FixedVectorType>(type))
- #else
--    if (auto vecTy = llvm::dyn_cast<llvm::VectorType>(type)) {
-+    if (auto vecTy = llvm::dyn_cast<llvm::VectorType>(type))
- #endif
-+    {
-         // Get single element size
-         t_size /= vecTy->getNumElements();
-         // Get single element type
-@@ -6477,7 +6491,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-         Offsets,
-         llvm::FixedVectorType::get(LLVMTypes::Int64Type,
--                                   llvm::dyn_cast<llvm::VectorType>(Offsets->getType())->getNumElements()),
-+                                   llvm::dyn_cast<llvm::FixedVectorType>(Offsets->getType())->getNumElements()),
-         "svm_offset_zext", InsertBefore);
- #else
-         Offsets, llvm::VectorType::get(LLVMTypes::Int64Type, Offsets->getType()->getVectorNumElements()),
-@@ -6492,7 +6506,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
-         llvm::Value *undefInsertValue =
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-             llvm::UndefValue::get(llvm::FixedVectorType::get(
--                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements()));
- #else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
- #endif
-@@ -6501,17 +6515,16 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
- #elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
--            {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
-+            {llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements(), false},
- #else
--        llvm::ElementCount::get(
--                                llvm::dyn_cast<llvm::FixedVectorType>(addressType->getNumElements(), false),
-+            llvm::ElementCount::get(llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements(), false),
- #endif
-             llvm::Constant::getNullValue(llvm::Type::getInt32Ty(InsertBefore->getContext())));
- 
-         llvm::Value *undefShuffleValue =
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-             llvm::UndefValue::get(llvm::FixedVectorType::get(
--                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements()));
- #else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
- #endif
-@@ -6542,7 +6555,8 @@ llvm::Instruction *FixAddressSpace::processVectorLoad(llvm::LoadInst *LI) {
-         isPtrLoad = true;
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--        retType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(retType)->getNumElements());
-+        retType =
-+            llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::FixedVectorType>(retType)->getNumElements());
- #else
-         retType = llvm::VectorType::get(scalarType, retType->getVectorNumElements());
- #endif
-@@ -6604,7 +6618,8 @@ llvm::Instruction *FixAddressSpace::processVectorStore(llvm::StoreInst *SI) {
-     if (valType->getScalarType()->isPointerTy()) {
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--        valType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(valType)->getNumElements());
-+        valType =
-+            llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::FixedVectorType>(valType)->getNumElements());
- #else
-         valType = llvm::VectorType::get(scalarType, valType->getVectorNumElements());
- #endif
diff --git a/srcpkgs/ispc/patches/llvm12-009.patch b/srcpkgs/ispc/patches/llvm12-009.patch
deleted file mode 100644
index d3ea67828582..000000000000
--- a/srcpkgs/ispc/patches/llvm12-009.patch
+++ /dev/null
@@ -1,2109 +0,0 @@
-From 97b13c32132e2704a5e3e7b2eae49d854d087e3e Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 4 May 2021 11:31:55 -0700
-Subject: [PATCH] Updated builtins-cm* for switch to LLVM12
-
----
- builtins/builtins-cm-32.ll | 234 ++++++++++++++++++-------------------
- builtins/builtins-cm-64.ll | 232 ++++++++++++++++++------------------
- 2 files changed, 233 insertions(+), 233 deletions(-)
-
-diff --git a/builtins/builtins-cm-32.ll b/builtins/builtins-cm-32.ll
-index 32debf32e..481bbdc48 100644
---- a/builtins/builtins-cm-32.ll
-+++ b/builtins/builtins-cm-32.ll
-@@ -557,7 +557,7 @@ $_ZN13VaryingWriter12WriteVecElemIPvEEvv = comdat any
- @.str.10 = private unnamed_addr constant [5 x i8] c"%08X\00", align 1
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -618,7 +618,7 @@ define internal <1 x i8> @_ZN7details13__impl_divremILi1EEEu2CMvbT__cS1_S1_u2CMv
- declare <1 x i8> @llvm.genx.rdregioni.v1i8.v1i8.i16(<1 x i8>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -634,7 +634,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -680,7 +680,7 @@ define internal <2 x i8> @_ZN7details13__impl_divremILi2EEEu2CMvbT__cS1_S1_u2CMv
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -818,7 +818,7 @@ define internal <16 x i8> @_ZN7details13__impl_divremILi16EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -864,7 +864,7 @@ define internal <32 x i8> @_ZN7details13__impl_divremILi32EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -890,7 +890,7 @@ define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -904,7 +904,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -918,7 +918,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -932,7 +932,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -946,7 +946,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -960,7 +960,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -974,7 +974,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1058,7 +1058,7 @@ define internal <1 x i16> @_ZN7details13__impl_divremILi1EEEu2CMvbT__sS1_S1_u2CM
- declare <1 x i16> @llvm.genx.rdregioni.v1i16.v1i16.i16(<1 x i16>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1074,7 +1074,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1143,7 +1143,7 @@ define internal <2 x i16> @_ZN7details13__impl_divremILi2EEEu2CMvbT__sS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1350,7 +1350,7 @@ define internal <16 x i16> @_ZN7details13__impl_divremILi16EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1419,7 +1419,7 @@ define internal <32 x i16> @_ZN7details13__impl_divremILi32EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1445,7 +1445,7 @@ define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 si
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1459,7 +1459,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1473,7 +1473,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1487,7 +1487,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -1501,7 +1501,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -1515,7 +1515,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1529,7 +1529,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1730,7 +1730,7 @@ define internal <1 x i32> @_ZN7details13__impl_divremILi1EEEu2CMvbT__iS1_S1_u2CM
- declare <1 x i32> @llvm.genx.rdregioni.v1i32.v1i32.i16(<1 x i32>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1746,7 +1746,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -1932,7 +1932,7 @@ define internal <2 x i32> @_ZN7details13__impl_divremILi2EEEu2CMvbT__iS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2490,7 +2490,7 @@ define internal <16 x i32> @_ZN7details13__impl_divremILi16EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2676,7 +2676,7 @@ define internal <32 x i32> @_ZN7details13__impl_divremILi32EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2702,7 +2702,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2716,7 +2716,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -2730,7 +2730,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2744,7 +2744,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -2758,7 +2758,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -2772,7 +2772,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2786,7 +2786,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2844,7 +2844,7 @@ define internal <1 x i8> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2860,7 +2860,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -2906,7 +2906,7 @@ define internal <2 x i8> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3044,7 +3044,7 @@ define internal <16 x i8> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3090,7 +3090,7 @@ define internal <32 x i8> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3116,7 +3116,7 @@ define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3130,7 +3130,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -3144,7 +3144,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3158,7 +3158,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -3172,7 +3172,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -3186,7 +3186,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3200,7 +3200,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3278,7 +3278,7 @@ define internal <1 x i16> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3294,7 +3294,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3360,7 +3360,7 @@ define internal <2 x i16> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3558,7 +3558,7 @@ define internal <16 x i16> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3624,7 +3624,7 @@ define internal <32 x i16> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3650,7 +3650,7 @@ define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 ze
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3664,7 +3664,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3678,7 +3678,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3692,7 +3692,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -3706,7 +3706,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -3720,7 +3720,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3734,7 +3734,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3892,7 +3892,7 @@ define internal <1 x i32> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3908,7 +3908,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4054,7 +4054,7 @@ define internal <2 x i32> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4492,7 +4492,7 @@ define internal <16 x i32> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4638,7 +4638,7 @@ define internal <32 x i32> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4664,7 +4664,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4678,7 +4678,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4692,7 +4692,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4706,7 +4706,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -4720,7 +4720,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -4734,7 +4734,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4748,7 +4748,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-+define internal void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-   %8 = alloca i8*, align 4
-   %9 = alloca i8*, align 4
-   %10 = alloca i32, align 4
-@@ -4988,7 +4988,7 @@ define internal void @_ZN7details16_cm_print_formatILi128EEEv15cm_surfaceindexju
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i32) #26 !dbg !117 {
-+define internal void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i32) #26 !dbg !117 {
-   %10 = alloca i32, align 4
-   %11 = alloca i8*, align 4
-   %12 = alloca i32, align 4
-@@ -5069,7 +5069,7 @@ define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i3
-   %67 = load i64, i64* %13, align 8, !dbg !159, !tbaa !19
-   %68 = load <5 x i32>, <5 x i32>* %21, align 32, !dbg !160, !tbaa !7
-   call void @_ZN13VaryingWriterC2ERjRPKjiyu2CMvb5_i(%class.VaryingWriter* %23, i32* dereferenceable(4) %19, i32** dereferenceable(4) %14, i32 %66, i64 %67, <5 x i32> %68), !dbg !161
--  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval align 32 %22, %class.VaryingWriter* byval align 32 %23), !dbg !162
-+  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval(%class.UniformWriter) align 32 %22, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %23), !dbg !162
-   br label %70, !dbg !163
- 
- ; <label>:70:                                     ; preds = %60
-@@ -5187,7 +5187,7 @@ define internal <5 x i32> @_Z17get_auxiliary_strv() #28 comdat !dbg !178 {
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %class.VaryingWriter* byval align 32) #25 comdat !dbg !191 {
-+define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !191 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %class.VaryingWriter, align 32
-@@ -5196,7 +5196,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %8 = bitcast %class.UniformWriter* %5 to i8*, !dbg !196
-   %9 = bitcast %class.UniformWriter* %1 to i8*, !dbg !196
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %8, i8* align 32 %9, i32 64, i1 false), !dbg !196, !tbaa.struct !197
--  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval align 32 %5), !dbg !198
-+  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5), !dbg !198
-   br i1 %10, label %16, label %11, !dbg !199
- 
- ; <label>:11:                                     ; preds = %3
-@@ -5204,7 +5204,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %13 = bitcast %class.VaryingWriter* %6 to i8*, !dbg !201
-   %14 = bitcast %class.VaryingWriter* %2 to i8*, !dbg !201
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %13, i8* align 32 %14, i32 64, i1 false), !dbg !201, !tbaa.struct !197
--  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval align 32 %6), !dbg !202
-+  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %6), !dbg !202
-   br label %16, !dbg !199
- 
- ; <label>:16:                                     ; preds = %11, %3
-@@ -5279,7 +5279,7 @@ define internal void @_ZN13VaryingWriterC2ERjRPKjiyu2CMvb5_i(%class.VaryingWrite
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @__num_cores() #29 !dbg !236 {
-+define internal i32 @__num_cores() #29 !dbg !236 {
-   ret i32 -1, !dbg !237
- }
- 
-@@ -8860,7 +8860,7 @@ declare dso_local void @_ZN7details37__cm_intrinsic_impl_svm_scatter_writeIiLi1E
- declare void @llvm.genx.svm.scatter.v1i1.v1i64.v1i32(<1 x i1>, i32, <1 x i64>, <1 x i32>) #27
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval align 32) #25 comdat !dbg !1645 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32) #25 comdat !dbg !1645 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.UniformWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8869,7 +8869,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
-   %7 = bitcast %class.UniformWriter* %4 to i8*, !dbg !1647
-   %8 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1647
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %7, i8* align 32 %8, i32 64, i1 false), !dbg !1647, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %5), !dbg !1648
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval(%class.UniformWriter) align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %5), !dbg !1648
-   ret i1 %9, !dbg !1649
- }
- 
-@@ -8877,7 +8877,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
- declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture readonly, i32, i1) #32
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval align 32) #25 comdat !dbg !1650 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !1650 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.VaryingWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -8886,12 +8886,12 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWrite
-   %7 = bitcast %class.VaryingWriter* %4 to i8*, !dbg !1652
-   %8 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !1652
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %7, i8* align 32 %8, i32 64, i1 false), !dbg !1652, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %5), !dbg !1653
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %5), !dbg !1653
-   ret i1 %9, !dbg !1654
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1655 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1655 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8914,7 +8914,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %22 = bitcast %class.UniformWriter* %5 to i8*, !dbg !1657
-   %23 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1657
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %22, i8* align 32 %23, i32 64, i1 false), !dbg !1657, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %6), !dbg !1658
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %6), !dbg !1658
-   br i1 %24, label %60, label %25, !dbg !1659
- 
- ; <label>:25:                                     ; preds = %3
-@@ -8922,7 +8922,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %27 = bitcast %class.UniformWriter* %7 to i8*, !dbg !1661
-   %28 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1661
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %27, i8* align 32 %28, i32 64, i1 false), !dbg !1661, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %8), !dbg !1662
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval(%class.UniformWriter) align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %8), !dbg !1662
-   br i1 %29, label %60, label %30, !dbg !1663
- 
- ; <label>:30:                                     ; preds = %25
-@@ -8930,7 +8930,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %32 = bitcast %class.UniformWriter* %9 to i8*, !dbg !1665
-   %33 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1665
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %32, i8* align 32 %33, i32 64, i1 false), !dbg !1665, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %10), !dbg !1666
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval(%class.UniformWriter) align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %10), !dbg !1666
-   br i1 %34, label %60, label %35, !dbg !1667
- 
- ; <label>:35:                                     ; preds = %30
-@@ -8938,7 +8938,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %37 = bitcast %class.UniformWriter* %11 to i8*, !dbg !1669
-   %38 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1669
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %37, i8* align 32 %38, i32 64, i1 false), !dbg !1669, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %12), !dbg !1670
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval(%class.UniformWriter) align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %12), !dbg !1670
-   br i1 %39, label %60, label %40, !dbg !1671
- 
- ; <label>:40:                                     ; preds = %35
-@@ -8946,7 +8946,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %42 = bitcast %class.UniformWriter* %13 to i8*, !dbg !1673
-   %43 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1673
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %42, i8* align 32 %43, i32 64, i1 false), !dbg !1673, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %14), !dbg !1674
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval(%class.UniformWriter) align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %14), !dbg !1674
-   br i1 %44, label %60, label %45, !dbg !1675
- 
- ; <label>:45:                                     ; preds = %40
-@@ -8954,7 +8954,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %47 = bitcast %class.UniformWriter* %15 to i8*, !dbg !1677
-   %48 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1677
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %47, i8* align 32 %48, i32 64, i1 false), !dbg !1677, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %16), !dbg !1678
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval(%class.UniformWriter) align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %16), !dbg !1678
-   br i1 %49, label %60, label %50, !dbg !1679
- 
- ; <label>:50:                                     ; preds = %45
-@@ -8962,7 +8962,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %52 = bitcast %class.UniformWriter* %17 to i8*, !dbg !1681
-   %53 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1681
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %52, i8* align 32 %53, i32 64, i1 false), !dbg !1681, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %18), !dbg !1682
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval(%class.UniformWriter) align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %18), !dbg !1682
-   br i1 %54, label %60, label %55, !dbg !1683
- 
- ; <label>:55:                                     ; preds = %50
-@@ -8970,7 +8970,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %57 = bitcast %class.UniformWriter* %19 to i8*, !dbg !1685
-   %58 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1685
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %57, i8* align 32 %58, i32 64, i1 false), !dbg !1685, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %20), !dbg !1686
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval(%class.UniformWriter) align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %20), !dbg !1686
-   br label %60, !dbg !1683
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -8979,7 +8979,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1688 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1688 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9005,7 +9005,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1697 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1697 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9031,7 +9031,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1706 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1706 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9057,7 +9057,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1715 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1715 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9083,7 +9083,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1724 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1724 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9109,7 +9109,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1733 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1733 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9135,7 +9135,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1742 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1742 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9161,7 +9161,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1751 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1751 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9984,7 +9984,7 @@ define internal i32 @_ZN7details18_cm_print_type_oclIPvEENS_18SHADER_PRINTF_TYPE
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2055 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2055 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.VaryingWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -10007,7 +10007,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %22 = bitcast %class.VaryingWriter* %5 to i8*, !dbg !2057
-   %23 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2057
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %22, i8* align 32 %23, i32 64, i1 false), !dbg !2057, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %6), !dbg !2058
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %6), !dbg !2058
-   br i1 %24, label %60, label %25, !dbg !2059
- 
- ; <label>:25:                                     ; preds = %3
-@@ -10015,7 +10015,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %27 = bitcast %class.VaryingWriter* %7 to i8*, !dbg !2061
-   %28 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2061
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %27, i8* align 32 %28, i32 64, i1 false), !dbg !2061, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %8), !dbg !2062
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %8), !dbg !2062
-   br i1 %29, label %60, label %30, !dbg !2063
- 
- ; <label>:30:                                     ; preds = %25
-@@ -10023,7 +10023,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %32 = bitcast %class.VaryingWriter* %9 to i8*, !dbg !2065
-   %33 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2065
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %32, i8* align 32 %33, i32 64, i1 false), !dbg !2065, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %10), !dbg !2066
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %10), !dbg !2066
-   br i1 %34, label %60, label %35, !dbg !2067
- 
- ; <label>:35:                                     ; preds = %30
-@@ -10031,7 +10031,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %37 = bitcast %class.VaryingWriter* %11 to i8*, !dbg !2069
-   %38 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2069
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %37, i8* align 32 %38, i32 64, i1 false), !dbg !2069, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %12), !dbg !2070
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %12), !dbg !2070
-   br i1 %39, label %60, label %40, !dbg !2071
- 
- ; <label>:40:                                     ; preds = %35
-@@ -10039,7 +10039,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %42 = bitcast %class.VaryingWriter* %13 to i8*, !dbg !2073
-   %43 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2073
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %42, i8* align 32 %43, i32 64, i1 false), !dbg !2073, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %14), !dbg !2074
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %14), !dbg !2074
-   br i1 %44, label %60, label %45, !dbg !2075
- 
- ; <label>:45:                                     ; preds = %40
-@@ -10047,7 +10047,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %47 = bitcast %class.VaryingWriter* %15 to i8*, !dbg !2077
-   %48 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2077
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %47, i8* align 32 %48, i32 64, i1 false), !dbg !2077, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %16), !dbg !2078
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %16), !dbg !2078
-   br i1 %49, label %60, label %50, !dbg !2079
- 
- ; <label>:50:                                     ; preds = %45
-@@ -10055,7 +10055,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %52 = bitcast %class.VaryingWriter* %17 to i8*, !dbg !2081
-   %53 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2081
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %52, i8* align 32 %53, i32 64, i1 false), !dbg !2081, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %18), !dbg !2082
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %18), !dbg !2082
-   br i1 %54, label %60, label %55, !dbg !2083
- 
- ; <label>:55:                                     ; preds = %50
-@@ -10063,7 +10063,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %57 = bitcast %class.VaryingWriter* %19 to i8*, !dbg !2085
-   %58 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2085
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %57, i8* align 32 %58, i32 64, i1 false), !dbg !2085, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %20), !dbg !2086
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %20), !dbg !2086
-   br label %60, !dbg !2083
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -10072,7 +10072,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2088 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2088 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10098,7 +10098,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2097 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2097 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10124,7 +10124,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2106 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2106 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10150,7 +10150,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2115 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2115 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10176,7 +10176,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2124 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2124 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10202,7 +10202,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2133 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2133 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10228,7 +10228,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2142 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2142 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10254,7 +10254,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2151 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2151 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-diff --git a/builtins/builtins-cm-64.ll b/builtins/builtins-cm-64.ll
-index 39a2dd8be..375d01bed 100644
---- a/builtins/builtins-cm-64.ll
-+++ b/builtins/builtins-cm-64.ll
-@@ -557,7 +557,7 @@ $_ZN13VaryingWriter12WriteVecElemIPvEEvv = comdat any
- @.str.10 = private unnamed_addr constant [8 x i8] c"%016llX\00", align 1
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -618,7 +618,7 @@ define internal <1 x i8> @_ZN7details13__impl_divremILi1EEEu2CMvbT__cS1_S1_u2CMv
- declare <1 x i8> @llvm.genx.rdregioni.v1i8.v1i8.i16(<1 x i8>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -634,7 +634,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -680,7 +680,7 @@ define internal <2 x i8> @_ZN7details13__impl_divremILi2EEEu2CMvbT__cS1_S1_u2CMv
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -818,7 +818,7 @@ define internal <16 x i8> @_ZN7details13__impl_divremILi16EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -864,7 +864,7 @@ define internal <32 x i8> @_ZN7details13__impl_divremILi32EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -890,7 +890,7 @@ define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -904,7 +904,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -918,7 +918,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -932,7 +932,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -946,7 +946,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -960,7 +960,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -974,7 +974,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1058,7 +1058,7 @@ define internal <1 x i16> @_ZN7details13__impl_divremILi1EEEu2CMvbT__sS1_S1_u2CM
- declare <1 x i16> @llvm.genx.rdregioni.v1i16.v1i16.i16(<1 x i16>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1074,7 +1074,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1143,7 +1143,7 @@ define internal <2 x i16> @_ZN7details13__impl_divremILi2EEEu2CMvbT__sS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1350,7 +1350,7 @@ define internal <16 x i16> @_ZN7details13__impl_divremILi16EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1419,7 +1419,7 @@ define internal <32 x i16> @_ZN7details13__impl_divremILi32EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1445,7 +1445,7 @@ define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 si
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1459,7 +1459,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1473,7 +1473,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1487,7 +1487,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -1501,7 +1501,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -1515,7 +1515,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1529,7 +1529,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1730,7 +1730,7 @@ define internal <1 x i32> @_ZN7details13__impl_divremILi1EEEu2CMvbT__iS1_S1_u2CM
- declare <1 x i32> @llvm.genx.rdregioni.v1i32.v1i32.i16(<1 x i32>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1746,7 +1746,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -1932,7 +1932,7 @@ define internal <2 x i32> @_ZN7details13__impl_divremILi2EEEu2CMvbT__iS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2490,7 +2490,7 @@ define internal <16 x i32> @_ZN7details13__impl_divremILi16EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2676,7 +2676,7 @@ define internal <32 x i32> @_ZN7details13__impl_divremILi32EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2702,7 +2702,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2716,7 +2716,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -2730,7 +2730,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2744,7 +2744,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -2758,7 +2758,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -2772,7 +2772,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2786,7 +2786,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2844,7 +2844,7 @@ define internal <1 x i8> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2860,7 +2860,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -2906,7 +2906,7 @@ define internal <2 x i8> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3044,7 +3044,7 @@ define internal <16 x i8> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3090,7 +3090,7 @@ define internal <32 x i8> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3116,7 +3116,7 @@ define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3130,7 +3130,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -3144,7 +3144,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3158,7 +3158,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -3172,7 +3172,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -3186,7 +3186,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3200,7 +3200,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3278,7 +3278,7 @@ define internal <1 x i16> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3294,7 +3294,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3360,7 +3360,7 @@ define internal <2 x i16> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3558,7 +3558,7 @@ define internal <16 x i16> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3624,7 +3624,7 @@ define internal <32 x i16> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3650,7 +3650,7 @@ define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 ze
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3664,7 +3664,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3678,7 +3678,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3692,7 +3692,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -3706,7 +3706,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -3720,7 +3720,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3734,7 +3734,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3892,7 +3892,7 @@ define internal <1 x i32> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3908,7 +3908,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4054,7 +4054,7 @@ define internal <2 x i32> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4492,7 +4492,7 @@ define internal <16 x i32> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4638,7 +4638,7 @@ define internal <32 x i32> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4664,7 +4664,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4678,7 +4678,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4692,7 +4692,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4706,7 +4706,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -4720,7 +4720,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -4734,7 +4734,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4748,7 +4748,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-+define internal void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-   %8 = alloca i8*, align 8
-   %9 = alloca i8*, align 8
-   %10 = alloca i32, align 4
-@@ -5070,7 +5070,7 @@ define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i3
-   %67 = load i64, i64* %13, align 8, !dbg !159, !tbaa !19
-   %68 = load <5 x i32>, <5 x i32>* %21, align 32, !dbg !160, !tbaa !7
-   call void @_ZN13VaryingWriterC2ERyRPKjiyu2CMvb5_i(%class.VaryingWriter* %23, i64* dereferenceable(8) %19, i32** dereferenceable(8) %14, i32 %66, i64 %67, <5 x i32> %68), !dbg !161
--  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval align 32 %22, %class.VaryingWriter* byval align 32 %23), !dbg !162
-+  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval(%class.UniformWriter) align 32 %22, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %23), !dbg !162
-   br label %70, !dbg !163
- 
- ; <label>:70:                                     ; preds = %60
-@@ -5188,7 +5188,7 @@ define internal <5 x i32> @_Z17get_auxiliary_strv() #28 comdat !dbg !178 {
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %class.VaryingWriter* byval align 32) #25 comdat !dbg !191 {
-+define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !191 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %class.VaryingWriter, align 32
-@@ -5197,7 +5197,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %8 = bitcast %class.UniformWriter* %5 to i8*, !dbg !196
-   %9 = bitcast %class.UniformWriter* %1 to i8*, !dbg !196
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %8, i8* align 32 %9, i64 64, i1 false), !dbg !196, !tbaa.struct !197
--  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval align 32 %5), !dbg !198
-+  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5), !dbg !198
-   br i1 %10, label %16, label %11, !dbg !199
- 
- ; <label>:11:                                     ; preds = %3
-@@ -5205,7 +5205,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %13 = bitcast %class.VaryingWriter* %6 to i8*, !dbg !201
-   %14 = bitcast %class.VaryingWriter* %2 to i8*, !dbg !201
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %13, i8* align 32 %14, i64 64, i1 false), !dbg !201, !tbaa.struct !197
--  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval align 32 %6), !dbg !202
-+  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %6), !dbg !202
-   br label %16, !dbg !199
- 
- ; <label>:16:                                     ; preds = %11, %3
-@@ -5280,7 +5280,7 @@ define internal void @_ZN13VaryingWriterC2ERyRPKjiyu2CMvb5_i(%class.VaryingWrite
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @__num_cores() #29 !dbg !236 {
-+define internal i32 @__num_cores() #29 !dbg !236 {
-   ret i32 -1, !dbg !237
- }
- 
-@@ -8870,7 +8870,7 @@ declare dso_local void @_ZN7details37__cm_intrinsic_impl_svm_scatter_writeIiLi1E
- declare void @llvm.genx.svm.scatter.v1i1.v1i64.v1i32(<1 x i1>, i32, <1 x i64>, <1 x i32>) #27
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval align 32) #25 comdat !dbg !1645 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32) #25 comdat !dbg !1645 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.UniformWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8879,7 +8879,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
-   %7 = bitcast %class.UniformWriter* %4 to i8*, !dbg !1647
-   %8 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1647
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %7, i8* align 32 %8, i64 64, i1 false), !dbg !1647, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %5), !dbg !1648
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval(%class.UniformWriter) align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %5), !dbg !1648
-   ret i1 %9, !dbg !1649
- }
- 
-@@ -8887,7 +8887,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
- declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1) #32
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval align 32) #25 comdat !dbg !1650 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !1650 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.VaryingWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -8896,12 +8896,12 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWrite
-   %7 = bitcast %class.VaryingWriter* %4 to i8*, !dbg !1652
-   %8 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !1652
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %7, i8* align 32 %8, i64 64, i1 false), !dbg !1652, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %5), !dbg !1653
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %5), !dbg !1653
-   ret i1 %9, !dbg !1654
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1655 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1655 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8924,7 +8924,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %22 = bitcast %class.UniformWriter* %5 to i8*, !dbg !1657
-   %23 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1657
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %22, i8* align 32 %23, i64 64, i1 false), !dbg !1657, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %6), !dbg !1658
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %6), !dbg !1658
-   br i1 %24, label %60, label %25, !dbg !1659
- 
- ; <label>:25:                                     ; preds = %3
-@@ -8932,7 +8932,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %27 = bitcast %class.UniformWriter* %7 to i8*, !dbg !1661
-   %28 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1661
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %27, i8* align 32 %28, i64 64, i1 false), !dbg !1661, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %8), !dbg !1662
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval(%class.UniformWriter) align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %8), !dbg !1662
-   br i1 %29, label %60, label %30, !dbg !1663
- 
- ; <label>:30:                                     ; preds = %25
-@@ -8940,7 +8940,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %32 = bitcast %class.UniformWriter* %9 to i8*, !dbg !1665
-   %33 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1665
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %32, i8* align 32 %33, i64 64, i1 false), !dbg !1665, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %10), !dbg !1666
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval(%class.UniformWriter) align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %10), !dbg !1666
-   br i1 %34, label %60, label %35, !dbg !1667
- 
- ; <label>:35:                                     ; preds = %30
-@@ -8948,7 +8948,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %37 = bitcast %class.UniformWriter* %11 to i8*, !dbg !1669
-   %38 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1669
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %37, i8* align 32 %38, i64 64, i1 false), !dbg !1669, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %12), !dbg !1670
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval(%class.UniformWriter) align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %12), !dbg !1670
-   br i1 %39, label %60, label %40, !dbg !1671
- 
- ; <label>:40:                                     ; preds = %35
-@@ -8956,7 +8956,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %42 = bitcast %class.UniformWriter* %13 to i8*, !dbg !1673
-   %43 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1673
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %42, i8* align 32 %43, i64 64, i1 false), !dbg !1673, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %14), !dbg !1674
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval(%class.UniformWriter) align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %14), !dbg !1674
-   br i1 %44, label %60, label %45, !dbg !1675
- 
- ; <label>:45:                                     ; preds = %40
-@@ -8964,7 +8964,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %47 = bitcast %class.UniformWriter* %15 to i8*, !dbg !1677
-   %48 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1677
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %47, i8* align 32 %48, i64 64, i1 false), !dbg !1677, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %16), !dbg !1678
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval(%class.UniformWriter) align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %16), !dbg !1678
-   br i1 %49, label %60, label %50, !dbg !1679
- 
- ; <label>:50:                                     ; preds = %45
-@@ -8972,7 +8972,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %52 = bitcast %class.UniformWriter* %17 to i8*, !dbg !1681
-   %53 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1681
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %52, i8* align 32 %53, i64 64, i1 false), !dbg !1681, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %18), !dbg !1682
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval(%class.UniformWriter) align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %18), !dbg !1682
-   br i1 %54, label %60, label %55, !dbg !1683
- 
- ; <label>:55:                                     ; preds = %50
-@@ -8980,7 +8980,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %57 = bitcast %class.UniformWriter* %19 to i8*, !dbg !1685
-   %58 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1685
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %57, i8* align 32 %58, i64 64, i1 false), !dbg !1685, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %20), !dbg !1686
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval(%class.UniformWriter) align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %20), !dbg !1686
-   br label %60, !dbg !1683
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -8989,7 +8989,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1688 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1688 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9015,7 +9015,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1697 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1697 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9041,7 +9041,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1706 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1706 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9067,7 +9067,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1715 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1715 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9093,7 +9093,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1724 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1724 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9119,7 +9119,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1733 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1733 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9145,7 +9145,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1742 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1742 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9171,7 +9171,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1751 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1751 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10013,7 +10013,7 @@ define internal i32 @_ZN7details18_cm_print_type_oclIPvEENS_18SHADER_PRINTF_TYPE
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2061 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2061 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.VaryingWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -10036,7 +10036,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %22 = bitcast %class.VaryingWriter* %5 to i8*, !dbg !2063
-   %23 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2063
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %22, i8* align 32 %23, i64 64, i1 false), !dbg !2063, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %6), !dbg !2064
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %6), !dbg !2064
-   br i1 %24, label %60, label %25, !dbg !2065
- 
- ; <label>:25:                                     ; preds = %3
-@@ -10044,7 +10044,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %27 = bitcast %class.VaryingWriter* %7 to i8*, !dbg !2067
-   %28 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2067
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %27, i8* align 32 %28, i64 64, i1 false), !dbg !2067, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %8), !dbg !2068
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %8), !dbg !2068
-   br i1 %29, label %60, label %30, !dbg !2069
- 
- ; <label>:30:                                     ; preds = %25
-@@ -10052,7 +10052,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %32 = bitcast %class.VaryingWriter* %9 to i8*, !dbg !2071
-   %33 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2071
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %32, i8* align 32 %33, i64 64, i1 false), !dbg !2071, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %10), !dbg !2072
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %10), !dbg !2072
-   br i1 %34, label %60, label %35, !dbg !2073
- 
- ; <label>:35:                                     ; preds = %30
-@@ -10060,7 +10060,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %37 = bitcast %class.VaryingWriter* %11 to i8*, !dbg !2075
-   %38 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2075
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %37, i8* align 32 %38, i64 64, i1 false), !dbg !2075, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %12), !dbg !2076
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %12), !dbg !2076
-   br i1 %39, label %60, label %40, !dbg !2077
- 
- ; <label>:40:                                     ; preds = %35
-@@ -10068,7 +10068,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %42 = bitcast %class.VaryingWriter* %13 to i8*, !dbg !2079
-   %43 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2079
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %42, i8* align 32 %43, i64 64, i1 false), !dbg !2079, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %14), !dbg !2080
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %14), !dbg !2080
-   br i1 %44, label %60, label %45, !dbg !2081
- 
- ; <label>:45:                                     ; preds = %40
-@@ -10076,7 +10076,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %47 = bitcast %class.VaryingWriter* %15 to i8*, !dbg !2083
-   %48 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2083
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %47, i8* align 32 %48, i64 64, i1 false), !dbg !2083, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %16), !dbg !2084
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %16), !dbg !2084
-   br i1 %49, label %60, label %50, !dbg !2085
- 
- ; <label>:50:                                     ; preds = %45
-@@ -10084,7 +10084,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %52 = bitcast %class.VaryingWriter* %17 to i8*, !dbg !2087
-   %53 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2087
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %52, i8* align 32 %53, i64 64, i1 false), !dbg !2087, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %18), !dbg !2088
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %18), !dbg !2088
-   br i1 %54, label %60, label %55, !dbg !2089
- 
- ; <label>:55:                                     ; preds = %50
-@@ -10092,7 +10092,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %57 = bitcast %class.VaryingWriter* %19 to i8*, !dbg !2091
-   %58 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2091
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %57, i8* align 32 %58, i64 64, i1 false), !dbg !2091, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %20), !dbg !2092
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %20), !dbg !2092
-   br label %60, !dbg !2089
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -10101,7 +10101,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2094 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2094 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10127,7 +10127,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2103 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2103 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10153,7 +10153,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2112 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2112 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10179,7 +10179,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2121 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2121 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10205,7 +10205,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2130 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2130 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10231,7 +10231,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2139 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2139 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10257,7 +10257,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2148 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2148 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10283,7 +10283,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2157 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2157 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
diff --git a/srcpkgs/ispc/template b/srcpkgs/ispc/template
index 9c3acb42a9cf..3a85ff2605af 100644
--- a/srcpkgs/ispc/template
+++ b/srcpkgs/ispc/template
@@ -1,7 +1,7 @@
 # Template file for 'ispc'
 pkgname=ispc
-version=1.15.0
-revision=2
+version=1.17.0
+revision=1
 archs="x86_64*"
 build_style=cmake
 configure_args="-DISPC_NO_DUMPS=ON -DARM_ENABLED=OFF"
@@ -12,7 +12,7 @@ maintainer="Andrea Brancaleoni <abc@pompel.me>"
 license="BSD-3-Clause"
 homepage="https://ispc.github.io"
 distfiles="https://github.com/ispc/ispc/archive/v${version}.tar.gz"
-checksum=2658ff00dc045ac9fcefbf6bd26dffaf723b059a942a27df91bbb61bc503a285
+checksum=37fb1055d6c6b232e112d8d50145d726824ed4d8da93a7396315dceba6c76e62
 nocross=yes
 nopie=yes
 

From 10a88bd0ffd79badb198e4ab66db1f7edef2db44 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Tue, 3 May 2022 01:20:03 +0200
Subject: [PATCH 27/29] llvm14: switch to runtimes build.

https://reviews.llvm.org/rGac7031b2b2fa
https://reviews.llvm.org/D110338#3022952
---
 srcpkgs/llvm14/template | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
index 3e7e6ab2c00b..e731aa76130a 100644
--- a/srcpkgs/llvm14/template
+++ b/srcpkgs/llvm14/template
@@ -51,7 +51,8 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
-_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
+_enabled_projects="clang;clang-tools-extra;lld"
+_enabled_runtimes="compiler-rt;libcxx;libcxxabi;libunwind"
 
 _lldb_enable=yes
 _libomp_enable=no
@@ -67,9 +68,8 @@ esac
 
 subpackages="clang-tools-extra"
 
-# must go before clang
 if [ "$_libomp_enable" = "yes" ]; then
-	_enabled_projects+=";openmp"
+	_enabled_runtimes+=";openmp"
 	subpackages+=" libomp libomp-devel"
 	# because of cmake nonsense referencing libomptarget.so.*
 	depends+=" libomp>=${version}_${revision}"
@@ -88,6 +88,7 @@ fi
 subpackages+=" lld lld-devel"
 
 configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+configure_args+=" -DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}"
 
 post_patch() {
 	if [ "$_lldb_enable" = "yes" ]; then
@@ -156,7 +157,8 @@ pre_configure() {
 		CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
 			CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
-			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
+			-DLLVM_ENABLE_PROJECTS=${_enabled_projects} \
+			-DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}
 		make ${makejobs} -C utils/TableGen
 		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen

From 146e8973a3a031fe88de96c429d08996d24b41c7 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 14:07:14 +0200
Subject: [PATCH 28/29] zig: fix build.

---
 srcpkgs/zig/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/zig/template b/srcpkgs/zig/template
index 728c5a64e9df..c175de62c5f7 100644
--- a/srcpkgs/zig/template
+++ b/srcpkgs/zig/template
@@ -5,7 +5,7 @@ revision=2
 archs="x86_64* aarch64*"
 build_style=cmake
 make_cmd=make
-makedepends="clang llvm12 lld-devel"
+makedepends="clang12 llvm12 lld12-devel"
 short_desc="Programming language designed for robustness, optimality, and clarity"
 maintainer="Isaac Freund <mail@isaacfreund.com>"
 license="MIT"

From 2684f56dc0f11b2ecc1f05ed8244818da5c5114a Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 03:39:58 +0200
Subject: [PATCH 29/29] llvm14: fix build.

---
 .../llvm14/files/llvm-Config-llvm-config.h    |  9 ++++
 srcpkgs/llvm14/template                       | 41 +++++++++----------
 2 files changed, 28 insertions(+), 22 deletions(-)
 create mode 100644 srcpkgs/llvm14/files/llvm-Config-llvm-config.h

diff --git a/srcpkgs/llvm14/files/llvm-Config-llvm-config.h b/srcpkgs/llvm14/files/llvm-Config-llvm-config.h
new file mode 100644
index 000000000000..2fa08c9be696
--- /dev/null
+++ b/srcpkgs/llvm14/files/llvm-Config-llvm-config.h
@@ -0,0 +1,9 @@
+#include <bits/wordsize.h>
+
+#if __WORDSIZE == 32
+#include "llvm-config-32.h"
+#elif __WORDSIZE == 64
+#include "llvm-config-64.h"
+#else
+#error "Unknown word size"
+#endif
diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
index e731aa76130a..b63c06670534 100644
--- a/srcpkgs/llvm14/template
+++ b/srcpkgs/llvm14/template
@@ -15,6 +15,7 @@ configure_args="
  -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
  -DLIBOMP_ENABLE_SHARED=YES
  -DLIBOMP_INSTALL_ALIASES=NO
+ -DCOMPILER_RT_DEFAULT_TARGET_ONLY=YES
  -DLLVM_INCLUDE_DOCS=YES
  -DLLVM_BUILD_DOCS=YES
  -DLLVM_ENABLE_SPHINX=YES
@@ -90,6 +91,7 @@ subpackages+=" lld lld-devel"
 configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
 configure_args+=" -DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}"
 
+
 post_patch() {
 	if [ "$_lldb_enable" = "yes" ]; then
 		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
@@ -136,8 +138,7 @@ post_patch() {
 }
 
 pre_configure() {
-	local triplet
-
+	local triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
 	# Vastly reduce size of debugging symbols:
 	CFLAGS=${CFLAGS/ -g/ -g1}
 	CXXFLAGS=${CXXFLAGS/ -g/ -g1}
@@ -168,6 +169,9 @@ pre_configure() {
 		cd ../..
 	fi
 
+	mkdir -p gnu
+	touch gnu/stubs-32.h
+
 	case "$XBPS_TARGET_MACHINE" in
 		i686*) _arch="X86";;
 		x86_64*) _arch="X86";;
@@ -180,8 +184,6 @@ pre_configure() {
 		riscv64*) _arch="RISCV64";;
 	esac
 
-	triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
-
 	configure_args+=" -DLLVM_TARGET_ARCH=${_arch}"
 	configure_args+=" -DLLVM_HOST_TRIPLE=${triplet}"
 	configure_args+=" -DLLVM_DEFAULT_TARGET_TRIPLE=${triplet}"
@@ -251,7 +253,7 @@ clang-tools-extra_package() {
 		vmove "usr/lib/libclangQuery*"
 		vmove "usr/lib/libclangTidy*"
 		vmove "usr/share/clang/*tidy*"
-		vmove usr/share/doc/clang-tools
+		vmove usr/share/doc/LLVM/clang-tools
 		vmove usr/share/man/man1/extraclangtools.1
 		vmove usr/share/man/man1/diagtool.1
 	}
@@ -273,7 +275,7 @@ clang_package() {
 		vmove "usr/lib/libclang*.a"
 		vmove "usr/lib/libclang*.so"
 		vmove usr/share/clang
-		vmove usr/share/doc/clang
+		vmove usr/share/doc/LLVM/clang
 		vmove usr/share/man/man1/clang.1
 	}
 }
@@ -301,7 +303,7 @@ lld_package() {
 		vmove usr/bin/wasm-ld
 		vmove usr/bin/ld.lld*
 		vmove usr/bin/ld64.lld*
-		vmove usr/share/doc/lld
+		vmove usr/share/doc/LLVM/lld
 	}
 }
 
@@ -342,7 +344,7 @@ lldb-devel_package() {
 llvm-libunwind_package() {
 	short_desc+=" - libunwind"
 	pkg_install() {
-		vmove "usr/lib/libunwind.so.*"
+		vmove "usr/lib/${XBPS_TARGET_LIBC_CROSS_TRIPLET:-XBPS_TRIPLET}/libunwind.so.*"
 	}
 }
 
@@ -351,18 +353,17 @@ llvm-libunwind-devel_package() {
 	depends="llvm-libunwind>=${version}_${revision}"
 	conflicts="libunwind-devel>=0"
 	pkg_install() {
-		vmove usr/lib/libunwind.so
-		vmove usr/lib/libunwind.a
+		vmove usr/lib/${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}/libunwind.so
+		vmove usr/lib/${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}/libunwind.a
 		vmove "usr/include/*unwind*"
 		vmove usr/include/mach-o
-		vmove usr/share/doc/libunwind
 	}
 }
 
 libcxxabi_package() {
 	short_desc+=" - low level support for libc++"
 	pkg_install() {
-		vmove "usr/lib/libc++abi.so.*"
+		vmove "usr/lib/${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}/libc++abi.so.*"
 	}
 }
 
@@ -370,8 +371,8 @@ libcxxabi-devel_package() {
 	short_desc+=" - low level support for libc++ - development files"
 	depends="libcxxabi>=${version}_${revision}"
 	pkg_install() {
-		vmove usr/lib/libc++abi.so
-		vmove usr/lib/libc++abi.a
+		vmove usr/lib/${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}/libc++abi.so
+		vmove usr/lib/${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}/libc++abi.a
 		vmove "usr/include/*cxxabi*"
 	}
 }
@@ -379,7 +380,7 @@ libcxxabi-devel_package() {
 libcxx_package() {
 	short_desc+=" - C++ standard library"
 	pkg_install() {
-		vmove "usr/lib/libc++.so.*"
+		vmove "usr/lib/${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}/libc++.so.*"
 	}
 }
 
@@ -387,11 +388,10 @@ libcxx-devel_package() {
 	short_desc+=" - C++ standard library - development files"
 	depends="libcxx>=${version}_${revision}"
 	pkg_install() {
-		vmove usr/lib/libc++.so
-		vmove usr/lib/libc++.a
-		vmove usr/lib/libc++experimental.a
+		vmove usr/lib/${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}/libc++.so
+		vmove usr/lib/${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}/libc++.a
+		vmove usr/lib/${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}/libc++experimental.a
 		vmove usr/include/c++
-		vmove usr/share/doc/libcxx
 	}
 }
 
@@ -401,7 +401,6 @@ libomp_package() {
 		vmove usr/lib/libomp.so
 		vmove "usr/lib/libomptarget.rtl.*.so"
 		vmove usr/lib/libarcher.so
-		vmove "usr/lib/libomp*.so.*"
 	}
 }
 
@@ -413,8 +412,6 @@ libomp-devel_package() {
 		vmove "usr/lib/libarcher*"
 		vmove "usr/include/omp*.h"
 		vmove "usr/lib/clang/${version}/include/omp*.h"
-		vmove usr/share/man/man1/llvmopenmp.1
-		vmove usr/share/doc/openmp
 	}
 }
 

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: [PR PATCH] [Updated] Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (6 preceding siblings ...)
  2022-05-05  1:10 ` prez
@ 2022-05-05  1:25 ` prez
  2022-05-05 12:31 ` [PR REVIEW] Llvm14 ftrvxmtrx
                   ` (61 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-05-05  1:25 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 667 bytes --]

There is an updated pull request by prez against master on the void-packages repository

https://github.com/prez/void-packages llvm
https://github.com/void-linux/void-packages/pull/36962

Llvm14
Supersedes https://github.com/void-linux/void-packages/pull/36229, https://github.com/void-linux/void-packages/pull/34800 - thank you @motorto and @DBLouis.

Updated patches, ping @q66 .

@ifreund todo: zig. Since it depends on `lld-devel`, I guess we need to split out `lld12`? Would appreciate your help with this, I don't want to wait for the next zig version.

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/36962.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-llvm-36962.patch --]
[-- Type: text/x-diff, Size: 542288 bytes --]

From af3214d006e7bc77ca1201c220be4ce4b8bebd34 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:15:06 +0200
Subject: [PATCH 01/29] New package: llvm14-14.0.3

---
 common/shlibs                                 |  16 +-
 srcpkgs/clang                                 |   2 +-
 srcpkgs/clang-analyzer                        |   2 +-
 srcpkgs/clang-tools-extra                     |   2 +-
 srcpkgs/libclang                              |   2 +-
 srcpkgs/libclang-cpp                          |   2 +-
 srcpkgs/libcxx                                |   2 +-
 srcpkgs/libcxx-devel                          |   2 +-
 srcpkgs/libcxxabi                             |   2 +-
 srcpkgs/libcxxabi-devel                       |   2 +-
 srcpkgs/libllvm14                             |   1 +
 srcpkgs/libomp                                |   2 +-
 srcpkgs/libomp-devel                          |   2 +-
 srcpkgs/lld                                   |   2 +-
 srcpkgs/lld-devel                             |   2 +-
 srcpkgs/lldb                                  |   2 +-
 srcpkgs/lldb-devel                            |   2 +-
 srcpkgs/llvm-libunwind                        |   2 +-
 srcpkgs/llvm-libunwind-devel                  |   2 +-
 .../patches/clang-002-add-musl-triples.patch  | 110 +++++
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 +
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ++
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 ++
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 +++
 srcpkgs/llvm14/patches/libcxx-musl.patch      |  26 ++
 srcpkgs/llvm14/patches/libcxx-ppc.patch       |  22 +
 .../llvm14/patches/libcxx-ssp-nonshared.patch |  11 +
 srcpkgs/llvm14/patches/libcxxabi-dl.patch     |  25 ++
 srcpkgs/llvm14/patches/lldb-musl.patch        |  31 ++
 srcpkgs/llvm14/patches/llvm-001-musl.patch    |  57 +++
 .../patches/llvm-002-musl-ppc64-elfv2.patch   |  30 ++
 .../patches/llvm-003-ppc-secureplt.patch      |  11 +
 .../patches/llvm-004-override-opt.patch       |  18 +
 .../llvm14/patches/llvm-005-ppc-bigpic.patch  |  36 ++
 .../patches/llvm-006-aarch64-mf_exec.patch    |  25 ++
 srcpkgs/llvm14/template                       | 424 ++++++++++++++++++
 srcpkgs/llvm14/update                         |   3 +
 37 files changed, 1018 insertions(+), 20 deletions(-)
 create mode 120000 srcpkgs/libllvm14
 create mode 100644 srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
 create mode 100644 srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
 create mode 100644 srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
 create mode 100644 srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-ppc.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxxabi-dl.patch
 create mode 100644 srcpkgs/llvm14/patches/lldb-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-001-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-004-override-opt.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
 create mode 100644 srcpkgs/llvm14/template
 create mode 100644 srcpkgs/llvm14/update

diff --git a/common/shlibs b/common/shlibs
index 4114151662fb..81acc39defb4 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -975,11 +975,12 @@ libuchardet.so.0 uchardet-0.0.6_1
 libgtksourceviewmm-3.0.so.0 gtksourceviewmm-3.2.0_1
 libyajl.so.2 yajl-2.0.1_1
 libconfuse.so.2 confuse-3.2.1_1
-liblldb.so.12 lldb-12.0.0_1
-libclang.so.12 libclang-12.0.0_1
-libclang-cpp.so.12 libclang-cpp-12.0.0_1
+liblldb.so.14 lldb-14.0.3_1
+libclang.so.14 libclang-14.0.3_1
+libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
+libLLVM-14.so libllvm14-14.0.3_1
 libisofs.so.6 libisofs-0.6.24_1
 libmpack.so.0 libmpack-1.0.5_1
 libGeoIP.so.1 libgeoip-1.4.8_1
@@ -4152,3 +4153,12 @@ librz_bin.so.0.3.4 rizin-0.3.4_1
 libaravis-0.8.so.0 libaravis-0.8.21_1
 libLimeSuite.so.20.10-1 LimeSuite-20.10.0_1
 libnvme.so.1 libnvme-1.0_1
+libomp.so libomp-14.0.3_1
+libomptarget.rtl.amdgpu.so libomp-14.0.3_1
+libomptarget.rtl.cuda.so libomp-14.0.3_1
+libomptarget.rtl.x86_64.so libomp-14.0.3_1
+libarcher.so libomp-14.0.3_1
+libomptarget.so libomp-14.0.3_1
+liblldbIntelFeatures.so.14 lldb-14.0.3_1
+libLTO.so.14 llvm14-14.0.3_1
+libRemarks.so.14 llvm14-14.0.3_1
diff --git a/srcpkgs/clang b/srcpkgs/clang
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang
+++ b/srcpkgs/clang
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/clang-analyzer b/srcpkgs/clang-analyzer
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang-analyzer
+++ b/srcpkgs/clang-analyzer
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/clang-tools-extra b/srcpkgs/clang-tools-extra
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang-tools-extra
+++ b/srcpkgs/clang-tools-extra
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libclang b/srcpkgs/libclang
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libclang
+++ b/srcpkgs/libclang
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libclang-cpp b/srcpkgs/libclang-cpp
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libclang-cpp
+++ b/srcpkgs/libclang-cpp
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxx b/srcpkgs/libcxx
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxx
+++ b/srcpkgs/libcxx
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxx-devel b/srcpkgs/libcxx-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxx-devel
+++ b/srcpkgs/libcxx-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxxabi b/srcpkgs/libcxxabi
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxxabi
+++ b/srcpkgs/libcxxabi
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxxabi-devel b/srcpkgs/libcxxabi-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxxabi-devel
+++ b/srcpkgs/libcxxabi-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libllvm14 b/srcpkgs/libllvm14
new file mode 120000
index 000000000000..1d42ed7632a6
--- /dev/null
+++ b/srcpkgs/libllvm14
@@ -0,0 +1 @@
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libomp b/srcpkgs/libomp
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libomp
+++ b/srcpkgs/libomp
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libomp-devel b/srcpkgs/libomp-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libomp-devel
+++ b/srcpkgs/libomp-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lld b/srcpkgs/lld
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lld
+++ b/srcpkgs/lld
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lld-devel b/srcpkgs/lld-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lld-devel
+++ b/srcpkgs/lld-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lldb b/srcpkgs/lldb
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lldb
+++ b/srcpkgs/lldb
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lldb-devel b/srcpkgs/lldb-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lldb-devel
+++ b/srcpkgs/lldb-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm-libunwind b/srcpkgs/llvm-libunwind
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/llvm-libunwind
+++ b/srcpkgs/llvm-libunwind
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm-libunwind-devel b/srcpkgs/llvm-libunwind-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/llvm-libunwind-devel
+++ b/srcpkgs/llvm-libunwind-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
new file mode 100644
index 000000000000..7b640e102bed
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
@@ -0,0 +1,110 @@
+--- a/clang/lib/Driver/ToolChains/Gnu.cpp
++++ b/clang/lib/Driver/ToolChains/Gnu.cpp
+@@ -2083,7 +2083,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
+                                              "armv7hl-redhat-linux-gnueabi",
+                                              "armv6hl-suse-linux-gnueabi",
+-                                             "armv7hl-suse-linux-gnueabi"};
++                                             "armv7hl-suse-linux-gnueabi",
++                                             "armv7l-linux-gnueabihf"};
+   static const char *const ARMebLibDirs[] = {"/lib"};
+   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi"};
+   static const char *const ARMebHFTriples[] = {
+@@ -2151,8 +2152,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
+   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
+   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
+-                                             "powerpcle-unknown-linux-gnu",
+-                                             "powerpcle-linux-musl"};
++                                             "powerpcle-unknown-linux-gnu"};
+
+   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
+   static const char *const PPC64Triples[] = {
+@@ -2231,6 +2231,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+     return;
+   }
+
++  if (TargetTriple.isMusl()) {
++    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
++    static const char *const ARMHFMuslTriples[] = {
++        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
++    };
++    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
++    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
++    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
++    static const char *const MIPSMuslTriples[] = {
++        "mips-linux-musl", "mipsel-linux-musl",
++        "mipsel-linux-muslhf", "mips-linux-muslhf"
++    };
++    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
++    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
++    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
++    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
++
++    switch (TargetTriple.getArch()) {
++    case llvm::Triple::aarch64:
++      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      break;
++    case llvm::Triple::arm:
++      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
++      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
++        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
++      } else {
++        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
++      }
++      break;
++    case llvm::Triple::x86_64:
++      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      break;
++    case llvm::Triple::x86:
++      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      break;
++    case llvm::Triple::mips:
++      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
++      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
++      break;
++    case llvm::Triple::ppc:
++      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      break;
++    case llvm::Triple::ppcle:
++      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      break;
++    case llvm::Triple::ppc64:
++      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      break;
++    case llvm::Triple::ppc64le:
++      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      break;
++    default:
++      break;
++    }
++    TripleAliases.push_back(TargetTriple.str());
++    if (TargetTriple.str() != BiarchTriple.str())
++      BiarchTripleAliases.push_back(BiarchTriple.str());
++    return;
++  }
++
+   // Android targets should not use GNU/Linux tools or libraries.
+   if (TargetTriple.isAndroid()) {
+     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
new file mode 100644
index 000000000000..47128af79b7f
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
@@ -0,0 +1,13 @@
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -490,10 +490,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+     Loader = "ld.so.1";
+     break;
+   case llvm::Triple::ppc64:
+-    LibDir = "lib64";
+-    Loader =
+-        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
+-    break;
+   case llvm::Triple::ppc64le:
+     LibDir = "lib64";
+     Loader =
diff --git a/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
new file mode 100644
index 000000000000..21fc8003c5f1
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
@@ -0,0 +1,48 @@
+--- a/clang/lib/Basic/Targets/PPC.h
++++ b/clang/lib/Basic/Targets/PPC.h
+@@ -415,11 +415,10 @@ public:
+       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
+     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
+       DataLayout = "e-m:e-i64:64-n32:64";
+-      ABI = "elfv2";
+     } else {
+       DataLayout = "E-m:e-i64:64-n32:64";
+-      ABI = "elfv1";
+     }
++    ABI = "elfv2";
+ 
+     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
+       LongDoubleWidth = LongDoubleAlign = 64;
+--- a/clang/lib/CodeGen/TargetInfo.cpp
++++ b/clang/lib/CodeGen/TargetInfo.cpp
+@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
+       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
+ 
+     if (Triple.isOSBinFormatELF()) {
+-      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
+-      if (getTarget().getABI() == "elfv2")
+-        Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      if (getTarget().getABI() == "elfv1")
++        Kind = PPC64_SVR4_ABIInfo::ELFv1;
+       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
+ 
+       return SetCGInfo(
+--- a/clang/lib/Driver/ToolChains/Clang.cpp
++++ b/clang/lib/Driver/ToolChains/Clang.cpp
+@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
+   const llvm::Triple &T = getToolChain().getTriple();
+   if (T.isOSBinFormatELF()) {
+     switch (getToolChain().getArch()) {
+-    case llvm::Triple::ppc64: {
+-      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
+-          T.isOSOpenBSD() || T.isMusl())
+-        ABIName = "elfv2";
+-      else
+-        ABIName = "elfv1";
+-      break;
+-    }
++    case llvm::Triple::ppc64:
+     case llvm::Triple::ppc64le:
+       ABIName = "elfv2";
+       break;
diff --git a/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch b/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
new file mode 100644
index 000000000000..4135bfd4486a
--- /dev/null
+++ b/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
@@ -0,0 +1,35 @@
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
+@@ -74,6 +74,10 @@
+ #include <sys/utsname.h>
+ #endif
+
++#if SANITIZER_LINUX && defined(__powerpc__)
++#include <asm/ptrace.h>
++#endif
++
+ #if SANITIZER_LINUX && !SANITIZER_ANDROID
+ #include <sys/personality.h>
+ #endif
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
+@@ -92,7 +92,7 @@
+ # include <utime.h>
+ # include <sys/ptrace.h>
+ #    if defined(__mips64) || defined(__aarch64__) || defined(__arm__) || \
+-        defined(__hexagon__) || SANITIZER_RISCV64
++        defined(__hexagon__) || defined(__powerpc__) || SANITIZER_RISCV64
+ #      include <asm/ptrace.h>
+ #      ifdef __arm__
+ typedef struct user_fpregs elf_fpregset_t;
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
+@@ -31,7 +31,7 @@
+ #include <sys/types.h> // for pid_t
+ #include <sys/uio.h> // for iovec
+ #include <elf.h> // for NT_PRSTATUS
+-#if (defined(__aarch64__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
++#if (defined(__aarch64__) || defined(__powerpc__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
+ // GLIBC 2.20+ sys/user does not include asm/ptrace.h
+ # include <asm/ptrace.h>
+ #endif
diff --git a/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch b/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
new file mode 100644
index 000000000000..d0b61c80c897
--- /dev/null
+++ b/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
@@ -0,0 +1,62 @@
+--- a/compiler-rt/lib/xray/xray_powerpc64.inc
++++ b/compiler-rt/lib/xray/xray_powerpc64.inc
+@@ -12,7 +12,13 @@
+ 
+ #include <cstdint>
+ #include <mutex>
++#ifdef __GLIBC__
+ #include <sys/platform/ppc.h>
++#else
++#include <cctype>
++#include <cstring>
++#include <cstdlib>
++#endif
+ 
+ #include "xray_defs.h"
+ 
+@@ -20,13 +26,45 @@ namespace __xray {
+ 
+ ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
+   CPU = 0;
++#ifdef __GLIBC__
+   return __ppc_get_timebase();
++#else
++  return __builtin_ppc_get_timebase();
++#endif
+ }
+ 
+ inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
+   static std::mutex M;
+   std::lock_guard<std::mutex> Guard(M);
++#ifdef __GLIBC__
+   return __ppc_get_timebase_freq();
++#else
++  /* FIXME: a less dirty implementation? */
++  static uint64_t base;
++  if (!base) {
++    FILE *f = fopen("/proc/cpuinfo", "rb");
++    if (f) {
++      ssize_t nr;
++      /* virtually always big enough to hold the line */
++      char buf[512];
++      while (fgets(buf, sizeof(buf), f)) {
++        char *ret = strstr(buf, "timebase");
++        if (!ret) {
++          continue;
++        }
++        ret += sizeof("timebase") - 1;
++        ret = strchr(ret, ':');
++        if (!ret) {
++          continue;
++        }
++        base = strtoul(ret + 1, nullptr, 10);
++        break;
++      }
++      fclose(f);
++    }
++  }
++  return base;
++#endif
+ }
+ 
+ inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
diff --git a/srcpkgs/llvm14/patches/libcxx-musl.patch b/srcpkgs/llvm14/patches/libcxx-musl.patch
new file mode 100644
index 000000000000..bbd31ffc2cb1
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-musl.patch
@@ -0,0 +1,26 @@
+--- a/libcxx/include/locale
++++ b/libcxx/include/locale
+@@ -742,7 +742,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
+         typename remove_reference<decltype(errno)>::type __save_errno = errno;
+         errno = 0;
+         char *__p2;
++#if defined(__linux__) && !defined(__GLIBC__)
++        long long __ll = strtoll(__a, &__p2, __base);
++#else
+         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
++#endif
+         typename remove_reference<decltype(errno)>::type __current_errno = errno;
+         if (__current_errno == 0)
+             errno = __save_errno;
+@@ -782,7 +786,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
+         typename remove_reference<decltype(errno)>::type __save_errno = errno;
+         errno = 0;
+         char *__p2;
++#if defined(__linux__) && !defined(__GLIBC__)
++        unsigned long long __ll = strtoull(__a, &__p2, __base);
++#else
+         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
++#endif
+         typename remove_reference<decltype(errno)>::type __current_errno = errno;
+         if (__current_errno == 0)
+             errno = __save_errno;
diff --git a/srcpkgs/llvm14/patches/libcxx-ppc.patch b/srcpkgs/llvm14/patches/libcxx-ppc.patch
new file mode 100644
index 000000000000..7a92f8004e1c
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-ppc.patch
@@ -0,0 +1,22 @@
+This ensures `is_iec559` is defined correctly under all long double ABIs,
+including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__`
+is not defined on gcc.
+
+--- a/libcxx/include/limits
++++ b/libcxx/include/limits
+@@ -426,8 +426,14 @@ protected:
+     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
+     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
+ 
+-#if (defined(__ppc__) || defined(__ppc64__))
++#if defined(__powerpc__) || defined(__powerpc64__)
++#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__)
++    /* IEEE 754 quadruple or double precision */
++    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
++#else
++    /* 128-bit IBM double-double */
+     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
++#endif
+ #else
+     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
+ #endif
diff --git a/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch b/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
new file mode 100644
index 000000000000..70292beb2fcd
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
@@ -0,0 +1,11 @@
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -769,6 +769,8 @@ function(cxx_link_system_libraries target)
+     target_link_libraries(${target} PRIVATE atomic)
+   endif()
+ 
++#ssp  target_link_libraries(${target} PRIVATE ssp_nonshared)
++
+   if (MINGW)
+     target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
+   endif()
diff --git a/srcpkgs/llvm14/patches/libcxxabi-dl.patch b/srcpkgs/llvm14/patches/libcxxabi-dl.patch
new file mode 100644
index 000000000000..3a15f9db8c98
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxxabi-dl.patch
@@ -0,0 +1,25 @@
+Also link to -ldl to prevent undefined references.
+
+--- a/libcxxabi/src/CMakeLists.txt
++++ b/libcxxabi/src/CMakeLists.txt
+@@ -73,6 +73,7 @@
+   endif()
+ 
+   add_library_flags_if(LIBCXXABI_HAS_C_LIB c)
++  add_library_flags_if(LIBCXXABI_HAS_C_LIB dl)
+ endif()
+ 
+ if (LIBCXXABI_USE_LLVM_UNWINDER)
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -745,6 +745,10 @@
+     target_link_libraries(${target} PRIVATE m)
+   endif()
+ 
++  if (LIBCXX_HAS_C_LIB)
++    target_link_libraries(${target} PRIVATE dl)
++  endif()
++
+   if (LIBCXX_HAS_RT_LIB)
+     target_link_libraries(${target} PRIVATE rt)
+   endif()
diff --git a/srcpkgs/llvm14/patches/lldb-musl.patch b/srcpkgs/llvm14/patches/lldb-musl.patch
new file mode 100644
index 000000000000..601c0d138523
--- /dev/null
+++ b/srcpkgs/llvm14/patches/lldb-musl.patch
@@ -0,0 +1,31 @@
+--- a/lldb/source/Plugins/Process/Linux/Procfs.h
++++ b/lldb/source/Plugins/Process/Linux/Procfs.h
+@@ -10,21 +10,12 @@
+ // sys/procfs.h on Android/Linux for all supported architectures.
+ 
+ #include <sys/ptrace.h>
++#include <asm/ptrace.h>
+ 
+-#ifdef __ANDROID__
+-#if defined(__arm64__) || defined(__aarch64__)
+-typedef unsigned long elf_greg_t;
+-typedef elf_greg_t
+-    elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
+-typedef struct user_fpsimd_state elf_fpregset_t;
+-#ifndef NT_FPREGSET
+-#define NT_FPREGSET NT_PRFPREG
+-#endif // NT_FPREGSET
+-#elif defined(__mips__)
+-#ifndef NT_FPREGSET
+-#define NT_FPREGSET NT_PRFPREG
+-#endif // NT_FPREGSET
+-#endif
+-#else // __ANDROID__
++#if !defined(__GLIBC__) && defined(__powerpc__)
++#define pt_regs musl_pt_regs
++#include <sys/procfs.h>
++#undef pt_regs
++#else
+ #include <sys/procfs.h>
+-#endif // __ANDROID__
++#endif
diff --git a/srcpkgs/llvm14/patches/llvm-001-musl.patch b/srcpkgs/llvm14/patches/llvm-001-musl.patch
new file mode 100644
index 000000000000..f2a3f8d62813
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-001-musl.patch
@@ -0,0 +1,57 @@
+From faca3fbd15d0c3108493c3c54cd93138e049ac43 Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe@gmail.com>
+Date: Tue, 8 Sep 2015 22:03:02 +0200
+Subject: [PATCH 3/3] musl
+
+---
+ include/llvm/Analysis/TargetLibraryInfo.h | 9 +++++++++
+ lib/Support/DynamicLibrary.cpp            | 2 +-
+ lib/Support/Unix/Signals.inc              | 6 +++---
+ utils/unittest/googletest/src/gtest.cc    | 1 +
+ 5 files changed, 17 insertions(+), 6 deletions(-)
+
+diff --git a/include/llvm/Analysis/TargetLibraryInfo.h b/include/llvm/Analysis/TargetLibraryInfo.h
+index 34a8a1e3..1214ece5 100644
+--- a/llvm/include/llvm/Analysis/TargetLibraryInfo.h
++++ b/llvm/include/llvm/Analysis/TargetLibraryInfo.h
+@@ -18,6 +18,15 @@
+ #include "llvm/IR/PassManager.h"
+ #include "llvm/Pass.h"
+ 
++#undef fopen64
++#undef fseeko64
++#undef fstat64
++#undef fstatvfs64
++#undef ftello64
++#undef lstat64
++#undef stat64
++#undef tmpfile64
++
+ namespace llvm {
+ template <typename T> class ArrayRef;
+ class Triple;
+diff --git a/lib/Support/Unix/DynamicLibrary.inc b/lib/Support/Unix/DynamicLibrary.inc
+index a2a37996..2f86c470 100644
+--- a/llvm/lib/Support/Unix/DynamicLibrary.inc
++++ b/llvm/lib/Support/Unix/DynamicLibrary.inc
+@@ -102,7 +102,7 @@ static void *DoSearch(const char* SymbolName) {
+ 
+ // This macro returns the address of a well-known, explicit symbol
+ #define EXPLICIT_SYMBOL(SYM) \
+-   if (!strcmp(SymbolName, #SYM)) return &SYM
++   if (!strcmp(SymbolName, #SYM)) return (void *)&SYM
+ 
+ // Under glibc we have a weird situation. The stderr/out/in symbols are both
+ // macros and global variables because of standards requirements. So, we
+diff --git a/utils/unittest/googletest/src/gtest.cc b/utils/unittest/googletest/src/gtest.cc
+index d882ab2e..f1fb12d0 100644
+--- a/llvm/utils/unittest/googletest/src/gtest.cc
++++ b/llvm/utils/unittest/googletest/src/gtest.cc
+@@ -128,6 +128,7 @@
+ 
+ #if GTEST_CAN_STREAM_RESULTS_
+ # include <arpa/inet.h>  // NOLINT
++# include <sys/socket.h>  // NOLINT
+ # include <netdb.h>  // NOLINT
+ # include <sys/socket.h>  // NOLINT
+ # include <sys/types.h>  // NOLINT
diff --git a/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch b/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
new file mode 100644
index 000000000000..0071d964bd37
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
@@ -0,0 +1,30 @@
+This patches LLVM to use ELFv2 on ppc64 unconditionally unless overridden. We
+need this because unlike most distros we use ELFv2 for both glibc and musl
+on big endian ppc64.
+
+diff --git a/lib/Target/PowerPC/PPCTargetMachine.cpp b/lib/Target/PowerPC/PPCTargetMachine.cpp
+index 0634833e..b7cbc2e7 100644
+--- a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
++++ b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
+@@ -222,9 +222,8 @@ static PPCTargetMachine::PPCABI computeTargetABI(const Triple &TT,
+ 
+   switch (TT.getArch()) {
+   case Triple::ppc64le:
+-    return PPCTargetMachine::PPC_ABI_ELFv2;
+   case Triple::ppc64:
+-    return PPCTargetMachine::PPC_ABI_ELFv1;
++    return PPCTargetMachine::PPC_ABI_ELFv2;
+   default:
+     return PPCTargetMachine::PPC_ABI_UNKNOWN;
+   }
+diff --git a/test/CodeGen/PowerPC/ppc64-elf-abi.ll b/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+index 8b1cf6b5..296a2afa 100644
+--- a/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
++++ b/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+@@ -1,4 +1,5 @@
+-; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv1
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-musl < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv1 < %s | FileCheck %s -check-prefix=CHECK-ELFv1
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv2 < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
diff --git a/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch b/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
new file mode 100644
index 000000000000..b5d15974375d
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
@@ -0,0 +1,11 @@
+--- a/llvm/lib/Target/PowerPC/PPCSubtarget.cpp
++++ b/llvm/lib/Target/PowerPC/PPCSubtarget.cpp
+@@ -165,7 +165,7 @@ void PPCSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) {
+ 
+   if ((TargetTriple.isOSFreeBSD() && TargetTriple.getOSMajorVersion() >= 13) ||
+       TargetTriple.isOSNetBSD() || TargetTriple.isOSOpenBSD() ||
+-      TargetTriple.isMusl())
++      isTargetLinux())
+     SecurePlt = true;
+ 
+   if (HasSPE && IsPPC64)
diff --git a/srcpkgs/llvm14/patches/llvm-004-override-opt.patch b/srcpkgs/llvm14/patches/llvm-004-override-opt.patch
new file mode 100644
index 000000000000..51d0e4b31b32
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-004-override-opt.patch
@@ -0,0 +1,18 @@
+This allows us to override the optimization level as not all platforms can
+deal with -O3.
+
+--- a/llvm/CMakeLists.txt
++++ b/llvm/CMakeLists.txt
+@@ -918,6 +918,12 @@ if( MINGW AND NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" )
+   llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "-O2")
+ endif()
+ 
++set(VOID_CXX_OPT_FLAGS "" CACHE STRING "Optimization level to use")
++
++if (NOT VOID_CXX_OPT_FLAGS STREQUAL "")
++    llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "${VOID_CXX_OPT_FLAGS}")
++endif()
++
+ # Put this before tblgen. Else we have a circular dependence.
+ add_subdirectory(lib/Demangle)
+ add_subdirectory(lib/Support)
diff --git a/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch b/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
new file mode 100644
index 000000000000..d332687b9d92
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
@@ -0,0 +1,36 @@
+From f3dbdd49c06bfafc1d6138094cf42889c14d38b6 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Sun, 3 Nov 2019 10:57:27 -0600
+Subject: [PATCH] [LLVM][PowerPC] Assume BigPIC if no PIC level is specified
+
+---
+ llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp  | 2 +-
+ llvm/lib/Target/PowerPC/PPCMCInstLower.cpp | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/Target/PowerPC/PPCAsmPrinter.cpp b/lib/Target/PowerPC/PPCAsmPrinter.cpp
+index cce21f32..87ca5f9b 100644
+--- a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
++++ b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
+@@ -520,7 +520,7 @@ void PPCAsmPrinter::EmitTlsCall(const MachineInstr *MI,
+ 
+   // Add 32768 offset to the symbol so we follow up the latest GOT/PLT ABI.
+   if (Kind == MCSymbolRefExpr::VK_PLT && Subtarget->isSecurePlt() &&
+-      M->getPICLevel() == PICLevel::BigPIC)
++      M->getPICLevel() != PICLevel::SmallPIC)
+     TlsRef = MCBinaryExpr::createAdd(
+         TlsRef, MCConstantExpr::create(32768, OutContext), OutContext);
+   const MachineOperand &MO = MI->getOperand(2);
+diff --git a/lib/Target/PowerPC/PPCMCInstLower.cpp b/lib/Target/PowerPC/PPCMCInstLower.cpp
+index 5cc180d7..a5b02565 100644
+--- a/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
++++ b/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
+@@ -117,7 +117,7 @@ static MCOperand GetSymbolRef(const MachineOperand &MO, const MCSymbol *Symbol,
+   const MCExpr *Expr = MCSymbolRefExpr::create(Symbol, RefKind, Ctx);
+   // If -msecure-plt -fPIC, add 32768 to symbol.
+   if (Subtarget->isSecurePlt() && TM.isPositionIndependent() &&
+-      M->getPICLevel() == PICLevel::BigPIC &&
++      M->getPICLevel() != PICLevel::SmallPIC &&
+       MO.getTargetFlags() == PPCII::MO_PLT)
+     Expr =
+         MCBinaryExpr::createAdd(Expr, MCConstantExpr::create(32768, Ctx), Ctx);
diff --git a/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch b/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
new file mode 100644
index 000000000000..a00abd216665
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
@@ -0,0 +1,25 @@
+Fix failures in AllocationTests/MappedMemoryTest.* on aarch64:
+
+    Failing Tests (8):
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.AllocAndRelease/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.DuplicateNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.EnabledWrite/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.MultipleAllocAndRelease/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.SuccessiveNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.UnalignedNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.ZeroNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.ZeroSizeNear/3
+
+Upstream-Issue: https://bugs.llvm.org/show_bug.cgi?id=14278#c10
+
+--- a/llvm/lib/Support/Unix/Memory.inc
++++ b/llvm/lib/Support/Unix/Memory.inc
+@@ -58,7 +58,7 @@ static int getPosixProtectionFlags(unsigned Flags) {
+     return PROT_READ | PROT_WRITE | PROT_EXEC;
+   case llvm::sys::Memory::MF_EXEC:
+ #if (defined(__FreeBSD__) || defined(__POWERPC__) || defined (__ppc__) || \
+-     defined(_POWER) || defined(_ARCH_PPC))
++     defined(_POWER) || defined(_ARCH_PPC) || (defined(__linux__) && defined(__aarch64__)))
+     // On PowerPC, having an executable page that has no read permission
+     // can have unintended consequences.  The function InvalidateInstruction-
+     // Cache uses instructions dcbf and icbi, both of which are treated by
diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
new file mode 100644
index 000000000000..3e7e6ab2c00b
--- /dev/null
+++ b/srcpkgs/llvm14/template
@@ -0,0 +1,424 @@
+# Template file for 'llvm14'
+pkgname=llvm14
+version=14.0.3
+revision=1
+wrksrc="llvm-project-${version}.src"
+build_wrksrc=llvm
+build_style=cmake
+configure_args="
+ -DCMAKE_BUILD_TYPE=Release -Wno-dev
+ -DENABLE_LINKER_BUILD_ID=YES
+ -DLLDB_USE_SYSTEM_SIX=YES
+ -DLIBCXX_CXX_ABI=libcxxabi
+ -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
+ -DLIBCXXABI_USE_LLVM_UNWINDER=YES
+ -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
+ -DLIBOMP_ENABLE_SHARED=YES
+ -DLIBOMP_INSTALL_ALIASES=NO
+ -DLLVM_INCLUDE_DOCS=YES
+ -DLLVM_BUILD_DOCS=YES
+ -DLLVM_ENABLE_SPHINX=YES
+ -DSPHINX_WARNINGS_AS_ERRORS=NO
+ -DLLVM_INSTALL_UTILS=YES
+ -DLLVM_BUILD_LLVM_DYLIB=YES
+ -DLLVM_LINK_LLVM_DYLIB=YES
+ -DLLVM_ENABLE_RTTI=YES
+ -DLLVM_ENABLE_FFI=YES
+ -DLLVM_BINUTILS_INCDIR=/usr/include"
+hostmakedepends="perl python3 zlib-devel libffi-devel swig python3-Sphinx
+ python3-recommonmark python3-sphinx-automodapi"
+makedepends="python3-devel zlib-devel elfutils-devel libffi-devel libedit-devel
+ libxml2-devel binutils-devel libatomic-devel"
+depends="libllvm14>=${version}_${revision}"
+short_desc="Low Level Virtual Machine"
+maintainer="q66 <daniel@octaforge.org>"
+license="Apache-2.0"
+homepage="https://www.llvm.org"
+distfiles="https://github.com/llvm/llvm-project/releases/download/llvmorg-${version}/llvm-project-${version}.src.tar.xz"
+checksum=44d3e7a784d5cf805e72853bb03f218bd1058d448c03ca883dabbebc99204e0c
+lib32disabled=yes
+python_version=3
+
+if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+	configure_args+=" -DLIBCXX_HAS_MUSL_LIBC=YES"
+	makedepends+=" libexecinfo-devel"
+	depends+=" libexecinfo-devel"
+fi
+
+# "operand out of range" assembler failures
+case "$XBPS_TARGET_MACHINE" in
+	ppc64*) ;;
+	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
+esac
+
+_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
+
+_lldb_enable=yes
+_libomp_enable=no
+
+case "$XBPS_TARGET_MACHINE" in
+	ppc64le*) ;;
+	ppc*|i686*) _lldb_enable=no ;;
+esac
+
+case "$XBPS_TARGET_MACHINE" in
+	x86_64*|aarch64*|ppc64*) _libomp_enable=yes;;
+esac
+
+subpackages="clang-tools-extra"
+
+# must go before clang
+if [ "$_libomp_enable" = "yes" ]; then
+	_enabled_projects+=";openmp"
+	subpackages+=" libomp libomp-devel"
+	# because of cmake nonsense referencing libomptarget.so.*
+	depends+=" libomp>=${version}_${revision}"
+fi
+
+subpackages+=" clang clang-analyzer libclang libclang-cpp
+ llvm-libunwind llvm-libunwind-devel libcxx libcxx-devel
+ libcxxabi libcxxabi-devel libllvm14"
+
+if [ "$_lldb_enable" = "yes" ]; then
+	# XXX fails to cross compile due to python
+	_enabled_projects+=";lldb"
+	subpackages+=" lldb lldb-devel"
+fi
+
+subpackages+=" lld lld-devel"
+
+configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+
+post_patch() {
+	if [ "$_lldb_enable" = "yes" ]; then
+		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+			vsed -i 's|__ptrace_request|int|g' \
+				${wrksrc}/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
+		fi
+		# disable docs for lldb as they fail to generate
+		vsed -i '/add_subdirectory(docs)/d' \
+			${wrksrc}/lldb/CMakeLists.txt
+	fi
+
+	# update config.guess for better platform detection
+	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
+		${wrksrc}/llvm/cmake
+
+	# fix linker failures on some archs
+	vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
+		${wrksrc}/libcxxabi/cmake/config-ix.cmake
+	vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
+		${wrksrc}/libcxxabi/cmake/config-ix.cmake
+
+	# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*) ;;
+		ppc*-musl|i686-musl|mips*-musl)
+			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
+				${wrksrc}/libunwind/src/CMakeLists.txt
+			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
+				${wrksrc}/libcxxabi/src/CMakeLists.txt
+			vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
+			;;
+	esac
+
+	case "$XBPS_TARGET_MACHINE" in
+		x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
+			vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
+				${wrksrc}/compiler-rt/CMakeLists.txt
+			;;
+		arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
+			vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
+				${wrksrc}/compiler-rt/cmake/config-ix.cmake
+			;;
+	esac
+}
+
+pre_configure() {
+	local triplet
+
+	# Vastly reduce size of debugging symbols:
+	CFLAGS=${CFLAGS/ -g/ -g1}
+	CXXFLAGS=${CXXFLAGS/ -g/ -g1}
+
+	# since gcc9, the build likes to blow up for ppc32 apparently because
+	# of clang being too large for a 24-bit relative call to the PLT, so
+	# optimize for size instead
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*) ;;
+		mips*-musl|ppc*) configure_args+=" -DVOID_CXX_OPT_FLAGS=-Os" ;;
+	esac
+
+	if [ "$CROSS_BUILD" ]; then
+		msg_normal "Building host tblgen\n"
+		mkdir -p build/HOST
+		cd build/HOST
+		CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
+			CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
+			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
+			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
+		make ${makejobs} -C utils/TableGen
+		make ${makejobs} -C tools/clang/utils/TableGen
+		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
+		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
+		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
+		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
+		cd ../..
+	fi
+
+	case "$XBPS_TARGET_MACHINE" in
+		i686*) _arch="X86";;
+		x86_64*) _arch="X86";;
+		armv5*) _arch="Armv5te";;
+		armv6*) _arch="Armv6";;
+		armv7*) _arch="Armv7";;
+		aarch64*) _arch="AArch64";;
+		mips*) _arch="Mips";;
+		ppc*) _arch="PowerPC";;
+		riscv64*) _arch="RISCV64";;
+	esac
+
+	triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
+
+	configure_args+=" -DLLVM_TARGET_ARCH=${_arch}"
+	configure_args+=" -DLLVM_HOST_TRIPLE=${triplet}"
+	configure_args+=" -DLLVM_DEFAULT_TARGET_TRIPLE=${triplet}"
+}
+
+do_install() {
+	cd build
+	cmake -DCMAKE_INSTALL_PREFIX=${DESTDIR}/usr -P cmake_install.cmake
+
+	# Required for multilib.
+	if [ "$XBPS_TARGET_MACHINE" = "x86_64" ]; then
+		for _header in llvm-config; do
+			mv ${DESTDIR}/usr/include/llvm/Config/${_header}{,-64}.h
+			vinstall ${FILESDIR}/llvm-Config-${_header}.h 644 \
+				usr/include/llvm/Config ${_header}.h
+		done
+	fi
+
+	# Remove llvm-config-host in cross builds.
+	if [ "$CROSS_BUILD" ]; then
+		rm -f ${DESTDIR}/usr/bin/llvm-config-host
+	fi
+
+	# Install libcxxabi headers
+	vinstall ${wrksrc}/libcxxabi/include/__cxxabi_config.h 644 usr/include
+	vinstall ${wrksrc}/libcxxabi/include/cxxabi.h 644 usr/include
+
+	# Install libunwind headers
+	vinstall ${wrksrc}/libunwind/include/__libunwind_config.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/libunwind.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/unwind.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/mach-o/compact_unwind_encoding.h \
+		644 usr/include/mach-o
+}
+
+clang-analyzer_package() {
+	pycompile_dirs="usr/share/scan-view"
+	depends="clang-${version}_${revision} python3 perl"
+	short_desc+=" - A source code analysis framework"
+	homepage="https://clang-analyzer.llvm.org/"
+	pkg_install() {
+		vmove usr/share/man/man1/scan-build.1
+		vmove "/usr/bin/scan-*"
+		vmove "/usr/share/scan-*"
+		vmove "/usr/libexec/*analyzer"
+	}
+}
+
+clang-tools-extra_package() {
+	lib32disabled=yes
+	depends="clang-${version}_${revision} python3"
+	short_desc+=" - Extra Clang tools"
+	homepage="https://clang.llvm.org/extra/"
+	pkg_install() {
+		vmove usr/include/clang-tidy
+		vmove usr/bin/clang-apply-replacements
+		vmove usr/bin/clang-query
+		vmove usr/bin/clang-rename
+		vmove usr/bin/clang-tidy
+		vmove usr/bin/diagtool
+		vmove usr/bin/find-all-symbols
+		vmove usr/bin/hmaptool
+		vmove usr/bin/modularize
+		vmove usr/bin/pp-trace
+		vmove usr/bin/sancov
+		vmove "usr/lib/libclangApplyReplacements*"
+		vmove "usr/lib/libclangQuery*"
+		vmove "usr/lib/libclangTidy*"
+		vmove "usr/share/clang/*tidy*"
+		vmove usr/share/doc/clang-tools
+		vmove usr/share/man/man1/extraclangtools.1
+		vmove usr/share/man/man1/diagtool.1
+	}
+}
+
+clang_package() {
+	lib32disabled=yes
+	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
+	 libclang-${version}_${revision}"
+	short_desc+=" - C language family frontend"
+	homepage="https://clang.llvm.org/"
+	pkg_install() {
+		vmove usr/include/clang
+		vmove usr/include/clang-c
+		vmove "usr/bin/*clang*"
+		vmove usr/bin/c-index-test
+		vmove usr/lib/clang
+		vmove usr/lib/cmake/clang
+		vmove "usr/lib/libclang*.a"
+		vmove "usr/lib/libclang*.so"
+		vmove usr/share/clang
+		vmove usr/share/doc/clang
+		vmove usr/share/man/man1/clang.1
+	}
+}
+
+libclang_package() {
+	short_desc+=" - C frontend runtime library"
+	pkg_install() {
+		vmove "usr/lib/libclang.so.*"
+	}
+}
+
+libclang-cpp_package() {
+	short_desc+=" - C frontend runtime library (C++ interface)"
+	pkg_install() {
+		vmove "usr/lib/libclang-cpp.so.*"
+	}
+}
+
+lld_package() {
+	lib32disabled=yes
+	short_desc+=" - linker"
+	homepage="https://lld.llvm.org"
+	pkg_install() {
+		vmove usr/bin/lld*
+		vmove usr/bin/wasm-ld
+		vmove usr/bin/ld.lld*
+		vmove usr/bin/ld64.lld*
+		vmove usr/share/doc/lld
+	}
+}
+
+lld-devel_package() {
+	lib32disabled=yes
+	short_desc+=" - linker - development files"
+	homepage="https://lld.llvm.org"
+	depends="lld>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include/lld
+		vmove usr/lib/cmake/lld
+		vmove "usr/lib/liblld*a"
+	}
+}
+
+lldb_package() {
+	lib32disabled=yes
+	depends+=" python3-six"
+	short_desc+=" - LLDB debugger"
+	homepage="https://lldb.llvm.org/"
+	pkg_install() {
+		vmove usr/bin/*lldb*
+		vmove usr/lib/liblldb*so.*
+		vmove /usr/lib/python*
+	}
+}
+
+lldb-devel_package() {
+	lib32disabled=yes
+	depends="lldb>=${version}_${revision}"
+	short_desc+=" - LLDB debugger - development files"
+	pkg_install() {
+		vmove usr/include/lldb
+		vmove "usr/lib/liblldb*.so"
+	}
+}
+
+llvm-libunwind_package() {
+	short_desc+=" - libunwind"
+	pkg_install() {
+		vmove "usr/lib/libunwind.so.*"
+	}
+}
+
+llvm-libunwind-devel_package() {
+	short_desc+=" - libunwind - development files"
+	depends="llvm-libunwind>=${version}_${revision}"
+	conflicts="libunwind-devel>=0"
+	pkg_install() {
+		vmove usr/lib/libunwind.so
+		vmove usr/lib/libunwind.a
+		vmove "usr/include/*unwind*"
+		vmove usr/include/mach-o
+		vmove usr/share/doc/libunwind
+	}
+}
+
+libcxxabi_package() {
+	short_desc+=" - low level support for libc++"
+	pkg_install() {
+		vmove "usr/lib/libc++abi.so.*"
+	}
+}
+
+libcxxabi-devel_package() {
+	short_desc+=" - low level support for libc++ - development files"
+	depends="libcxxabi>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/lib/libc++abi.so
+		vmove usr/lib/libc++abi.a
+		vmove "usr/include/*cxxabi*"
+	}
+}
+
+libcxx_package() {
+	short_desc+=" - C++ standard library"
+	pkg_install() {
+		vmove "usr/lib/libc++.so.*"
+	}
+}
+
+libcxx-devel_package() {
+	short_desc+=" - C++ standard library - development files"
+	depends="libcxx>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/lib/libc++.so
+		vmove usr/lib/libc++.a
+		vmove usr/lib/libc++experimental.a
+		vmove usr/include/c++
+		vmove usr/share/doc/libcxx
+	}
+}
+
+libomp_package() {
+	short_desc+=" - Clang OpenMP support library"
+	pkg_install() {
+		vmove usr/lib/libomp.so
+		vmove "usr/lib/libomptarget.rtl.*.so"
+		vmove usr/lib/libarcher.so
+		vmove "usr/lib/libomp*.so.*"
+	}
+}
+
+libomp-devel_package() {
+	short_desc+=" - Clang OpenMP support library - development files"
+	depends="libomp>=${version}_${revision}"
+	pkg_install() {
+		vmove "usr/lib/libomp*.so"
+		vmove "usr/lib/libarcher*"
+		vmove "usr/include/omp*.h"
+		vmove "usr/lib/clang/${version}/include/omp*.h"
+		vmove usr/share/man/man1/llvmopenmp.1
+		vmove usr/share/doc/openmp
+	}
+}
+
+libllvm14_package() {
+	short_desc+=" - runtime library"
+	pkg_install() {
+		vmove "usr/lib/libLLVM-*.so*"
+	}
+}
diff --git a/srcpkgs/llvm14/update b/srcpkgs/llvm14/update
new file mode 100644
index 000000000000..e95cf26b3586
--- /dev/null
+++ b/srcpkgs/llvm14/update
@@ -0,0 +1,3 @@
+site="https://github.com/llvm/llvm-project/releases"
+pattern="llvmorg-\K(\d+.){2}\d+(-rc\d+)?"
+ignore="*-rc*"

From 8438d62e818f41e2c2663bb6ed0e30d730118cad Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:16:07 +0200
Subject: [PATCH 02/29] llvm: update to 14.0.3.

---
 srcpkgs/llvm/template | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/llvm/template b/srcpkgs/llvm/template
index a92db6f94f9f..d226c61c734e 100644
--- a/srcpkgs/llvm/template
+++ b/srcpkgs/llvm/template
@@ -1,10 +1,10 @@
 # Template file for 'llvm'
 pkgname=llvm
-version=12.0.0
+version=14.0.3
 revision=1
 build_style=meta
-depends="llvm12"
-replaces="llvm11>=0 llvm10>=0 llvm9>=0 llvm8>=0 llvm7>=0 llvm6.0>=0 llvm3.9>=0"
+depends="llvm14"
+replaces="llvm13>=0 llvm12>=0 llvm11>=0 llvm10>=0 llvm9>=0 llvm8>=0 llvm7>=0 llvm6.0>=0 llvm3.9>=0"
 short_desc="LLVM meta package"
 maintainer="Enno Boland <gottox@voidlinux.org>"
 license="Public Domain"

From 92edaa1759b7b52e98fd6a3adf5a761334849304 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:36:32 +0200
Subject: [PATCH 03/29] llvm12: drop non-llvm components

---
 ...clang-001-fix-unwind-chain-inclusion.patch |  44 ---
 .../patches/clang-002-add-musl-triples.patch  | 110 -------
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 -
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ---
 .../compiler-rt-aarch64-ucontext.patch        |  11 -
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 --
 .../llvm12/patches/compiler-rt-size_t.patch   |  10 -
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 ----
 srcpkgs/llvm12/patches/libcxx-musl.patch      |  26 --
 srcpkgs/llvm12/patches/libcxx-ppc.patch       |  22 --
 .../llvm12/patches/libcxx-ssp-nonshared.patch |  11 -
 srcpkgs/llvm12/patches/libcxxabi-dl.patch     |  25 --
 srcpkgs/llvm12/patches/libunwind-ppc32.patch  |  63 ----
 srcpkgs/llvm12/patches/lldb-musl.patch        |  31 --
 .../llvm12/patches/ppc32-compiler-rt.patch    |  21 --
 srcpkgs/llvm12/template                       | 301 +-----------------
 16 files changed, 1 insertion(+), 832 deletions(-)
 delete mode 100644 srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-size_t.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-ppc.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxxabi-dl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libunwind-ppc32.patch
 delete mode 100644 srcpkgs/llvm12/patches/lldb-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/ppc32-compiler-rt.patch

diff --git a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
deleted file mode 100644
index e4eaa7783e7a..000000000000
--- a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 352974169f0d2b5da3d5321f588f5e3b5941330e Mon Sep 17 00:00:00 2001
-From: Andrea Brancaleoni <miwaxe@gmail.com>
-Date: Tue, 8 Sep 2015 22:14:57 +0200
-Subject: [PATCH 2/7] fix unwind chain inclusion
-
----
- lib/Headers/unwind.h | 9 +++++----
- 1 file changed, 5 insertions(+), 4 deletions(-)
-
-diff --git a/lib/Headers/unwind.h b/lib/Headers/unwind.h
-index 303d792..44e10cc 100644
---- a/clang/lib/Headers/unwind.h
-+++ b/clang/lib/Headers/unwind.h
-@@ -9,9 +9,6 @@
- 
- /* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/
- 
--#ifndef __CLANG_UNWIND_H
--#define __CLANG_UNWIND_H
--
- #if defined(__APPLE__) && __has_include_next(<unwind.h>)
- /* Darwin (from 11.x on) provide an unwind.h. If that's available,
-  * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE,
-@@ -39,6 +36,9 @@
- # endif
- #else
- 
-+#ifndef __CLANG_UNWIND_H
-+#define __CLANG_UNWIND_H
-+
- #include <stdint.h>
- 
- #ifdef __cplusplus
-@@ -322,6 +322,7 @@ _Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *);
- }
- #endif
- 
-+#endif /* __CLANG_UNWIND_H */
-+
- #endif
- 
--#endif /* __CLANG_UNWIND_H */
--- 
-2.5.1
diff --git a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
deleted file mode 100644
index 25688d40dbc2..000000000000
--- a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
+++ /dev/null
@@ -1,110 +0,0 @@
---- a/clang/lib/Driver/ToolChains/Gnu.cpp
-+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
-@@ -2086,7 +2086,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
-                                              "armv7hl-redhat-linux-gnueabi",
-                                              "armv6hl-suse-linux-gnueabi",
--                                             "armv7hl-suse-linux-gnueabi"};
-+                                             "armv7hl-suse-linux-gnueabi",
-+                                             "armv7l-linux-gnueabihf"};
-   static const char *const ARMebLibDirs[] = {"/lib"};
-   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
-                                              "armeb-linux-androideabi"};
-@@ -2153,8 +2154,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
-   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
-   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
--                                             "powerpcle-unknown-linux-gnu",
--                                             "powerpcle-linux-musl"};
-+                                             "powerpcle-unknown-linux-gnu"};
- 
-   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
-   static const char *const PPC64Triples[] = {
-@@ -2235,6 +2235,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-     return;
-   }
- 
-+  if (TargetTriple.isMusl()) {
-+    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
-+    static const char *const ARMHFMuslTriples[] = {
-+        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
-+    };
-+    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
-+    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
-+    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
-+    static const char *const MIPSMuslTriples[] = {
-+        "mips-linux-musl", "mipsel-linux-musl",
-+        "mipsel-linux-muslhf", "mips-linux-muslhf"
-+    };
-+    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
-+    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
-+    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
-+    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
-+
-+    switch (TargetTriple.getArch()) {
-+    case llvm::Triple::aarch64:
-+      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
-+      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
-+      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
-+      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
-+      break;
-+    case llvm::Triple::arm:
-+      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
-+      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
-+        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
-+      } else {
-+        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
-+      }
-+      break;
-+    case llvm::Triple::x86_64:
-+      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-+      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
-+      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-+      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
-+      break;
-+    case llvm::Triple::x86:
-+      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-+      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
-+      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-+      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
-+      break;
-+    case llvm::Triple::mips:
-+      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
-+      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
-+      break;
-+    case llvm::Triple::ppc:
-+      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
-+      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
-+      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
-+      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
-+      break;
-+    case llvm::Triple::ppcle:
-+      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
-+      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
-+      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
-+      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
-+      break;
-+    case llvm::Triple::ppc64:
-+      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
-+      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
-+      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
-+      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
-+      break;
-+    case llvm::Triple::ppc64le:
-+      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
-+      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
-+      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
-+      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
-+      break;
-+    default:
-+      break;
-+    }
-+    TripleAliases.push_back(TargetTriple.str());
-+    if (TargetTriple.str() != BiarchTriple.str())
-+      BiarchTripleAliases.push_back(BiarchTriple.str());
-+    return;
-+  }
-+
-   // Android targets should not use GNU/Linux tools or libraries.
-   if (TargetTriple.isAndroid()) {
-     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
deleted file mode 100644
index 4ad6412d1e6c..000000000000
--- a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/clang/lib/Driver/ToolChains/Linux.cpp
-+++ b/clang/lib/Driver/ToolChains/Linux.cpp
-@@ -504,10 +504,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
-     Loader = "ld.so.1";
-     break;
-   case llvm::Triple::ppc64:
--    LibDir = "lib64";
--    Loader =
--        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
--    break;
-   case llvm::Triple::ppc64le:
-     LibDir = "lib64";
-     Loader =
diff --git a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
deleted file mode 100644
index 21fc8003c5f1..000000000000
--- a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
+++ /dev/null
@@ -1,48 +0,0 @@
---- a/clang/lib/Basic/Targets/PPC.h
-+++ b/clang/lib/Basic/Targets/PPC.h
-@@ -415,11 +415,10 @@ public:
-       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
-     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
-       DataLayout = "e-m:e-i64:64-n32:64";
--      ABI = "elfv2";
-     } else {
-       DataLayout = "E-m:e-i64:64-n32:64";
--      ABI = "elfv1";
-     }
-+    ABI = "elfv2";
- 
-     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
-       LongDoubleWidth = LongDoubleAlign = 64;
---- a/clang/lib/CodeGen/TargetInfo.cpp
-+++ b/clang/lib/CodeGen/TargetInfo.cpp
-@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
-       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
- 
-     if (Triple.isOSBinFormatELF()) {
--      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
--      if (getTarget().getABI() == "elfv2")
--        Kind = PPC64_SVR4_ABIInfo::ELFv2;
-+      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
-+      if (getTarget().getABI() == "elfv1")
-+        Kind = PPC64_SVR4_ABIInfo::ELFv1;
-       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
- 
-       return SetCGInfo(
---- a/clang/lib/Driver/ToolChains/Clang.cpp
-+++ b/clang/lib/Driver/ToolChains/Clang.cpp
-@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
-   const llvm::Triple &T = getToolChain().getTriple();
-   if (T.isOSBinFormatELF()) {
-     switch (getToolChain().getArch()) {
--    case llvm::Triple::ppc64: {
--      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
--          T.isOSOpenBSD() || T.isMusl())
--        ABIName = "elfv2";
--      else
--        ABIName = "elfv1";
--      break;
--    }
-+    case llvm::Triple::ppc64:
-     case llvm::Triple::ppc64le:
-       ABIName = "elfv2";
-       break;
diff --git a/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch b/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
deleted file mode 100644
index 893c059d7b8d..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp.orig
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-@@ -1799,7 +1799,7 @@
- 
- static bool Aarch64GetESR(ucontext_t *ucontext, u64 *esr) {
-   static const u32 kEsrMagic = 0x45535201;
--  u8 *aux = ucontext->uc_mcontext.__reserved;
-+  u8 *aux = reinterpret_cast<u8 *>(ucontext->uc_mcontext.__reserved);
-   while (true) {
-     _aarch64_ctx *ctx = (_aarch64_ctx *)aux;
-     if (ctx->size == 0) break;
diff --git a/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch b/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
deleted file mode 100644
index 35f16d24f340..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
+++ /dev/null
@@ -1,35 +0,0 @@
---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-@@ -74,6 +74,10 @@
- #include <sys/utsname.h>
- #endif
- 
-+#if SANITIZER_LINUX && defined(__powerpc__)
-+#include <asm/ptrace.h>
-+#endif
-+
- #if SANITIZER_LINUX && !SANITIZER_ANDROID
- #include <sys/personality.h>
- #endif
---- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
-@@ -92,7 +92,7 @@
- # include <utime.h>
- # include <sys/ptrace.h>
- #if defined(__mips64) || defined(__aarch64__) || defined(__arm__) || \
--    SANITIZER_RISCV64
-+    defined(__powerpc__) || SANITIZER_RISCV64
- #  include <asm/ptrace.h>
- #  ifdef __arm__
- typedef struct user_fpregs elf_fpregset_t;
---- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
-@@ -31,7 +31,7 @@
- #include <sys/types.h> // for pid_t
- #include <sys/uio.h> // for iovec
- #include <elf.h> // for NT_PRSTATUS
--#if (defined(__aarch64__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
-+#if (defined(__aarch64__) || defined(__powerpc__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
- // GLIBC 2.20+ sys/user does not include asm/ptrace.h
- # include <asm/ptrace.h>
- #endif
diff --git a/srcpkgs/llvm12/patches/compiler-rt-size_t.patch b/srcpkgs/llvm12/patches/compiler-rt-size_t.patch
deleted file mode 100644
index 2c63063a5e9e..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-size_t.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/compiler-rt/lib/fuzzer/FuzzerInterceptors.cpp.orig
-+++ b/compiler-rt/lib/fuzzer/FuzzerInterceptors.cpp
-@@ -25,6 +25,7 @@
-   }
- 
- #include <cassert>
-+#include <cstddef>
- #include <cstdint>
- #include <dlfcn.h> // for dlsym()
- 
diff --git a/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch b/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
deleted file mode 100644
index d0b61c80c897..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
+++ /dev/null
@@ -1,62 +0,0 @@
---- a/compiler-rt/lib/xray/xray_powerpc64.inc
-+++ b/compiler-rt/lib/xray/xray_powerpc64.inc
-@@ -12,7 +12,13 @@
- 
- #include <cstdint>
- #include <mutex>
-+#ifdef __GLIBC__
- #include <sys/platform/ppc.h>
-+#else
-+#include <cctype>
-+#include <cstring>
-+#include <cstdlib>
-+#endif
- 
- #include "xray_defs.h"
- 
-@@ -20,13 +26,45 @@ namespace __xray {
- 
- ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
-   CPU = 0;
-+#ifdef __GLIBC__
-   return __ppc_get_timebase();
-+#else
-+  return __builtin_ppc_get_timebase();
-+#endif
- }
- 
- inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
-   static std::mutex M;
-   std::lock_guard<std::mutex> Guard(M);
-+#ifdef __GLIBC__
-   return __ppc_get_timebase_freq();
-+#else
-+  /* FIXME: a less dirty implementation? */
-+  static uint64_t base;
-+  if (!base) {
-+    FILE *f = fopen("/proc/cpuinfo", "rb");
-+    if (f) {
-+      ssize_t nr;
-+      /* virtually always big enough to hold the line */
-+      char buf[512];
-+      while (fgets(buf, sizeof(buf), f)) {
-+        char *ret = strstr(buf, "timebase");
-+        if (!ret) {
-+          continue;
-+        }
-+        ret += sizeof("timebase") - 1;
-+        ret = strchr(ret, ':');
-+        if (!ret) {
-+          continue;
-+        }
-+        base = strtoul(ret + 1, nullptr, 10);
-+        break;
-+      }
-+      fclose(f);
-+    }
-+  }
-+  return base;
-+#endif
- }
- 
- inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
diff --git a/srcpkgs/llvm12/patches/libcxx-musl.patch b/srcpkgs/llvm12/patches/libcxx-musl.patch
deleted file mode 100644
index bbd31ffc2cb1..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-musl.patch
+++ /dev/null
@@ -1,26 +0,0 @@
---- a/libcxx/include/locale
-+++ b/libcxx/include/locale
-@@ -742,7 +742,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
-         typename remove_reference<decltype(errno)>::type __save_errno = errno;
-         errno = 0;
-         char *__p2;
-+#if defined(__linux__) && !defined(__GLIBC__)
-+        long long __ll = strtoll(__a, &__p2, __base);
-+#else
-         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
-+#endif
-         typename remove_reference<decltype(errno)>::type __current_errno = errno;
-         if (__current_errno == 0)
-             errno = __save_errno;
-@@ -782,7 +786,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
-         typename remove_reference<decltype(errno)>::type __save_errno = errno;
-         errno = 0;
-         char *__p2;
-+#if defined(__linux__) && !defined(__GLIBC__)
-+        unsigned long long __ll = strtoull(__a, &__p2, __base);
-+#else
-         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
-+#endif
-         typename remove_reference<decltype(errno)>::type __current_errno = errno;
-         if (__current_errno == 0)
-             errno = __save_errno;
diff --git a/srcpkgs/llvm12/patches/libcxx-ppc.patch b/srcpkgs/llvm12/patches/libcxx-ppc.patch
deleted file mode 100644
index 7a92f8004e1c..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-ppc.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-This ensures `is_iec559` is defined correctly under all long double ABIs,
-including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__`
-is not defined on gcc.
-
---- a/libcxx/include/limits
-+++ b/libcxx/include/limits
-@@ -426,8 +426,14 @@ protected:
-     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
-     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
- 
--#if (defined(__ppc__) || defined(__ppc64__))
-+#if defined(__powerpc__) || defined(__powerpc64__)
-+#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__)
-+    /* IEEE 754 quadruple or double precision */
-+    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
-+#else
-+    /* 128-bit IBM double-double */
-     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
-+#endif
- #else
-     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
- #endif
diff --git a/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch b/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
deleted file mode 100644
index 70292beb2fcd..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/libcxx/CMakeLists.txt
-+++ b/libcxx/CMakeLists.txt
-@@ -769,6 +769,8 @@ function(cxx_link_system_libraries target)
-     target_link_libraries(${target} PRIVATE atomic)
-   endif()
- 
-+#ssp  target_link_libraries(${target} PRIVATE ssp_nonshared)
-+
-   if (MINGW)
-     target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
-   endif()
diff --git a/srcpkgs/llvm12/patches/libcxxabi-dl.patch b/srcpkgs/llvm12/patches/libcxxabi-dl.patch
deleted file mode 100644
index 3a15f9db8c98..000000000000
--- a/srcpkgs/llvm12/patches/libcxxabi-dl.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-Also link to -ldl to prevent undefined references.
-
---- a/libcxxabi/src/CMakeLists.txt
-+++ b/libcxxabi/src/CMakeLists.txt
-@@ -73,6 +73,7 @@
-   endif()
- 
-   add_library_flags_if(LIBCXXABI_HAS_C_LIB c)
-+  add_library_flags_if(LIBCXXABI_HAS_C_LIB dl)
- endif()
- 
- if (LIBCXXABI_USE_LLVM_UNWINDER)
---- a/libcxx/CMakeLists.txt
-+++ b/libcxx/CMakeLists.txt
-@@ -745,6 +745,10 @@
-     target_link_libraries(${target} PRIVATE m)
-   endif()
- 
-+  if (LIBCXX_HAS_C_LIB)
-+    target_link_libraries(${target} PRIVATE dl)
-+  endif()
-+
-   if (LIBCXX_HAS_RT_LIB)
-     target_link_libraries(${target} PRIVATE rt)
-   endif()
diff --git a/srcpkgs/llvm12/patches/libunwind-ppc32.patch b/srcpkgs/llvm12/patches/libunwind-ppc32.patch
deleted file mode 100644
index 74aa7576ecf9..000000000000
--- a/srcpkgs/llvm12/patches/libunwind-ppc32.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-This fixes build at least with gcc9 which does not define `__ppc__`.
-
---- a/libunwind/include/__libunwind_config.h
-+++ b/libunwind/include/__libunwind_config.h
-@@ -49,7 +49,7 @@
- #  define _LIBUNWIND_CONTEXT_SIZE 167
- #  define _LIBUNWIND_CURSOR_SIZE 179
- #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64
--# elif defined(__ppc__)
-+# elif defined(__powerpc__)
- #  define _LIBUNWIND_TARGET_PPC 1
- #  define _LIBUNWIND_CONTEXT_SIZE 117
- #  define _LIBUNWIND_CURSOR_SIZE 124
---- a/libunwind/src/UnwindRegistersRestore.S
-+++ b/libunwind/src/UnwindRegistersRestore.S
-@@ -392,7 +392,7 @@ Lnovec:
-   PPC64_LR(3)
-   bctr
- 
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- 
- DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind13Registers_ppc6jumptoEv)
- //
---- a/libunwind/src/UnwindRegistersSave.S
-+++ b/libunwind/src/UnwindRegistersSave.S
-@@ -554,7 +554,7 @@ DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext)
-   blr
- 
- 
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- 
- //
- // extern int unw_getcontext(unw_context_t* thread_state)
---- a/libunwind/src/config.h
-+++ b/libunwind/src/config.h
-@@ -95,12 +95,12 @@
- #define _LIBUNWIND_BUILD_SJLJ_APIS
- #endif
- 
--#if defined(__i386__) || defined(__x86_64__) || defined(__ppc__) || defined(__ppc64__) || defined(__powerpc64__)
-+#if defined(__i386__) || defined(__x86_64__) || defined(__powerpc__) || defined(__powerpc64__)
- #define _LIBUNWIND_SUPPORT_FRAME_APIS
- #endif
- 
- #if defined(__i386__) || defined(__x86_64__) ||                                \
--    defined(__ppc__) || defined(__ppc64__) || defined(__powerpc64__) ||        \
-+    defined(__powerpc__) || defined(__powerpc64__) ||                          \
-     (!defined(__APPLE__) && defined(__arm__)) ||                               \
-     (defined(__arm64__) || defined(__aarch64__)) ||                            \
-     defined(__mips__)
---- a/libunwind/src/libunwind.cpp
-+++ b/libunwind/src/libunwind.cpp
-@@ -42,7 +42,7 @@ _LIBUNWIND_HIDDEN int __unw_init_local(unw_cursor_t *cursor,
- # define REGISTER_KIND Registers_x86_64
- #elif defined(__powerpc64__)
- # define REGISTER_KIND Registers_ppc64
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- # define REGISTER_KIND Registers_ppc
- #elif defined(__aarch64__)
- # define REGISTER_KIND Registers_arm64
diff --git a/srcpkgs/llvm12/patches/lldb-musl.patch b/srcpkgs/llvm12/patches/lldb-musl.patch
deleted file mode 100644
index 601c0d138523..000000000000
--- a/srcpkgs/llvm12/patches/lldb-musl.patch
+++ /dev/null
@@ -1,31 +0,0 @@
---- a/lldb/source/Plugins/Process/Linux/Procfs.h
-+++ b/lldb/source/Plugins/Process/Linux/Procfs.h
-@@ -10,21 +10,12 @@
- // sys/procfs.h on Android/Linux for all supported architectures.
- 
- #include <sys/ptrace.h>
-+#include <asm/ptrace.h>
- 
--#ifdef __ANDROID__
--#if defined(__arm64__) || defined(__aarch64__)
--typedef unsigned long elf_greg_t;
--typedef elf_greg_t
--    elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
--typedef struct user_fpsimd_state elf_fpregset_t;
--#ifndef NT_FPREGSET
--#define NT_FPREGSET NT_PRFPREG
--#endif // NT_FPREGSET
--#elif defined(__mips__)
--#ifndef NT_FPREGSET
--#define NT_FPREGSET NT_PRFPREG
--#endif // NT_FPREGSET
--#endif
--#else // __ANDROID__
-+#if !defined(__GLIBC__) && defined(__powerpc__)
-+#define pt_regs musl_pt_regs
-+#include <sys/procfs.h>
-+#undef pt_regs
-+#else
- #include <sys/procfs.h>
--#endif // __ANDROID__
-+#endif
diff --git a/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch b/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch
deleted file mode 100644
index 8e0a9a779d1b..000000000000
--- a/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-commit ba4ede595ff9599232f5dd2b4384c243137b53fc
-Author: Daniel Kolesa <daniel@octaforge.org>
-Date:   Tue Jun 22 23:40:54 2021 +0200
-
-    enable compiler-rt support for ppc32
-
-diff --git a/compiler-rt/cmake/base-config-ix.cmake b/compiler-rt/cmake/base-config-ix.cmake
-index 1edab43..5c0c8a2 100644
---- a/compiler-rt/cmake/base-config-ix.cmake
-+++ b/compiler-rt/cmake/base-config-ix.cmake
-@@ -182,9 +182,7 @@ macro(test_targets)
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc64le")
-       test_target_arch(powerpc64le "" "-m64")
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc")
--      if(CMAKE_SYSTEM_NAME MATCHES "AIX")
--        test_target_arch(powerpc "" "-m32")
--      endif()
-+      test_target_arch(powerpc "" "-m32")
-       test_target_arch(powerpc64 "" "-m64")
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "s390x")
-       test_target_arch(s390x "" "")
diff --git a/srcpkgs/llvm12/template b/srcpkgs/llvm12/template
index 7ce18028e4a3..7b361bbbf5bc 100644
--- a/srcpkgs/llvm12/template
+++ b/srcpkgs/llvm12/template
@@ -1,25 +1,17 @@
 # Template file for 'llvm12'
 pkgname=llvm12
 version=12.0.1
-revision=2
+revision=3
 wrksrc="llvm-project-${version}.src"
 build_wrksrc=llvm
 build_style=cmake
 configure_args="
  -DCMAKE_BUILD_TYPE=Release -Wno-dev
  -DENABLE_LINKER_BUILD_ID=YES
- -DLLDB_USE_SYSTEM_SIX=YES
- -DLIBCXX_CXX_ABI=libcxxabi
- -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
- -DLIBCXXABI_USE_LLVM_UNWINDER=YES
- -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
- -DLIBOMP_ENABLE_SHARED=YES
- -DLIBOMP_INSTALL_ALIASES=NO
  -DLLVM_INCLUDE_DOCS=YES
  -DLLVM_BUILD_DOCS=YES
  -DLLVM_ENABLE_SPHINX=YES
  -DSPHINX_WARNINGS_AS_ERRORS=NO
- -DLLVM_INSTALL_UTILS=YES
  -DLLVM_BUILD_LLVM_DYLIB=YES
  -DLLVM_LINK_LLVM_DYLIB=YES
  -DLLVM_ENABLE_RTTI=YES
@@ -51,87 +43,10 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
-_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
-
-_lldb_enable=yes
-_libomp_enable=no
-
-case "$XBPS_TARGET_MACHINE" in
-	ppc64le*) ;;
-	ppc*|i686*) _lldb_enable=no ;;
-esac
-
-case "$XBPS_TARGET_MACHINE" in
-	x86_64*|aarch64*|ppc64*) _libomp_enable=yes;;
-esac
-
-subpackages="clang-tools-extra"
-
-# must go before clang
-if [ "$_libomp_enable" = "yes" ]; then
-	_enabled_projects+=";openmp"
-	subpackages+=" libomp libomp-devel"
-	# because of cmake nonsense referencing libomptarget.so.*
-	depends+=" libomp>=${version}_${revision}"
-fi
-
-subpackages+=" clang clang-analyzer libclang libclang-cpp
- llvm-libunwind llvm-libunwind-devel libcxx libcxx-devel
- libcxxabi libcxxabi-devel libllvm12"
-
-if [ "$_lldb_enable" = "yes" ]; then
-	# XXX fails to cross compile due to python
-	_enabled_projects+=";lldb"
-	subpackages+=" lldb lldb-devel"
-fi
-
-subpackages+=" lld lld-devel"
-
-configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
-
 post_patch() {
-	if [ "$_lldb_enable" = "yes" ]; then
-		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
-			vsed -i 's|__ptrace_request|int|g' \
-				${wrksrc}/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
-		fi
-		# disable docs for lldb as they fail to generate
-		vsed -i '/add_subdirectory(docs)/d' \
-			${wrksrc}/lldb/CMakeLists.txt
-	fi
-
 	# update config.guess for better platform detection
 	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
 		${wrksrc}/llvm/cmake
-
-	# fix linker failures on some archs
-	vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
-		${wrksrc}/libcxxabi/cmake/config-ix.cmake
-	vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
-		${wrksrc}/libcxxabi/cmake/config-ix.cmake
-
-	# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
-	case "$XBPS_TARGET_MACHINE" in
-		ppc64*) ;;
-		ppc*-musl|i686-musl|mips*-musl)
-			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
-				${wrksrc}/libunwind/src/CMakeLists.txt
-			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
-				${wrksrc}/libcxxabi/src/CMakeLists.txt
-			vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
-			;;
-	esac
-
-	case "$XBPS_TARGET_MACHINE" in
-		x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
-			vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
-				${wrksrc}/compiler-rt/CMakeLists.txt
-			;;
-		arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
-			vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
-				${wrksrc}/compiler-rt/cmake/config-ix.cmake
-			;;
-	esac
 }
 
 pre_configure() {
@@ -158,10 +73,8 @@ pre_configure() {
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
 			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
 		make ${makejobs} -C utils/TableGen
-		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
 		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
-		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
 		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
 		cd ../..
 	fi
@@ -202,218 +115,6 @@ do_install() {
 	if [ "$CROSS_BUILD" ]; then
 		rm -f ${DESTDIR}/usr/bin/llvm-config-host
 	fi
-
-	# Install libcxxabi headers
-	vinstall ${wrksrc}/libcxxabi/include/__cxxabi_config.h 644 usr/include
-	vinstall ${wrksrc}/libcxxabi/include/cxxabi.h 644 usr/include
-
-	# Install libunwind headers
-	vinstall ${wrksrc}/libunwind/include/__libunwind_config.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/libunwind.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/unwind.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/mach-o/compact_unwind_encoding.h \
-		644 usr/include/mach-o
-}
-
-clang-analyzer_package() {
-	pycompile_dirs="usr/share/scan-view"
-	depends="clang-${version}_${revision} python3 perl"
-	short_desc+=" - A source code analysis framework"
-	homepage="https://clang-analyzer.llvm.org/"
-	pkg_install() {
-		vmove usr/share/man/man1/scan-build.1
-		vmove "/usr/bin/scan-*"
-		vmove "/usr/share/scan-*"
-		vmove "/usr/libexec/*analyzer"
-	}
-}
-
-clang-tools-extra_package() {
-	lib32disabled=yes
-	depends="clang-${version}_${revision} python3"
-	short_desc+=" - Extra Clang tools"
-	homepage="https://clang.llvm.org/extra/"
-	pkg_install() {
-		vmove usr/include/clang-tidy
-		vmove usr/bin/clang-apply-replacements
-		vmove usr/bin/clang-query
-		vmove usr/bin/clang-rename
-		vmove usr/bin/clang-tidy
-		vmove usr/bin/diagtool
-		vmove usr/bin/find-all-symbols
-		vmove usr/bin/hmaptool
-		vmove usr/bin/modularize
-		vmove usr/bin/pp-trace
-		vmove usr/bin/sancov
-		vmove "usr/lib/libclangApplyReplacements*"
-		vmove "usr/lib/libclangQuery*"
-		vmove "usr/lib/libclangTidy*"
-		vmove "usr/share/clang/*tidy*"
-		vmove usr/share/doc/clang-tools
-		vmove usr/share/man/man1/extraclangtools.1
-		vmove usr/share/man/man1/diagtool.1
-	}
-}
-
-clang_package() {
-	lib32disabled=yes
-	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
-	 libclang-${version}_${revision}"
-	short_desc+=" - C language family frontend"
-	homepage="https://clang.llvm.org/"
-	pkg_install() {
-		vmove usr/include/clang
-		vmove usr/include/clang-c
-		vmove "usr/bin/*clang*"
-		vmove usr/bin/c-index-test
-		vmove usr/lib/clang
-		vmove usr/lib/cmake/clang
-		vmove "usr/lib/libclang*.a"
-		vmove "usr/lib/libclang*.so"
-		vmove usr/share/clang
-		vmove usr/share/doc/clang
-		vmove usr/share/man/man1/clang.1
-	}
-}
-
-libclang_package() {
-	short_desc+=" - C frontend runtime library"
-	pkg_install() {
-		vmove "usr/lib/libclang.so.*"
-	}
-}
-
-libclang-cpp_package() {
-	short_desc+=" - C frontend runtime library (C++ interface)"
-	pkg_install() {
-		vmove "usr/lib/libclang-cpp.so.*"
-	}
-}
-
-lld_package() {
-	lib32disabled=yes
-	short_desc+=" - linker"
-	homepage="https://lld.llvm.org"
-	pkg_install() {
-		vmove usr/bin/lld*
-		vmove usr/bin/wasm-ld
-		vmove usr/bin/ld.lld*
-		vmove usr/bin/ld64.lld*
-		vmove usr/share/doc/lld
-	}
-}
-
-lld-devel_package() {
-	lib32disabled=yes
-	short_desc+=" - linker - development files"
-	homepage="https://lld.llvm.org"
-	depends="lld>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/include/lld
-		vmove usr/lib/cmake/lld
-		vmove "usr/lib/liblld*a"
-	}
-}
-
-lldb_package() {
-	lib32disabled=yes
-	depends+=" python3-six"
-	short_desc+=" - LLDB debugger"
-	homepage="https://lldb.llvm.org/"
-	pkg_install() {
-		vmove usr/bin/*lldb*
-		vmove usr/lib/liblldb*so.*
-		vmove /usr/lib/python*
-	}
-}
-
-lldb-devel_package() {
-	lib32disabled=yes
-	depends="lldb>=${version}_${revision}"
-	short_desc+=" - LLDB debugger - development files"
-	pkg_install() {
-		vmove usr/include/lldb
-		vmove "usr/lib/liblldb*.so"
-	}
-}
-
-llvm-libunwind_package() {
-	short_desc+=" - libunwind"
-	pkg_install() {
-		vmove "usr/lib/libunwind.so.*"
-	}
-}
-
-llvm-libunwind-devel_package() {
-	short_desc+=" - libunwind - development files"
-	depends="llvm-libunwind>=${version}_${revision}"
-	conflicts="libunwind-devel>=0"
-	pkg_install() {
-		vmove usr/lib/libunwind.so
-		vmove usr/lib/libunwind.a
-		vmove "usr/include/*unwind*"
-		vmove usr/include/mach-o
-		vmove usr/share/doc/libunwind
-	}
-}
-
-libcxxabi_package() {
-	short_desc+=" - low level support for libc++"
-	pkg_install() {
-		vmove "usr/lib/libc++abi.so.*"
-	}
-}
-
-libcxxabi-devel_package() {
-	short_desc+=" - low level support for libc++ - development files"
-	depends="libcxxabi>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/lib/libc++abi.so
-		vmove usr/lib/libc++abi.a
-		vmove "usr/include/*cxxabi*"
-	}
-}
-
-libcxx_package() {
-	short_desc+=" - C++ standard library"
-	pkg_install() {
-		vmove "usr/lib/libc++.so.*"
-	}
-}
-
-libcxx-devel_package() {
-	short_desc+=" - C++ standard library - development files"
-	depends="libcxx>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/lib/libc++.so
-		vmove usr/lib/libc++.a
-		vmove usr/lib/libc++experimental.a
-		vmove usr/include/c++
-		vmove usr/share/doc/libcxx
-	}
-}
-
-libomp_package() {
-	short_desc+=" - Clang OpenMP support library"
-	pkg_install() {
-		vmove usr/lib/libomp.so
-		vmove "usr/lib/libomptarget.rtl.*.so"
-		vmove usr/lib/libarcher.so
-		vmove "usr/lib/libomp*.so.*"
-	}
-}
-
-libomp-devel_package() {
-	short_desc+=" - Clang OpenMP support library - development files"
-	depends="libomp>=${version}_${revision}"
-	pkg_install() {
-		vmove "usr/lib/libomp*.so"
-		vmove "usr/lib/libarcher*"
-		vmove "usr/include/omp*.h"
-		vmove "usr/lib/clang/${version}/include/omp*.h"
-		vmove usr/share/man/man1/llvmopenmp.1
-		vmove usr/share/doc/openmp
-	}
 }
 
 libllvm12_package() {

From dd0a815073454885bd6e389186b3464ba9a421a9 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 14:00:28 +0200
Subject: [PATCH 04/29] New packages: clang12, libclang12, libclang12-cpp,
 lld12, lld12-devel.

---
 common/shlibs                                 |   2 +
 srcpkgs/clang12                               |   1 +
 srcpkgs/libclang12                            |   1 +
 srcpkgs/libclang12-cpp                        |   1 +
 srcpkgs/lld12                                 |   1 +
 srcpkgs/lld12-devel                           |   1 +
 ...clang-001-fix-unwind-chain-inclusion.patch |  44 +++++++
 .../patches/clang-002-add-musl-triples.patch  | 110 ++++++++++++++++++
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 +++
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ++++++++
 srcpkgs/llvm12/template                       |  71 +++++++++++
 11 files changed, 293 insertions(+)
 create mode 120000 srcpkgs/clang12
 create mode 120000 srcpkgs/libclang12
 create mode 120000 srcpkgs/libclang12-cpp
 create mode 120000 srcpkgs/lld12
 create mode 120000 srcpkgs/lld12-devel
 create mode 100644 srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch

diff --git a/common/shlibs b/common/shlibs
index 81acc39defb4..86f4c9060d3b 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -975,6 +975,8 @@ libuchardet.so.0 uchardet-0.0.6_1
 libgtksourceviewmm-3.0.so.0 gtksourceviewmm-3.2.0_1
 libyajl.so.2 yajl-2.0.1_1
 libconfuse.so.2 confuse-3.2.1_1
+libclang.so.12 libclang12-12.0.0_1
+libclang-cpp.so.12 libclang12-cpp-12.0.0_1
 liblldb.so.14 lldb-14.0.3_1
 libclang.so.14 libclang-14.0.3_1
 libclang-cpp.so.14 libclang-cpp-14.0.3_1
diff --git a/srcpkgs/clang12 b/srcpkgs/clang12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/clang12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/libclang12 b/srcpkgs/libclang12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/libclang12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/libclang12-cpp b/srcpkgs/libclang12-cpp
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/libclang12-cpp
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/lld12 b/srcpkgs/lld12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/lld12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/lld12-devel b/srcpkgs/lld12-devel
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/lld12-devel
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
new file mode 100644
index 000000000000..e4eaa7783e7a
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
@@ -0,0 +1,44 @@
+From 352974169f0d2b5da3d5321f588f5e3b5941330e Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe@gmail.com>
+Date: Tue, 8 Sep 2015 22:14:57 +0200
+Subject: [PATCH 2/7] fix unwind chain inclusion
+
+---
+ lib/Headers/unwind.h | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/lib/Headers/unwind.h b/lib/Headers/unwind.h
+index 303d792..44e10cc 100644
+--- a/clang/lib/Headers/unwind.h
++++ b/clang/lib/Headers/unwind.h
+@@ -9,9 +9,6 @@
+ 
+ /* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/
+ 
+-#ifndef __CLANG_UNWIND_H
+-#define __CLANG_UNWIND_H
+-
+ #if defined(__APPLE__) && __has_include_next(<unwind.h>)
+ /* Darwin (from 11.x on) provide an unwind.h. If that's available,
+  * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE,
+@@ -39,6 +36,9 @@
+ # endif
+ #else
+ 
++#ifndef __CLANG_UNWIND_H
++#define __CLANG_UNWIND_H
++
+ #include <stdint.h>
+ 
+ #ifdef __cplusplus
+@@ -322,6 +322,7 @@ _Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *);
+ }
+ #endif
+ 
++#endif /* __CLANG_UNWIND_H */
++
+ #endif
+ 
+-#endif /* __CLANG_UNWIND_H */
+-- 
+2.5.1
diff --git a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
new file mode 100644
index 000000000000..25688d40dbc2
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
@@ -0,0 +1,110 @@
+--- a/clang/lib/Driver/ToolChains/Gnu.cpp
++++ b/clang/lib/Driver/ToolChains/Gnu.cpp
+@@ -2086,7 +2086,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
+                                              "armv7hl-redhat-linux-gnueabi",
+                                              "armv6hl-suse-linux-gnueabi",
+-                                             "armv7hl-suse-linux-gnueabi"};
++                                             "armv7hl-suse-linux-gnueabi",
++                                             "armv7l-linux-gnueabihf"};
+   static const char *const ARMebLibDirs[] = {"/lib"};
+   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
+                                              "armeb-linux-androideabi"};
+@@ -2153,8 +2154,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
+   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
+   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
+-                                             "powerpcle-unknown-linux-gnu",
+-                                             "powerpcle-linux-musl"};
++                                             "powerpcle-unknown-linux-gnu"};
+ 
+   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
+   static const char *const PPC64Triples[] = {
+@@ -2235,6 +2235,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+     return;
+   }
+ 
++  if (TargetTriple.isMusl()) {
++    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
++    static const char *const ARMHFMuslTriples[] = {
++        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
++    };
++    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
++    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
++    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
++    static const char *const MIPSMuslTriples[] = {
++        "mips-linux-musl", "mipsel-linux-musl",
++        "mipsel-linux-muslhf", "mips-linux-muslhf"
++    };
++    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
++    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
++    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
++    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
++
++    switch (TargetTriple.getArch()) {
++    case llvm::Triple::aarch64:
++      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      break;
++    case llvm::Triple::arm:
++      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
++      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
++        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
++      } else {
++        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
++      }
++      break;
++    case llvm::Triple::x86_64:
++      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      break;
++    case llvm::Triple::x86:
++      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      break;
++    case llvm::Triple::mips:
++      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
++      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
++      break;
++    case llvm::Triple::ppc:
++      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      break;
++    case llvm::Triple::ppcle:
++      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      break;
++    case llvm::Triple::ppc64:
++      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      break;
++    case llvm::Triple::ppc64le:
++      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      break;
++    default:
++      break;
++    }
++    TripleAliases.push_back(TargetTriple.str());
++    if (TargetTriple.str() != BiarchTriple.str())
++      BiarchTripleAliases.push_back(BiarchTriple.str());
++    return;
++  }
++
+   // Android targets should not use GNU/Linux tools or libraries.
+   if (TargetTriple.isAndroid()) {
+     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
new file mode 100644
index 000000000000..4ad6412d1e6c
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
@@ -0,0 +1,13 @@
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -504,10 +504,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+     Loader = "ld.so.1";
+     break;
+   case llvm::Triple::ppc64:
+-    LibDir = "lib64";
+-    Loader =
+-        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
+-    break;
+   case llvm::Triple::ppc64le:
+     LibDir = "lib64";
+     Loader =
diff --git a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
new file mode 100644
index 000000000000..21fc8003c5f1
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
@@ -0,0 +1,48 @@
+--- a/clang/lib/Basic/Targets/PPC.h
++++ b/clang/lib/Basic/Targets/PPC.h
+@@ -415,11 +415,10 @@ public:
+       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
+     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
+       DataLayout = "e-m:e-i64:64-n32:64";
+-      ABI = "elfv2";
+     } else {
+       DataLayout = "E-m:e-i64:64-n32:64";
+-      ABI = "elfv1";
+     }
++    ABI = "elfv2";
+ 
+     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
+       LongDoubleWidth = LongDoubleAlign = 64;
+--- a/clang/lib/CodeGen/TargetInfo.cpp
++++ b/clang/lib/CodeGen/TargetInfo.cpp
+@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
+       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
+ 
+     if (Triple.isOSBinFormatELF()) {
+-      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
+-      if (getTarget().getABI() == "elfv2")
+-        Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      if (getTarget().getABI() == "elfv1")
++        Kind = PPC64_SVR4_ABIInfo::ELFv1;
+       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
+ 
+       return SetCGInfo(
+--- a/clang/lib/Driver/ToolChains/Clang.cpp
++++ b/clang/lib/Driver/ToolChains/Clang.cpp
+@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
+   const llvm::Triple &T = getToolChain().getTriple();
+   if (T.isOSBinFormatELF()) {
+     switch (getToolChain().getArch()) {
+-    case llvm::Triple::ppc64: {
+-      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
+-          T.isOSOpenBSD() || T.isMusl())
+-        ABIName = "elfv2";
+-      else
+-        ABIName = "elfv1";
+-      break;
+-    }
++    case llvm::Triple::ppc64:
+     case llvm::Triple::ppc64le:
+       ABIName = "elfv2";
+       break;
diff --git a/srcpkgs/llvm12/template b/srcpkgs/llvm12/template
index 7b361bbbf5bc..274b57183654 100644
--- a/srcpkgs/llvm12/template
+++ b/srcpkgs/llvm12/template
@@ -43,6 +43,12 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
+_enabled_projects="clang;lld"
+
+subpackages+=" clang12 libclang12 libclang12-cpp libllvm12 lld12 lld12-devel"
+
+configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+
 post_patch() {
 	# update config.guess for better platform detection
 	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
@@ -73,8 +79,10 @@ pre_configure() {
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
 			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
 		make ${makejobs} -C utils/TableGen
+		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
 		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
+		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
 		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
 		cd ../..
 	fi
@@ -117,6 +125,69 @@ do_install() {
 	fi
 }
 
+clang12_package() {
+	conflicts="clang"
+	lib32disabled=yes
+	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
+	 libclang12-${version}_${revision}"
+	short_desc+=" - C language family frontend"
+	homepage="https://clang.llvm.org/"
+	pkg_install() {
+		vmove usr/include/clang
+		vmove usr/include/clang-c
+		vmove "usr/bin/*clang*"
+		vmove usr/bin/c-index-test
+		vmove usr/lib/clang
+		vmove usr/lib/cmake/clang
+		vmove "usr/lib/libclang*.a"
+		vmove "usr/lib/libclang*.so"
+		vmove usr/share/clang
+		vmove usr/share/doc/clang
+		vmove usr/share/man/man1/clang.1
+	}
+}
+
+libclang12_package() {
+	short_desc+=" - C frontend runtime library"
+	pkg_install() {
+		vmove "usr/lib/libclang.so.*"
+	}
+}
+
+libclang12-cpp_package() {
+	short_desc+=" - C frontend runtime library (C++ interface)"
+	pkg_install() {
+		vmove "usr/lib/libclang-cpp.so.*"
+	}
+}
+
+lld12_package() {
+	conflicts="lld"
+	lib32disabled=yes
+	short_desc+=" - linker"
+	homepage="https://lld.llvm.org"
+	pkg_install() {
+		vmove usr/bin/lld*
+		vmove usr/bin/wasm-ld
+		vmove usr/bin/ld.lld*
+		vmove usr/bin/ld64.lld*
+		vmove usr/share/doc/lld
+	}
+}
+
+lld12-devel_package() {
+	conflicts="lld-devel"
+	lib32disabled=yes
+	short_desc+=" - linker - development files"
+	homepage="https://lld.llvm.org"
+	depends="lld12>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include/lld
+		vmove usr/lib/cmake/lld
+		vmove "usr/lib/liblld*a"
+	}
+}
+
 libllvm12_package() {
 	short_desc+=" - runtime library"
 	pkg_install() {

From 78d156cc0e8cbf8d6628dc316523878417e952be Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 05/29] chromium: update for llvm14

---
 srcpkgs/chromium/template | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/srcpkgs/chromium/template b/srcpkgs/chromium/template
index 0dce8772fdb8..8b604a349229 100644
--- a/srcpkgs/chromium/template
+++ b/srcpkgs/chromium/template
@@ -2,7 +2,7 @@
 pkgname=chromium
 # See https://chromiumdash.appspot.com/releases?platform=Linux for the latest version
 version=101.0.4951.41
-revision=1
+revision=2
 archs="i686* x86_64* aarch64* armv7l* ppc64le*"
 short_desc="Google's attempt at creating a safer, faster, and more stable browser"
 maintainer="Duncaen <duncaen@voidlinux.org>"
@@ -20,7 +20,7 @@ desc_option_debug="Build with debug symbols"
 desc_option_js_optimize="Optimize the JS used for Chromium's UI"
 desc_option_pipewire="Enable support for screen sharing for WebRTC via PipeWire"
 
-hostmakedepends="$(vopt_if clang "clang lld llvm12") python python3 pkgconf perl gperf bison ninja nodejs hwids
+hostmakedepends="$(vopt_if clang "clang lld llvm14") python python3 pkgconf perl gperf bison ninja nodejs hwids
  libatomic-devel libevent-devel libglib-devel $(vopt_if js_optimize openjdk) wayland-devel libepoxy-devel"
 makedepends="libpng-devel gtk+-devel gtk+3-devel nss-devel pciutils-devel
  libXi-devel libgcrypt-devel libgnome-keyring-devel cups-devel elfutils-devel
@@ -266,12 +266,6 @@ do_configure() {
 		'disable_fieldtrial_testing_config=true'
 
 		'is_official_build=true'
-
-		# segfaults with llvm-12.0.1
-		'is_cfi=false'
-		'use_thin_lto=false'
-		'use_cfi_icall=false'
-		'chrome_pgo_phase=0'
 	)
 
 	if [ "$CROSS_BUILD" ]; then

From bc3cf98e2b9f6019b8ca00c820a3b358b091d1a9 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 06/29] ghdl: update for llvm14

---
 srcpkgs/ghdl/patches/{llvm12.patch => llvm.patch} | 2 ++
 srcpkgs/ghdl/template                             | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)
 rename srcpkgs/ghdl/patches/{llvm12.patch => llvm.patch} (82%)

diff --git a/srcpkgs/ghdl/patches/llvm12.patch b/srcpkgs/ghdl/patches/llvm.patch
similarity index 82%
rename from srcpkgs/ghdl/patches/llvm12.patch
rename to srcpkgs/ghdl/patches/llvm.patch
index 8d2f76bfda06..9201816ae053 100644
--- a/srcpkgs/ghdl/patches/llvm12.patch
+++ b/srcpkgs/ghdl/patches/llvm.patch
@@ -7,6 +7,8 @@ index c1c1a6d..dad7c38 100755
         check_version 10.0 $llvm_version ||
         check_version 11.0 $llvm_version ||
 +       check_version 12.0 $llvm_version ||
++       check_version 13.0 $llvm_version ||
++       check_version 14.0 $llvm_version ||
         false; then
      echo "Debugging is enabled with llvm $llvm_version"
    else
diff --git a/srcpkgs/ghdl/template b/srcpkgs/ghdl/template
index e756d8c3cd87..9ca1169b22bd 100644
--- a/srcpkgs/ghdl/template
+++ b/srcpkgs/ghdl/template
@@ -7,7 +7,7 @@
 pkgname=ghdl
 reverts="20181129_1"
 version=1.0.0
-revision=1
+revision=2
 build_style=configure
 configure_args="--prefix=/usr --srcdir=.. --incdir=lib/ghdl/include"
 makedepends="zlib-devel"

From 8744d7d79b7b6f2bdf5e89453a5f8584fdb99df8 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 07/29] qt5: rebuild for llvm14

---
 srcpkgs/qt5/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index ee788fad2019..25f15583a42d 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -3,7 +3,7 @@ pkgname=qt5
 version=5.15.3+20220222
 # commit fcca82ca40a5d8a02a4ddd90846d070f2c58cfad
 # base repo: https://invent.kde.org/qt/qt/qt5
-revision=3
+revision=4
 build_style=meta
 hostmakedepends="cmake clang flex perl glib-devel pkg-config
  python re2c ruby which"

From fdc1b9b45f51d61cb9e93148eb181103a6188f85 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 08/29] tilix: rebuild for llvm14

---
 srcpkgs/tilix/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/tilix/template b/srcpkgs/tilix/template
index d8f014bc78c5..ac1bf7dd3bdd 100644
--- a/srcpkgs/tilix/template
+++ b/srcpkgs/tilix/template
@@ -1,7 +1,7 @@
 # Template file for 'tilix'
 pkgname=tilix
 version=1.9.4
-revision=3
+revision=4
 build_style=meson
 configure_args="-Db_lto=false"
 hostmakedepends="automake gettext-devel gdk-pixbuf glib-devel ldc po4a pkg-config

From 5a1cbff7e2cb513167841e803e7f1f4d905842b4 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 09/29] shiboken2: rebuild for llvm14

---
 srcpkgs/shiboken2/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/shiboken2/template b/srcpkgs/shiboken2/template
index b56613229c13..ab9d2c4cb8f9 100644
--- a/srcpkgs/shiboken2/template
+++ b/srcpkgs/shiboken2/template
@@ -1,7 +1,7 @@
 # Template file for 'shiboken2'
 pkgname=shiboken2
 version=5.15.2
-revision=4
+revision=5
 _pkgname="pyside-setup-opensource-src-${version}"
 wrksrc="${_pkgname/%5.14.2.1/5.14.2}"
 build_wrksrc="sources/shiboken2"

From c448e99709e362dd785b7348faec90e85e0ea8ab Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 10/29] gnome-builder: rebuild for llvm14

---
 srcpkgs/gnome-builder/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/gnome-builder/template b/srcpkgs/gnome-builder/template
index 93559b21774f..5a5a51893ae8 100644
--- a/srcpkgs/gnome-builder/template
+++ b/srcpkgs/gnome-builder/template
@@ -1,7 +1,7 @@
 # Template file for 'gnome-builder'
 pkgname=gnome-builder
 version=41.3
-revision=1
+revision=2
 build_style=meson
 build_helper=qemu
 configure_args="-Dhelp=true -Dnetwork_tests=false"

From c580f7815d7a81d7c4bd56bd27ebcd22b82635d6 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 11/29] bcc: rebuild for llvm14

---
 srcpkgs/bcc/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/bcc/template b/srcpkgs/bcc/template
index 54509b63d5a7..2cfa0a2977d0 100644
--- a/srcpkgs/bcc/template
+++ b/srcpkgs/bcc/template
@@ -1,7 +1,7 @@
 # Template file for 'bcc'
 pkgname=bcc
 version=0.24.0
-revision=1
+revision=2
 wrksrc="bcc"
 build_style=cmake
 configure_args="-DREVISION=${version} -DENABLE_LLVM_SHARED=1"

From 46690d5c043d37c6b3209ce8098e1a7cd85ab123 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 12/29] mesa: rebuild for llvm14

---
 srcpkgs/mesa/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/mesa/template b/srcpkgs/mesa/template
index c90500de7416..8f08262fb135 100644
--- a/srcpkgs/mesa/template
+++ b/srcpkgs/mesa/template
@@ -1,7 +1,7 @@
 # Template file for 'mesa'
 pkgname=mesa
 version=21.3.7
-revision=1
+revision=2
 build_style=meson
 configure_args="-Dglvnd=true -Dshared-glapi=enabled -Dgbm=enabled -Degl=enabled
  -Dosmesa=true -Dgles1=enabled -Dgles2=enabled -Dglx=dri -Ddri3=enabled

From 127a0bb67ac383aecbbe9025649c63cc2ae4a743 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 13/29] juCi++: rebuild for llvm14

---
 srcpkgs/juCi++/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/juCi++/template b/srcpkgs/juCi++/template
index 1a7604b44a00..5103324dec20 100644
--- a/srcpkgs/juCi++/template
+++ b/srcpkgs/juCi++/template
@@ -1,7 +1,7 @@
 # Template file for 'juCi++'
 pkgname=juCi++
 version=1.6.2
-revision=2
+revision=3
 _libclangmm_commit="b342f4dd6de4fe509a692a4b4fcfc7e24aae9590"
 _tiny_commit="c9c8bf810ddad8cd17882b9a9ee628a690e779f5"
 wrksrc="jucipp-v${version}"

From 394ee70e8242cfee71f4afee3dc30ef81f0e7cff Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 14/29] kdevelop: rebuild for llvm14

---
 srcpkgs/kdevelop/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/kdevelop/template b/srcpkgs/kdevelop/template
index 010185849d80..abf08c313071 100644
--- a/srcpkgs/kdevelop/template
+++ b/srcpkgs/kdevelop/template
@@ -1,7 +1,7 @@
 # Template file for 'kdevelop'
 pkgname=kdevelop
 version=21.12.3
-revision=1
+revision=2
 build_style=cmake
 configure_args="-DBUILD_TESTING=OFF"
 hostmakedepends="extra-cmake-modules qt5-qmake qt5-host-tools qt5-tools

From b8e909079e1f1f70b87876da73ad6b1718f2a24d Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 15/29] codelite: rebuild for llvm14

---
 srcpkgs/codelite/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/codelite/template b/srcpkgs/codelite/template
index 3a993a2c0cfb..24e2c879dd45 100644
--- a/srcpkgs/codelite/template
+++ b/srcpkgs/codelite/template
@@ -1,7 +1,7 @@
 # Template file for 'codelite'
 pkgname=codelite
 version=15.0.6
-revision=1
+revision=2
 build_style=cmake
 build_helper=cmake-wxWidgets-gtk3
 configure_args="-DWITH_PCH=0 -DWITH_WX_CONFIG=wx-config-gtk3

From 72aad906e80a17ccc97398f1324176e9d0cf3857 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 16/29] ccls: rebuild for llvm14

---
 srcpkgs/ccls/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/ccls/template b/srcpkgs/ccls/template
index fbb7c6847bc1..40aba3b55bfe 100644
--- a/srcpkgs/ccls/template
+++ b/srcpkgs/ccls/template
@@ -1,7 +1,7 @@
 # Template file for 'ccls'
 pkgname=ccls
 version=0.20210330
-revision=2
+revision=3
 build_style=cmake
 hostmakedepends="clang-tools-extra"
 makedepends="llvm ncurses-devel rapidjson zlib-devel clang-tools-extra"

From 313b9dcaed208ddc1198390cdf5d0f60e01c00c1 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 17/29] clazy: rebuild for llvm14

---
 srcpkgs/clazy/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/clazy/template b/srcpkgs/clazy/template
index 11f3bab55aef..f81de08ab836 100644
--- a/srcpkgs/clazy/template
+++ b/srcpkgs/clazy/template
@@ -1,7 +1,7 @@
 # Template file for 'clazy'
 pkgname=clazy
 version=1.11
-revision=1
+revision=2
 build_style=cmake
 build_helper=qemu
 hostmakedepends="llvm"

From 4550c56aeda7a1fb90cc0c8f1b584a2d1c2ea400 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 18/29] bpftrace: rebuild for llvm14

---
 srcpkgs/bpftrace/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/bpftrace/template b/srcpkgs/bpftrace/template
index 28ab3c626399..eb2480d2230e 100644
--- a/srcpkgs/bpftrace/template
+++ b/srcpkgs/bpftrace/template
@@ -1,7 +1,7 @@
 # Template file for 'bpftrace'
 pkgname=bpftrace
 version=0.14.1
-revision=1
+revision=2
 archs="x86_64* aarch64* ppc64*"
 build_style=cmake
 configure_args="-DBUILD_TESTING=OFF"  # needs root to run

From bd26ab8eff3ab9fc7c1450122507057bda8429fb Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 19/29] rtags: rebuild for llvm14

---
 srcpkgs/rtags/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/rtags/template b/srcpkgs/rtags/template
index b496a1b0e721..9b161e690d76 100644
--- a/srcpkgs/rtags/template
+++ b/srcpkgs/rtags/template
@@ -1,7 +1,7 @@
 # Template file for 'rtags'
 pkgname=rtags
 version=2.38
-revision=5
+revision=6
 build_style=cmake
 # Don't run tests in do_install, please.
 configure_args="-DSKIP_CTEST=TRUE"

From 85c1d5ed55c9cfec26fb359efdf77773f30bc64c Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:07:19 +0200
Subject: [PATCH 20/29] beignet: remove package

---
 srcpkgs/beignet/patches/cl_uint.patch         |  22 -
 ...419a0008e38ef2d9d255d9e9c74e9fba084b.patch | 134 ---
 srcpkgs/beignet/patches/llvm06.patch          |  33 -
 srcpkgs/beignet/patches/llvm08.patch          |  56 --
 srcpkgs/beignet/patches/llvm09.patch          | 111 ---
 srcpkgs/beignet/patches/llvm10.patch          | 347 -------
 srcpkgs/beignet/patches/llvm11.patch          | 937 ------------------
 srcpkgs/beignet/patches/llvm12.patch          | 115 ---
 srcpkgs/beignet/patches/musl.patch            |  11 -
 srcpkgs/beignet/template                      |  22 -
 srcpkgs/beignet/update                        |   1 -
 srcpkgs/removed-packages/template             |   3 +-
 12 files changed, 2 insertions(+), 1790 deletions(-)
 delete mode 100644 srcpkgs/beignet/patches/cl_uint.patch
 delete mode 100644 srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm06.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm08.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm09.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm10.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm11.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm12.patch
 delete mode 100644 srcpkgs/beignet/patches/musl.patch
 delete mode 100644 srcpkgs/beignet/template
 delete mode 100644 srcpkgs/beignet/update

diff --git a/srcpkgs/beignet/patches/cl_uint.patch b/srcpkgs/beignet/patches/cl_uint.patch
deleted file mode 100644
index 86ba00f04e95..000000000000
--- a/srcpkgs/beignet/patches/cl_uint.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/src/cl_api_kernel.c	2017-09-22 10:05:22.000000000 +0200
-+++ b/src/cl_api_kernel.c	2020-03-24 18:27:40.186485887 +0100
-@@ -151,7 +151,7 @@
-         fixed_local_sz[0] = 16;
-         fixed_local_sz[1] = 1;
-       } else {
--        uint j, maxDimSize = 64 /* from 64? */, maxGroupSize = 256; //MAX_WORK_GROUP_SIZE may too large
-+        cl_uint j, maxDimSize = 64 /* from 64? */, maxGroupSize = 256; //MAX_WORK_GROUP_SIZE may too large
-         size_t realGroupSize = 1;
-         for (i = 0; i < work_dim; i++) {
-           for (j = maxDimSize; j > 1; j--) {
---- a/src/cl_enqueue.c	2017-09-22 10:05:22.000000000 +0200
-+++ b/src/cl_enqueue.c	2020-03-24 18:30:12.031479833 +0100
-@@ -494,7 +494,7 @@
- cl_int cl_enqueue_svm_free(enqueue_data *data, cl_int status) {
-   int i;
-   void **pointers = data->pointers;
--  uint num_svm_ptrs = data->size;
-+  cl_uint num_svm_ptrs = data->size;
-   cl_int err = CL_SUCCESS;
- 
-   if (status != CL_COMPLETE)
diff --git a/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch b/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
deleted file mode 100644
index 8de9e6e2f093..000000000000
--- a/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
+++ /dev/null
@@ -1,134 +0,0 @@
-From e1b2419a0008e38ef2d9d255d9e9c74e9fba084b Mon Sep 17 00:00:00 2001
-From: "Rebecca N. Palmer" <rebecca_palmer@zoho.com>
-Date: Sat, 21 Jul 2018 20:05:54 +0100
-Subject: Add preliminary LLVM 7 support
-
-This is preliminary because LLVM 7 has not been released yet:
-it was tested with the snapshot from Debian experimental (svn336894).
-
-1.Change linking order, as clangCodeGen now links to clangFrontend
-2.Pass references not pointers to WriteBitcodeToFile and CloneModule
-3.Add the headers that LoopSimplifyID, LCSSAID and
-some create*Pass have moved to
-4.Define our DEBUG whether or not we just undefined LLVM's
-(theirs is now LLVM_DEBUG, but we never actually use it)
-
-Signed-off-by: Rebecca N. Palmer <rebecca_palmer@zoho.com>
-Reviewed-by: Yang Rong <rong.r.yang@intel.com>
----
- CMake/FindLLVM.cmake                     | 2 +-
- backend/src/backend/gen_program.cpp      | 8 ++++++++
- backend/src/backend/program.cpp          | 4 ++++
- backend/src/llvm/ExpandLargeIntegers.cpp | 2 +-
- backend/src/llvm/llvm_bitcode_link.cpp   | 4 ++++
- backend/src/llvm/llvm_includes.hpp       | 4 ++++
- 6 files changed, 22 insertions(+), 2 deletions(-)
-
-diff --git a/CMake/FindLLVM.cmake b/CMake/FindLLVM.cmake
-index 5457f24..f882589 100644
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -113,10 +113,10 @@ macro(add_one_lib name)
- endmacro()
- 
- #Assume clang lib path same as llvm lib path
-+add_one_lib("clangCodeGen")
- add_one_lib("clangFrontend")
- add_one_lib("clangSerialization")
- add_one_lib("clangDriver")
--add_one_lib("clangCodeGen")
- add_one_lib("clangSema")
- add_one_lib("clangStaticAnalyzerFrontend")
- add_one_lib("clangStaticAnalyzerCheckers")
-diff --git a/backend/src/backend/gen_program.cpp b/backend/src/backend/gen_program.cpp
-index 274c99c..4159234 100644
---- a/backend/src/backend/gen_program.cpp
-+++ b/backend/src/backend/gen_program.cpp
-@@ -454,7 +454,11 @@ namespace gbe {
- #ifdef GBE_COMPILER_AVAILABLE
-       std::string str;
-       llvm::raw_string_ostream OS(str);
-+#if LLVM_VERSION_MAJOR >= 7
-+      llvm::WriteBitcodeToFile(*((llvm::Module*)prog->module), OS);
-+#else
-       llvm::WriteBitcodeToFile((llvm::Module*)prog->module, OS);
-+#endif
-       std::string& bin_str = OS.str();
-       int llsz = bin_str.size();
-       *binary = (char *)malloc(sizeof(char) * (llsz+1) );
-@@ -545,7 +549,11 @@ namespace gbe {
-                                     &modRef);
-         src = llvm::unwrap(modRef);
-       }
-+#if LLVM_VERSION_MAJOR >= 7
-+      llvm::Module* clone = llvm::CloneModule(*src).release();
-+#else
-       llvm::Module* clone = llvm::CloneModule(src).release();
-+#endif
-       if (LLVMLinkModules2(wrap(dst), wrap(clone))) {
- #elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-       if (LLVMLinkModules(wrap(dst), wrap(src), LLVMLinkerPreserveSource_Removed, &errMsg)) {
-diff --git a/backend/src/backend/program.cpp b/backend/src/backend/program.cpp
-index c37c595..b36f7b4 100644
---- a/backend/src/backend/program.cpp
-+++ b/backend/src/backend/program.cpp
-@@ -794,7 +794,11 @@ namespace gbe {
-       llvm::raw_fd_ostream ostream (dumpSPIRBinaryName.c_str(),
-                                     err, llvm::sys::fs::F_None);
-       if (!err)
-+#if LLVM_VERSION_MAJOR<7
-         llvm::WriteBitcodeToFile(*out_module, ostream);
-+#else
-+        llvm::WriteBitcodeToFile(**out_module, ostream);
-+#endif
-     }
- #endif
-     return true;
-diff --git a/backend/src/llvm/ExpandLargeIntegers.cpp b/backend/src/llvm/ExpandLargeIntegers.cpp
-index 8515dc1..4aec44e 100644
---- a/backend/src/llvm/ExpandLargeIntegers.cpp
-+++ b/backend/src/llvm/ExpandLargeIntegers.cpp
-@@ -99,8 +99,8 @@ using namespace llvm;
- 
- #ifdef DEBUG
-   #undef DEBUG
--  #define DEBUG(...)
- #endif
-+#define DEBUG(...)
- // Break instructions up into no larger than 64-bit chunks.
- static const unsigned kChunkBits = 64;
- static const unsigned kChunkBytes = kChunkBits / CHAR_BIT;
-diff --git a/backend/src/llvm/llvm_bitcode_link.cpp b/backend/src/llvm/llvm_bitcode_link.cpp
-index ef56e4c..4c3e20e 100644
---- a/backend/src/llvm/llvm_bitcode_link.cpp
-+++ b/backend/src/llvm/llvm_bitcode_link.cpp
-@@ -340,7 +340,11 @@ namespace gbe
-     /* We use beignet's bitcode as dst because it will have a lot of
-        lazy functions which will not be loaded. */
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 39
-+#if LLVM_VERSION_MAJOR >= 7
-+    llvm::Module * linked_module = llvm::CloneModule(*(llvm::Module*)mod).release();
-+#else
-     llvm::Module * linked_module = llvm::CloneModule((llvm::Module*)mod).release();
-+#endif
-     if(LLVMLinkModules2(wrap(clonedLib), wrap(linked_module))) {
- #else
-     char* errorMsg;
-diff --git a/backend/src/llvm/llvm_includes.hpp b/backend/src/llvm/llvm_includes.hpp
-index 184553a..ffccf02 100644
---- a/backend/src/llvm/llvm_includes.hpp
-+++ b/backend/src/llvm/llvm_includes.hpp
-@@ -89,6 +89,10 @@
- #include "llvm/CodeGen/IntrinsicLowering.h"
- 
- #include "llvm/Transforms/Scalar.h"
-+#if LLVM_VERSION_MAJOR >= 7
-+#include "llvm/Transforms/Utils.h"
-+#include "llvm/Transforms/InstCombine/InstCombine.h"
-+#endif
- #include "llvm/MC/MCAsmInfo.h"
- #include "llvm/MC/MCContext.h"
- #include "llvm/MC/MCInstrInfo.h"
--- 
-cgit v1.1
-
diff --git a/srcpkgs/beignet/patches/llvm06.patch b/srcpkgs/beignet/patches/llvm06.patch
deleted file mode 100644
index 3389e66c82df..000000000000
--- a/srcpkgs/beignet/patches/llvm06.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-Source: Arch Linux
-Upstream: unknown
-Reason: fixes llvm6 compilation
-
---- a/backend/src/llvm/llvm_to_gen.cpp	2017-10-24 09:04:48.000000000 +0300
-+++ b/backend/src/llvm/llvm_to_gen.cpp	2018-03-16 16:08:54.669963824 +0200
-@@ -322,7 +322,11 @@ namespace gbe
-     DataLayout DL(&mod);
-     
-     gbeDiagnosticContext dc;
-+#if LLVM_VERSION_MAJOR >= 6
-+    mod.getContext().setDiagnosticHandlerCallBack(&gbeDiagnosticHandler,&dc);
-+#else
-     mod.getContext().setDiagnosticHandler(&gbeDiagnosticHandler,&dc);
-+#endif
- 
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-     mod.setDataLayout(DL);
---- a/backend/src/llvm/llvm_unroll.cpp	2017-10-24 09:04:48.000000000 +0300
-+++ b/backend/src/llvm/llvm_unroll.cpp	2018-03-16 16:09:47.736403557 +0200
-@@ -205,7 +205,9 @@ namespace gbe {
-           if (parentTripCount != 0 && currTripCount * parentTripCount > 32) {
-             //Don't change the unrollID if doesn't force unroll.
-             //setUnrollID(parentL, false);
--#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-+#if LLVM_VERSION_MAJOR >= 6
-+            loopInfo.erase(parentL);
-+#elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-             loopInfo.markAsRemoved(parentL);
- #else
-             LPM.deleteLoopFromQueue(parentL);
-Only in Beignet-1.3.2-Source: build
-
diff --git a/srcpkgs/beignet/patches/llvm08.patch b/srcpkgs/beignet/patches/llvm08.patch
deleted file mode 100644
index a0c5e7a7c4f7..000000000000
--- a/srcpkgs/beignet/patches/llvm08.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 75c152599a7c1739e6dadcdb9b377acf7e44d9cf Mon Sep 17 00:00:00 2001
-From: Jan Beich <jbeich@FreeBSD.org>
-Date: Wed, 30 Jan 2019 12:42:34 +0000
-Subject: [PATCH] lang/beignet: unbreak with llvm80
-
-Regressed by https://github.com/llvm/llvm-project/commit/721d95713a9e
-
-unable to load /usr/local/lib/beignet//libgbeinterp.so which is part of the driver, please check!
-ld-elf.so.1: /usr/local/lib/beignet//libgbeinterp.so: Undefined symbol "_ZN4llvm24DisableABIBreakingChecksE"
-
-Regressed by https://github.com/llvm/llvm-project/commit/4a2d58e16acc
-
-backend/src/llvm/llvm_gen_backend.cpp:3076:5: error:
-      unknown type name 'TerminatorInst'
-    TerminatorInst *term = bb->getTerminator();
-    ^
-backend/src/llvm/llvm_gen_backend.cpp:3083:5: error:
-      unknown type name 'TerminatorInst'
-    TerminatorInst *term = bb->getTerminator();
-    ^
-
---- a/backend/src/CMakeLists.txt	2017-09-22 08:05:22 UTC
-+++ b/backend/src/CMakeLists.txt
-@@ -168,6 +168,7 @@ add_dependencies(gbe beignet_bitcode)
- endif (NOT (USE_STANDALONE_GBE_COMPILER STREQUAL "true"))
- 
- add_library(gbeinterp SHARED gbe_bin_interpreter.cpp)
-+target_link_libraries(gbeinterp ${LLVM_MODULE_LIBS})
- 
- if (LLVM_VERSION_NODOT VERSION_EQUAL 34)
-   find_library(TERMINFO NAMES tinfo ncurses)
---- a/backend/src/llvm/llvm_gen_backend.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -3073,14 +3073,22 @@ namespace gbe
- 
- 
-   static unsigned getChildNo(BasicBlock *bb) {
-+#if LLVM_VERSION_MAJOR < 8
-     TerminatorInst *term = bb->getTerminator();
-+#else
-+    Instruction *term = bb->getTerminator();
-+#endif
-     return term->getNumSuccessors();
-   }
- 
-   // return NULL if index out-range of children number
-   static BasicBlock *getChildPossible(BasicBlock *bb, unsigned index) {
- 
-+#if LLVM_VERSION_MAJOR < 8
-     TerminatorInst *term = bb->getTerminator();
-+#else
-+    Instruction *term = bb->getTerminator();
-+#endif
-     unsigned childNo = term->getNumSuccessors();
-     BasicBlock *child = NULL;
-     if(index < childNo) {
diff --git a/srcpkgs/beignet/patches/llvm09.patch b/srcpkgs/beignet/patches/llvm09.patch
deleted file mode 100644
index acaeceabb6dd..000000000000
--- a/srcpkgs/beignet/patches/llvm09.patch
+++ /dev/null
@@ -1,111 +0,0 @@
-Source: FreeBSD + q66
-
-Mostly FreeBSD other than FindLLVM.cmake changes.
-Linking against clang-cpp does not work for us.
-
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -140,6 +140,7 @@ add_one_lib("clangStaticAnalyzerCore")
- add_one_lib("clangAnalysis")
- add_one_lib("clangEdit")
- add_one_lib("clangAST")
-+add_one_lib("clangASTMatchers")
- add_one_lib("clangParse")
- add_one_lib("clangSema")
- add_one_lib("clangLex")
---- a/backend/src/llvm/llvm_intrinsic_lowering.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_intrinsic_lowering.cpp
-@@ -77,7 +77,11 @@ namespace gbe {
-         std::vector<Type *> ParamTys;
-         for (Value** I = ArgBegin; I != ArgEnd; ++I)
-           ParamTys.push_back((*I)->getType());
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+        FunctionCallee FCache = M->getOrInsertFunction(NewFn,
-+#else
-         Constant* FCache = M->getOrInsertFunction(NewFn,
-+#endif
-                                         FunctionType::get(RetTy, ParamTys, false));
- 
-         IRBuilder<> Builder(CI->getParent(), BasicBlock::iterator(CI));
---- a/backend/src/llvm/llvm_sampler_fix.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp
-@@ -82,7 +82,11 @@ namespace gbe {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-           Module *M = I->getParent()->getParent()->getParent();
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+          FunctionCallee samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#endif
- #else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType(), nullptr);
- #endif
-@@ -124,7 +128,11 @@ namespace gbe {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-           Module *M = I->getParent()->getParent()->getParent();
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+          FunctionCallee samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#endif
- #else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType(), nullptr);
- #endif
---- a/backend/src/llvm/llvm_profiling.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_profiling.cpp
-@@ -163,10 +163,18 @@ namespace gbe
-       // __gen_ocl_store_timestamp(int nth, int type);
-       Value *Args[2] = {ConstantInt::get(intTy, pointNum++), ConstantInt::get(intTy, profilingType)};
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+      builder->CreateCall(module->getOrInsertFunction(
-+#else
-       builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-+#endif
-               "__gen_ocl_calc_timestamp", Type::getVoidTy(module->getContext()),
-               IntegerType::getInt32Ty(module->getContext()),
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+              IntegerType::getInt32Ty(module->getContext())),
-+#else
-               IntegerType::getInt32Ty(module->getContext()))),
-+#endif
-               ArrayRef<Value*>(Args));
- #else
-       builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-@@ -185,10 +193,18 @@ namespace gbe
-     Value *Args2[2] = {profilingBuf, ConstantInt::get(intTy, profilingType)};
- 
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+    builder->CreateCall(module->getOrInsertFunction(
-+#else
-     builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-+#endif
-             "__gen_ocl_store_profiling", Type::getVoidTy(module->getContext()),
-             ptrTy,
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+            IntegerType::getInt32Ty(module->getContext())),
-+#else
-             IntegerType::getInt32Ty(module->getContext()))),
-+#endif
-             ArrayRef<Value*>(Args2));
- #else
-     builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
---- a/backend/src/llvm/llvm_device_enqueue.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_device_enqueue.cpp
-@@ -398,8 +398,13 @@ namespace gbe {
-               std::vector<Type *> ParamTys;
-               for (Value** iter = args.begin(); iter != args.end(); ++iter)
-                 ParamTys.push_back((*iter)->getType());
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+              CallInst* newCI = builder.CreateCall(mod->getOrInsertFunction(
-+                              "__gen_enqueue_kernel_slm", FunctionType::get(intTy, ParamTys, false)), args);
-+#else
-               CallInst* newCI = builder.CreateCall(cast<llvm::Function>(mod->getOrInsertFunction(
-                               "__gen_enqueue_kernel_slm", FunctionType::get(intTy, ParamTys, false))), args);
-+#endif
-               CI->replaceAllUsesWith(newCI);
-               deadInsnSet.insert(CI);
-             }
diff --git a/srcpkgs/beignet/patches/llvm10.patch b/srcpkgs/beignet/patches/llvm10.patch
deleted file mode 100644
index 8aafe48a240d..000000000000
--- a/srcpkgs/beignet/patches/llvm10.patch
+++ /dev/null
@@ -1,347 +0,0 @@
-diff --git CMake/FindLLVM.cmake CMake/FindLLVM.cmake
-index 0a59e47..6e90923 100644
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -104,28 +104,16 @@ string(REGEX REPLACE " *\n" "" LLVM_SYSTEM_LIBS ${LLVM_SYSTEM_LIBS_ORIG})
- endif (LLVM_SYSTEM_LIBS_ORIG)
- endif (LLVM_VERSION_NODOT VERSION_GREATER 34)
- 
-+#something harmless because whitespace at start is an error
-+set(CLANG_LIBRARIES "-ldl")
- macro(add_one_lib name)
-   FIND_LIBRARY(CLANG_LIB
-     NAMES ${name}
-     PATHS ${LLVM_LIBRARY_DIR} NO_DEFAULT_PATH)
--  set(CLANG_LIBRARIES ${CLANG_LIBRARIES} ${CLANG_LIB})
-+  set(CLANG_LIBRARIES "${CLANG_LIBRARIES} ${CLANG_LIB}")
-+  message(STATUS "clanglibs name ${name} this ${CLANG_LIB} all ${CLANG_LIBRARIES} ")
- 	unset(CLANG_LIB CACHE)
- endmacro()
- 
- #Assume clang lib path same as llvm lib path
--add_one_lib("clangCodeGen")
--add_one_lib("clangFrontend")
--add_one_lib("clangSerialization")
--add_one_lib("clangDriver")
--add_one_lib("clangSema")
--add_one_lib("clangStaticAnalyzerFrontend")
--add_one_lib("clangStaticAnalyzerCheckers")
--add_one_lib("clangStaticAnalyzerCore")
--add_one_lib("clangAnalysis")
--add_one_lib("clangEdit")
--add_one_lib("clangAST")
--add_one_lib("clangASTMatchers")
--add_one_lib("clangParse")
--add_one_lib("clangSema")
--add_one_lib("clangLex")
--add_one_lib("clangBasic")
-+add_one_lib("clang-cpp")
-diff --git CMakeLists.txt CMakeLists.txt
-index c11acbb..08f427d 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -79,7 +79,7 @@ elseif (COMPILER STREQUAL "CLANG")
- elseif (COMPILER STREQUAL "ICC")
-   set (CMAKE_C_CXX_FLAGS "${CMAKE_C_CXX_FLAGS}  -wd2928 -Wall -fPIC -fstrict-aliasing -fp-model fast -msse4.1 -Wl,-E")
- endif ()
--set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
-+set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof")
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
- set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
- set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
-diff --git backend/src/backend/program.cpp backend/src/backend/program.cpp
-index b36f7b4..e666031 100644
---- a/backend/src/backend/program.cpp
-+++ b/backend/src/backend/program.cpp
-@@ -694,9 +694,9 @@ namespace gbe {
- #endif
-                 );
- 
-+    llvm::cl::ResetAllOptionOccurrences();
-     clang::CompilerInvocation::CreateFromArgs(*CI,
--                                              &args[0],
--                                              &args[0] + args.size(),
-+                                              clang::ArrayRef<const char*>(args),
-                                               Diags);
-     // Create the compiler instance
-     clang::CompilerInstance Clang;
-@@ -1242,8 +1242,7 @@ EXTEND_QUOTE:
-       // Create the compiler invocation
-       std::unique_ptr<clang::CompilerInvocation> CI(new clang::CompilerInvocation);
-       return clang::CompilerInvocation::CreateFromArgs(*CI,
--                                                       &args[0],
--                                                       &args[0] + args.size(),
-+                                                       clang::ArrayRef<const char*>(args),
-                                                        Diags);
-     }
- #endif
-diff --git backend/src/llvm/llvm_gen_backend.cpp backend/src/llvm/llvm_gen_backend.cpp
-index c6fc30d..82441d8 100644
---- a/backend/src/llvm/llvm_gen_backend.cpp
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -575,10 +575,12 @@ namespace gbe
-         has_errors(false),
-         legacyMode(true)
-     {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-       initializeLoopInfoWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeLoopInfoPass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-       pass = PASS_EMIT_REGISTERS;
-     }
-diff --git backend/src/llvm/llvm_gen_backend.hpp backend/src/llvm/llvm_gen_backend.hpp
-index b4715b1..8e74f7a 100644
---- a/backend/src/llvm/llvm_gen_backend.hpp
-+++ b/backend/src/llvm/llvm_gen_backend.hpp
-@@ -130,10 +130,10 @@ namespace gbe
-   llvm::FunctionPass *createGenPass(ir::Unit &unit);
- 
-   /*! Remove the GEP instructions */
--  llvm::BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit);
-+  llvm::FunctionPass *createRemoveGEPPass(const ir::Unit &unit);
- 
-   /*! Merge load/store if possible */
--  llvm::BasicBlockPass *createLoadStoreOptimizationPass();
-+  llvm::FunctionPass *createLoadStoreOptimizationPass();
- 
-   /*! Scalarize all vector op instructions */
-   llvm::FunctionPass* createScalarizePass();
-@@ -141,7 +141,7 @@ namespace gbe
-   llvm::ModulePass* createBarrierNodupPass(bool);
- 
-   /*! Convert the Intrinsic call to gen function */
--  llvm::BasicBlockPass *createIntrinsicLoweringPass();
-+  llvm::FunctionPass *createIntrinsicLoweringPass();
- 
-   /*! Passer the printf function call. */
-   llvm::FunctionPass* createPrintfParserPass(ir::Unit &unit);
-diff --git backend/src/llvm/llvm_intrinsic_lowering.cpp backend/src/llvm/llvm_intrinsic_lowering.cpp
-index 94f0ce6..b5539e9 100644
---- a/backend/src/llvm/llvm_intrinsic_lowering.cpp
-+++ b/backend/src/llvm/llvm_intrinsic_lowering.cpp
-@@ -29,12 +29,12 @@
- using namespace llvm;
- 
- namespace gbe {
--    class InstrinsicLowering : public BasicBlockPass
-+    class InstrinsicLowering : public FunctionPass
-     {
-     public:
-       static char ID;
-       InstrinsicLowering() :
--        BasicBlockPass(ID) {}
-+        FunctionPass(ID) {}
- 
-       void getAnalysisUsage(AnalysisUsage &AU) const {
- 
-@@ -93,9 +93,9 @@ namespace gbe {
-         CI->eraseFromParent();
-         return NewCI;
-       }
--      virtual bool runOnBasicBlock(BasicBlock &BB)
-+      virtual bool runOnFunction(Function &F)
-       {
--        bool changedBlock = false;
-+        for (BasicBlock &BB : F) {
-         Module *M = BB.getParent()->getParent();
- 
-         DataLayout TD(M);
-@@ -159,13 +159,14 @@ namespace gbe {
-             }
-           }
-         }
--        return changedBlock;
-+        }
-+        return true;
-       }
-     };
- 
-     char InstrinsicLowering::ID = 0;
- 
--    BasicBlockPass *createIntrinsicLoweringPass() {
-+    FunctionPass *createIntrinsicLoweringPass() {
-       return new InstrinsicLowering();
-     }
- } // end namespace
-diff --git backend/src/llvm/llvm_loadstore_optimization.cpp backend/src/llvm/llvm_loadstore_optimization.cpp
-index 5aa38be..e314302 100644
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
-@@ -26,13 +26,13 @@
- 
- using namespace llvm;
- namespace gbe {
--  class GenLoadStoreOptimization : public BasicBlockPass {
-+  class GenLoadStoreOptimization : public FunctionPass {
- 
-   public:
-     static char ID;
-     ScalarEvolution *SE;
-     const DataLayout *TD;
--    GenLoadStoreOptimization() : BasicBlockPass(ID) {}
-+    GenLoadStoreOptimization() : FunctionPass(ID) {}
- 
-     void getAnalysisUsage(AnalysisUsage &AU) const {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-@@ -45,7 +45,9 @@ namespace gbe {
-       AU.setPreservesCFG();
-     }
- 
--    virtual bool runOnBasicBlock(BasicBlock &BB) {
-+    virtual bool runOnFunction(Function &F) {
-+        bool changedAnyBlock = false;
-+        for (BasicBlock &BB : F) {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-       SE = &getAnalysis<ScalarEvolutionWrapperPass>().getSE();
- #else
-@@ -59,7 +61,9 @@ namespace gbe {
-       #else
-         TD = getAnalysisIfAvailable<DataLayout>();
-       #endif
--      return optimizeLoadStore(BB);
-+           changedAnyBlock = optimizeLoadStore(BB) | changedAnyBlock;
-+        }
-+        return changedAnyBlock;
-     }
-     Type    *getValueType(Value *insn);
-     Value   *getPointerOperand(Value *I);
-@@ -148,7 +152,7 @@ namespace gbe {
-       values.push_back(merged[i]);
-     }
-     LoadInst *ld = cast<LoadInst>(merged[0]);
--    unsigned align = ld->getAlignment();
-+    MaybeAlign align = ld->getAlign();
-     unsigned addrSpace = ld->getPointerAddressSpace();
-     // insert before first load
-     Builder.SetInsertPoint(ld);
-@@ -231,7 +235,7 @@ namespace gbe {
- 
-     unsigned addrSpace = st->getPointerAddressSpace();
- 
--    unsigned align = st->getAlignment();
-+    MaybeAlign align = st->getAlign();
-     // insert before the last store
-     Builder.SetInsertPoint(merged[size-1]);
- 
-@@ -325,7 +329,7 @@ namespace gbe {
-     return changed;
-   }
- 
--  BasicBlockPass *createLoadStoreOptimizationPass() {
-+  FunctionPass *createLoadStoreOptimizationPass() {
-     return new GenLoadStoreOptimization();
-   }
- };
-diff --git backend/src/llvm/llvm_passes.cpp backend/src/llvm/llvm_passes.cpp
-index 10752a3..b8f2282 100644
---- a/backend/src/llvm/llvm_passes.cpp
-+++ b/backend/src/llvm/llvm_passes.cpp
-@@ -37,7 +37,7 @@
- #include "sys/map.hpp"
- 
- using namespace llvm;
--
-+template class cfg::Update<BasicBlock *>;
- namespace gbe
- {
-   bool isKernelFunction(const llvm::Function &F) {
-@@ -219,13 +219,13 @@ namespace gbe
-     return offset;
-   }
- 
--  class GenRemoveGEPPasss : public BasicBlockPass
-+  class GenRemoveGEPPasss : public FunctionPass
-   {
- 
-    public:
-     static char ID;
-     GenRemoveGEPPasss(const ir::Unit &unit) :
--      BasicBlockPass(ID),
-+      FunctionPass(ID),
-       unit(unit) {}
-     const ir::Unit &unit;
-     void getAnalysisUsage(AnalysisUsage &AU) const {
-@@ -242,16 +242,18 @@ namespace gbe
- 
-     bool simplifyGEPInstructions(GetElementPtrInst* GEPInst);
- 
--    virtual bool runOnBasicBlock(BasicBlock &BB)
-+    virtual bool runOnFunction(Function &F)
-     {
--      bool changedBlock = false;
-+      bool changedAnyBlock = false;
-+        for (BasicBlock &BB : F) {
-       iplist<Instruction>::iterator I = BB.getInstList().begin();
-       for (auto nextI = I, E = --BB.getInstList().end(); I != E; I = nextI) {
-         iplist<Instruction>::iterator I = nextI++;
-         if(GetElementPtrInst* gep = dyn_cast<GetElementPtrInst>(&*I))
--          changedBlock = (simplifyGEPInstructions(gep) || changedBlock);
-+          changedAnyBlock = (simplifyGEPInstructions(gep) | changedAnyBlock);
-       }
--      return changedBlock;
-+        }
-+      return changedAnyBlock;
-     }
-   };
- 
-@@ -367,7 +369,7 @@ namespace gbe
-     return true;
-   }
- 
--  BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit) {
-+  FunctionPass *createRemoveGEPPass(const ir::Unit &unit) {
-     return new GenRemoveGEPPasss(unit);
-   }
- } /* namespace gbe */
-diff --git backend/src/llvm/llvm_sampler_fix.cpp backend/src/llvm/llvm_sampler_fix.cpp
-index 2a097c8..863be6d 100644
---- a/backend/src/llvm/llvm_sampler_fix.cpp
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp
-@@ -33,10 +33,12 @@ namespace gbe {
-   class SamplerFix : public FunctionPass {
-   public:
-     SamplerFix() : FunctionPass(ID) {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
-       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-     }
- 
-diff --git backend/src/llvm/llvm_scalarize.cpp backend/src/llvm/llvm_scalarize.cpp
-index e9a2a66..e9d2ee4 100644
---- a/backend/src/llvm/llvm_scalarize.cpp
-+++ b/backend/src/llvm/llvm_scalarize.cpp
-@@ -96,10 +96,12 @@ namespace gbe {
- 
-     Scalarize() : FunctionPass(ID)
-     {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
-       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-     }
- 
-diff --git utests/CMakeLists.txt utests/CMakeLists.txt
-index 300d87a..64179c7 100644
---- a/utests/CMakeLists.txt
-+++ b/utests/CMakeLists.txt
-@@ -26,8 +26,8 @@ if (NOT NOT_BUILD_STAND_ALONE_UTEST)
-   # Threads
-   Find_Package(Threads)
- 
--  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
--  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
-+  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof -ffloat-store -fno-strict-aliasing")
-+  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS} -ffloat-store -fno-strict-aliasing") #compiler_{degrees,radians,function_argument2} use equality comparison of floats, compiler_long_bitcast uses aliasing
-   set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
-   set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
-   set (CMAKE_CXX_FLAGS_MINSIZEREL     "-Os -DNDEBUG -DGBE_DEBUG=0")
diff --git a/srcpkgs/beignet/patches/llvm11.patch b/srcpkgs/beignet/patches/llvm11.patch
deleted file mode 100644
index 2c3a4278943c..000000000000
--- a/srcpkgs/beignet/patches/llvm11.patch
+++ /dev/null
@@ -1,937 +0,0 @@
-Source: Snektron
-
-There were a few changes required for LLVM 11:
-* llvm::StringRef requires .str(), implicit conversion was removed
-* llvm::CallSite was removed, but the required methods are available on llvm::CallInst
-* VectorTyID was split into FixedVectorTyID and ScalableVectorTyID, FixedVectorTyID was used
-* CallInst::getCalledValue() was renamed to CallInst::getCalledOperand()
-* Implicit conversion from MaybeAlign to Align was removed, so MaybeAlign::valueOrOne was used instead.
-
---- a/backend/src/llvm/StripAttributes.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/StripAttributes.cpp	2020-11-09 19:04:19.641897141 +0100
-@@ -107,9 +107,8 @@
-        BB != E; ++BB) {
-     for (BasicBlock::iterator Inst = BB->begin(), E = BB->end();
-          Inst != E; ++Inst) {
--      CallSite Call(&*Inst);
--      if (Call)
--        Call.setCallingConv(CallingConv::C);
-+      if (CallInst* callInst = dyn_cast<CallInst>(&*Inst))
-+        callInst->setCallingConv(CallingConv::C);
-     }
-   }
-
---- a/backend/src/llvm/llvm_bitcode_link.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_bitcode_link.cpp	2020-11-09 17:04:09.633753428 +0100
-@@ -98,7 +98,7 @@
-         if (callFunc && callFunc->getIntrinsicID() != 0)
-           continue;
-
--        std::string fnName = call->getCalledValue()->stripPointerCasts()->getName();
-+        std::string fnName = call->getCalledOperand()->stripPointerCasts()->getName().str();
-
-         if (!MFS.insert(fnName).second) {
-           continue;
---- a/backend/src/llvm/llvm_device_enqueue.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_device_enqueue.cpp	2020-11-09 19:01:49.201915008 +0100
-@@ -45,7 +45,7 @@
-       return NULL;
-
-     /* This is a fake, to check the function bitcast is for block or not */
--    std::string fnName = Fn->getName();
-+    std::string fnName = Fn->getName().str();
-     if(fnName.find("_invoke") == std::string::npos)
-       return NULL;
-
-@@ -119,18 +119,18 @@
-       ParamTys.push_back(ty);
-     }
-     FunctionType* NewFT = FunctionType::get(Fn->getReturnType(), ParamTys, false);
--    Function* NewFn = Function::Create(NewFT, Function::ExternalLinkage, Fn->getName());
-+    Function* NewFn = Function::Create(NewFT, Function::ExternalLinkage, Fn->getName().str());
-     SmallVector<ReturnInst*, 8> Returns;
-
-     Function::arg_iterator NewFnArgIt = NewFn->arg_begin();
-     for (Function::arg_iterator I = Fn->arg_begin(), E = Fn->arg_end(); I != E; ++I) {
--      std::string ArgName = I->getName();
-+      std::string ArgName = I->getName().str();
-       NewFnArgIt->setName(ArgName);
-       VMap[&*I] = &(*NewFnArgIt++);
-     }
-     CloneFunctionInto(NewFn, Fn, VMap, /*ModuleLevelChanges=*/true, Returns);
-
--    Fn->setName("__d" + Fn->getName());
-+    Fn->setName("__d" + Fn->getName().str());
-     mod->getFunctionList().push_back(NewFn);
-     //mod->getOrInsertFunction(NewFn->getName(), NewFn->getFunctionType(),
-     //                         NewFn->getAttributes());
-@@ -147,7 +147,7 @@
-       argTypeNames.push_back(llvm::MDString::get(Context, "char*"));
-       argBaseTypeNames.push_back(llvm::MDString::get(Context, "char*"));
-       argTypeQuals.push_back(llvm::MDString::get(Context, ""));
--      argNames.push_back(llvm::MDString::get(Context, I->getName()));
-+      argNames.push_back(llvm::MDString::get(Context, I->getName().str()));
-     }
-
-     //If run to here, llvm version always > 3.9, add the version check just for build.
-@@ -198,7 +198,7 @@
-            * invoke pointer to store the index in the unit's block functions index.*/
-           Function *Fn = dyn_cast<Function>(bt->getOperand(0));
-
--          std::string fnName = Fn->getName();
-+          std::string fnName = Fn->getName().str();
-           int index = -1;
-           for(size_t i=0; i<unit.blockFuncs.size(); i++) {
-             if(unit.blockFuncs[i] == fnName) {
-@@ -241,7 +241,7 @@
-             //unnamed call function, parse the use to find the define of called function
-             SmallVector<Value*, 16> args(CI->op_begin(), CI->op_end()-1);
-
--            Value *v = CI->getCalledValue();
-+            Value *v = CI->getCalledOperand();
-             BitCastInst* bt = dyn_cast<BitCastInst>(v);
-             if(bt == NULL)
-               continue;
-@@ -316,7 +316,7 @@
-                   ConstantExpr *expr = dyn_cast<ConstantExpr>(c->getOperand(3));
-                   BitCastInst *bt = dyn_cast<BitCastInst>(expr->getAsInstruction());
-                   Function* f = dyn_cast<Function>(bt->getOperand(0));
--                  blocks[v] = f->getName();
-+                  blocks[v] = f->getName().str();
-                 }
-               }
-
-@@ -332,7 +332,7 @@
-           } else {
-             //handle enqueue_kernel function call
-             Function *fn = CI->getCalledFunction();
--            if (fn->getName().find("enqueue_kernel") == std::string::npos)
-+            if (fn->getName().str().find("enqueue_kernel") == std::string::npos)
-               continue;
-
-             //block parameter's index, 3 or 6
-@@ -361,7 +361,7 @@
-                   ConstantExpr *expr = dyn_cast<ConstantExpr>(c->getOperand(3));
-                   BitCastInst *bt = dyn_cast<BitCastInst>(expr->getAsInstruction());
-                   Function* f = dyn_cast<Function>(bt->getOperand(0));
--                  blocks[v] = f->getName();
-+                  blocks[v] = f->getName().str();
-                 }
-               }
-             } else if(isa<AllocaInst>(block)) {
---- a/backend/src/llvm/llvm_gen_backend.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_gen_backend.cpp	2020-11-09 18:33:50.919114327 +0100
-@@ -376,7 +376,7 @@
-           GBE_ASSERT(index == 0);
-           return this->_newScalar(value, key, type, index, uniform);
-           break;
--        case Type::VectorTyID:
-+        case Type::FixedVectorTyID:
-         {
-           auto vectorType = cast<VectorType>(type);
-           auto elementType = vectorType->getElementType();
-@@ -743,20 +743,20 @@
- #undef DECL_VISIT_FN
-
-     // Emit rounding instructions from gen native function
--    void emitRoundingCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode);
-+    void emitRoundingCallInst(CallInst &I, ir::Opcode opcode);
-     // Emit unary instructions from gen native function
--    void emitUnaryCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode, ir::Type = ir::TYPE_FLOAT);
-+    void emitUnaryCallInst(CallInst &I, ir::Opcode opcode, ir::Type = ir::TYPE_FLOAT);
-     // Emit unary instructions from gen native function
--    void emitAtomicInst(CallInst &I, CallSite &CS, ir::AtomicOps opcode);
-+    void emitAtomicInst(CallInst &I, ir::AtomicOps opcode);
-     // Emit workgroup instructions
--    void emitWorkGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode);
-+    void emitWorkGroupInst(CallInst &I, ir::WorkGroupOps opcode);
-     // Emit subgroup instructions
--    void emitSubGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode);
-+    void emitSubGroupInst(CallInst &I, ir::WorkGroupOps opcode);
-     // Emit subgroup instructions
--    void emitBlockReadWriteMemInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
--    void emitBlockReadWriteImageInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-+    void emitBlockReadWriteMemInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-+    void emitBlockReadWriteImageInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-
--    uint8_t appendSampler(CallSite::arg_iterator AI);
-+    uint8_t appendSampler(User::op_iterator AI);
-     uint8_t getImageID(CallInst &I);
-
-     // These instructions are not supported at all
-@@ -1320,13 +1320,13 @@
- #endif
-
-       if(typeNameNode) {
--        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
-+        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-       }
-       if(typeBaseNameNode) {
--        llvmInfo.typeBaseName= (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString();
-+        llvmInfo.typeBaseName= (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString().str();
-       }
--      llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
--      llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString();
-+      llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-+      llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString().str();
-       bool isImage = llvmInfo.isImageType();
-       bool isPipe = llvmInfo.isPipeType();
-       if (I->getType()->isPointerTy() || isImage || isPipe) {
-@@ -1531,7 +1531,7 @@
-             EltTy = getEltType(EltTy, TypeIndex);
-         }
-
--        ir::Constant cc = unit.getConstantSet().getConstant(pointer->getName());
-+        ir::Constant cc = unit.getConstantSet().getConstant(pointer->getName().str());
-         unsigned int defOffset = cc.getOffset();
-         relocs.push_back(ir::RelocEntry(offset, defOffset + constantOffset));
-
-@@ -1546,7 +1546,7 @@
-       return;
-     }
-     if (isa<GlobalVariable>(c)) {
--      ir::Constant cc = unit.getConstantSet().getConstant(c->getName());
-+      ir::Constant cc = unit.getConstantSet().getConstant(c->getName().str());
-       unsigned int defOffset = cc.getOffset();
-
-       relocs.push_back(ir::RelocEntry(offset, defOffset));
-@@ -1609,7 +1609,7 @@
-           }
-           break;
-         }
--      case Type::TypeID::VectorTyID:
-+      case Type::TypeID::FixedVectorTyID:
-         {
-           const ConstantDataSequential *cds = dyn_cast<ConstantDataSequential>(c);
-           const VectorType *vecTy = cast<VectorType>(type);
-@@ -1936,7 +1936,7 @@
-       case Type::PointerTyID:
-         regTranslator.newScalar(value, key, 0, uniform);
-         break;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         auto vectorType = cast<VectorType>(type);
-         const uint32_t elemNum = vectorType->getNumElements();
-@@ -2395,7 +2395,7 @@
- #endif
-         }
-         if(typeNameNode) {
--          llvmInfo.typeName = (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
-+          llvmInfo.typeName = (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-           //LLVM 3.9 image's type name include access qual, don't match OpenCL spec, erase them.
-           std::vector<std::string> filters = {"__read_only ", "__write_only "};
-           for (uint32_t i = 0; i < filters.size(); i++) {
-@@ -2406,16 +2406,16 @@
-           }
-         }
-         if(typeBaseNameNode){
--          llvmInfo.typeBaseName = (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString();
-+          llvmInfo.typeBaseName = (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString().str();
-         }
-         if(accessQualNode) {
--          llvmInfo.accessQual = (cast<MDString>(accessQualNode->getOperand(opID)))->getString();
-+          llvmInfo.accessQual = (cast<MDString>(accessQualNode->getOperand(opID)))->getString().str();
-         }
-         if(typeQualNode) {
--          llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString();
-+          llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString().str();
-         }
-         if(argNameNode){
--          llvmInfo.argName = (cast<MDString>(argNameNode->getOperand(opID)))->getString();
-+          llvmInfo.argName = (cast<MDString>(argNameNode->getOperand(opID)))->getString().str();
-         }
-
-         // function arguments are uniform values.
-@@ -3010,7 +3010,7 @@
-         } else {
-           this->newRegister(const_cast<GlobalVariable*>(&v));
-           ir::Register reg = regTranslator.getScalar(const_cast<GlobalVariable*>(&v), 0);
--          ir::Constant &con = unit.getConstantSet().getConstant(v.getName());
-+          ir::Constant &con = unit.getConstantSet().getConstant(v.getName().str());
-           if (!legacyMode) {
-             ir::Register regload = ctx.reg(getFamily(getType(ctx, v.getType())));
-             ctx.LOADI(getType(ctx, v.getType()), regload, ctx.newIntegerImmediate(con.getOffset(), getType(ctx, v.getType())));
-@@ -3212,7 +3212,7 @@
-         GBE_ASSERTM(false, "Unsupported calling convention");
-     }
-
--    ctx.startFunction(F.getName());
-+    ctx.startFunction(F.getName().str());
-
-     ir::Function &fn = ctx.getFunction();
-     this->regTranslator.clear();
-@@ -3810,9 +3810,9 @@
-
-   void GenWriter::regAllocateCallInst(CallInst &I) {
-     Value *dst = &I;
--    Value *Callee = I.getCalledValue();
-+    Value *Callee = I.getCalledOperand();
-     GBE_ASSERT(ctx.getFunction().getProfile() == ir::PROFILE_OCL);
--    GBE_ASSERT(isa<InlineAsm>(I.getCalledValue()) == false);
-+    GBE_ASSERT(isa<InlineAsm>(I.getCalledOperand()) == false);
-     if(I.getNumArgOperands()) GBE_ASSERT(I.hasStructRetAttr() == false);
-
-     // We only support a small number of intrinsics right now
-@@ -3870,7 +3870,7 @@
-       }
-     }
-     // Get the name of the called function and handle it
--    const std::string fnName = Callee->stripPointerCasts()->getName();
-+    const std::string fnName = Callee->stripPointerCasts()->getName().str();
-     auto genIntrinsicID = intrinsicMap.find(fnName);
-     switch (genIntrinsicID) {
-       case GEN_OCL_GET_GROUP_ID0:
-@@ -4166,7 +4166,7 @@
-     };
-   }
-
--  void GenWriter::emitRoundingCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode) {
-+  void GenWriter::emitRoundingCallInst(CallInst &I, ir::Opcode opcode) {
-     if (I.getType()->isHalfTy()) {
-       const ir::Register src = this->getRegister(I.getOperand(0));
-       const ir::Register srcFloat = ctx.reg(ir::FAMILY_DWORD);
-@@ -4177,14 +4177,14 @@
-       ctx.F32TO16(ir::TYPE_U16, ir::TYPE_FLOAT, dst, dstFloat);
-     } else {
-       GBE_ASSERT(I.getType()->isFloatTy());
--      this->emitUnaryCallInst(I,CS,opcode);
-+      this->emitUnaryCallInst(I,opcode);
-     }
-   }
-
--  void GenWriter::emitUnaryCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
-+  void GenWriter::emitUnaryCallInst(CallInst &I, ir::Opcode opcode, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--    CallSite::arg_iterator AE = CS.arg_end();
-+    User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-     GBE_ASSERT(AI != AE);
-     const ir::Register src = this->getRegister(*AI);
-@@ -4293,9 +4293,9 @@
-     this->emitAtomicInstHelper(opcode, type, dst, llvmPtr, payloadTuple);
-   }
-
--  void GenWriter::emitAtomicInst(CallInst &I, CallSite &CS, ir::AtomicOps opcode) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitAtomicInst(CallInst &I, ir::AtomicOps opcode) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-     Value *llvmPtr = *AI;
-     ir::AddressSpace addrSpace = addressSpaceLLVMToGen(llvmPtr->getType()->getPointerAddressSpace());
-@@ -4348,7 +4348,7 @@
-     }
-   }
-
--  void GenWriter::emitWorkGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode) {
-+  void GenWriter::emitWorkGroupInst(CallInst &I, ir::WorkGroupOps opcode) {
-     ir::Function &f = ctx.getFunction();
-
-     if (f.getwgBroadcastSLM() < 0 && opcode == ir::WORKGROUP_OP_BROADCAST) {
-@@ -4378,8 +4378,8 @@
-       GBE_ASSERT(f.gettidMapSLM() >= 0);
-     }
-
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     if (opcode == ir::WORKGROUP_OP_ALL || opcode == ir::WORKGROUP_OP_ANY) {
-@@ -4391,14 +4391,14 @@
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], 3);
-       ctx.WORKGROUP(opcode, (uint32_t)f.gettidMapSLM(), getRegister(&I), srcTuple, 3, ir::TYPE_S32);
-     } else if (opcode == ir::WORKGROUP_OP_BROADCAST) {
--      int argNum = CS.arg_size();
-+      int argNum = I.arg_size();
-       std::vector<ir::Register> src(argNum);
-       for (int i = 0; i < argNum; i++) {
-         src[i] = this->getRegister(*(AI++));
-       }
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], argNum);
-       ctx.WORKGROUP(ir::WORKGROUP_OP_BROADCAST, (uint32_t)f.getwgBroadcastSLM(), getRegister(&I), srcTuple, argNum,
--          getType(ctx, (*CS.arg_begin())->getType()));
-+          getType(ctx, (*I.arg_begin())->getType()));
-     } else {
-       ConstantInt *sign = dyn_cast<ConstantInt>(AI);
-       GBE_ASSERT(sign);
-@@ -4423,9 +4423,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitSubGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitSubGroupInst(CallInst &I, ir::WorkGroupOps opcode) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     if (opcode == ir::WORKGROUP_OP_ALL || opcode == ir::WORKGROUP_OP_ANY) {
-@@ -4435,7 +4435,7 @@
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], 1);
-       ctx.SUBGROUP(opcode, getRegister(&I), srcTuple, 1, ir::TYPE_S32);
-     } else if (opcode == ir::WORKGROUP_OP_BROADCAST) {
--      int argNum = CS.arg_size();
-+      int argNum = I.arg_size();
-       GBE_ASSERT(argNum == 2);
-       std::vector<ir::Register> src(argNum);
-       for (int i = 0; i < argNum; i++) {
-@@ -4443,7 +4443,7 @@
-       }
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], argNum);
-       ctx.SUBGROUP(ir::WORKGROUP_OP_BROADCAST, getRegister(&I), srcTuple, argNum,
--          getType(ctx, (*CS.arg_begin())->getType()));
-+          getType(ctx, (*I.arg_begin())->getType()));
-     } else {
-       ConstantInt *sign = dyn_cast<ConstantInt>(AI);
-       GBE_ASSERT(sign);
-@@ -4466,9 +4466,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitBlockReadWriteMemInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitBlockReadWriteMemInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     Value *llvmPtr = *(AI++);
-@@ -4522,9 +4522,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitBlockReadWriteImageInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitBlockReadWriteImageInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     const uint8_t imageID = getImageID(I);
-@@ -4557,7 +4557,7 @@
-
-   /* append a new sampler. should be called before any reference to
-    * a sampler_t value. */
--  uint8_t GenWriter::appendSampler(CallSite::arg_iterator AI) {
-+  uint8_t GenWriter::appendSampler(User::op_iterator AI) {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-     CallInst *TC = dyn_cast<CallInst>(*AI);
-     Constant *CPV = TC ? dyn_cast<Constant>(TC->getOperand(0)) : NULL;
-@@ -4595,10 +4595,9 @@
-         const ir::Function &fn = ctx.getFunction();
-
-         // Get the function arguments
--        CallSite CS(&I);
--        CallSite::arg_iterator AI = CS.arg_begin();
-+        User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--        CallSite::arg_iterator AE = CS.arg_end();
-+        User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-         switch (F->getIntrinsicID()) {
-           case Intrinsic::stacksave:
-@@ -4764,17 +4763,17 @@
-             ctx.MAD(srcType, dst, src0, src1, src2);
-           }
-           break;
--          case Intrinsic::sqrt: this->emitUnaryCallInst(I,CS,ir::OP_SQR); break;
--          case Intrinsic::ceil: this->emitRoundingCallInst(I,CS,ir::OP_RNDU); break;
--          case Intrinsic::trunc: this->emitRoundingCallInst(I,CS,ir::OP_RNDZ); break;
--          case Intrinsic::rint: this->emitRoundingCallInst(I,CS,ir::OP_RNDE); break;
--          case Intrinsic::floor: this->emitRoundingCallInst(I,CS,ir::OP_RNDD); break;
--          case Intrinsic::sin: this->emitUnaryCallInst(I,CS,ir::OP_SIN); break;
--          case Intrinsic::cos: this->emitUnaryCallInst(I,CS,ir::OP_COS); break;
--          case Intrinsic::log2: this->emitUnaryCallInst(I,CS,ir::OP_LOG); break;
--          case Intrinsic::exp2: this->emitUnaryCallInst(I,CS,ir::OP_EXP); break;
-+          case Intrinsic::sqrt: this->emitUnaryCallInst(I,ir::OP_SQR); break;
-+          case Intrinsic::ceil: this->emitRoundingCallInst(I,ir::OP_RNDU); break;
-+          case Intrinsic::trunc: this->emitRoundingCallInst(I,ir::OP_RNDZ); break;
-+          case Intrinsic::rint: this->emitRoundingCallInst(I,ir::OP_RNDE); break;
-+          case Intrinsic::floor: this->emitRoundingCallInst(I,ir::OP_RNDD); break;
-+          case Intrinsic::sin: this->emitUnaryCallInst(I,ir::OP_SIN); break;
-+          case Intrinsic::cos: this->emitUnaryCallInst(I,ir::OP_COS); break;
-+          case Intrinsic::log2: this->emitUnaryCallInst(I,ir::OP_LOG); break;
-+          case Intrinsic::exp2: this->emitUnaryCallInst(I,ir::OP_EXP); break;
-           case Intrinsic::bswap:
--            this->emitUnaryCallInst(I,CS,ir::OP_BSWAP, getUnsignedType(ctx, I.getType())); break;
-+            this->emitUnaryCallInst(I,ir::OP_BSWAP, getUnsignedType(ctx, I.getType())); break;
-           case Intrinsic::pow:
-           {
-             const ir::Register src0 = this->getRegister(*AI); ++AI;
-@@ -4794,21 +4793,20 @@
-         }
-       } else {
-         // Get the name of the called function and handle it
--        Value *Callee = I.getCalledValue();
--        const std::string fnName = Callee->stripPointerCasts()->getName();
-+        Value *Callee = I.getCalledOperand();
-+        const std::string fnName = Callee->stripPointerCasts()->getName().str();
-         auto genIntrinsicID = intrinsicMap.find(fnName);
-
-         // Get the function arguments
--        CallSite CS(&I);
--        CallSite::arg_iterator AI = CS.arg_begin();
-+        User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--        CallSite::arg_iterator AE = CS.arg_end();
-+        User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-
-         switch (genIntrinsicID) {
--          case GEN_OCL_FBH: this->emitUnaryCallInst(I,CS,ir::OP_FBH, ir::TYPE_U32); break;
--          case GEN_OCL_FBL: this->emitUnaryCallInst(I,CS,ir::OP_FBL, ir::TYPE_U32); break;
--          case GEN_OCL_CBIT: this->emitUnaryCallInst(I,CS,ir::OP_CBIT, getUnsignedType(ctx, (*AI)->getType())); break;
-+          case GEN_OCL_FBH: this->emitUnaryCallInst(I,ir::OP_FBH, ir::TYPE_U32); break;
-+          case GEN_OCL_FBL: this->emitUnaryCallInst(I,ir::OP_FBL, ir::TYPE_U32); break;
-+          case GEN_OCL_CBIT: this->emitUnaryCallInst(I,ir::OP_CBIT, getUnsignedType(ctx, (*AI)->getType())); break;
-           case GEN_OCL_ABS:
-           {
-             const ir::Register src = this->getRegister(*AI);
-@@ -4915,8 +4913,8 @@
-             ctx.REGION(dst, src, x.getIntegerValue());
-             break;
-           }
--          case GEN_OCL_RSQ: this->emitUnaryCallInst(I,CS,ir::OP_RSQ); break;
--          case GEN_OCL_RCP: this->emitUnaryCallInst(I,CS,ir::OP_RCP); break;
-+          case GEN_OCL_RSQ: this->emitUnaryCallInst(I,ir::OP_RSQ); break;
-+          case GEN_OCL_RCP: this->emitUnaryCallInst(I,ir::OP_RCP); break;
-           case GEN_OCL_FORCE_SIMD8: ctx.setSimdWidth(8); break;
-           case GEN_OCL_FORCE_SIMD16: ctx.setSimdWidth(16); break;
-           case GEN_OCL_LBARRIER: ctx.SYNC(ir::syncLocalBarrier); break;
-@@ -4947,31 +4945,31 @@
-             break;
-           }
-           case GEN_OCL_ATOMIC_ADD0:
--          case GEN_OCL_ATOMIC_ADD1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_ADD); break;
-+          case GEN_OCL_ATOMIC_ADD1: this->emitAtomicInst(I,ir::ATOMIC_OP_ADD); break;
-           case GEN_OCL_ATOMIC_SUB0:
--          case GEN_OCL_ATOMIC_SUB1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_SUB); break;
-+          case GEN_OCL_ATOMIC_SUB1: this->emitAtomicInst(I,ir::ATOMIC_OP_SUB); break;
-           case GEN_OCL_ATOMIC_AND0:
--          case GEN_OCL_ATOMIC_AND1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_AND); break;
-+          case GEN_OCL_ATOMIC_AND1: this->emitAtomicInst(I,ir::ATOMIC_OP_AND); break;
-           case GEN_OCL_ATOMIC_OR0:
--          case GEN_OCL_ATOMIC_OR1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_OR); break;
-+          case GEN_OCL_ATOMIC_OR1: this->emitAtomicInst(I,ir::ATOMIC_OP_OR); break;
-           case GEN_OCL_ATOMIC_XOR0:
--          case GEN_OCL_ATOMIC_XOR1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_XOR); break;
-+          case GEN_OCL_ATOMIC_XOR1: this->emitAtomicInst(I,ir::ATOMIC_OP_XOR); break;
-           case GEN_OCL_ATOMIC_XCHG0:
--          case GEN_OCL_ATOMIC_XCHG1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_XCHG); break;
-+          case GEN_OCL_ATOMIC_XCHG1: this->emitAtomicInst(I,ir::ATOMIC_OP_XCHG); break;
-           case GEN_OCL_ATOMIC_INC0:
--          case GEN_OCL_ATOMIC_INC1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_INC); break;
-+          case GEN_OCL_ATOMIC_INC1: this->emitAtomicInst(I,ir::ATOMIC_OP_INC); break;
-           case GEN_OCL_ATOMIC_DEC0:
--          case GEN_OCL_ATOMIC_DEC1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_DEC); break;
-+          case GEN_OCL_ATOMIC_DEC1: this->emitAtomicInst(I,ir::ATOMIC_OP_DEC); break;
-           case GEN_OCL_ATOMIC_UMIN0:
--          case GEN_OCL_ATOMIC_UMIN1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_UMIN); break;
-+          case GEN_OCL_ATOMIC_UMIN1: this->emitAtomicInst(I,ir::ATOMIC_OP_UMIN); break;
-           case GEN_OCL_ATOMIC_UMAX0:
--          case GEN_OCL_ATOMIC_UMAX1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_UMAX); break;
-+          case GEN_OCL_ATOMIC_UMAX1: this->emitAtomicInst(I,ir::ATOMIC_OP_UMAX); break;
-           case GEN_OCL_ATOMIC_IMIN0:
--          case GEN_OCL_ATOMIC_IMIN1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_IMIN); break;
-+          case GEN_OCL_ATOMIC_IMIN1: this->emitAtomicInst(I,ir::ATOMIC_OP_IMIN); break;
-           case GEN_OCL_ATOMIC_IMAX0:
--          case GEN_OCL_ATOMIC_IMAX1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_IMAX); break;
-+          case GEN_OCL_ATOMIC_IMAX1: this->emitAtomicInst(I,ir::ATOMIC_OP_IMAX); break;
-           case GEN_OCL_ATOMIC_CMPXCHG0:
--          case GEN_OCL_ATOMIC_CMPXCHG1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_CMPXCHG); break;
-+          case GEN_OCL_ATOMIC_CMPXCHG1: this->emitAtomicInst(I,ir::ATOMIC_OP_CMPXCHG); break;
-           case GEN_OCL_GET_IMAGE_WIDTH:
-           case GEN_OCL_GET_IMAGE_HEIGHT:
-           case GEN_OCL_GET_IMAGE_DEPTH:
-@@ -5429,48 +5427,48 @@
-             ctx.WAIT();
-             break;
-           }
--          case GEN_OCL_WORK_GROUP_ALL: this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_ALL); break;
--          case GEN_OCL_WORK_GROUP_ANY: this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_ANY); break;
-+          case GEN_OCL_WORK_GROUP_ALL: this->emitWorkGroupInst(I, ir::WORKGROUP_OP_ALL); break;
-+          case GEN_OCL_WORK_GROUP_ANY: this->emitWorkGroupInst(I, ir::WORKGROUP_OP_ANY); break;
-           case GEN_OCL_WORK_GROUP_BROADCAST:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_BROADCAST); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_BROADCAST); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_ADD); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_MAX); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_MIN); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-           case GEN_OCL_SUB_GROUP_BROADCAST:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_BROADCAST); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_BROADCAST); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_ADD); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_MAX); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_MIN); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-           case GEN_OCL_LRP:
-           {
-             const ir::Register dst  = this->getRegister(&I);
-@@ -5484,69 +5482,69 @@
-             break;
-           }
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, false, 1); break;
-+            this->emitBlockReadWriteMemInst(I, false, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, false, 2); break;
-+            this->emitBlockReadWriteMemInst(I, false, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, false, 4); break;
-+            this->emitBlockReadWriteMemInst(I, false, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, false, 8); break;
-+            this->emitBlockReadWriteMemInst(I, false, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, true, 1); break;
-+            this->emitBlockReadWriteMemInst(I, true, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, true, 2); break;
-+            this->emitBlockReadWriteMemInst(I, true, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, true, 4); break;
-+            this->emitBlockReadWriteMemInst(I, true, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, true, 8); break;
-+            this->emitBlockReadWriteMemInst(I, true, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, false, 1); break;
-+            this->emitBlockReadWriteImageInst(I, false, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, false, 2); break;
-+            this->emitBlockReadWriteImageInst(I, false, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, false, 4); break;
-+            this->emitBlockReadWriteImageInst(I, false, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, false, 8); break;
-+            this->emitBlockReadWriteImageInst(I, false, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, true, 1); break;
-+            this->emitBlockReadWriteImageInst(I, true, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, true, 2); break;
-+            this->emitBlockReadWriteImageInst(I, true, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, true, 4); break;
-+            this->emitBlockReadWriteImageInst(I, true, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, true, 8); break;
-+            this->emitBlockReadWriteImageInst(I, true, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, false, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, false, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, false, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, false, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, true, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, true, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, true, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, true, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, false, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, false, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, false, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, false, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, true, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, true, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, true, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, true, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 8, ir::TYPE_U16); break;
-           case GEN_OCL_GET_PIPE:
-           case GEN_OCL_MAKE_RID:
-           case GEN_OCL_GET_RID:
---- a/backend/src/llvm/llvm_includes.hpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_includes.hpp	2020-11-09 19:00:09.955926795 +0100
-@@ -103,7 +103,6 @@
-
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
- #include "llvm/IR/Mangler.h"
--#include "llvm/IR/CallSite.h"
- #include "llvm/IR/CFG.h"
- #include "llvm/IR/InstVisitor.h"
- #include "llvm/IR/IRPrintingPasses.h"
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-11-09 19:10:37.141852308 +0100
-@@ -160,7 +160,7 @@
-     Value *vecPtr = Builder.CreateBitCast(ld->getPointerOperand(),
-                                         PointerType::get(vecTy, addrSpace));
-     LoadInst *vecValue = Builder.CreateLoad(vecPtr);
--    vecValue->setAlignment(align);
-+    vecValue->setAlignment(align.valueOrOne());
-
-     for (unsigned i = 0; i < size; ++i) {
-       Value *S = Builder.CreateExtractElement(vecValue, Builder.getInt32(i));
-@@ -251,7 +251,7 @@
-       return;
-     Value *newPtr = Builder.CreateBitCast(stPointer, PointerType::get(vecTy, addrSpace));
-     StoreInst *newST = Builder.CreateStore(parent, newPtr);
--    newST->setAlignment(align);
-+    newST->setAlignment(align.valueOrOne());
-   }
-
-   // Find the safe iterator we can point to. If reorder happens, we need to
---- a/backend/src/llvm/llvm_passes.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_passes.cpp	2020-11-09 18:48:55.997006837 +0100
-@@ -95,7 +95,7 @@
-   {
-     switch (Ty->getTypeID()) {
-       case Type::VoidTyID: NOT_SUPPORTED;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         const VectorType* VecTy = cast<VectorType>(Ty);
-         uint32_t elemNum = VecTy->getNumElements();
-@@ -138,7 +138,7 @@
-       case Type::HalfTyID:    return 16;
-       case Type::FloatTyID:   return 32;
-       case Type::DoubleTyID:  return 64;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         const VectorType* VecTy = cast<VectorType>(Ty);
-         uint32_t numElem = VecTy->getNumElements();
-@@ -184,10 +184,12 @@
-     Type *elementType = NULL;
-     if (PointerType* ptrType = dyn_cast<PointerType>(eltTy))
-       elementType = ptrType->getElementType();
--    else if(SequentialType * seqType = dyn_cast<SequentialType>(eltTy))
--      elementType = seqType->getElementType();
--    else if(CompositeType * compTy= dyn_cast<CompositeType>(eltTy))
--      elementType = compTy->getTypeAtIndex(index);
-+    else if (ArrayType * arrType = dyn_cast<ArrayType>(eltTy))
-+      elementType = arrType->getElementType();
-+    else if(VectorType * vecType = dyn_cast<VectorType>(eltTy))
-+      elementType = vecType->getElementType();
-+    else if(StructType * structType = dyn_cast<StructType>(eltTy))
-+      elementType = structType->getTypeAtIndex(index);
-     GBE_ASSERT(elementType);
-     return elementType;
-   }
---- a/backend/src/llvm/llvm_printf_parser.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_printf_parser.cpp	2020-11-09 18:57:52.618943105 +0100
-@@ -323,8 +323,7 @@
-
-   bool PrintfParser::parseOnePrintfInstruction(CallInst * call)
-   {
--    CallSite CS(call);
--    CallSite::arg_iterator CI_FMT = CS.arg_begin();
-+    User::op_iterator CI_FMT = call->arg_begin();
-     int param_num = 0;
-
-     llvm::Constant* arg0 = dyn_cast<llvm::ConstantExpr>(*CI_FMT);
-@@ -341,7 +340,7 @@
-       return false;
-     }
-
--    std::string fmt = fmt_arg->getAsCString();
-+    std::string fmt = fmt_arg->getAsCString().str();
-     if (fmt.size() == 0)
-       return false;
-
-@@ -437,8 +436,8 @@
-         if ( callFunc->getIntrinsicID() != 0)
-           continue;
-
--        Value *Callee = call->getCalledValue();
--        const std::string fnName = Callee->getName();
-+        Value *Callee = call->getCalledOperand();
-+        const std::string fnName = Callee->getName().str();
-
-         if (fnName != "__gen_ocl_printf_stub" && fnName != "__gen_ocl_puts_stub")
-           continue;
-@@ -582,7 +581,7 @@
-             if (!fmt_arg || !fmt_arg->isCString()) {
-               return false;
-             }
--            slot.state.str = fmt_arg->getAsCString();
-+            slot.state.str = fmt_arg->getAsCString().str();
-             return true;
-           }
-           case PRINTF_CONVERSION_P: {
-@@ -595,10 +594,10 @@
-
-         break;
-
--      case Type::VectorTyID: {
--        Type* vect_type = arg->getType();
--        Type* elt_type = vect_type->getVectorElementType();
--        int vec_num = vect_type->getVectorNumElements();
-+      case Type::FixedVectorTyID: {
-+        VectorType* vect_type = dyn_cast<VectorType>(arg->getType());
-+        Type* elt_type = vect_type->getElementType();
-+        int vec_num = vect_type->getNumElements();
-         bool sign = false;
-
-         if (vec_num != slot.state.vector_n) {
---- a/backend/src/llvm/llvm_profiling.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_profiling.cpp	2020-11-09 18:59:50.120929150 +0100
-@@ -35,7 +35,6 @@
- #include "llvm/IR/IRBuilder.h"
-
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
--#include "llvm/IR/CallSite.h"
- #include "llvm/IR/CFG.h"
- #else
- #include "llvm/Support/CallSite.h"
---- a/backend/src/llvm/llvm_sampler_fix.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp	2020-11-09 17:01:09.407774832 +0100
-@@ -45,8 +45,8 @@
-     bool visitCallInst(CallInst *I) {
-       if(!I)
-         return false;
--      Value *Callee = I->getCalledValue();
--      const std::string fnName = Callee->getName();
-+      Value *Callee = I->getCalledOperand();
-+      const std::string fnName = Callee->getName().str();
-       bool changed = false;
-       Type *boolTy = IntegerType::get(I->getContext(), 1);
-       Type *i32Ty = IntegerType::get(I->getContext(), 32);
-@@ -59,7 +59,7 @@
-         Value *needFixVal;
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-         CallInst *init = dyn_cast<CallInst>(I->getOperand(0));
--        if (init && init->getCalledValue()->getName().compare("__translate_sampler_initializer"))
-+        if (init && init->getCalledOperand()->getName().compare("__translate_sampler_initializer"))
-         {
-           const ConstantInt *ci = dyn_cast<ConstantInt>(init->getOperand(0));
-           uint32_t samplerInt = ci->getZExtValue();
-@@ -113,7 +113,7 @@
-         Value *needFixVal;
-  #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-         CallInst *init = dyn_cast<CallInst>(I->getOperand(0));
--        if (init && init->getCalledValue()->getName().compare("__translate_sampler_initializer"))
-+        if (init && init->getCalledOperand()->getName().compare("__translate_sampler_initializer"))
-         {
-           const ConstantInt *ci = dyn_cast<ConstantInt>(init->getOperand(0));
-           uint32_t samplerInt = ci->getZExtValue();
---- a/backend/src/llvm/llvm_scalarize.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_scalarize.cpp	2020-11-09 18:51:16.888990104 +0100
-@@ -178,7 +178,7 @@
-       if(!type)
-         return type;
-       switch(type->getTypeID()) {
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       case Type::ArrayTyID:
-         return GetBasicType(type->getContainedType(0));
-       default:
-@@ -188,7 +188,7 @@
-     }
-
-     int GetComponentCount(const Type* type)  {
--      if (type && type->getTypeID() == Type::VectorTyID)
-+      if (type && type->getTypeID() == Type::FixedVectorTyID)
-         return llvm::dyn_cast<VectorType>(type)->getNumElements();
-       else
-         return 1;
-@@ -652,13 +652,12 @@
-           break;
-         }
-       } else {
--        Value *Callee = call->getCalledValue();
--        const std::string fnName = Callee->getName();
-+        Value *Callee = call->getCalledOperand();
-+        const std::string fnName = Callee->getName().str();
-         auto genIntrinsicID = intrinsicMap.find(fnName);
-
-         // Get the function arguments
--        CallSite CS(call);
--        CallSite::arg_iterator CI = CS.arg_begin() + 1;
-+        User::op_iterator CI = call->arg_begin() + 1;
-
-         switch (genIntrinsicID) {
-           case GEN_OCL_NOT_FOUND:
-@@ -729,7 +728,7 @@
-             extractFromVector(call);
-             break;
-           case GEN_OCL_PRINTF:
--            for (; CI != CS.arg_end(); ++CI)
-+            for (; CI != call->arg_end(); ++CI)
-               if ((*CI)->getType()->isVectorTy())
-                 *CI = InsertToVector(call, *CI);
-             break;
diff --git a/srcpkgs/beignet/patches/llvm12.patch b/srcpkgs/beignet/patches/llvm12.patch
deleted file mode 100644
index 6f8ab005c148..000000000000
--- a/srcpkgs/beignet/patches/llvm12.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-diff --git backend/src/llvm/ExpandLargeIntegers.cpp backend/src/llvm/ExpandLargeIntegers.cpp
-index 8515dc13..27080380 100644
---- a/backend/src/llvm/ExpandLargeIntegers.cpp
-+++ b/backend/src/llvm/ExpandLargeIntegers.cpp
-@@ -328,7 +328,7 @@ static Value *buildVectorOrScalar(ConversionState &State, IRBuilder<> &IRB, Smal
-     // splited, that's why these temporary values should be erased.
-     bool KeepInsert = isLegalBitSize(ElemTy->getPrimitiveSizeInBits() * ElemNo);
-     for (unsigned i = 0; i < ElemNo; ++i) {
--      Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo));
-+      Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo, false));
-       Value *idx = ConstantInt::get(IntTy, i);
-       vec = IRB.CreateInsertElement(tmp, Elements[i], idx);
-       if (!KeepInsert && !isa<Constant>(vec)) {
-@@ -373,7 +373,7 @@ static void unifyElementType(IRBuilder<> &IRB, SmallVector<Value *, 16> &Src, Sm
-       assert((Size % MinWidth) == 0);
- 
-       if (Size > MinWidth) {
--        VectorType *VecTy = VectorType::get(ElemTy, Size/MinWidth);
-+        VectorType *VecTy = VectorType::get(ElemTy, Size/MinWidth, false);
-         Value *Casted = IRB.CreateBitCast(Src[i], VecTy);
-         for (unsigned j = 0; j < Size/MinWidth; j++)
-           Dst.push_back(IRB.CreateExtractElement(Casted, ConstantInt::get(IntTy, j)));
-@@ -462,7 +462,7 @@ static void convertInstruction(Instruction *Inst, ConversionState &State,
-       unsigned ElemNo = Unified.size();
-       Type *ElemTy = Unified[0]->getType();
-       for (unsigned i = 0; i < ElemNo; ++i) {
--        Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo));
-+        Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo, false));
-         Value *idx = ConstantInt::get(IntTy, i);
-         vec = IRB.CreateInsertElement(tmp, Unified[i], idx);
-       }
-diff --git backend/src/llvm/llvm_gen_backend.cpp backend/src/llvm/llvm_gen_backend.cpp
-index c93d89cc..64d5b0e5 100644
---- a/backend/src/llvm/llvm_gen_backend.cpp
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -304,7 +304,7 @@ namespace gbe
-       TYPESIZEVEC(long,8)
-       TYPESIZEVEC(unsigned long,8)
-       else{
--        StructType *StrTy = M->getTypeByName("struct."+name);
-+        StructType *StrTy = StructType::getTypeByName(M->getContext(), "struct."+name);
-         if(StrTy)
-           return getTypeByteSize(unit,StrTy);
-       }
-diff --git backend/src/llvm/llvm_loadstore_optimization.cpp backend/src/llvm/llvm_loadstore_optimization.cpp
-index 5aa38bef..6b5c1bad 100644
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
-@@ -152,7 +152,7 @@ namespace gbe {
-     unsigned addrSpace = ld->getPointerAddressSpace();
-     // insert before first load
-     Builder.SetInsertPoint(ld);
--    VectorType *vecTy = VectorType::get(ld->getType(), size);
-+    VectorType *vecTy = VectorType::get(ld->getType(), size, false);
-     Value *vecPtr = Builder.CreateBitCast(ld->getPointerOperand(),
-                                         PointerType::get(vecTy, addrSpace));
-     LoadInst *vecValue = Builder.CreateLoad(vecPtr);
-@@ -236,7 +236,7 @@ namespace gbe {
-     Builder.SetInsertPoint(merged[size-1]);
- 
-     Type *dataTy = st->getValueOperand()->getType();
--    VectorType *vecTy = VectorType::get(dataTy, size);
-+    VectorType *vecTy = VectorType::get(dataTy, size, false);
-     Value * parent = UndefValue::get(vecTy);
-     for(unsigned i = 0; i < size; i++) {
-       parent = Builder.CreateInsertElement(parent, values[i], ConstantInt::get(IntegerType::get(st->getContext(), 32), i));
-diff --git backend/src/llvm/llvm_printf_parser.cpp backend/src/llvm/llvm_printf_parser.cpp
-index 6bb7c52a..af459cd2 100644
---- a/backend/src/llvm/llvm_printf_parser.cpp
-+++ b/backend/src/llvm/llvm_printf_parser.cpp
-@@ -630,7 +630,7 @@ error:
-             if (elt_type != elt_dst_type) {
-               Value *II = NULL;
-               for (int i = 0; i < vec_num; i++) {
--                Value *vec = II ? II : UndefValue::get(VectorType::get(elt_dst_type, vec_num));
-+                Value *vec = II ? II : UndefValue::get(VectorType::get(elt_dst_type, vec_num, false));
-                 Value *cv = ConstantInt::get(Type::getInt32Ty(elt_type->getContext()), i);
-                 Value *org = builder->CreateExtractElement(arg, cv);
-                 Value *cvt = builder->CreateIntCast(org, elt_dst_type, sign);
-@@ -658,7 +658,7 @@ error:
-             if (elt_type->getTypeID() != Type::FloatTyID) {
-               Value *II = NULL;
-               for (int i = 0; i < vec_num; i++) {
--                Value *vec = II ? II : UndefValue::get(VectorType::get(Type::getFloatTy(elt_type->getContext()), vec_num));
-+                Value *vec = II ? II : UndefValue::get(VectorType::get(Type::getFloatTy(elt_type->getContext()), vec_num, false));
-                 Value *cv = ConstantInt::get(Type::getInt32Ty(elt_type->getContext()), i);
-                 Value *org = builder->CreateExtractElement(arg, cv);
-                 Value* cvt  = builder->CreateFPCast(org, Type::getFloatTy(module->getContext()));
-diff --git backend/src/llvm/llvm_to_gen.cpp backend/src/llvm/llvm_to_gen.cpp
-index 7f7deffe..9e8ccc67 100644
---- a/backend/src/llvm/llvm_to_gen.cpp
-+++ b/backend/src/llvm/llvm_to_gen.cpp
-@@ -358,7 +358,7 @@ namespace gbe
-     passes.add(createScalarReplAggregatesPass(64, true, -1, -1, 64));
- #endif
-     passes.add(createLoadStoreOptimizationPass());
--    passes.add(createConstantPropagationPass());
-+    //passes.add(createConstantPropagationPass());
-     passes.add(createPromoteMemoryToRegisterPass());
-     if(optLevel > 0)
-       passes.add(createGVNPass());                 // Remove redundancies
-@@ -367,11 +367,11 @@ namespace gbe
-     passes.add(createScalarizePass());             // Expand all vector ops
-     passes.add(createExpandLargeIntegersPass());   // legalize large integer operation
-     passes.add(createInstructionCombiningPass());  // legalize will generate some silly instructions
--    passes.add(createConstantPropagationPass());   // propagate constant after scalarize/legalize
-+    //passes.add(createConstantPropagationPass());   // propagate constant after scalarize/legalize
-     passes.add(createExpandConstantExprPass());    // constant prop may generate ConstantExpr
-     passes.add(createPromoteIntegersPass());       // align integer size to power of two
-     passes.add(createRemoveGEPPass(unit));         // Constant prop may generate gep
--    passes.add(createDeadInstEliminationPass());   // Remove simplified instructions
-+    //passes.add(createDeadInstEliminationPass());   // Remove simplified instructions
-     passes.add(createCFGSimplificationPass());     // Merge & remove BBs
-     passes.add(createLowerSwitchPass());           // simplify cfg will generate switch-case instruction
-     if (profiling) {
diff --git a/srcpkgs/beignet/patches/musl.patch b/srcpkgs/beignet/patches/musl.patch
deleted file mode 100644
index cefafbb65588..000000000000
--- a/srcpkgs/beignet/patches/musl.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/backend/src/backend/gen/gen_mesa_disasm.c
-+++ b/backend/src/backend/gen/gen_mesa_disasm.c
-@@ -1137,7 +1137,7 @@ static uint32_t __conv_half_to_float(uint16_t h)
-       // Adjust mantissa so it's normalized (and keep
-       // track of exponent adjustment)
-       int e = -1;
--      uint m = i.mantissa;
-+      unsigned int m = i.mantissa;
-       do {
-         e++;
-         m <<= 1;
diff --git a/srcpkgs/beignet/template b/srcpkgs/beignet/template
deleted file mode 100644
index dce6bbb7ae24..000000000000
--- a/srcpkgs/beignet/template
+++ /dev/null
@@ -1,22 +0,0 @@
-# Template file for 'beignet'
-pkgname=beignet
-version=1.3.2
-revision=10
-archs="i686* x86_64*"
-wrksrc="Beignet-${version}-Source"
-build_style=cmake
-hostmakedepends="clang llvm pkg-config"
-makedepends="MesaLib-devel libedit-devel libffi-devel ocl-icd-devel zlib-devel
- libXfixes-devel"
-depends="ocl-icd"
-short_desc="Beignet GPGPU System for Intel GPUs"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://www.freedesktop.org/wiki/Software/Beignet/"
-distfiles="https://01.org/sites/default/files/${pkgname}-${version}-source.tar.gz"
-checksum=c555edba149de23243965a703f39f79fa06f15bcff5a3762b5544b0925010b43
-
-post_install() {
-	# remove CL headers, we do use opencl-headers instead.
-	rm -r ${DESTDIR}/usr/include
-}
diff --git a/srcpkgs/beignet/update b/srcpkgs/beignet/update
deleted file mode 100644
index ca41e0afe60c..000000000000
--- a/srcpkgs/beignet/update
+++ /dev/null
@@ -1 +0,0 @@
-site="https://01.org/beignet/downloads"
diff --git a/srcpkgs/removed-packages/template b/srcpkgs/removed-packages/template
index 0923c53cfc05..d59bd20f820c 100644
--- a/srcpkgs/removed-packages/template
+++ b/srcpkgs/removed-packages/template
@@ -1,7 +1,7 @@
 # Template file for 'removed-packages'
 pkgname=removed-packages
 version=0.1
-revision=69
+revision=70
 build_style=meta
 short_desc="Uninstalls packages removed from repository"
 maintainer="Piotr Wójcik <chocimier@tlen.pl>"
@@ -25,6 +25,7 @@ replaces="
  atom<=1.44.0_1
  avogadro-devel<=1.2.0_8
  avogadro<=1.2.0_8
+ beignet<=1.3.2_10
  bokken<=1.8_3
  bomi<=0.9.11_17
  burp-client<=1.4.40_13

From 97338ef68219b7d590bd10edc23bf882e6d2d9cb Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 21/29] ldc: rebuild for llvm14

---
 srcpkgs/ldc/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/ldc/template b/srcpkgs/ldc/template
index a27280dde3b8..e21bc6555e38 100644
--- a/srcpkgs/ldc/template
+++ b/srcpkgs/ldc/template
@@ -1,7 +1,7 @@
 # Template file for 'ldc'
 pkgname=ldc
 version=1.28.0
-revision=1
+revision=2
 wrksrc="ldc-${version}-src"
 build_style=cmake
 configure_args="

From 542f5c5ee5d187c465a6490af05c1133fe701723 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 22:31:25 +0200
Subject: [PATCH 22/29] ldc: update to 1.29.0.

---
 srcpkgs/ldc/template | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/srcpkgs/ldc/template b/srcpkgs/ldc/template
index e21bc6555e38..1d72a8805eb6 100644
--- a/srcpkgs/ldc/template
+++ b/srcpkgs/ldc/template
@@ -1,7 +1,7 @@
 # Template file for 'ldc'
 pkgname=ldc
-version=1.28.0
-revision=2
+version=1.29.0
+revision=1
 wrksrc="ldc-${version}-src"
 build_style=cmake
 configure_args="
@@ -11,7 +11,7 @@ configure_args="
  -DBASH_COMPLETION_COMPLETIONSDIR=/usr/share/bash-completion
  -DC_SYSTEM_LIBS='unwind;m;pthread;rt;dl'"
 conf_files="/etc/ldc2.conf"
-hostmakedepends="dmd llvm12 perl pkg-config"
+hostmakedepends="dmd llvm14 perl pkg-config"
 makedepends="libcurl-devel libffi-devel ncurses-devel zlib-devel
  llvm-libunwind-devel"
 depends="ldc-runtime llvm-libunwind-devel"
@@ -22,7 +22,7 @@ license="BSD-3-Clause, BSL-1.0"
 homepage="https://wiki.dlang.org/LDC"
 changelog="https://raw.githubusercontent.com/ldc-developers/ldc/master/CHANGELOG.md"
 distfiles="https://github.com/ldc-developers/ldc/releases/download/v${version}/ldc-${version}-src.tar.gz"
-checksum=17fee8bb535bcb8cda0a45947526555c46c045f302a7349cc8711b254e54cf09
+checksum=d0c066eb965467625d9c5e75c00c583451b9ffa363601f9e37275ca8a8aea140
 nopie=yes
 nocross="dmd compilation fails on cross"
 # tests timeout on musl; also require unpackaged python3-lit

From aedbfa1967184744cf68b38bb9b61cc8c6df6c5c Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 23/29] include-what-you-use: update to 0.18.

---
 srcpkgs/include-what-you-use/template | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/include-what-you-use/template b/srcpkgs/include-what-you-use/template
index b13bb7ee56af..297669f60459 100644
--- a/srcpkgs/include-what-you-use/template
+++ b/srcpkgs/include-what-you-use/template
@@ -1,6 +1,6 @@
 # Template file for 'include-what-you-use'
 pkgname=include-what-you-use
-version=0.16
+version=0.18
 revision=1
 wrksrc="${pkgname}"
 build_style=cmake
@@ -12,7 +12,7 @@ maintainer="Leah Neukirchen <leah@vuxu.org>"
 license="NCSA"
 homepage="https://include-what-you-use.org/"
 distfiles="https://include-what-you-use.org/downloads/${pkgname}-${version}.src.tar.gz"
-checksum=8d6fc9b255343bc1e5ec459e39512df1d51c60e03562985e0076036119ff5a1c
+checksum=9102fc8419294757df86a89ce6ec305f8d90a818d1f2598a139d15eb1894b8f3
 python_version=3
 
 post_install() {

From 7bb7e0998594c0853e98c3bfe8857c1deb7f9e45 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:18:24 +0200
Subject: [PATCH 24/29] SPIRV-LLVM-Translator: update to 14.0.0.

---
 common/shlibs                          |  1 +
 srcpkgs/SPIRV-LLVM-Translator/template | 11 ++++++-----
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/common/shlibs b/common/shlibs
index 86f4c9060d3b..df3eb79f921c 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -983,6 +983,7 @@ libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
 libLLVM-14.so libllvm14-14.0.3_1
+libLLVMSPIRVLib.so.14 SPIRV-LLVM-Translator-14.0.0_1
 libisofs.so.6 libisofs-0.6.24_1
 libmpack.so.0 libmpack-1.0.5_1
 libGeoIP.so.1 libgeoip-1.4.8_1
diff --git a/srcpkgs/SPIRV-LLVM-Translator/template b/srcpkgs/SPIRV-LLVM-Translator/template
index 2504cabed367..2277d062d992 100644
--- a/srcpkgs/SPIRV-LLVM-Translator/template
+++ b/srcpkgs/SPIRV-LLVM-Translator/template
@@ -1,19 +1,20 @@
 # Template file for 'SPIRV-LLVM-Translator'
 pkgname=SPIRV-LLVM-Translator
-version=12.0.0
+version=14.0.0
 revision=1
 build_style=cmake
 make_build_args="llvm-spirv"
-configure_args="-Wno-dev -DLLVM_LINK_LLVM_DYLIB=ON -DCMAKE_SKIP_RPATH=ON
- -DLLVM_SPIRV_INCLUDE_TESTS=OFF -DBUILD_SHARED_LIBS=ON"
+configure_args="-DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release
+ -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_SKIP_RPATH=ON -DLLVM_INCLUDE_TESTS=OFF
+ -DLLVM_LINK_LLVM_DYLIB=ON -DLLVM_EXTERNAL_LIT=/usr/bin/lit -Wno-dev -DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=/usr/include/spirv/ "
 hostmakedepends="clang clang-tools-extra llvm"
-makedepends="llvm"
+makedepends="llvm SPIRV-Headers"
 short_desc="API and commands for processing SPIR-V modules"
 maintainer="Orphaned <orphan@voidlinux.org>"
 license="NCSA"
 homepage="https://github.com/KhronosGroup/SPIRV-LLVM-Translator"
 distfiles="https://github.com/KhronosGroup/${pkgname}/archive/refs/tags/v${version}.tar.gz"
-checksum=6e4fad04203f25fcde4c308c53e9f59bd05a390978992db3212d4b63aff62108
+checksum=1afc52bb4e39aeb9b5b69324a201c81bd986364f347b559995eff6fd6f013318
 make_check=no
 
 post_install() {

From cddfa00dd1ed830105ca6d8480e086782f74b795 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:17:29 +0200
Subject: [PATCH 25/29] SPIRV-Headers: update to 1.3.211.0.

---
 srcpkgs/SPIRV-Headers/template | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/SPIRV-Headers/template b/srcpkgs/SPIRV-Headers/template
index 5dcf457c04c7..ce8288174e48 100644
--- a/srcpkgs/SPIRV-Headers/template
+++ b/srcpkgs/SPIRV-Headers/template
@@ -1,11 +1,13 @@
 # Template file for 'SPIRV-Headers'
 pkgname=SPIRV-Headers
-version=1.5.4.raytracing.fixed
+version=1.3.211.0
 revision=1
+reverts="1.5.4.raytracing.fixed"
+wrksrc=${pkgname}-sdk-${version}
 build_style=cmake
 short_desc="Machine-readable files for the SPIR-V Registry"
 maintainer="Orphaned <orphan@voidlinux.org>"
 license="GPL-3.0-or-later"
 homepage="https://github.com/KhronosGroup/SPIRV-Headers"
-distfiles="https://github.com/KhronosGroup/SPIRV-Headers/archive/${version}.tar.gz"
-checksum=df2ad2520be4d95a479fa248921065885bbf435a658349a7fc164ad7b26b68c6
+distfiles="https://github.com/KhronosGroup/SPIRV-Headers/archive/sdk-${version}.tar.gz"
+checksum=30a78e61bd812c75e09fdc7a319af206b1044536326bc3e85fea818376a12568

From f65e289140bd47a492e88429be7f5bfc7d252135 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:35:43 +0200
Subject: [PATCH 26/29] ispc: update to 1.17.0.

---
 .../ispc/patches/cmake-build-type-none.patch  |   18 -
 srcpkgs/ispc/patches/llvm12-001.patch         |   57 -
 srcpkgs/ispc/patches/llvm12-002.patch         |  923 --------
 srcpkgs/ispc/patches/llvm12-003.patch         | 1504 ------------
 srcpkgs/ispc/patches/llvm12-004.patch         |   34 -
 srcpkgs/ispc/patches/llvm12-005.patch         |  372 ---
 srcpkgs/ispc/patches/llvm12-006.patch         |  126 -
 srcpkgs/ispc/patches/llvm12-007.patch         |  160 --
 srcpkgs/ispc/patches/llvm12-008.patch         |  149 --
 srcpkgs/ispc/patches/llvm12-009.patch         | 2109 -----------------
 srcpkgs/ispc/template                         |    6 +-
 11 files changed, 3 insertions(+), 5455 deletions(-)
 delete mode 100644 srcpkgs/ispc/patches/cmake-build-type-none.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-001.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-002.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-003.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-004.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-005.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-006.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-007.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-008.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-009.patch

diff --git a/srcpkgs/ispc/patches/cmake-build-type-none.patch b/srcpkgs/ispc/patches/cmake-build-type-none.patch
deleted file mode 100644
index 411e353c7314..000000000000
--- a/srcpkgs/ispc/patches/cmake-build-type-none.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Index: ispc-1.15.0/CMakeLists.txt
-===================================================================
---- ispc-1.15.0.orig/CMakeLists.txt
-+++ ispc-1.15.0/CMakeLists.txt
-@@ -157,13 +157,6 @@ set(OUTPUT_RELEASE Release/bin)
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin )
- 
- if(CMAKE_BUILD_TYPE)
--    # Validate build type
--    set(CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo")
--
--    string(FIND "${CONFIGURATION_TYPES}" "${CMAKE_BUILD_TYPE}" MATCHED_CONFIG)
--    if (${MATCHED_CONFIG} EQUAL -1)
--         message(FATAL_ERROR "CMAKE_BUILD_TYPE (${CMAKE_BUILD_TYPE}) allows only the following values: ${CONFIGURATION_TYPES}")
--    endif()
- else(NOT CMAKE_BUILD_TYPE)
-     set(CMAKE_BUILD_TYPE "Release")
-     message(STATUS "Build type not specified: Use Release by default.")
diff --git a/srcpkgs/ispc/patches/llvm12-001.patch b/srcpkgs/ispc/patches/llvm12-001.patch
deleted file mode 100644
index 5f2d3f5a409e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-001.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 1c0f89dccb774f216c7f6e76a99ee907a1e641cb Mon Sep 17 00:00:00 2001
-From: Dmitry Babokin <dmitry.y.babokin@intel.com>
-Date: Tue, 22 Dec 2020 17:03:59 -0800
-Subject: [PATCH] Fix to work with LLVM trunk after llvm/llvm-project@41c3b2713
-
----
- src/ctx.cpp | 18 ++++++++++++------
- 1 file changed, 12 insertions(+), 6 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 6fbb8b9cf..977e9d222 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1473,11 +1473,15 @@ void FunctionEmitContext::AddDebugPos(llvm::Value *value, const SourcePos *pos,
-     llvm::Instruction *inst = llvm::dyn_cast<llvm::Instruction>(value);
-     if (inst != NULL && m->diBuilder) {
-         SourcePos p = pos ? *pos : currentPos;
--        if (p.first_line != 0)
-+        if (p.first_line != 0) {
-             // If first_line == 0, then we're in the middle of setting up
-             // the standard library or the like; don't add debug positions
-             // for those functions
--            inst->setDebugLoc(llvm::DebugLoc::get(p.first_line, p.first_column, scope ? scope : GetDIScope()));
-+            scope = scope ? scope : GetDIScope();
-+            llvm::DebugLoc diLoc =
-+                llvm::DILocation::get(scope->getContext(), p.first_line, p.first_column, scope, nullptr, false);
-+            inst->setDebugLoc(diLoc);
-+        }
-     }
- }
- 
-@@ -1518,9 +1522,10 @@ void FunctionEmitContext::EmitVariableDebugInfo(Symbol *sym) {
-     llvm::DILocalVariable *var = m->diBuilder->createAutoVariable(
-         scope, sym->name, sym->pos.GetDIFile(), sym->pos.first_line, diType, true /* preserve through opts */);
- 
-+    llvm::DebugLoc diLoc =
-+        llvm::DILocation::get(scope->getContext(), sym->pos.first_line, sym->pos.first_column, scope, nullptr, false);
-     llvm::Instruction *declareInst =
--        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(),
--                                    llvm::DebugLoc::get(sym->pos.first_line, sym->pos.first_column, scope), bblock);
-+        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(), diLoc, bblock);
-     AddDebugPos(declareInst, &sym->pos, scope);
- }
- 
-@@ -1535,9 +1540,10 @@ void FunctionEmitContext::EmitFunctionParameterDebugInfo(Symbol *sym, int argNum
-         m->diBuilder->createParameterVariable(scope, sym->name, argNum + 1, sym->pos.GetDIFile(), sym->pos.first_line,
-                                               diType, true /* preserve through opts */, flags);
- 
-+    llvm::DebugLoc diLoc =
-+        llvm::DILocation::get(scope->getContext(), sym->pos.first_line, sym->pos.first_column, scope, nullptr, false);
-     llvm::Instruction *declareInst =
--        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(),
--                                    llvm::DebugLoc::get(sym->pos.first_line, sym->pos.first_column, scope), bblock);
-+        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(), diLoc, bblock);
-     AddDebugPos(declareInst, &sym->pos, scope);
- }
- 
diff --git a/srcpkgs/ispc/patches/llvm12-002.patch b/srcpkgs/ispc/patches/llvm12-002.patch
deleted file mode 100644
index 0903f30da10d..000000000000
--- a/srcpkgs/ispc/patches/llvm12-002.patch
+++ /dev/null
@@ -1,923 +0,0 @@
-From 0597a79d084c014780136da906afe21d15e982cb Mon Sep 17 00:00:00 2001
-From: DeepakRajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Tue, 5 Jan 2021 13:53:30 -0800
-Subject: [PATCH] Remove LLVM 8.0 and LLVM 9.0. (#1966)
-
----
- .appveyor.yml                        |  3 --
- .travis.yml                          |  7 ---
- CMakeLists.txt                       | 12 ++----
- src/ast.cpp                          |  4 --
- src/ctx.cpp                          | 30 -------------
- src/gen/GlobalsLocalization.cpp      |  4 --
- src/ispc.cpp                         | 20 ---------
- src/ispc.h                           |  3 +-
- src/ispc_version.h                   |  4 +-
- src/main.cpp                         | 13 ------
- src/module.cpp                       | 27 ------------
- src/module.h                         |  2 -
- src/opt.cpp                          | 64 ++--------------------------
- src/type.cpp                         | 10 ++---
- tests/lit-tests/1771.ispc            |  1 -
- tests/lit-tests/1844.ispc            |  3 --
- tests/lit-tests/1926.ispc            |  2 -
- tests/lit-tests/cpus_x86.ispc        |  2 +
- tests/lit-tests/cpus_x86_llvm10.ispc | 11 -----
- tests/lit-tests/lit.cfg              |  5 ---
- 20 files changed, 14 insertions(+), 213 deletions(-)
- delete mode 100644 tests/lit-tests/cpus_x86_llvm10.ispc
-
-diff --git a/.appveyor.yml b/.appveyor.yml
-index 451a7b3e0..7945cca2a 100644
---- a/.appveyor.yml
-+++ b/.appveyor.yml
-@@ -41,8 +41,6 @@ environment:
-       LLVM_VERSION: latest
-     - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
-       LLVM_VERSION: 10.0
--    - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
--      LLVM_VERSION: 9.0
- 
- for:
- -
-@@ -62,7 +60,6 @@ for:
-         if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2019" ( (set generator="Visual Studio 16") & (set vsversion=2019))
-         set LLVM_TAR=llvm-11.0.0-win.vs2019-Release+Asserts-x86.arm.wasm.7z
-         if "%LLVM_VERSION%"=="10.0" (set LLVM_TAR=llvm-10.0.1-win.vs2019-Release+Asserts-x86.arm.wasm.zip)
--        if "%LLVM_VERSION%"=="9.0" (set LLVM_TAR=llvm-9.0.1-win.vs2017-Release+Asserts-x86.arm.wasm.zip)
-   install:
-     - ps: choco install --no-progress winflexbison3 wget 7zip
-     - cmd: |-
-diff --git a/.travis.yml b/.travis.yml
-index 2e96017a6..3a6b85264 100644
---- a/.travis.yml
-+++ b/.travis.yml
-@@ -108,13 +108,6 @@ jobs:
-         - LLVM_TAR=llvm-10.0.1-ubuntu16.04-Release+Asserts-x86.arm.wasm.tar.xz
-         - LLVM_REPO=https://github.com/dbabokin/llvm-project
-         - ISPC_HOME=$TRAVIS_BUILD_DIR
--    # LLVM 9.0 + Ubuntu 16.04: build, lit tests, examples (build + run), benchmarks (build + trial run)
--    - <<: *my_tag
--      env:
--        - LLVM_VERSION=9.0 OS=Ubuntu16.04
--        - LLVM_TAR=llvm-9.0.1-ubuntu16.04-Release+Asserts-x86.arm.wasm.tar.xz
--        - LLVM_REPO=https://github.com/dbabokin/llvm-project
--        - ISPC_HOME=$TRAVIS_BUILD_DIR
-     # WASM enabled build
-     # LLVM 11.0 + Ubuntu 16.04: build, lit tests, examples (build), benchmarks (build + trial run)
-     - <<: *my_tag
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 5fa863fcf..a6b3ed251 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -241,10 +241,8 @@ if (X86_ENABLED)
-         avx2-i8x32 avx2-i16x16
-         avx2-i32x4 avx2-i32x8 avx2-i32x16 avx2-i64x4
-         avx512knl-i32x16
--        avx512skx-i32x16 avx512skx-i32x8)
--    if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "10.0.0")
--        list(APPEND ISPC_TARGETS avx512skx-i8x64 avx512skx-i16x32)
--    endif()
-+        avx512skx-i32x16 avx512skx-i32x8
-+        avx512skx-i8x64 avx512skx-i16x32)
- endif()
- if (ARM_ENABLED)
-     list(APPEND ISPC_TARGETS neon-i8x16 neon-i16x8 neon-i32x4 neon-i32x8)
-@@ -259,11 +257,7 @@ if (WASM_ENABLED)
- endif()
- 
- set(CLANG_LIBRARY_LIST clangFrontend clangDriver clangSerialization clangParse clangSema clangAnalysis clangAST clangBasic clangEdit clangLex)
--set(LLVM_COMPONENTS engine ipo bitreader bitwriter instrumentation linker option)
--
--if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "10.0.0")
--    list(APPEND LLVM_COMPONENTS frontendopenmp)
--endif()
-+set(LLVM_COMPONENTS engine ipo bitreader bitwriter instrumentation linker option frontendopenmp)
- 
- if (X86_ENABLED)
-     list(APPEND LLVM_COMPONENTS x86)
-diff --git a/src/ast.cpp b/src/ast.cpp
-index 20f75a29c..5a43c4854 100644
---- a/src/ast.cpp
-+++ b/src/ast.cpp
-@@ -44,9 +44,7 @@
- #include "sym.h"
- #include "util.h"
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/TimeProfiler.h>
--#endif
- ///////////////////////////////////////////////////////////////////////////
- // ASTNode
- 
-@@ -62,9 +60,7 @@ void AST::AddFunction(Symbol *sym, Stmt *code) {
- }
- 
- void AST::GenerateIR() {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope TimeScope("GenerateIR");
--#endif
-     for (unsigned int i = 0; i < functions.size(); ++i)
-         functions[i]->GenerateIR();
- }
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 977e9d222..42c4ea09d 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -309,21 +309,13 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym, llvm::F
-             char buf[256];
-             snprintf(buf, sizeof(buf), "__off_all_on_mask_%s", g->target->GetISAString());
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_8_0
--            llvm::Constant *offFunc = m->module->getOrInsertFunction(buf, LLVMTypes::VoidType);
--#else // LLVM 9.0+
-             llvm::FunctionCallee offFuncCallee = m->module->getOrInsertFunction(buf, LLVMTypes::VoidType);
-             llvm::Constant *offFunc = llvm::cast<llvm::Constant>(offFuncCallee.getCallee());
--#endif
-             AssertPos(currentPos, llvm::isa<llvm::Function>(offFunc));
-             llvm::BasicBlock *offBB = llvm::BasicBlock::Create(*g->ctx, "entry", (llvm::Function *)offFunc, 0);
-             llvm::StoreInst *inst = new llvm::StoreInst(LLVMMaskAllOff, globalAllOnMaskPtr, offBB);
-             if (g->opt.forceAlignedMemory) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-                 inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-             }
-             llvm::ReturnInst::Create(*g->ctx, offBB);
-         }
-@@ -2288,11 +2280,7 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
- #endif
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-     }
- 
-     AddDebugPos(inst);
-@@ -2431,11 +2419,7 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-                 // vs the proper alignment in practice.)
-                 int align = 1;
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                inst->setAlignment(align);
--#else // LLVM 10.0+
-                 inst->setAlignment(llvm::MaybeAlign(align).valueOrOne());
--#endif
-             }
- 
-             AddDebugPos(inst);
-@@ -2649,11 +2633,7 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-         align = g->target->getNativeVectorAlignment();
- 
-     if (align != 0) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(align);
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(align).valueOrOne());
--#endif
-     }
-     // Don't add debugging info to alloca instructions
-     return inst;
-@@ -2926,11 +2906,7 @@ void FunctionEmitContext::StoreInst(llvm::Value *value, llvm::Value *ptr, const
-     llvm::StoreInst *inst = new llvm::StoreInst(value, ptr, bblock);
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-     }
- 
- #ifdef ISPC_GENX_ENABLED
-@@ -3025,16 +3001,10 @@ void FunctionEmitContext::MemcpyInst(llvm::Value *dest, llvm::Value *src, llvm::
-     }
-     if (align == NULL)
-         align = LLVMInt32(1);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_8_0
--    llvm::Constant *mcFunc =
--        m->module->getOrInsertFunction("llvm.memcpy.p0i8.p0i8.i64", LLVMTypes::VoidType, LLVMTypes::VoidPointerType,
--                                       LLVMTypes::VoidPointerType, LLVMTypes::Int64Type, LLVMTypes::BoolType);
--#else // LLVM 9.0+
-     llvm::FunctionCallee mcFuncCallee =
-         m->module->getOrInsertFunction("llvm.memcpy.p0i8.p0i8.i64", LLVMTypes::VoidType, LLVMTypes::VoidPointerType,
-                                        LLVMTypes::VoidPointerType, LLVMTypes::Int64Type, LLVMTypes::BoolType);
-     llvm::Constant *mcFunc = llvm::cast<llvm::Constant>(mcFuncCallee.getCallee());
--#endif
-     AssertPos(currentPos, mcFunc != NULL);
-     AssertPos(currentPos, llvm::isa<llvm::Function>(mcFunc));
- 
-diff --git a/src/gen/GlobalsLocalization.cpp b/src/gen/GlobalsLocalization.cpp
-index 193a66289..a176e9462 100644
---- a/src/gen/GlobalsLocalization.cpp
-+++ b/src/gen/GlobalsLocalization.cpp
-@@ -470,11 +470,7 @@ void GlobalsLocalization::LocalizeGlobals(LocalizationInfo &LI) {
-         Instruction &FirstI = *Fn->getEntryBlock().begin();
-         Type *ElemTy = GV->getType()->getElementType();
-         AllocaInst *Alloca = new AllocaInst(ElemTy, 0, GV->getName() + ".local", &FirstI);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        Alloca->setAlignment(GV->getAlignment());
--#else // LLVM 10.0+
-         Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()));
--#endif
-         if (!isa<UndefValue>(GV->getInitializer()))
-             new StoreInst(GV->getInitializer(), Alloca, &FirstI);
- 
-diff --git a/src/ispc.cpp b/src/ispc.cpp
-index e2d0f206e..fac5233f7 100644
---- a/src/ispc.cpp
-+++ b/src/ispc.cpp
-@@ -272,9 +272,7 @@ typedef enum {
-     CPU_Silvermont,
- 
-     CPU_ICX,
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     CPU_TGL,
--#endif
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-     CPU_ADL,
-     CPU_SPR,
-@@ -365,10 +363,8 @@ class AllCPUs {
- 
-         names[CPU_ICX].push_back("icelake-server");
-         names[CPU_ICX].push_back("icx");
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         names[CPU_TGL].push_back("tigerlake");
-         names[CPU_TGL].push_back("tgl");
--#endif
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-         names[CPU_ADL].push_back("alderlake");
-         names[CPU_ADL].push_back("adl");
-@@ -411,11 +407,9 @@ class AllCPUs {
-         compat[CPU_ADL] = Set(CPU_ADL, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont,
-                               CPU_SandyBridge, CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_None);
- #endif
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         compat[CPU_TGL] =
-             Set(CPU_TGL, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont, CPU_SandyBridge,
-                 CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_SKX, CPU_ICL, CPU_ICX, CPU_None);
--#endif
-         compat[CPU_ICX] = Set(CPU_ICX, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont,
-                               CPU_SandyBridge, CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_SKX, CPU_ICL, CPU_None);
- 
-@@ -556,9 +550,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-         case CPU_SPR:
- #endif
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         case CPU_TGL:
--#endif
-         case CPU_ICX:
-         case CPU_ICL:
-         case CPU_SKX:
-@@ -916,7 +908,6 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         }
-         break;
-     case ISPCTarget::avx512skx_i8x64:
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0 // LLVM 10.0+
-         // This target is enabled only for LLVM 10.0 and later
-         // because LLVM requires a number of fixes, which are
-         // committed to LLVM 11.0 and can be applied to 10.0, but not
-@@ -937,12 +928,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         this->m_hasVecPrefetch = false;
-         CPUfromISA = CPU_SKX;
-         break;
--#else
--        unsupported_target = true;
--        break;
--#endif
-     case ISPCTarget::avx512skx_i16x32:
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0 // LLVM 10.0+
-         // This target is enabled only for LLVM 10.0 and later
-         // because LLVM requires a number of fixes, which are
-         // committed to LLVM 11.0 and can be applied to 10.0, but not
-@@ -963,10 +949,6 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         this->m_hasVecPrefetch = false;
-         CPUfromISA = CPU_SKX;
-         break;
--#else
--        unsupported_target = true;
--        break;
--#endif
- #ifdef ISPC_ARM_ENABLED
-     case ISPCTarget::neon_i8x16:
-         this->m_isa = Target::NEON;
-@@ -1662,11 +1644,9 @@ Globals::Globals() {
-     isMultiTargetCompilation = false;
-     errorLimit = -1;
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     enableTimeTrace = false;
-     // set default granularity to 500.
-     timeTraceGranularity = 500;
--#endif
-     target = NULL;
-     ctx = new llvm::LLVMContext;
- 
-diff --git a/src/ispc.h b/src/ispc.h
-index e25d8830e..de357a21c 100644
---- a/src/ispc.h
-+++ b/src/ispc.h
-@@ -695,13 +695,12 @@ struct Globals {
- 
-     /* Number of errors to show in ISPC. */
-     int errorLimit;
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-+
-     /* When true, enable compile time tracing. */
-     bool enableTimeTrace;
- 
-     /* When compile time tracing is enabled, set time granularity. */
-     int timeTraceGranularity;
--#endif
- };
- 
- enum {
-diff --git a/src/ispc_version.h b/src/ispc_version.h
-index d781347fd..434b2d678 100644
---- a/src/ispc_version.h
-+++ b/src/ispc_version.h
-@@ -44,13 +44,11 @@
- 
- #define ISPC_LLVM_VERSION (LLVM_VERSION_MAJOR * 10000 + LLVM_VERSION_MINOR * 100)
- 
--#define ISPC_LLVM_8_0 80000
--#define ISPC_LLVM_9_0 90000
- #define ISPC_LLVM_10_0 100000
- #define ISPC_LLVM_11_0 110000
- #define ISPC_LLVM_12_0 120000
- 
--#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_8_0
-+#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_10_0
- #define LATEST_SUPPORTED_LLVM ISPC_LLVM_12_0
- 
- #ifdef __ispc__xstr
-diff --git a/src/main.cpp b/src/main.cpp
-index 8f64330cc..5c920eabc 100644
---- a/src/main.cpp
-+++ b/src/main.cpp
-@@ -55,9 +55,7 @@
- #include <llvm/Support/Signals.h>
- #include <llvm/Support/TargetRegistry.h>
- #include <llvm/Support/TargetSelect.h>
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/ToolOutputFile.h>
--#endif
- 
- #ifdef ISPC_HOST_IS_WINDOWS
- #define strcasecmp stricmp
-@@ -181,11 +179,9 @@ static void lPrintVersion() {
-     snprintf(targetHelp, sizeof(targetHelp), "[--target-os=<os>]\t\t\tSelect target OS.  <os>={%s}",
-              g->target_registry->getSupportedOSes().c_str());
-     PrintWithWordBreaks(targetHelp, 24, TerminalWidth(), stdout);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     printf("    [--time-trace]\t\t\tTurn on time profiler. Generates JSON file based on output filename.\n");
-     printf("    [--time-trace-granularity=<value>\tMinimum time granularity (in microseconds) traced by time "
-            "profiler.\n");
--#endif
-     printf("    [--version]\t\t\t\tPrint ispc version\n");
- #ifdef ISPC_GENX_ENABLED
-     printf("    [--vc-options=<\"-option1 -option2...\">]\t\t\t\tPass additional options to Vector Compiler backend\n");
-@@ -462,7 +458,6 @@ static void setCallingConv(VectorCallStatus vectorCall, Arch arch) {
-     }
- }
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- static void writeCompileTimeFile(const char *outFileName) {
-     llvm::SmallString<128> jsonFileName(outFileName);
-     jsonFileName.append(".json");
-@@ -479,7 +474,6 @@ static void writeCompileTimeFile(const char *outFileName) {
-     of->keep();
-     return;
- }
--#endif
- 
- static std::set<int> ParsingPhases(char *stages, ArgErrors &errorHandler) {
-     constexpr int parsing_limit = 100;
-@@ -791,12 +785,10 @@ int main(int Argc, char *Argv[]) {
-             }
-         } else if (!strncmp(argv[i], "--force-alignment=", 18)) {
-             g->forceAlignment = atoi(argv[i] + 18);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         } else if (!strcmp(argv[i], "--time-trace")) {
-             g->enableTimeTrace = true;
-         } else if (!strncmp(argv[i], "--time-trace-granularity=", 25)) {
-             g->timeTraceGranularity = atoi(argv[i] + 25);
--#endif
-         } else if (!strcmp(argv[i], "--woff") || !strcmp(argv[i], "-woff")) {
-             g->disableWarnings = true;
-             g->emitPerfWarnings = false;
-@@ -1059,7 +1051,6 @@ int main(int Argc, char *Argv[]) {
- 
-     // This needs to happen after the TargetOS is decided.
-     setCallingConv(vectorCall, arch);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     if (g->enableTimeTrace) {
-         llvm::timeTraceProfilerInitialize(g->timeTraceGranularity, "ispc");
-     }
-@@ -1077,9 +1068,5 @@ int main(int Argc, char *Argv[]) {
-         }
-         llvm::timeTraceProfilerCleanup();
-     }
--#else
--    int ret = Module::CompileAndOutput(file, arch, cpu, targets, flags, ot, outFileName, headerFileName, depsFileName,
--                                       depsTargetName, hostStubFileName, devStubFileName);
--#endif
-     return ret;
- }
-diff --git a/src/module.cpp b/src/module.cpp
-index fe7452df1..a85fec77a 100644
---- a/src/module.cpp
-+++ b/src/module.cpp
-@@ -170,9 +170,7 @@ Module::Module(const char *fn) {
-     module->setDataLayout(g->target->getDataLayout()->getStringRepresentation());
- 
-     if (g->generateDebuggingSymbols) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Create Debug Data");
--#endif
-         // To enable debug information on Windows, we have to let llvm know, that
-         // debug information should be emitted in CodeView format.
-         if (g->target_os == TargetOS::windows) {
-@@ -226,10 +224,8 @@ extern YY_BUFFER_STATE yy_create_buffer(FILE *, int);
- extern void yy_delete_buffer(YY_BUFFER_STATE);
- 
- int Module::CompileFile() {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope CompileFileTimeScope(
-         "CompileFile", llvm::StringRef(filename + ("_" + std::string(g->target->GetISAString()))));
--#endif
-     extern void ParserInit();
-     ParserInit();
- 
-@@ -238,18 +234,14 @@ int Module::CompileFile() {
-     // variable 'm' to be initialized and available (which it isn't until
-     // the Module constructor returns...)
-     {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("DefineStdlib");
--#endif
-         DefineStdlib(symbolTable, g->ctx, module, g->includeStdlib);
-     }
- 
-     bool runPreprocessor = g->runCPP;
- 
-     if (runPreprocessor) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Frontend parser");
--#endif
-         if (!IsStdin(filename)) {
-             // Try to open the file first, since otherwise we crash in the
-             // preprocessor if the file doesn't exist.
-@@ -268,9 +260,7 @@ int Module::CompileFile() {
-         yyparse();
-         yy_delete_buffer(strbuf);
-     } else {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Frontend parser");
--#endif
-         // No preprocessor, just open up the file if it's not stdin..
-         FILE *f = NULL;
-         if (IsStdin(filename)) {
-@@ -297,9 +287,7 @@ int Module::CompileFile() {
- 
-     if (diBuilder)
-         diBuilder->finalize();
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope TimeScope("Optimize");
--#endif
-     if (errorCount == 0)
-         Optimize(module, g->opt.level);
- 
-@@ -1243,15 +1231,8 @@ bool Module::writeObjectFileOrAssembly(llvm::TargetMachine *targetMachine, llvm:
-                                        const char *outFileName) {
-     // Figure out if we're generating object file or assembly output, and
-     // set binary output for object files
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    Assert(!g->target->isGenXTarget());
--    llvm::TargetMachine::CodeGenFileType fileType =
--        (outputType == Object) ? llvm::TargetMachine::CGFT_ObjectFile : llvm::TargetMachine::CGFT_AssemblyFile;
--    bool binary = (fileType == llvm::TargetMachine::CGFT_ObjectFile);
--#else // LLVM 10.0+
-     llvm::CodeGenFileType fileType = (outputType == Object) ? llvm::CGFT_ObjectFile : llvm::CGFT_AssemblyFile;
-     bool binary = (fileType == llvm::CGFT_ObjectFile);
--#endif
- 
-     llvm::sys::fs::OpenFlags flags = binary ? llvm::sys::fs::F_None : llvm::sys::fs::F_Text;
- 
-@@ -2219,11 +2200,7 @@ void Module::execPreprocessor(const char *infilename, llvm::raw_string_ostream *
-     inst.setTarget(target);
-     inst.createSourceManager(inst.getFileManager());
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    clang::FrontendInputFile inputFile(infilename, clang::InputKind::Unknown);
--#else // LLVM 10.0+
-     clang::FrontendInputFile inputFile(infilename, clang::InputKind());
--#endif
- 
-     inst.InitializeSourceManager(inputFile);
- 
-@@ -2722,9 +2699,7 @@ int Module::CompileAndOutput(const char *srcFile, Arch arch, const char *cpu, st
- 
-         m = new Module(srcFile);
-         if (m->CompileFile() == 0) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-             llvm::TimeTraceScope TimeScope("Backend");
--#endif
- #ifdef ISPC_GENX_ENABLED
-             if (outputType == Asm || outputType == Object) {
-                 if (g->target->isGenXTarget()) {
-@@ -2855,9 +2830,7 @@ int Module::CompileAndOutput(const char *srcFile, Arch arch, const char *cpu, st
- 
-             m = new Module(srcFile);
-             int compileFileError = m->CompileFile();
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-             llvm::TimeTraceScope TimeScope("Backend");
--#endif
-             if (compileFileError == 0) {
-                 // Create the dispatch module, unless already created;
-                 // in the latter case, just do the checking
-diff --git a/src/module.h b/src/module.h
-index 61d3cfea0..603124d50 100644
---- a/src/module.h
-+++ b/src/module.h
-@@ -43,9 +43,7 @@
- 
- #include <llvm/IR/DebugInfo.h>
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/TimeProfiler.h>
--#endif
- 
- #ifdef ISPC_GENX_ENABLED
- #include "ocl_igc_interface/igc_ocl_device_ctx.h"
-diff --git a/src/opt.cpp b/src/opt.cpp
-index a655a8344..5b1ac7b63 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -66,6 +66,7 @@
- #include <llvm/IR/Instructions.h>
- #include <llvm/IR/IntrinsicInst.h>
- #include <llvm/IR/Intrinsics.h>
-+#include <llvm/IR/IntrinsicsX86.h>
- #include <llvm/IR/LegacyPassManager.h>
- #include <llvm/IR/Module.h>
- #include <llvm/IR/PatternMatch.h>
-@@ -85,9 +86,6 @@
- #include <llvm/Transforms/Scalar/InstSimplifyPass.h>
- #include <llvm/Transforms/Utils.h>
- #include <llvm/Transforms/Utils/BasicBlockUtils.h>
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
--#include <llvm/IR/IntrinsicsX86.h>
--#endif
- 
- #ifdef ISPC_HOST_IS_LINUX
- #include <alloca.h>
-@@ -1003,10 +1001,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
-                 name = LLVMGetName(callInst->getArgOperand(0), "_load");
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                llvm::Instruction *loadInst =
--                    new llvm::LoadInst(castPtr, name, false /* not volatile */, align, (llvm::Instruction *)NULL);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-                 llvm::Instruction *loadInst = new llvm::LoadInst(castPtr, name, false /* not volatile */,
-                                                                  llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
- #else
-@@ -1043,13 +1038,8 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedStore32 ? 4 : 8;
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                llvm::StoreInst *storeInst = new llvm::StoreInst(rvalue, castPtr, (llvm::Instruction *)NULL);
--                storeInst->setAlignment(align);
--#else
-                 llvm::StoreInst *storeInst = new llvm::StoreInst(rvalue, castPtr, (llvm::Instruction *)NULL,
-                                                                  llvm::MaybeAlign(align).valueOrOne());
--#endif
-                 lCopyMetadata(storeInst, callInst);
-                 llvm::ReplaceInstWithInst(callInst, storeInst);
- 
-@@ -1066,9 +1056,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool IntrinsicsOpt::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("IntrinsicsOpt::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -1239,9 +1227,7 @@ bool InstructionSimplifyPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool InstructionSimplifyPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("InstructionSimplifyPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -2974,16 +2960,10 @@ static bool lImproveMaskedStore(llvm::CallInst *callInst) {
- 
-             lvalue = new llvm::BitCastInst(lvalue, ptrType, "lvalue_to_ptr_type", callInst);
-             lCopyMetadata(lvalue, callInst);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--            store =
--                new llvm::StoreInst(rvalue, lvalue, false /* not volatile */,
--                                    g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align);
--#else
-             store = new llvm::StoreInst(
-                 rvalue, lvalue, false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-                     .valueOrOne());
--#endif
-         }
-         if (store != NULL) {
-             lCopyMetadata(store, callInst);
-@@ -3059,11 +3039,7 @@ static bool lImproveMaskedLoad(llvm::CallInst *callInst, llvm::BasicBlock::itera
-         {
-             llvm::Type *ptrType = llvm::PointerType::get(callInst->getType(), 0);
-             ptr = new llvm::BitCastInst(ptr, ptrType, "ptr_cast_for_load", callInst);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--            load = new llvm::LoadInst(ptr, callInst->getName(), false /* not volatile */,
--                                      g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align,
--                                      (llvm::Instruction *)NULL);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-             load = new llvm::LoadInst(
-                 ptr, callInst->getName(), false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-@@ -3129,9 +3105,7 @@ bool ImproveMemoryOpsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ImproveMemoryOpsPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ImproveMemoryOpsPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -3424,9 +3398,7 @@ llvm::Value *lGEPAndLoad(llvm::Value *basePtr, int64_t offset, int align, llvm::
-                          llvm::Type *type) {
-     llvm::Value *ptr = lGEPInst(basePtr, LLVMInt64(offset), "new_base", insertBefore);
-     ptr = new llvm::BitCastInst(ptr, llvm::PointerType::get(type, 0), "ptr_cast", insertBefore);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, align, insertBefore);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-     return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, llvm::MaybeAlign(align), insertBefore);
- #else // LLVM 11.0+
-     return new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-@@ -4135,9 +4107,7 @@ bool GatherCoalescePass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool GatherCoalescePass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("GatherCoalescePass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -4467,9 +4437,7 @@ bool ReplacePseudoMemoryOpsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplacePseudoMemoryOpsPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplacePseudoMemoryOpsPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -4573,9 +4541,7 @@ bool IsCompileTimeConstantPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool IsCompileTimeConstantPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("IsCompileTimeConstantPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5201,9 +5167,7 @@ bool PeepholePass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool PeepholePass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("PeepholePass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5299,9 +5263,7 @@ bool ReplaceStdlibShiftPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceStdlibShiftPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceStdlibShiftPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5399,9 +5361,7 @@ llvm::Instruction *FixBooleanSelectPass::fixSelect(llvm::SelectInst *sel, llvm::
- }
- 
- bool FixBooleanSelectPass::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("FixBooleanSelectPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
- 
-     return modifiedAny;
-@@ -5964,9 +5924,7 @@ bool GenXGatherCoalescing::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool GenXGatherCoalescing::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("GenXGatherCoalescing::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6113,9 +6071,7 @@ bool PromoteToPrivateMemoryPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool PromoteToPrivateMemoryPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("PromoteToPrivateMemoryPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6181,9 +6137,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceLLVMIntrinsics::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceLLVMIntrinsics::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6278,9 +6232,7 @@ bool ReplaceUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceUnsupportedInsts::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceUnsupportedInsts::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6369,9 +6321,7 @@ bool CheckUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool CheckUnsupportedInsts::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("CheckUnsupportedInsts::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6440,9 +6390,7 @@ bool MangleOpenCLBuiltins::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool MangleOpenCLBuiltins::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("MangleOpenCLBuiltins::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6828,9 +6776,7 @@ bool FixAddressSpace::runOnFunction(llvm::Function &F) {
-     // Transformations are correct when the function is not internal.
-     // This is due to address space calculation algorithm.
-     // TODO: problems can be met in case of Stack Calls
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("FixAddressSpace::runOnFunction", F.getName());
--#endif
-     if (F.getLinkage() == llvm::GlobalValue::LinkageTypes::InternalLinkage)
-         return false;
- 
-@@ -6854,9 +6800,7 @@ class DemotePHIs : public llvm::FunctionPass {
- char DemotePHIs::ID = 0;
- 
- bool DemotePHIs::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("DemotePHIs::runOnFunction", F.getName());
--#endif
-     if (F.isDeclaration() || skipFunction(F))
-         return false;
-     std::vector<llvm::Instruction *> WorkList;
-diff --git a/src/type.cpp b/src/type.cpp
-index 688a4e874..fa0cb04db 100644
---- a/src/type.cpp
-+++ b/src/type.cpp
-@@ -1822,14 +1822,10 @@ llvm::DIType *StructType::GetDIType(llvm::DIScope *scope) const {
-     llvm::DIFile *diFile = pos.GetDIFile();
-     llvm::DINamespace *diSpace = pos.GetDINamespace();
-     return m->diBuilder->createStructType(diSpace, GetString(), diFile,
--                                          pos.first_line,          // Line number
--                                          layout->getSizeInBits(), // Size in bits
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                                          layout->getAlignment() * 8, // Alignment in bits
--#else                                                                 // LLVM 10.0+
-+                                          pos.first_line,                     // Line number
-+                                          layout->getSizeInBits(),            // Size in bits
-                                           layout->getAlignment().value() * 8, // Alignment in bits
--#endif
--                                          llvm::DINode::FlagZero, // Flags
-+                                          llvm::DINode::FlagZero,             // Flags
-                                           NULL, elements);
- }
- 
-diff --git a/tests/lit-tests/1771.ispc b/tests/lit-tests/1771.ispc
-index 98064d84d..4feb73dd7 100644
---- a/tests/lit-tests/1771.ispc
-+++ b/tests/lit-tests/1771.ispc
-@@ -5,7 +5,6 @@
- // RUN: %{ispc} %s --target=sse4-i16x8 --emit-asm -o - | FileCheck %s -check-prefix=CHECKSSE4_I16X8
- // RUN: %{ispc} %s --target=sse4-i8x16 --emit-asm -o - | FileCheck %s -check-prefix=CHECKSSE4_I8X16
- 
--// REQUIRES: LLVM_10_0+
- // REQUIRES: X86_ENABLED
- 
- // CHECKAVX2_I32X8: {{[a-z]*xor[a-z]*}}  %xmm0, %xmm0, %xmm0
-diff --git a/tests/lit-tests/1844.ispc b/tests/lit-tests/1844.ispc
-index 793a8866c..189edf4c3 100644
---- a/tests/lit-tests/1844.ispc
-+++ b/tests/lit-tests/1844.ispc
-@@ -6,9 +6,6 @@
- 
- // REQUIRES: X86_ENABLED
- 
--// It doesn't work for anything earlier than 10.0, but it will not be fixed, so don't run.
--// REQUIRES: LLVM_10_0+
--
- extern uniform unsigned int64 var_6;
- extern uniform unsigned int16 var_11;
- extern uniform bool arr_201 [1] [15] [20];
-diff --git a/tests/lit-tests/1926.ispc b/tests/lit-tests/1926.ispc
-index 70f7cc3c2..7921c91a6 100644
---- a/tests/lit-tests/1926.ispc
-+++ b/tests/lit-tests/1926.ispc
-@@ -2,8 +2,6 @@
- // RUN: cat %T/1926.o.json \
- // RUN:   | FileCheck %s
- 
--// REQUIRES: LLVM_10_0+
--
- // CHECK: "traceEvents"
- // CHECK: "detail"
- export uniform int foo(uniform int a[], uniform int count) {
-diff --git a/tests/lit-tests/cpus_x86.ispc b/tests/lit-tests/cpus_x86.ispc
-index 516efdd4c..4d60186f6 100644
---- a/tests/lit-tests/cpus_x86.ispc
-+++ b/tests/lit-tests/cpus_x86.ispc
-@@ -24,6 +24,8 @@
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icl
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icelake-server
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icx
-+//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tigerlake
-+//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tgl
- 
- // REQUIRES: X86_ENABLED
- 
-diff --git a/tests/lit-tests/cpus_x86_llvm10.ispc b/tests/lit-tests/cpus_x86_llvm10.ispc
-deleted file mode 100644
-index ef00000e5..000000000
---- a/tests/lit-tests/cpus_x86_llvm10.ispc
-+++ /dev/null
-@@ -1,11 +0,0 @@
--// The test checks that cpu definitions (including all synonyms) are successfully consumed by compiler.
--
--//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tigerlake
--//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tgl
--
--// REQUIRES: X86_ENABLED
--// REQUIRES: LLVM_10_0+
--
--uniform int i;
--
--void foo() {}
-diff --git a/tests/lit-tests/lit.cfg b/tests/lit-tests/lit.cfg
-index 17016579d..045e69437 100644
---- a/tests/lit-tests/lit.cfg
-+++ b/tests/lit-tests/lit.cfg
-@@ -30,11 +30,6 @@ print("Config:")
- 
- # LLVM version
- llvm_version = LooseVersion(ispc_llvm_version_number)
--if llvm_version >= LooseVersion("10.0.0"):
--    print("LLVM_10_0+: YES")
--    config.available_features.add("LLVM_10_0+")
--else:
--    print("LLVM_10_0+: NO")
- 
- if llvm_version >= LooseVersion("12.0.0"):
-     print("LLVM_12_0+: YES")
diff --git a/srcpkgs/ispc/patches/llvm12-003.patch b/srcpkgs/ispc/patches/llvm12-003.patch
deleted file mode 100644
index 0423afc9e3f9..000000000000
--- a/srcpkgs/ispc/patches/llvm12-003.patch
+++ /dev/null
@@ -1,1504 +0,0 @@
-From 1851d18b213dbad169937076176b2d5509733c76 Mon Sep 17 00:00:00 2001
-From: Deepak Rajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Tue, 12 Jan 2021 22:15:12 -0800
-Subject: [PATCH] fixes #1821 - Removing LLVMGetName() and switching to
- LLVM::Twine.
-
----
- src/ctx.cpp      | 304 ++++++++++++++++++++++-------------------------
- src/ctx.h        |  72 +++++------
- src/expr.cpp     |  36 +++---
- src/llvmutil.cpp |  17 ---
- src/llvmutil.h   |   5 -
- src/opt.cpp      | 103 +++++++++-------
- 6 files changed, 255 insertions(+), 282 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 42c4ea09d..ded524b71 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1020,8 +1020,8 @@ void FunctionEmitContext::EmitCaseLabel(int value, bool checkMask, SourcePos pos
-     llvm::BasicBlock *bbCaseImpl = NULL;
-     if (emitGenXHardwareMask()) {
-         // Create basic block with actual case implementation
--        std::string bbName = bbCase->getName().str() + "_impl";
--        bbCaseImpl = CreateBasicBlock(bbName.c_str(), bbCase);
-+        llvm::Twine bbName = llvm::Twine(bbCase->getName()) + "_impl";
-+        bbCaseImpl = CreateBasicBlock(bbName, bbCase);
-     }
- #endif
- 
-@@ -1185,7 +1185,7 @@ bool FunctionEmitContext::initLabelBBlocks(ASTNode *node, void *data) {
-     if (ctx->labelMap.find(ls->name) != ctx->labelMap.end())
-         Error(ls->pos, "Multiple labels named \"%s\" in function.", ls->name.c_str());
-     else {
--        llvm::BasicBlock *bb = ctx->CreateBasicBlock(ls->name.c_str());
-+        llvm::BasicBlock *bb = ctx->CreateBasicBlock(ls->name);
-         ctx->labelMap[ls->name] = bb;
-     }
-     return true;
-@@ -1299,7 +1299,7 @@ llvm::Value *FunctionEmitContext::Any(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_any"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_any");
- }
- 
- llvm::Value *FunctionEmitContext::All(llvm::Value *mask) {
-@@ -1315,7 +1315,7 @@ llvm::Value *FunctionEmitContext::All(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_all"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_all");
- }
- 
- llvm::Value *FunctionEmitContext::None(llvm::Value *mask) {
-@@ -1331,7 +1331,7 @@ llvm::Value *FunctionEmitContext::None(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_none"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_none");
- }
- 
- llvm::Value *FunctionEmitContext::LaneMask(llvm::Value *v) {
-@@ -1349,7 +1349,7 @@ llvm::Value *FunctionEmitContext::LaneMask(llvm::Value *v) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, v, LLVMGetName(v, "_movmsk"));
-+    return CallInst(fmm, NULL, v, llvm::Twine(v->getName()) + "_movmsk");
- }
- 
- llvm::Value *FunctionEmitContext::MasksAllEqual(llvm::Value *v1, llvm::Value *v2) {
-@@ -1364,11 +1364,12 @@ llvm::Value *FunctionEmitContext::MasksAllEqual(llvm::Value *v1, llvm::Value *v2
- #else
-     if (g->target->getArch() == Arch::wasm32) {
-         llvm::Function *fmm = m->module->getFunction("__wasm_cmp_msk_eq");
--        return CallInst(fmm, NULL, {v1, v2}, LLVMGetName("wasm_cmp_msk_eq", v1, v2));
-+        return CallInst(fmm, NULL, {v1, v2}, ((llvm::Twine("wasm_cmp_msk_eq_") + v1->getName()) + "_") + v2->getName());
-     }
-     llvm::Value *mm1 = LaneMask(v1);
-     llvm::Value *mm2 = LaneMask(v2);
--    return CmpInst(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_EQ, mm1, mm2, LLVMGetName("equal", v1, v2));
-+    return CmpInst(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_EQ, mm1, mm2,
-+                   ((llvm::Twine("equal_") + v1->getName()) + "_") + v2->getName());
- #endif
- }
- 
-@@ -1392,7 +1393,7 @@ llvm::Value *FunctionEmitContext::GetStringPtr(const std::string &str) {
-     return new llvm::BitCastInst(lstrPtr, LLVMTypes::VoidPointerType, "str_void_ptr", bblock);
- }
- 
--llvm::BasicBlock *FunctionEmitContext::CreateBasicBlock(const char *name, llvm::BasicBlock *insertAfter) {
-+llvm::BasicBlock *FunctionEmitContext::CreateBasicBlock(const llvm::Twine &name, llvm::BasicBlock *insertAfter) {
-     llvm::BasicBlock *newBB = llvm::BasicBlock::Create(*g->ctx, name, llvmFunction);
-     if (insertAfter)
-         newBB->moveAfter(insertAfter);
-@@ -1416,14 +1417,15 @@ llvm::Value *FunctionEmitContext::I1VecToBoolVec(llvm::Value *b) {
- 
-         for (unsigned int i = 0; i < at->getNumElements(); ++i) {
-             llvm::Value *elt = ExtractInst(b, i);
--            llvm::Value *sext = SwitchBoolSize(elt, LLVMTypes::BoolVectorStorageType, LLVMGetName(elt, "_to_boolvec"));
-+            llvm::Value *sext =
-+                SwitchBoolSize(elt, LLVMTypes::BoolVectorStorageType, llvm::Twine(elt->getName()) + "_to_boolvec");
-             ret = InsertInst(ret, sext, i);
-         }
-         return ret;
-     } else {
-         // For non-array types, convert to 'LLVMTypes::BoolVectorType' if
-         // necessary.
--        return SwitchBoolSize(b, LLVMTypes::BoolVectorType, LLVMGetName(b, "_to_boolvec"));
-+        return SwitchBoolSize(b, LLVMTypes::BoolVectorType, llvm::Twine(b->getName()) + "_to_boolvec");
-     }
- }
- 
-@@ -1563,7 +1565,7 @@ static int lArrayVectorWidth(llvm::Type *t) {
- }
- 
- llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps inst, llvm::Value *v0, llvm::Value *v1,
--                                                 const char *name) {
-+                                                 const llvm::Twine &name) {
-     if (v0 == NULL || v1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1573,7 +1575,7 @@ llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps in
-     llvm::Type *type = v0->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *bop = llvm::BinaryOperator::Create(inst, v0, v1, name ? name : "", bblock);
-+        llvm::Instruction *bop = llvm::BinaryOperator::Create(inst, v0, v1, name, bblock);
-         AddDebugPos(bop);
-         return bop;
-     } else {
-@@ -1591,7 +1593,7 @@ llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps in
-     }
- }
- 
--llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const char *name) {
-+llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const llvm::Twine &name) {
-     if (v == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1603,14 +1605,14 @@ llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const char *name)
-     llvm::Type *type = v->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *binst = llvm::BinaryOperator::CreateNot(v, name ? name : "not", bblock);
-+        llvm::Instruction *binst = llvm::BinaryOperator::CreateNot(v, name.isTriviallyEmpty() ? "not" : name, bblock);
-         AddDebugPos(binst);
-         return binst;
-     } else {
-         llvm::Value *ret = llvm::UndefValue::get(type);
-         for (int i = 0; i < arraySize; ++i) {
-             llvm::Value *a = ExtractInst(v, i);
--            llvm::Value *op = llvm::BinaryOperator::CreateNot(a, name ? name : "not", bblock);
-+            llvm::Value *op = llvm::BinaryOperator::CreateNot(a, name.isTriviallyEmpty() ? "not" : name, bblock);
-             AddDebugPos(op);
-             ret = InsertInst(ret, op, i);
-         }
-@@ -1638,7 +1640,7 @@ static llvm::Type *lGetMatchingBoolVectorType(llvm::Type *type) {
- }
- 
- llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm::CmpInst::Predicate pred,
--                                          llvm::Value *v0, llvm::Value *v1, const char *name) {
-+                                          llvm::Value *v0, llvm::Value *v1, const llvm::Twine &name) {
-     if (v0 == NULL || v1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1648,7 +1650,8 @@ llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm
-     llvm::Type *type = v0->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *ci = llvm::CmpInst::Create(inst, pred, v0, v1, name ? name : "cmp", bblock);
-+        llvm::Instruction *ci =
-+            llvm::CmpInst::Create(inst, pred, v0, v1, name.isTriviallyEmpty() ? "cmp" : name, bblock);
-         AddDebugPos(ci);
-         return ci;
-     } else {
-@@ -1657,14 +1660,14 @@ llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm
-         for (int i = 0; i < arraySize; ++i) {
-             llvm::Value *a = ExtractInst(v0, i);
-             llvm::Value *b = ExtractInst(v1, i);
--            llvm::Value *op = CmpInst(inst, pred, a, b, name);
-+            llvm::Value *op = CmpInst(inst, pred, a, b, name.isTriviallyEmpty() ? "cmp" : name);
-             ret = InsertInst(ret, op, i);
-         }
-         return ret;
-     }
- }
- 
--llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const char *name) {
-+llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1704,21 +1707,19 @@ llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const char *n
-     return ret;
- }
- 
--llvm::Value *FunctionEmitContext::BitCastInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Value *FunctionEmitContext::BitCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_bitcast");
--
--    llvm::Instruction *inst = new llvm::BitCastInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::BitCastInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_bitcast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const char *name) {
-+llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1728,23 +1729,19 @@ llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const char *n
-         // no-op for varying pointers; they're already vectors of ints
-         return value;
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_ptr2int");
-     llvm::Type *type = LLVMTypes::PointerIntType;
--    llvm::Instruction *inst = new llvm::PtrToIntInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::PtrToIntInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_ptr2int");
--
-     llvm::Type *fromType = value->getType();
-     if (llvm::isa<llvm::VectorType>(fromType)) {
-         // varying pointer
-@@ -1752,27 +1749,26 @@ llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *t
-             // already the right type--done
-             return value;
-         else if (fromType->getScalarSizeInBits() > toType->getScalarSizeInBits())
--            return TruncInst(value, toType, name);
-+            return TruncInst(value, toType,
-+                             name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name);
-         else {
-             AssertPos(currentPos, fromType->getScalarSizeInBits() < toType->getScalarSizeInBits());
--            return ZExtInst(value, toType, name);
-+            return ZExtInst(value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name);
-         }
-     }
- 
--    llvm::Instruction *inst = new llvm::PtrToIntInst(value, toType, name, bblock);
-+    llvm::Instruction *inst = new llvm::PtrToIntInst(
-+        value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_int2ptr");
--
-     llvm::Type *fromType = value->getType();
-     if (llvm::isa<llvm::VectorType>(fromType)) {
-         // varying pointer
-@@ -1780,95 +1776,87 @@ llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *t
-             // done
-             return value;
-         else if (fromType->getScalarSizeInBits() > toType->getScalarSizeInBits())
--            return TruncInst(value, toType, name);
-+            return TruncInst(value, toType,
-+                             name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name);
-         else {
-             AssertPos(currentPos, fromType->getScalarSizeInBits() < toType->getScalarSizeInBits());
--            return ZExtInst(value, toType, name);
-+            return ZExtInst(value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name);
-         }
-     }
- 
--    llvm::Instruction *inst = new llvm::IntToPtrInst(value, toType, name, bblock);
-+    llvm::Instruction *inst = new llvm::IntToPtrInst(
-+        value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::TruncInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::TruncInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_trunc");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::TruncInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::TruncInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_trunc" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
- llvm::Instruction *FunctionEmitContext::CastInst(llvm::Instruction::CastOps op, llvm::Value *value, llvm::Type *type,
--                                                 const char *name) {
-+                                                 const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_cast");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = llvm::CastInst::Create(op, value, type, name, bblock);
-+    llvm::Instruction *inst = llvm::CastInst::Create(
-+        op, value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_cast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::FPCastInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::FPCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_cast");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = llvm::CastInst::CreateFPCast(value, type, name, bblock);
-+    llvm::Instruction *inst = llvm::CastInst::CreateFPCast(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_cast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::SExtInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::SExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_sext");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::SExtInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::SExtInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_sext" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::ZExtInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::ZExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_zext");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::ZExtInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::ZExtInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_zext" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
-@@ -1913,14 +1901,15 @@ llvm::Value *FunctionEmitContext::applyVaryingGEP(llvm::Value *basePtr, llvm::Va
-         scale = SmearUniform(scale);
-         Assert(index != NULL);
-         // offset = index * scale
--        offset = BinaryOperator(llvm::Instruction::Mul, scale, index, LLVMGetName("mul", scale, index));
-+        offset = BinaryOperator(llvm::Instruction::Mul, scale, index,
-+                                ((llvm::Twine("mul_") + scale->getName()) + "_") + index->getName());
-     }
- 
-     // For 64-bit targets, if we've been doing our offset calculations in
-     // 32 bits, we still have to convert to a 64-bit value before we
-     // actually add the offset to the pointer.
-     if (g->target->is32Bit() == false && g->opt.force32BitAddressing == true)
--        offset = SExtInst(offset, LLVMTypes::Int64VectorType, LLVMGetName(offset, "_to_64"));
-+        offset = SExtInst(offset, LLVMTypes::Int64VectorType, llvm::Twine(offset->getName()) + "_to_64");
- 
-     // Smear out the pointer to be varying; either the base pointer or the
-     // index must be varying for this method to be called.
-@@ -1929,7 +1918,7 @@ llvm::Value *FunctionEmitContext::applyVaryingGEP(llvm::Value *basePtr, llvm::Va
-     llvm::Value *varyingPtr = baseIsUniform ? SmearUniform(basePtr) : basePtr;
- 
-     // newPtr = ptr + offset
--    return BinaryOperator(llvm::Instruction::Add, varyingPtr, offset, LLVMGetName(basePtr, "_offset"));
-+    return BinaryOperator(llvm::Instruction::Add, varyingPtr, offset, llvm::Twine(basePtr->getName()) + "_offset");
- }
- 
- void FunctionEmitContext::MatchIntegerTypes(llvm::Value **v0, llvm::Value **v1) {
-@@ -2006,13 +1995,13 @@ llvm::Value *FunctionEmitContext::MakeSlicePointer(llvm::Value *ptr, llvm::Value
-     llvm::StructType *st = llvm::StructType::get(*g->ctx, eltTypes);
- 
-     llvm::Value *ret = llvm::UndefValue::get(st);
--    ret = InsertInst(ret, ptr, 0, LLVMGetName(ret, "_slice_ptr"));
--    ret = InsertInst(ret, offset, 1, LLVMGetName(ret, "_slice_offset"));
-+    ret = InsertInst(ret, ptr, 0, llvm::Twine(ret->getName()) + "_slice_ptr");
-+    ret = InsertInst(ret, offset, 1, llvm::Twine(ret->getName()) + "_slice_offset");
-     return ret;
- }
- 
- llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index, const Type *ptrRefType,
--                                                    const char *name) {
-+                                                    const llvm::Twine &name) {
-     if (basePtr == NULL || index == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2065,8 +2054,8 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
-         // uniform, so just emit the regular LLVM GEP instruction
-         llvm::Value *ind[1] = {index};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&ind[0], &ind[1]);
--        llvm::Instruction *inst =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "gep", bblock);
-+        llvm::Instruction *inst = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                                  name.isTriviallyEmpty() ? "gep" : name, bblock);
-         AddDebugPos(inst);
-         return inst;
-     } else
-@@ -2074,7 +2063,7 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
- }
- 
- llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0, llvm::Value *index1,
--                                                    const Type *ptrRefType, const char *name) {
-+                                                    const Type *ptrRefType, const llvm::Twine &name) {
-     if (basePtr == NULL || index0 == NULL || index1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2114,8 +2103,8 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
-         // uniform, so just emit the regular LLVM GEP instruction
-         llvm::Value *indices[2] = {index0, index1};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&indices[0], &indices[2]);
--        llvm::Instruction *inst =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "gep", bblock);
-+        llvm::Instruction *inst = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                                  name.isTriviallyEmpty() ? "gep" : name, bblock);
-         AddDebugPos(inst);
-         return inst;
-     } else {
-@@ -2138,7 +2127,7 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
- }
- 
- llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int elementNum, const Type *ptrRefType,
--                                                   const char *name, const PointerType **resultPtrType) {
-+                                                   const llvm::Twine &name, const PointerType **resultPtrType) {
-     if (resultPtrType != NULL)
-         AssertPos(currentPos, ptrRefType != NULL);
- 
-@@ -2195,8 +2184,8 @@ llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int
-         // If the pointer is uniform, we can use the regular LLVM GEP.
-         llvm::Value *offsets[2] = {LLVMInt32(0), LLVMInt32(elementNum)};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&offsets[0], &offsets[2]);
--        resultPtr =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "struct_offset", bblock);
-+        resultPtr = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                    name.isTriviallyEmpty() ? "struct_offset" : name, bblock);
-     } else {
-         // Otherwise do the math to find the offset and add it to the given
-         // varying pointers
-@@ -2237,7 +2226,7 @@ llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int
-         return resultPtr;
- }
- 
--llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if ((value == NULL) || (toType == NULL)) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2248,20 +2237,18 @@ llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type
-     llvm::Value *newBool = value;
-     if (g->target->getDataLayout()->getTypeSizeInBits(fromType) >
-         g->target->getDataLayout()->getTypeSizeInBits(toType)) {
--        if (name == NULL)
--            name = LLVMGetName(value, "_switchBool");
--        newBool = TruncInst(value, toType, name);
-+        newBool =
-+            TruncInst(value, toType, name.isTriviallyEmpty() ? (llvm::Twine(value->getName()) + "_switchBool") : name);
-     } else if (g->target->getDataLayout()->getTypeSizeInBits(fromType) <
-                g->target->getDataLayout()->getTypeSizeInBits(toType)) {
--        if (name == NULL)
--            name = LLVMGetName(value, "_switchBool");
--        newBool = SExtInst(value, toType, name);
-+        newBool =
-+            SExtInst(value, toType, name.isTriviallyEmpty() ? (llvm::Twine(value->getName()) + "_switchBool") : name);
-     }
- 
-     return newBool;
- }
- 
--llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, const char *name) {
-+llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, const llvm::Twine &name) {
-     if (ptr == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2270,13 +2257,13 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
-     llvm::PointerType *pt = llvm::dyn_cast<llvm::PointerType>(ptr->getType());
-     AssertPos(currentPos, pt != NULL);
- 
--    if (name == NULL)
--        name = LLVMGetName(ptr, "_load");
--
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    llvm::LoadInst *inst = new llvm::LoadInst(pt->getPointerElementType(), ptr, name, bblock);
-+    llvm::LoadInst *inst =
-+        new llvm::LoadInst(pt->getPointerElementType(), ptr,
-+                           name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name, bblock);
- #else
--    llvm::LoadInst *inst = new llvm::LoadInst(ptr, name, bblock);
-+    llvm::LoadInst *inst =
-+        new llvm::LoadInst(ptr, name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name, bblock);
- #endif
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
-@@ -2307,8 +2294,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
- static llvm::Value *lFinalSliceOffset(FunctionEmitContext *ctx, llvm::Value *ptr, const PointerType **ptrType) {
-     Assert(CastType<PointerType>(*ptrType) != NULL);
- 
--    llvm::Value *slicePtr = ctx->ExtractInst(ptr, 0, LLVMGetName(ptr, "_ptr"));
--    llvm::Value *sliceOffset = ctx->ExtractInst(ptr, 1, LLVMGetName(ptr, "_offset"));
-+    llvm::Value *slicePtr = ctx->ExtractInst(ptr, 0, llvm::Twine(ptr->getName()) + "_ptr");
-+    llvm::Value *sliceOffset = ctx->ExtractInst(ptr, 1, llvm::Twine(ptr->getName()) + "_offset");
- 
-     // slicePtr should be a pointer to an soa-width wide array of the
-     // final atomic/enum/pointer type
-@@ -2327,14 +2314,14 @@ static llvm::Value *lFinalSliceOffset(FunctionEmitContext *ctx, llvm::Value *ptr
-         slicePtr = ctx->BitCastInst(slicePtr, (*ptrType)->LLVMType(g->ctx));
- 
-     // And finally index based on the slice offset
--    return ctx->GetElementPtrInst(slicePtr, sliceOffset, *ptrType, LLVMGetName(slicePtr, "_final_gep"));
-+    return ctx->GetElementPtrInst(slicePtr, sliceOffset, *ptrType, llvm::Twine(slicePtr->getName()) + "_final_gep");
- }
- 
- /** Utility routine that loads from a uniform pointer to soa<> data,
-     returning a regular uniform (non-SOA result).
-  */
- llvm::Value *FunctionEmitContext::loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType,
--                                                     const char *name) {
-+                                                     const llvm::Twine &name) {
-     const Type *unifType = ptrType->GetBaseType()->GetAsUniformType();
- 
-     const CollectionType *ct = CastType<CollectionType>(ptrType->GetBaseType());
-@@ -2363,7 +2350,7 @@ llvm::Value *FunctionEmitContext::loadUniformFromSOA(llvm::Value *ptr, llvm::Val
- }
- 
- llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrRefType,
--                                           const char *name, bool one_elem) {
-+                                           const llvm::Twine &name, bool one_elem) {
-     if (ptr == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2371,9 +2358,6 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
- 
-     AssertPos(currentPos, ptrRefType != NULL && mask != NULL);
- 
--    if (name == NULL)
--        name = LLVMGetName(ptr, "_load");
--
-     const PointerType *ptrType;
-     const Type *elType;
-     if (CastType<ReferenceType>(ptrRefType) != NULL) {
-@@ -2393,7 +2377,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
- 
-     if (ptrType->IsUniformType()) {
-         if (ptrType->IsSlice()) {
--            return loadUniformFromSOA(ptr, mask, ptrType, name);
-+            return loadUniformFromSOA(ptr, mask, ptrType,
-+                                      name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name);
-         } else {
-             // FIXME: same issue as above load inst regarding alignment...
-             //
-@@ -2405,11 +2390,15 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-             const AtomicType *atomicType = CastType<AtomicType>(ptrType->GetBaseType());
- 
- #if ISPC_LLVM_VERSION <= ISPC_LLVM_10_0
--            llvm::LoadInst *inst = new llvm::LoadInst(ptr, name, false /* not volatile */, bblock);
-+            llvm::LoadInst *inst =
-+                new llvm::LoadInst(ptr, name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name,
-+                                   false /* not volatile */, bblock);
- #else // LLVM 11.0+
-             llvm::PointerType *ptr_type = llvm::dyn_cast<llvm::PointerType>(ptr->getType());
-             llvm::LoadInst *inst =
--                new llvm::LoadInst(ptr_type->getPointerElementType(), ptr, name, false /* not volatile */, bblock);
-+                new llvm::LoadInst(ptr_type->getPointerElementType(), ptr,
-+                                   name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name,
-+                                   false /* not volatile */, bblock);
- #endif
- 
-             if (atomicType != NULL && atomicType->IsVaryingType()) {
-@@ -2433,7 +2422,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-     } else {
-         // Otherwise we should have a varying ptr and it's time for a
-         // gather.
--        llvm::Value *gather_result = gather(ptr, ptrType, GetFullMask(), name);
-+        llvm::Value *gather_result = gather(ptr, ptrType, GetFullMask(),
-+                                            name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name);
-         if (!one_elem)
-             return gather_result;
- 
-@@ -2453,19 +2443,19 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-         // We can actually call either one, since both are i32s as far as
-         // LLVM's type system is concerned...
-         llvm::Function *fmm = mm[0]->function;
--        llvm::Value *int_mask = CallInst(fmm, NULL, mask, LLVMGetName(mask, "_movmsk"));
-+        llvm::Value *int_mask = CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_movmsk");
-         std::vector<Symbol *> lz;
-         m->symbolTable->LookupFunction("__count_trailing_zeros_i64", &lz);
-         llvm::Function *flz = lz[0]->function;
--        llvm::Value *elem_idx = CallInst(flz, NULL, int_mask, LLVMGetName(mask, "_clz"));
--        llvm::Value *elem = llvm::ExtractElementInst::Create(gather_result, elem_idx,
--                                                             LLVMGetName(gather_result, "_umasked_elem"), bblock);
-+        llvm::Value *elem_idx = CallInst(flz, NULL, int_mask, llvm::Twine(mask->getName()) + "_clz");
-+        llvm::Value *elem = llvm::ExtractElementInst::Create(
-+            gather_result, elem_idx, llvm::Twine(gather_result->getName()) + "_umasked_elem", bblock);
-         return elem;
-     }
- }
- 
- llvm::Value *FunctionEmitContext::gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask,
--                                         const char *name) {
-+                                         const llvm::Twine &name) {
-     // We should have a varying pointer if we get here...
-     AssertPos(currentPos, ptrType->IsVaryingType());
- 
-@@ -2602,7 +2592,8 @@ void FunctionEmitContext::addGSMetadata(llvm::Value *v, SourcePos pos) {
-     inst->setMetadata("last_column", md);
- }
- 
--llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *name, int align, bool atEntryBlock) {
-+llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const llvm::Twine &name, int align,
-+                                             bool atEntryBlock) {
-     if (llvmType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2615,12 +2606,12 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-         llvm::Instruction *retInst = allocaBlock->getTerminator();
-         AssertPos(currentPos, retInst);
-         unsigned AS = llvmFunction->getParent()->getDataLayout().getAllocaAddrSpace();
--        inst = new llvm::AllocaInst(llvmType, AS, name ? name : "", retInst);
-+        inst = new llvm::AllocaInst(llvmType, AS, name, retInst);
-     } else {
-         // Unless the caller overrode the default and wants it in the
-         // current basic block
-         unsigned AS = llvmFunction->getParent()->getDataLayout().getAllocaAddrSpace();
--        inst = new llvm::AllocaInst(llvmType, AS, name ? name : "", bblock);
-+        inst = new llvm::AllocaInst(llvmType, AS, name, bblock);
-     }
- 
-     // If no alignment was specified but we have an array of a uniform
-@@ -2639,7 +2630,8 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::AllocaInst(const Type *ptrType, const char *name, int align, bool atEntryBlock) {
-+llvm::Value *FunctionEmitContext::AllocaInst(const Type *ptrType, const llvm::Twine &name, int align,
-+                                             bool atEntryBlock) {
-     if (ptrType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3075,66 +3067,59 @@ llvm::Instruction *FunctionEmitContext::BranchInst(llvm::BasicBlock *trueBlock,
-     return b;
- }
- 
--llvm::Value *FunctionEmitContext::ExtractInst(llvm::Value *v, int elt, const char *name) {
-+llvm::Value *FunctionEmitContext::ExtractInst(llvm::Value *v, int elt, const llvm::Twine &name) {
-     if (v == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_extract_%d", elt);
--        name = LLVMGetName(v, buf);
--    }
-     llvm::Instruction *ei = NULL;
-     if (llvm::isa<llvm::VectorType>(v->getType()))
--        ei = llvm::ExtractElementInst::Create(v, LLVMInt32(elt), name, bblock);
-+        ei = llvm::ExtractElementInst::Create(
-+            v, LLVMInt32(elt),
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_extract_") + llvm::Twine(elt)) : name, bblock);
-     else
--        ei = llvm::ExtractValueInst::Create(v, elt, name, bblock);
-+        ei = llvm::ExtractValueInst::Create(
-+            v, elt, name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_extract_") + llvm::Twine(elt)) : name,
-+            bblock);
-     AddDebugPos(ei);
-     return ei;
- }
- 
--llvm::Value *FunctionEmitContext::InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const char *name) {
-+llvm::Value *FunctionEmitContext::InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const llvm::Twine &name) {
-     if (v == NULL || eltVal == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_insert_%d", elt);
--        name = LLVMGetName(v, buf);
--    }
--
-     llvm::Instruction *ii = NULL;
-     if (llvm::isa<llvm::VectorType>(v->getType()))
--        ii = llvm::InsertElementInst::Create(v, eltVal, LLVMInt32(elt), name, bblock);
-+        ii = llvm::InsertElementInst::Create(
-+            v, eltVal, LLVMInt32(elt),
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_insert_") + llvm::Twine(elt)) : name, bblock);
-     else
--        ii = llvm::InsertValueInst::Create(v, eltVal, elt, name, bblock);
-+        ii = llvm::InsertValueInst::Create(
-+            v, eltVal, elt,
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_insert_") + llvm::Twine(elt)) : name, bblock);
-     AddDebugPos(ii);
-     return ii;
- }
- 
--llvm::Value *FunctionEmitContext::ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const char *name) {
-+llvm::Value *FunctionEmitContext::ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask,
-+                                              const llvm::Twine &name) {
-     if (v1 == NULL || v2 == NULL || mask == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_shuffle");
--        name = LLVMGetName(v1, buf);
--    }
--
--    llvm::Instruction *ii = new llvm::ShuffleVectorInst(v1, v2, mask, name, bblock);
-+    llvm::Instruction *ii = new llvm::ShuffleVectorInst(
-+        v1, v2, mask, name.isTriviallyEmpty() ? (llvm::Twine(v1->getName()) + "_shuffle") : name, bblock);
- 
-     AddDebugPos(ii);
-     return ii;
- }
- 
--llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vecType, const char *name) {
-+llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vecType, const llvm::Twine &name) {
-     if (v == NULL || vecType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3148,12 +3133,6 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     Assert(ty && ty->getVectorElementType() == v->getType());
- #endif
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_broadcast");
--        name = LLVMGetName(v, buf);
--    }
--
-     // Generate the following sequence:
-     //   %name_init.i = insertelement <4 x i32> undef, i32 %val, i32 0
-     //   %name.i = shufflevector <4 x i32> %name_init.i, <4 x i32> undef,
-@@ -3163,7 +3142,7 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     llvm::Value *undef2 = llvm::UndefValue::get(vecType);
- 
-     // InsertElement
--    llvm::Twine tw = llvm::Twine(name) + llvm::Twine("_init");
-+    llvm::Twine tw = name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + llvm::Twine("_init");
-     llvm::Value *insert = InsertInst(undef1, v, 0, tw.str().c_str());
- 
-     // ShuffleVector
-@@ -3179,28 +3158,27 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-         llvm::ConstantVector::getSplat(llvm::ElementCount::get(static_cast<unsigned int>(ty->getNumElements()), false),
-                                        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
- #endif
--    llvm::Value *ret = ShuffleInst(insert, undef2, zeroVec, name);
-+    llvm::Value *ret = ShuffleInst(insert, undef2, zeroVec,
-+                                   name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name);
- 
-     return ret;
- }
- 
--llvm::PHINode *FunctionEmitContext::PhiNode(llvm::Type *type, int count, const char *name) {
--    llvm::PHINode *pn = llvm::PHINode::Create(type, count, name ? name : "phi", bblock);
-+llvm::PHINode *FunctionEmitContext::PhiNode(llvm::Type *type, int count, const llvm::Twine &name) {
-+    llvm::PHINode *pn = llvm::PHINode::Create(type, count, name.isTriviallyEmpty() ? "phi" : name, bblock);
-     AddDebugPos(pn);
-     return pn;
- }
- 
- llvm::Instruction *FunctionEmitContext::SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1,
--                                                   const char *name) {
-+                                                   const llvm::Twine &name) {
-     if (test == NULL || val0 == NULL || val1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(test, "_select");
--
--    llvm::Instruction *inst = llvm::SelectInst::Create(test, val0, val1, name, bblock);
-+    llvm::Instruction *inst = llvm::SelectInst::Create(
-+        test, val0, val1, name.isTriviallyEmpty() ? (llvm::Twine(test->getName()) + "_select") : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
-@@ -3226,7 +3204,7 @@ static unsigned int lCalleeArgCount(llvm::Value *callee, const FunctionType *fun
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType,
--                                           const std::vector<llvm::Value *> &args, const char *name) {
-+                                           const std::vector<llvm::Value *> &args, const llvm::Twine &name) {
-     if (func == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3258,9 +3236,9 @@ llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-         llvm::PointerType *func_ptr_type = llvm::dyn_cast<llvm::PointerType>(func->getType());
-         llvm::FunctionType *func_type = llvm::dyn_cast<llvm::FunctionType>(func_ptr_type->getPointerElementType());
--        llvm::CallInst *callinst = llvm::CallInst::Create(func_type, func, argVals, name ? name : "", bblock);
-+        llvm::CallInst *callinst = llvm::CallInst::Create(func_type, func, argVals, name, bblock);
- #else
--        llvm::CallInst *callinst = llvm::CallInst::Create(func, argVals, name ? name : "", bblock);
-+        llvm::CallInst *callinst = llvm::CallInst::Create(func, argVals, name, bblock);
- #endif
- 
-         // We could be dealing with a function pointer in which case this will not be a 'llvm::Function'.
-@@ -3464,14 +3442,14 @@ llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg,
--                                           const char *name) {
-+                                           const llvm::Twine &name) {
-     std::vector<llvm::Value *> args;
-     args.push_back(arg);
-     return CallInst(func, funcType, args, name);
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg0,
--                                           llvm::Value *arg1, const char *name) {
-+                                           llvm::Value *arg1, const llvm::Twine &name) {
-     std::vector<llvm::Value *> args;
-     args.push_back(arg0);
-     args.push_back(arg1);
-diff --git a/src/ctx.h b/src/ctx.h
-index 6e5ad74ba..48b3bb826 100644
---- a/src/ctx.h
-+++ b/src/ctx.h
-@@ -302,7 +302,7 @@ class FunctionEmitContext {
-     llvm::Value *GetStringPtr(const std::string &str);
- 
-     /** Create a new basic block with given name */
--    llvm::BasicBlock *CreateBasicBlock(const char *name, llvm::BasicBlock *insertAfter = NULL);
-+    llvm::BasicBlock *CreateBasicBlock(const llvm::Twine &name, llvm::BasicBlock *insertAfter = NULL);
- 
-     /** Given a vector with element type i1, return a vector of type
-         LLVMTypes::BoolVectorType.  This method handles the conversion for
-@@ -380,33 +380,33 @@ class FunctionEmitContext {
-         this also handles applying the given operation to the vector
-         elements. */
-     llvm::Value *BinaryOperator(llvm::Instruction::BinaryOps inst, llvm::Value *v0, llvm::Value *v1,
--                                const char *name = NULL);
-+                                const llvm::Twine &name = "");
- 
-     /** Emit the "not" operator.  Like BinaryOperator(), this also handles
-         a VectorType-based operand. */
--    llvm::Value *NotOperator(llvm::Value *v, const char *name = NULL);
-+    llvm::Value *NotOperator(llvm::Value *v, const llvm::Twine &name = "");
- 
-     /** Emit a comparison instruction.  If the operands are VectorTypes,
-         then a value for the corresponding boolean VectorType is
-         returned. */
-     llvm::Value *CmpInst(llvm::Instruction::OtherOps inst, llvm::CmpInst::Predicate pred, llvm::Value *v0,
--                         llvm::Value *v1, const char *name = NULL);
-+                         llvm::Value *v1, const llvm::Twine &name = "");
- 
-     /** Given a scalar value, return a vector of the same type (or an
-         array, for pointer types). */
--    llvm::Value *SmearUniform(llvm::Value *value, const char *name = NULL);
-+    llvm::Value *SmearUniform(llvm::Value *value, const llvm::Twine &name = "");
- 
--    llvm::Value *BitCastInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Value *PtrToIntInst(llvm::Value *value, const char *name = NULL);
--    llvm::Value *PtrToIntInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Value *IntToPtrInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+    llvm::Value *BitCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Value *PtrToIntInst(llvm::Value *value, const llvm::Twine &name = "");
-+    llvm::Value *PtrToIntInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Value *IntToPtrInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
- 
--    llvm::Instruction *TruncInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+    llvm::Instruction *TruncInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-     llvm::Instruction *CastInst(llvm::Instruction::CastOps op, llvm::Value *value, llvm::Type *type,
--                                const char *name = NULL);
--    llvm::Instruction *FPCastInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Instruction *SExtInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Instruction *ZExtInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+                                const llvm::Twine &name = "");
-+    llvm::Instruction *FPCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Instruction *SExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Instruction *ZExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
- 
-     /** Given two integer-typed values (but possibly one vector and the
-         other not, and or of possibly-different bit-widths), update their
-@@ -426,9 +426,9 @@ class FunctionEmitContext {
-         pointers.  The underlying type of the base pointer must be provided
-         via the ptrType parameter */
-     llvm::Value *GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index, const Type *ptrType,
--                                   const char *name = NULL);
-+                                   const llvm::Twine &name = "");
-     llvm::Value *GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0, llvm::Value *index1, const Type *ptrType,
--                                   const char *name = NULL);
-+                                   const llvm::Twine &name = "");
- 
-     /** This method returns a new pointer that represents offsetting the
-         given base pointer to point at the given element number of the
-@@ -436,26 +436,26 @@ class FunctionEmitContext {
-         pointer must be a pointer to a structure type.  The ptrType gives
-         the type of the pointer, though it may be NULL if the base pointer
-         is uniform. */
--    llvm::Value *AddElementOffset(llvm::Value *basePtr, int elementNum, const Type *ptrType, const char *name = NULL,
--                                  const PointerType **resultPtrType = NULL);
-+    llvm::Value *AddElementOffset(llvm::Value *basePtr, int elementNum, const Type *ptrType,
-+                                  const llvm::Twine &name = "", const PointerType **resultPtrType = NULL);
- 
-     /** Bool is stored as i8 and <WIDTH x i8> but represented in IR as i1 and
-      * <WIDTH x MASK>. This is a helper function to match bool size at storage
-      * interface. */
--    llvm::Value *SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const char *name = NULL);
-+    llvm::Value *SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name = "");
-     /** Load from the memory location(s) given by lvalue, using the given
-         mask.  The lvalue may be varying, in which case this corresponds to
-         a gather from the multiple memory locations given by the array of
-         pointer values given by the lvalue.  If the lvalue is not varying,
-         then both the mask pointer and the type pointer may be NULL. */
--    llvm::Value *LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrType, const char *name = NULL,
-+    llvm::Value *LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrType, const llvm::Twine &name = "",
-                           bool one_elem = false);
- 
-     /* Load from memory location(s) given.
-      * 'type' needs to be provided when storage type is different from IR type. For example,
-      * 'unform bool' is 'i1' in IR but stored as 'i8'.
-      * Otherwise leave this as NULL. */
--    llvm::Value *LoadInst(llvm::Value *ptr, const Type *type = NULL, const char *name = NULL);
-+    llvm::Value *LoadInst(llvm::Value *ptr, const Type *type = NULL, const llvm::Twine &name = "");
- 
-     /** Emits an alloca instruction to allocate stack storage for the given
-         type.  If a non-zero alignment is specified, the object is also
-@@ -463,7 +463,8 @@ class FunctionEmitContext {
-         instruction is added at the start of the function in the entry
-         basic block; if it should be added to the current basic block, then
-         the atEntryBlock parameter should be false. */
--    llvm::Value *AllocaInst(llvm::Type *llvmType, const char *name = NULL, int align = 0, bool atEntryBlock = true);
-+    llvm::Value *AllocaInst(llvm::Type *llvmType, const llvm::Twine &name = "", int align = 0,
-+                            bool atEntryBlock = true);
- 
-     /** Emits an alloca instruction to allocate stack storage for the given
-         type.  If a non-zero alignment is specified, the object is also
-@@ -474,7 +475,7 @@ class FunctionEmitContext {
-         This implementation is preferred when possible. It is needed when
-         storage type is different from IR type. For example,
-         'unform bool' is 'i1' in IR but stored as 'i8'. */
--    llvm::Value *AllocaInst(const Type *ptrType, const char *name = NULL, int align = 0, bool atEntryBlock = true);
-+    llvm::Value *AllocaInst(const Type *ptrType, const llvm::Twine &name = "", int align = 0, bool atEntryBlock = true);
- 
-     /** Standard store instruction; for this variant, the lvalue must be a
-         single pointer, not a varying lvalue.
-@@ -502,39 +503,41 @@ class FunctionEmitContext {
-     /** This convenience method maps to an llvm::ExtractElementInst if the
-         given value is a llvm::VectorType, and to an llvm::ExtractValueInst
-         otherwise. */
--    llvm::Value *ExtractInst(llvm::Value *v, int elt, const char *name = NULL);
-+    llvm::Value *ExtractInst(llvm::Value *v, int elt, const llvm::Twine &name = "");
- 
-     /** This convenience method maps to an llvm::InsertElementInst if the
-         given value is a llvm::VectorType, and to an llvm::InsertValueInst
-         otherwise. */
--    llvm::Value *InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const char *name = NULL);
-+    llvm::Value *InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const llvm::Twine &name = "");
- 
-     /** This convenience method maps to an llvm::ShuffleVectorInst. */
--    llvm::Value *ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const char *name = NULL);
-+    llvm::Value *ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const llvm::Twine &name = "");
- 
-     /** This convenience method to generate broadcast pattern. It takes a value
-         and a vector type. Type of the value must match element type of the
-         vector. */
--    llvm::Value *BroadcastValue(llvm::Value *v, llvm::Type *vecType, const char *name = NULL);
-+    llvm::Value *BroadcastValue(llvm::Value *v, llvm::Type *vecType, const llvm::Twine &name = "");
- 
--    llvm::PHINode *PhiNode(llvm::Type *type, int count, const char *name = NULL);
--    llvm::Instruction *SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1, const char *name = NULL);
-+    llvm::PHINode *PhiNode(llvm::Type *type, int count, const llvm::Twine &name = "");
-+    llvm::Instruction *SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1,
-+                                  const llvm::Twine &name = "");
- 
-     /** Emits IR to do a function call with the given arguments.  If the
-         function type is a varying function pointer type, its full type
-         must be provided in funcType.  funcType can be NULL if func is a
-         uniform function pointer. */
-     llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, const std::vector<llvm::Value *> &args,
--                          const char *name = NULL);
-+                          const llvm::Twine &name = "");
- 
-     /** This is a convenience method that issues a call instruction to a
-         function that takes just a single argument. */
--    llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg, const char *name = NULL);
-+    llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg,
-+                          const llvm::Twine &name = "");
- 
-     /** This is a convenience method that issues a call instruction to a
-         function that takes two arguments. */
-     llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg0, llvm::Value *arg1,
--                          const char *name = NULL);
-+                          const llvm::Twine &name = "");
- 
-     /** Launch an asynchronous task to run the given function, passing it
-         he given argument values. */
-@@ -756,9 +759,10 @@ class FunctionEmitContext {
-     void maskedStore(llvm::Value *value, llvm::Value *ptr, const Type *ptrType, llvm::Value *mask);
-     void storeUniformToSOA(llvm::Value *value, llvm::Value *ptr, llvm::Value *mask, const Type *valueType,
-                            const PointerType *ptrType);
--    llvm::Value *loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType, const char *name);
-+    llvm::Value *loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType,
-+                                    const llvm::Twine &name = "");
- 
--    llvm::Value *gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask, const char *name);
-+    llvm::Value *gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask, const llvm::Twine &name = "");
- 
-     llvm::Value *addVaryingOffsetsIfNeeded(llvm::Value *ptr, const Type *ptrType);
- };
-diff --git a/src/expr.cpp b/src/expr.cpp
-index 80cc3020a..6d38d1889 100644
---- a/src/expr.cpp
-+++ b/src/expr.cpp
-@@ -1021,11 +1021,11 @@ static llvm::Value *lEmitNegate(Expr *arg, SourcePos pos, FunctionEmitContext *c
-     ctx->SetDebugPos(pos);
-     if (type->IsFloatType()) {
-         llvm::Value *zero = llvm::ConstantFP::getZeroValueForNegation(type->LLVMType(g->ctx));
--        return ctx->BinaryOperator(llvm::Instruction::FSub, zero, argVal, LLVMGetName(argVal, "_negate"));
-+        return ctx->BinaryOperator(llvm::Instruction::FSub, zero, argVal, llvm::Twine(argVal->getName()) + "_negate");
-     } else {
-         llvm::Value *zero = lLLVMConstantValue(type, g->ctx, 0.);
-         AssertPos(pos, type->IsIntType());
--        return ctx->BinaryOperator(llvm::Instruction::Sub, zero, argVal, LLVMGetName(argVal, "_negate"));
-+        return ctx->BinaryOperator(llvm::Instruction::Sub, zero, argVal, llvm::Twine(argVal->getName()) + "_negate");
-     }
- }
- 
-@@ -1047,11 +1047,11 @@ llvm::Value *UnaryExpr::GetValue(FunctionEmitContext *ctx) const {
-         return lEmitNegate(expr, pos, ctx);
-     case LogicalNot: {
-         llvm::Value *argVal = expr->GetValue(ctx);
--        return ctx->NotOperator(argVal, LLVMGetName(argVal, "_logicalnot"));
-+        return ctx->NotOperator(argVal, llvm::Twine(argVal->getName()) + "_logicalnot");
-     }
-     case BitNot: {
-         llvm::Value *argVal = expr->GetValue(ctx);
--        return ctx->NotOperator(argVal, LLVMGetName(argVal, "_bitnot"));
-+        return ctx->NotOperator(argVal, llvm::Twine(argVal->getName()) + "_bitnot");
-     }
-     default:
-         FATAL("logic error");
-@@ -1518,7 +1518,8 @@ static llvm::Value *lEmitBinaryArith(BinaryExpr::Op op, llvm::Value *value0, llv
-             return NULL;
-         }
- 
--        return ctx->BinaryOperator(inst, value0, value1, LLVMGetName(opName, value0, value1));
-+        return ctx->BinaryOperator(inst, value0, value1,
-+                                   (((llvm::Twine(opName) + "_") + value0->getName()) + "_") + value1->getName());
-     }
- }
- 
-@@ -1563,7 +1564,7 @@ static llvm::Value *lEmitBinaryCmp(BinaryExpr::Op op, llvm::Value *e0Val, llvm::
-     }
- 
-     llvm::Value *cmp = ctx->CmpInst(isFloatOp ? llvm::Instruction::FCmp : llvm::Instruction::ICmp, pred, e0Val, e1Val,
--                                    LLVMGetName(opName, e0Val, e1Val));
-+                                    (((llvm::Twine(opName) + "_") + e0Val->getName()) + "_") + e1Val->getName());
-     // This is a little ugly: CmpInst returns i1 values, but we use vectors
-     // of i32s for varying bool values; type convert the result here if
-     // needed.
-@@ -4177,7 +4178,7 @@ static llvm::Value *lConvertToSlicePointer(FunctionEmitContext *ctx, llvm::Value
-     // offsets
-     llvm::Value *result = llvm::Constant::getNullValue(sliceStructType);
-     // And replace the pointer in the struct with the given pointer
--    return ctx->InsertInst(result, ptr, 0, LLVMGetName(ptr, "_slice"));
-+    return ctx->InsertInst(result, ptr, 0, llvm::Twine(ptr->getName()) + "_slice");
- }
- 
- /** If the given array index is a compile time constant, check to see if it
-@@ -4258,8 +4259,8 @@ llvm::Value *IndexExpr::GetLValue(FunctionEmitContext *ctx) const {
-         // Convert to a slice pointer if we're indexing into SOA data
-         basePtrValue = lConvertPtrToSliceIfNeeded(ctx, basePtrValue, &baseExprType);
- 
--        llvm::Value *ptr =
--            ctx->GetElementPtrInst(basePtrValue, indexValue, baseExprType, LLVMGetName(basePtrValue, "_offset"));
-+        llvm::Value *ptr = ctx->GetElementPtrInst(basePtrValue, indexValue, baseExprType,
-+                                                  llvm::Twine(basePtrValue->getName()) + "_offset");
-         return lAddVaryingOffsetsIfNeeded(ctx, ptr, GetLValueType());
-     }
- 
-@@ -4290,8 +4291,8 @@ llvm::Value *IndexExpr::GetLValue(FunctionEmitContext *ctx) const {
-     ctx->SetDebugPos(pos);
- 
-     // And do the actual indexing calculation..
--    llvm::Value *ptr =
--        ctx->GetElementPtrInst(basePtr, LLVMInt32(0), indexValue, basePtrType, LLVMGetName(basePtr, "_offset"));
-+    llvm::Value *ptr = ctx->GetElementPtrInst(basePtr, LLVMInt32(0), indexValue, basePtrType,
-+                                              llvm::Twine(basePtr->getName()) + "_offset");
-     return lAddVaryingOffsetsIfNeeded(ctx, ptr, GetLValueType());
- }
- 
-@@ -4788,15 +4789,14 @@ llvm::Value *VectorMemberExpr::GetValue(FunctionEmitContext *ctx) const {
-         for (size_t i = 0; i < identifier.size(); ++i) {
-             char idStr[2] = {identifier[i], '\0'};
-             llvm::Value *elementPtr =
--                ctx->AddElementOffset(basePtr, indices[i], basePtrType, LLVMGetName(basePtr, idStr));
-+                ctx->AddElementOffset(basePtr, indices[i], basePtrType, llvm::Twine(basePtr->getName()) + idStr);
-             llvm::Value *elementValue = ctx->LoadInst(elementPtr, elementMask, elementPtrType);
- 
--            const char *resultName = LLVMGetName(resultPtr, idStr);
--            llvm::Value *ptmp = ctx->AddElementOffset(resultPtr, i, NULL, resultName);
-+            llvm::Value *ptmp = ctx->AddElementOffset(resultPtr, i, NULL, llvm::Twine(resultPtr->getName()) + idStr);
-             ctx->StoreInst(elementValue, ptmp, elementPtrType, expr->GetType()->IsUniformType());
-         }
- 
--        return ctx->LoadInst(resultPtr, memberType, LLVMGetName(basePtr, "_swizzle"));
-+        return ctx->LoadInst(resultPtr, memberType, llvm::Twine(basePtr->getName()) + "_swizzle");
-     }
- }
- 
-@@ -4932,7 +4932,7 @@ llvm::Value *MemberExpr::GetValue(FunctionEmitContext *ctx) const {
- 
-     ctx->SetDebugPos(pos);
-     std::string suffix = std::string("_") + identifier;
--    return ctx->LoadInst(lvalue, mask, lvalueType, LLVMGetName(lvalue, suffix.c_str()));
-+    return ctx->LoadInst(lvalue, mask, lvalueType, llvm::Twine(lvalue->getName()) + suffix);
- }
- 
- const Type *MemberExpr::GetType() const { return NULL; }
-@@ -6502,7 +6502,7 @@ static llvm::Value *lTypeConvAtomic(FunctionEmitContext *ctx, llvm::Value *exprV
-                 // does for everyone else...
-                 Assert(cast);
-                 cast = ctx->SwitchBoolSize(cast, LLVMTypes::BoolVectorType->getElementType(),
--                                           LLVMGetName(cast, "to_i_bool"));
-+                                           llvm::Twine(cast->getName()) + "to_i_bool");
-             }
-         } else {
-             // fromType->IsVaryingType())
-@@ -8246,7 +8246,7 @@ llvm::Value *NewExpr::GetValue(FunctionEmitContext *ctx) const {
-         // pointer of the return type and to run the code for initializers,
-         // if present.
-         llvm::Type *ptrType = retType->LLVMType(g->ctx);
--        ptrValue = ctx->BitCastInst(ptrValue, ptrType, LLVMGetName(ptrValue, "_cast_ptr"));
-+        ptrValue = ctx->BitCastInst(ptrValue, ptrType, llvm::Twine(ptrValue->getName()) + "_cast_ptr");
- 
-         if (initExpr != NULL)
-             InitSymbol(ptrValue, allocType, initExpr, ctx, pos);
-diff --git a/src/llvmutil.cpp b/src/llvmutil.cpp
-index 970175dbf..d0becb9f5 100644
---- a/src/llvmutil.cpp
-+++ b/src/llvmutil.cpp
-@@ -1605,23 +1605,6 @@ llvm::Value *LLVMShuffleVectors(llvm::Value *v1, llvm::Value *v2, int32_t shuf[]
-     return new llvm::ShuffleVectorInst(v1, v2, vec, "shuffle", insertBefore);
- }
- 
--const char *LLVMGetName(llvm::Value *v, const char *s) {
--    if (v == NULL)
--        return s;
--    std::string ret = std::string(v->getName());
--    ret += s;
--    return strdup(ret.c_str());
--}
--
--const char *LLVMGetName(const char *op, llvm::Value *v1, llvm::Value *v2) {
--    std::string r = op;
--    r += "_";
--    r += v1->getName().str();
--    r += "_";
--    r += v2->getName().str();
--    return strdup(r.c_str());
--}
--
- #ifdef ISPC_GENX_ENABLED
- bool lIsSVMLoad(llvm::Instruction *inst) {
-     Assert(inst);
-diff --git a/src/llvmutil.h b/src/llvmutil.h
-index 42cce4d83..07d089bb4 100644
---- a/src/llvmutil.h
-+++ b/src/llvmutil.h
-@@ -328,11 +328,6 @@ extern llvm::Value *LLVMConcatVectors(llvm::Value *v1, llvm::Value *v2, llvm::In
- extern llvm::Value *LLVMShuffleVectors(llvm::Value *v1, llvm::Value *v2, int32_t shuf[], int shufSize,
-                                        llvm::Instruction *insertBefore);
- 
--/** Utility routines to concat strings with the names of existing values to
--    create meaningful new names for instruction values.
--*/
--extern const char *LLVMGetName(llvm::Value *v, const char *);
--extern const char *LLVMGetName(const char *op, llvm::Value *v1, llvm::Value *v2);
- #ifdef ISPC_GENX_ENABLED
- enum AddressSpace { Local, Global, External };
- 
-diff --git a/src/opt.cpp b/src/opt.cpp
-index 5b1ac7b63..9d6cae058 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -257,7 +257,7 @@ static bool lGetSourcePosFromMetadata(const llvm::Instruction *inst, SourcePos *
-     return true;
- }
- 
--static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, const char *name,
-+static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[2] = {arg0, arg1};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[2]);
-@@ -265,21 +265,22 @@ static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llv
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    const char *name, llvm::Instruction *insertBefore = NULL) {
-+                                    const llvm::Twine &name, llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[3] = {arg0, arg1, arg2};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[3]);
-     return llvm::CallInst::Create(func, newArgArray, name, insertBefore);
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, const char *name, llvm::Instruction *insertBefore = NULL) {
-+                                    llvm::Value *arg3, const llvm::Twine &name,
-+                                    llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[4] = {arg0, arg1, arg2, arg3};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[4]);
-     return llvm::CallInst::Create(func, newArgArray, name, insertBefore);
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, llvm::Value *arg4, const char *name,
-+                                    llvm::Value *arg3, llvm::Value *arg4, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[5] = {arg0, arg1, arg2, arg3, arg4};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[5]);
-@@ -287,7 +288,7 @@ static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llv
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, llvm::Value *arg4, llvm::Value *arg5, const char *name,
-+                                    llvm::Value *arg3, llvm::Value *arg4, llvm::Value *arg5, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[6] = {arg0, arg1, arg2, arg3, arg4, arg5};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[6]);
-@@ -991,23 +992,24 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 llvm::Type *returnType = callInst->getType();
-                 Assert(llvm::isa<llvm::VectorType>(returnType));
-                 // cast the i8 * to the appropriate type
--                const char *name = LLVMGetName(callInst->getArgOperand(0), "_cast");
--                llvm::Value *castPtr = new llvm::BitCastInst(callInst->getArgOperand(0),
--                                                             llvm::PointerType::get(returnType, 0), name, callInst);
-+                llvm::Value *castPtr =
-+                    new llvm::BitCastInst(callInst->getArgOperand(0), llvm::PointerType::get(returnType, 0),
-+                                          llvm::Twine(callInst->getArgOperand(0)->getName()) + "_cast", callInst);
-                 lCopyMetadata(castPtr, callInst);
-                 int align;
-                 if (g->opt.forceAlignedMemory)
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
--                name = LLVMGetName(callInst->getArgOperand(0), "_load");
- #if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
--                llvm::Instruction *loadInst = new llvm::LoadInst(castPtr, name, false /* not volatile */,
--                                                                 llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
-+                llvm::Instruction *loadInst =
-+                    new llvm::LoadInst(castPtr, llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load",
-+                                       false /* not volatile */, llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
- #else
-                 llvm::Instruction *loadInst = new llvm::LoadInst(
--                    llvm::dyn_cast<llvm::PointerType>(castPtr->getType())->getPointerElementType(), castPtr, name,
--                    false /* not volatile */, llvm::MaybeAlign(align).valueOrOne(), (llvm::Instruction *)NULL);
-+                    llvm::dyn_cast<llvm::PointerType>(castPtr->getType())->getPointerElementType(), castPtr,
-+                    llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load", false /* not volatile */,
-+                    llvm::MaybeAlign(align).valueOrOne(), (llvm::Instruction *)NULL);
- #endif
-                 lCopyMetadata(loadInst, callInst);
-                 llvm::ReplaceInstWithInst(callInst, loadInst);
-@@ -1028,9 +1030,9 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 // all lanes storing, so replace with a regular store
-                 llvm::Value *rvalue = callInst->getArgOperand(2);
-                 llvm::Type *storeType = rvalue->getType();
--                const char *name = LLVMGetName(callInst->getArgOperand(0), "_ptrcast");
--                llvm::Value *castPtr = new llvm::BitCastInst(callInst->getArgOperand(0),
--                                                             llvm::PointerType::get(storeType, 0), name, callInst);
-+                llvm::Value *castPtr =
-+                    new llvm::BitCastInst(callInst->getArgOperand(0), llvm::PointerType::get(storeType, 0),
-+                                          llvm::Twine(callInst->getArgOperand(0)->getName()) + "_ptrcast", callInst);
-                 lCopyMetadata(castPtr, callInst);
- 
-                 int align;
-@@ -1339,8 +1341,8 @@ static llvm::Value *lGetBasePointer(llvm::Value *v, llvm::Instruction *insertBef
-         if (t == NULL) {
-             return NULL;
-         } else {
--            return llvm::CastInst::Create(ci->getOpcode(), t, ci->getType()->getScalarType(), LLVMGetName(t, "_cast"),
--                                          insertBefore);
-+            return llvm::CastInst::Create(ci->getOpcode(), t, ci->getType()->getScalarType(),
-+                                          llvm::Twine(t->getName()) + "_cast", insertBefore);
-         }
-     }
- 
-@@ -1583,13 +1585,13 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-         if (co == NULL)
-             *constOffset = NULL;
-         else
--            *constOffset =
--                llvm::CastInst::Create(cast->getOpcode(), co, cast->getType(), LLVMGetName(co, "_cast"), insertBefore);
-+            *constOffset = llvm::CastInst::Create(cast->getOpcode(), co, cast->getType(),
-+                                                  llvm::Twine(co->getName()) + "_cast", insertBefore);
-         if (vo == NULL)
-             *variableOffset = NULL;
-         else
--            *variableOffset =
--                llvm::CastInst::Create(cast->getOpcode(), vo, cast->getType(), LLVMGetName(vo, "_cast"), insertBefore);
-+            *variableOffset = llvm::CastInst::Create(cast->getOpcode(), vo, cast->getType(),
-+                                                     llvm::Twine(vo->getName()) + "_cast", insertBefore);
-         return;
-     }
- 
-@@ -1608,16 +1610,18 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-             else if (c1 == NULL || llvm::isa<llvm::ConstantAggregateZero>(c1))
-                 *constOffset = c0;
-             else
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, c0, c1, LLVMGetName("add", c0, c1),
--                                                            insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, c0, c1, ((llvm::Twine("add_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
- 
-             if (v0 == NULL || llvm::isa<llvm::ConstantAggregateZero>(v0))
-                 *variableOffset = v1;
-             else if (v1 == NULL || llvm::isa<llvm::ConstantAggregateZero>(v1))
-                 *variableOffset = v0;
-             else
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, v0, v1,
--                                                               LLVMGetName("add", v0, v1), insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, v0, v1, ((llvm::Twine("add_") + v0->getName()) + "_") + v1->getName(),
-+                    insertBefore);
-             return;
-         } else if (bop->getOpcode() == llvm::Instruction::Shl) {
-             lExtractConstantOffset(op0, &c0, &v0, insertBefore);
-@@ -1633,10 +1637,12 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-                 *constOffset = vec;
-                 *variableOffset = NULL;
-             } else {
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Shl, c0, c1, LLVMGetName("shl", c0, c1),
--                                                            insertBefore);
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Shl, v0, c1,
--                                                               LLVMGetName("shl", v0, c1), insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Shl, c0, c1, ((llvm::Twine("shl_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Shl, v0, c1, ((llvm::Twine("shl_") + v0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-             }
-             return;
-         } else if (bop->getOpcode() == llvm::Instruction::Mul) {
-@@ -1648,25 +1654,30 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-             // Note that the first term is a constant and the last three are
-             // variable.
-             if (c0 != NULL && c1 != NULL)
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, c1, LLVMGetName("mul", c0, c1),
--                                                            insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Mul, c0, c1, ((llvm::Twine("mul_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-             else
-                 *constOffset = NULL;
- 
-             llvm::Value *va = NULL, *vb = NULL, *vc = NULL;
-             if (v0 != NULL && c1 != NULL)
--                va = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, c1, LLVMGetName("mul", v0, c1),
-+                va = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, c1,
-+                                                  ((llvm::Twine("mul_") + v0->getName()) + "_") + c1->getName(),
-                                                   insertBefore);
-             if (c0 != NULL && v1 != NULL)
--                vb = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, v1, LLVMGetName("mul", c0, v1),
-+                vb = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, v1,
-+                                                  ((llvm::Twine("mul_") + c0->getName()) + "_") + v1->getName(),
-                                                   insertBefore);
-             if (v0 != NULL && v1 != NULL)
--                vc = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, v1, LLVMGetName("mul", v0, v1),
-+                vc = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, v1,
-+                                                  ((llvm::Twine("mul_") + v0->getName()) + "_") + v1->getName(),
-                                                   insertBefore);
- 
-             llvm::Value *vab = NULL;
-             if (va != NULL && vb != NULL)
--                vab = llvm::BinaryOperator::Create(llvm::Instruction::Add, va, vb, LLVMGetName("add", va, vb),
-+                vab = llvm::BinaryOperator::Create(llvm::Instruction::Add, va, vb,
-+                                                   ((llvm::Twine("add_") + va->getName()) + "_") + vb->getName(),
-                                                    insertBefore);
-             else if (va != NULL)
-                 vab = va;
-@@ -1674,8 +1685,9 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-                 vab = vb;
- 
-             if (vab != NULL && vc != NULL)
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, vab, vc,
--                                                               LLVMGetName("add", vab, vc), insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, vab, vc, ((llvm::Twine("add_") + vab->getName()) + "_") + vc->getName(),
-+                    insertBefore);
-             else if (vab != NULL)
-                 *variableOffset = vab;
-             else
-@@ -1943,7 +1955,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-             // all zeros (i.e. a ConstantAggregateZero, but just in case,
-             // do the more general check with lVectorIs32BitInts().
-             variableOffset = new llvm::TruncInst(variableOffset, LLVMTypes::Int32VectorType,
--                                                 LLVMGetName(variableOffset, "_trunc"), insertBefore);
-+                                                 llvm::Twine(variableOffset->getName()) + "_trunc", insertBefore);
-         else
-             return false;
-     }
-@@ -1952,7 +1964,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-         if (lVectorIs32BitInts(constOffset)) {
-             // Truncate them so we have a 32-bit vector type for them.
-             constOffset = new llvm::TruncInst(constOffset, LLVMTypes::Int32VectorType,
--                                              LLVMGetName(constOffset, "_trunc"), insertBefore);
-+                                              llvm::Twine(constOffset->getName()) + "_trunc", insertBefore);
-         } else {
-             // FIXME: otherwise we just assume that all constant offsets
-             // can actually always fit into 32-bits...  (This could be
-@@ -1963,7 +1975,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-             // llvm::ConstantFoldInstruction() doesn't seem to be doing
-             // enough for us in some cases if we call it from here.
-             constOffset = new llvm::TruncInst(constOffset, LLVMTypes::Int32VectorType,
--                                              LLVMGetName(constOffset, "_trunc"), insertBefore);
-+                                              llvm::Twine(constOffset->getName()) + "_trunc", insertBefore);
-         }
-     }
- 
-@@ -2012,8 +2024,8 @@ static bool lOffsets32BitSafe(llvm::Value **offsetPtr, llvm::Instruction *insert
- 
-         // Alternatively, offset could be a sequence of adds terminating
-         // in safe constant vectors or a SExt.
--        *offsetPtr =
--            new llvm::TruncInst(offset, LLVMTypes::Int32VectorType, LLVMGetName(offset, "_trunc"), insertBefore);
-+        *offsetPtr = new llvm::TruncInst(offset, LLVMTypes::Int32VectorType, llvm::Twine(offset->getName()) + "_trunc",
-+                                         insertBefore);
-         return true;
-     } else
-         return false;
-@@ -2229,7 +2241,8 @@ static bool lGSToGSBaseOffsets(llvm::CallInst *callInst) {
-     }
-     // Cast the base pointer to a void *, since that's what the
-     // __pseudo_*_base_offsets_* functions want.
--    basePtr = new llvm::IntToPtrInst(basePtr, LLVMTypes::VoidPointerType, LLVMGetName(basePtr, "_2void"), callInst);
-+    basePtr = new llvm::IntToPtrInst(basePtr, LLVMTypes::VoidPointerType, llvm::Twine(basePtr->getName()) + "_2void",
-+                                     callInst);
-     lCopyMetadata(basePtr, callInst);
-     llvm::Function *gatherScatterFunc = info->baseOffsetsFunc;
- 
-@@ -2803,7 +2816,7 @@ static bool lGSToLoadStore(llvm::CallInst *callInst) {
-                 lCopyMetadata(ptr, callInst);
-                 Debug(pos, "Transformed gather to unaligned vector load!");
-                 llvm::Instruction *newCall =
--                    lCallInst(gatherInfo->loadMaskedFunc, ptr, mask, LLVMGetName(ptr, "_masked_load"));
-+                    lCallInst(gatherInfo->loadMaskedFunc, ptr, mask, llvm::Twine(ptr->getName()) + "_masked_load");
-                 lCopyMetadata(newCall, callInst);
-                 llvm::ReplaceInstWithInst(callInst, newCall);
-                 return true;
diff --git a/srcpkgs/ispc/patches/llvm12-004.patch b/srcpkgs/ispc/patches/llvm12-004.patch
deleted file mode 100644
index 3a94d8443a5e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-004.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From c03a5142444476a1caa5c2ba7fa2d92d7793d6f1 Mon Sep 17 00:00:00 2001
-From: Deepak Rajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Mon, 25 Jan 2021 09:22:49 -0800
-Subject: [PATCH] Fixing build on llvm trunk.
-
----
- src/ctx.cpp | 7 +++----
- 1 file changed, 3 insertions(+), 4 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index ded524b71..b60e6fe84 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1020,8 +1020,7 @@ void FunctionEmitContext::EmitCaseLabel(int value, bool checkMask, SourcePos pos
-     llvm::BasicBlock *bbCaseImpl = NULL;
-     if (emitGenXHardwareMask()) {
-         // Create basic block with actual case implementation
--        llvm::Twine bbName = llvm::Twine(bbCase->getName()) + "_impl";
--        bbCaseImpl = CreateBasicBlock(bbName, bbCase);
-+        bbCaseImpl = CreateBasicBlock(llvm::Twine(bbCase->getName()) + "_impl", bbCase);
-     }
- #endif
- 
-@@ -3142,8 +3141,8 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     llvm::Value *undef2 = llvm::UndefValue::get(vecType);
- 
-     // InsertElement
--    llvm::Twine tw = name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + llvm::Twine("_init");
--    llvm::Value *insert = InsertInst(undef1, v, 0, tw.str().c_str());
-+    llvm::Value *insert =
-+        InsertInst(undef1, v, 0, name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + "_init");
- 
-     // ShuffleVector
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
diff --git a/srcpkgs/ispc/patches/llvm12-005.patch b/srcpkgs/ispc/patches/llvm12-005.patch
deleted file mode 100644
index e3e96b00abfa..000000000000
--- a/srcpkgs/ispc/patches/llvm12-005.patch
+++ /dev/null
@@ -1,372 +0,0 @@
-From c1d0a51bf8416d42144de9e2bdd59825eaeff1ac Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Fri, 8 Jan 2021 14:13:49 -0800
-Subject: [PATCH] LLVM 11 support for gen code
-
----
- src/ctx.cpp                     |  13 ++-
- src/gen/GlobalsLocalization.cpp |   9 +-
- src/opt.cpp                     | 143 ++++++++++++++++++++++++--------
- 3 files changed, 124 insertions(+), 41 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index b60e6fe84..2a72e6837 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1,5 +1,5 @@
- /*
--  Copyright (c) 2010-2020, Intel Corporation
-+  Copyright (c) 2010-2021, Intel Corporation
-   All rights reserved.
- 
-   Redistribution and use in source and binary forms, with or without
-@@ -3685,8 +3685,17 @@ llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::
-     AssertPos(currentPos, llvm::isa<llvm::VectorType>(value->getType()));
-     llvm::VectorType *vt = llvm::dyn_cast<llvm::VectorType>(value->getType());
-     if (defaults == NULL) {
--        defaults = llvm::ConstantVector::getSplat(value->getType()->getVectorNumElements(),
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+        defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-+                                                  llvm::Constant::getNullValue(vt->getElementType()));
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+        defaults = llvm::ConstantVector::getSplat({static_cast<unsigned int>(vt->getNumElements()), false},
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
-+#else
-+        defaults = llvm::ConstantVector::getSplat(
-+            llvm::ElementCount::get(static_cast<unsigned int>(vt->getNumElements()), false),
-+            llvm::Constant::getNullValue(vt->getElementType()));
-+#endif
-     }
- 
-     auto Fn = llvm::GenXIntrinsic::getGenXDeclaration(m->module, llvm::GenXIntrinsic::genx_simdcf_predicate,
-diff --git a/src/gen/GlobalsLocalization.cpp b/src/gen/GlobalsLocalization.cpp
-index a176e9462..41f3b00e2 100644
---- a/src/gen/GlobalsLocalization.cpp
-+++ b/src/gen/GlobalsLocalization.cpp
-@@ -1,5 +1,5 @@
- /*
--  Copyright (c) 2014, 2016-2020, Intel Corporation
-+  Copyright (c) 2014, 2016-2021, Intel Corporation
-   All rights reserved.
- 
-   Redistribution and use in source and binary forms, with or without
-@@ -53,8 +53,10 @@
- #include <llvm/GenXIntrinsics/GenXIntrOpts.h>
- #include <llvm/GenXIntrinsics/GenXIntrinsics.h>
- #include <llvm/GenXIntrinsics/GenXMetadata.h>
--#include <llvm/IR/CFG.h>
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
- #include <llvm/IR/CallSite.h>
-+#endif
-+#include <llvm/IR/CFG.h>
- #include <llvm/IR/DebugInfo.h>
- #include <llvm/IR/Dominators.h>
- #include <llvm/IR/Function.h>
-@@ -470,7 +472,8 @@ void GlobalsLocalization::LocalizeGlobals(LocalizationInfo &LI) {
-         Instruction &FirstI = *Fn->getEntryBlock().begin();
-         Type *ElemTy = GV->getType()->getElementType();
-         AllocaInst *Alloca = new AllocaInst(ElemTy, 0, GV->getName() + ".local", &FirstI);
--        Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()));
-+        Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()).valueOrOne());
-+
-         if (!isa<UndefValue>(GV->getInitializer()))
-             new StoreInst(GV->getInitializer(), Alloca, &FirstI);
- 
-diff --git a/src/opt.cpp b/src/opt.cpp
-index d58d77f73..1789b8476 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -2899,15 +2899,17 @@ static llvm::Function *lGenXMaskedInt8Inst(llvm::Instruction *inst, bool isStore
- static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::Instruction *inst) {
-     Assert(g->target->isGenXTarget());
-     Assert(llvm::isa<llvm::VectorType>(val->getType()));
--    Assert(llvm::isPowerOf2_32(val->getType()->getVectorNumElements()));
--    Assert(val->getType()->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-+
-+    llvm::VectorType *valVecType = llvm::dyn_cast<llvm::VectorType>(val->getType());
-+    Assert(llvm::isPowerOf2_32(valVecType->getNumElements()));
-+    Assert(valVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
- 
-     // The data write of svm store must have a size that is a power of two from 16 to 128
-     // bytes. However for int8 type and simd width = 8, the data write size is 8.
-     // So we use masked store function here instead of svm store which process int8 type
-     // correctly.
--    if (val->getType()->getPrimitiveSizeInBits() / 8 < 16) {
--        Assert(val->getType()->getScalarType() == LLVMTypes::Int8Type);
-+    if (valVecType->getPrimitiveSizeInBits() / 8 < 16) {
-+        Assert(valVecType->getScalarType() == LLVMTypes::Int8Type);
-         if (llvm::Function *maskedFunc = lGenXMaskedInt8Inst(inst, true))
-             return llvm::dyn_cast<llvm::CallInst>(lCallInst(maskedFunc, ptr, val, LLVMMaskAllOn, ""));
-         else {
-@@ -2923,15 +2925,17 @@ static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::
- 
- static llvm::CallInst *lGenXLoadInst(llvm::Value *ptr, llvm::Type *retType, llvm::Instruction *inst) {
-     Assert(llvm::isa<llvm::VectorType>(retType));
--    Assert(llvm::isPowerOf2_32(retType->getVectorNumElements()));
--    Assert(retType->getPrimitiveSizeInBits());
--    Assert(retType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-+
-+    llvm::VectorType *retVecType = llvm::dyn_cast<llvm::VectorType>(retType);
-+    Assert(llvm::isPowerOf2_32(retVecType->getNumElements()));
-+    Assert(retVecType->getPrimitiveSizeInBits());
-+    Assert(retVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-     // The data read of svm load must have a size that is a power of two from 16 to 128
-     // bytes. However for int8 type and simd width = 8, the data read size is 8.
-     // So we use masked load function here instead of svm load which process int8 type
-     // correctly.
--    if (retType->getPrimitiveSizeInBits() / 8 < 16) {
--        Assert(retType->getScalarType() == LLVMTypes::Int8Type);
-+    if (retVecType->getPrimitiveSizeInBits() / 8 < 16) {
-+        Assert(retVecType->getScalarType() == LLVMTypes::Int8Type);
-         if (llvm::Function *maskedFunc = lGenXMaskedInt8Inst(inst, false))
-             return llvm::dyn_cast<llvm::CallInst>(lCallInst(maskedFunc, ptr, LLVMMaskAllOn, ""));
-         else {
-@@ -5622,15 +5626,24 @@ static bool lVectorizeGEPs(llvm::Value *ptr, std::vector<PtrUse> &ptrUses, std::
-         llvm::PtrToIntInst *ptrToInt =
-             new llvm::PtrToIntInst(ptr, LLVMTypes::Int64Type, "vectorized_ptrtoint", insertBefore);
-         llvm::Instruction *addr = llvm::BinaryOperator::CreateAdd(ptrToInt, offset, "vectorized_address", insertBefore);
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        llvm::Type *retType = llvm::FixedVectorType::get(scalar_type, reqSize / t_size);
-+#else
-         llvm::Type *retType = llvm::VectorType::get(scalar_type, reqSize / t_size);
-+#endif
-         llvm::Function *fn = llvm::GenXIntrinsic::getGenXDeclaration(
-             m->module, llvm::GenXIntrinsic::genx_svm_block_ld_unaligned, {retType, addr->getType()});
-         llvm::Instruction *ld = llvm::CallInst::Create(fn, {addr}, "vectorized_ld", insertBefore);
- 
-         if (loadingPtr) {
-             // Cast int to ptr via inttoptr
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            ld = new llvm::IntToPtrInst(ld, llvm::FixedVectorType::get(originalType, reqSize / t_size),
-+                                        "vectorized_inttoptr", insertBefore);
-+#else
-             ld = new llvm::IntToPtrInst(ld, llvm::VectorType::get(originalType, reqSize / t_size),
-                                         "vectorized_inttoptr", insertBefore);
-+#endif
-         }
- 
-         // Scalar extracts for all loaded elements
-@@ -6160,19 +6173,34 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-         llvm::Instruction *inst = &*I;
-         if (llvm::CallInst *ci = llvm::dyn_cast<llvm::CallInst>(inst)) {
-             llvm::Function *func = ci->getCalledFunction();
--            if (func && func->getName() == "llvm.trap") {
-+            if (func && func->getName().equals("llvm.trap")) {
-                 llvm::Type *argTypes[] = {LLVMTypes::Int1VectorType, LLVMTypes::Int16VectorType};
-                 // Description of parameters for genx_raw_send_noresult can be found in target-genx.ll
-                 auto Fn = +llvm::GenXIntrinsic::getGenXDeclaration(
-                     m->module, llvm::GenXIntrinsic::genx_raw_send_noresult, argTypes);
-                 llvm::SmallVector<llvm::Value *, 8> Args;
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 0));
--                Args.push_back(llvm::ConstantVector::getSplat(g->target->getNativeVectorWidth(),
--                                                              llvm::ConstantInt::getTrue(*g->ctx)));
-+                Args.push_back(llvm::ConstantVector::getSplat(
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+                    g->target->getNativeVectorWidth(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+                    {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
-+#else // LLVM 12.0+
-+                    llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-+#endif
-+                    llvm::ConstantInt::getTrue(*g->ctx)));
-+
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 39));
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 33554448));
-                 llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
--                    g->target->getNativeVectorWidth(), llvm::Constant::getNullValue(llvm::Type::getInt16Ty(*g->ctx)));
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+                    g->target->getNativeVectorWidth(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+                    {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
-+#else // LLVM 12.0+
-+                    llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-+#endif
-+                    llvm::Constant::getNullValue(llvm::Type::getInt16Ty(*g->ctx)));
-                 Args.push_back(zeroMask);
- 
-                 llvm::Instruction *newInst = llvm::CallInst::Create(Fn, Args, ci->getName());
-@@ -6181,7 +6209,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     modifiedAny = true;
-                     goto restart;
-                 }
--            } else if (func && func->getName() == "llvm.assume") {
-+            } else if (func && func->getName().equals("llvm.assume")) {
-                 ci->eraseFromParent();
-                 modifiedAny = true;
-                 goto restart;
-@@ -6335,7 +6363,7 @@ bool CheckUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 continue;
-             for (int i = 0; i < unsupportedFuncs.size(); i++) {
-                 std::smatch match;
--                std::string funcName = func->getName();
-+                std::string funcName = func->getName().str();
-                 if (std::regex_match(funcName, match, unsupportedFuncs[i])) {
-                     // We found unsupported function. Generate error and stop compilation.
-                     SourcePos pos;
-@@ -6418,12 +6446,14 @@ bool MangleOpenCLBuiltins::runOnBasicBlock(llvm::BasicBlock &bb) {
-             if (func->getName().startswith("__spirv_ocl")) {
-                 std::string mangledName;
-                 llvm::Type *retType = func->getReturnType();
--                std::string funcName = func->getName();
-+                std::string funcName = func->getName().str();
-                 std::vector<llvm::Type *> ArgTy;
-                 // spirv OpenCL builtins are used for double types only
--                Assert(retType->isVectorTy() && retType->getVectorElementType()->isDoubleTy() ||
-+                Assert(retType->isVectorTy() &&
-+                           llvm::dyn_cast<llvm::VectorType>(retType)->getElementType()->isDoubleTy() ||
-                        retType->isSingleValueType() && retType->isDoubleTy());
--                if (retType->isVectorTy() && retType->getVectorElementType()->isDoubleTy()) {
-+                if (retType->isVectorTy() &&
-+                    llvm::dyn_cast<llvm::VectorType>(retType)->getElementType()->isDoubleTy()) {
-                     ArgTy.push_back(LLVMTypes::DoubleVectorType);
-                     // _DvWIDTH suffix is used in target file to differentiate scalar
-                     // and vector versions of intrinsics. Here we remove this
-@@ -6511,8 +6541,15 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- 
-     // Cast offsets to int64
-     Offsets = new llvm::ZExtInst(
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        Offsets,
-+        llvm::FixedVectorType::get(LLVMTypes::Int64Type,
-+                                   llvm::dyn_cast<llvm::VectorType>(Offsets->getType())->getNumElements()),
-+        "svm_offset_zext", InsertBefore);
-+#else
-         Offsets, llvm::VectorType::get(LLVMTypes::Int64Type, Offsets->getType()->getVectorNumElements()),
-         "svm_offset_zext", InsertBefore);
-+#endif
- 
-     if (!llvm::isa<llvm::ConstantPointerNull>(Ptr)) {
-         // Cast ptr to int64
-@@ -6520,13 +6557,31 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- 
-         // Vectorize ptr
-         llvm::Value *undefInsertValue =
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            llvm::UndefValue::get(llvm::FixedVectorType::get(
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+#else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
-+#endif
-         address = llvm::InsertElementInst::Create(undefInsertValue, address, LLVMInt32(0), "svm_ptr_iei", InsertBefore);
-         llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+            {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
-+#else
-+        llvm::ElementCount::get(
-+                                llvm::dyn_cast<llvm::FixedVectorType>(addressType->getNumElements(), false),
-+#endif
-             llvm::Constant::getNullValue(llvm::Type::getInt32Ty(InsertBefore->getContext())));
-+
-         llvm::Value *undefShuffleValue =
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            llvm::UndefValue::get(llvm::FixedVectorType::get(
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+#else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
-+#endif
-         address = new llvm::ShuffleVectorInst(address, undefShuffleValue, zeroVec, "svm_ptr_svi", InsertBefore);
- 
-         // Calculate address
-@@ -6553,9 +6608,12 @@ llvm::Instruction *FixAddressSpace::processVectorLoad(llvm::LoadInst *LI) {
-     if (retType->getScalarType()->isPointerTy()) {
-         isPtrLoad = true;
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        retType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(retType)->getNumElements());
-+#else
-         retType = llvm::VectorType::get(scalarType, retType->getVectorNumElements());
-+#endif
-     }
--
-     llvm::Instruction *res = lGenXLoadInst(ptr, retType, llvm::dyn_cast<llvm::Instruction>(LI));
-     Assert(res);
- 
-@@ -6580,11 +6638,16 @@ llvm::Instruction *FixAddressSpace::processSVMVectorLoad(llvm::Instruction *CI)
-     ptr = new llvm::IntToPtrInst(ptr, llvm::PointerType::get(retType, 0), CI->getName() + "_inttoptr", CI);
-     llvm::Instruction *loadInst = NULL;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    loadInst = new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), loadInst,
--                                  CI->getName(), (llvm::Instruction *)NULL);
-+    loadInst = new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-+                                  CI->getName(), false /* not volatile */,
-+                                  llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne(),
-+                                  (llvm::Instruction *)NULL);
- #else
--    loadInst = new llvm::LoadInst(ptr, CI->getName(), (llvm::Instruction *)NULL);
-+    loadInst = new llvm::LoadInst(ptr, CI->getName(), false,
-+                                  llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne(),
-+                                  (llvm::Instruction *)NULL);
- #endif
-+
-     Assert(loadInst);
-     return loadInst;
- }
-@@ -6606,7 +6669,11 @@ llvm::Instruction *FixAddressSpace::processVectorStore(llvm::StoreInst *SI) {
-     // Note: it doesn't look like a normal case for GenX target
-     if (valType->getScalarType()->isPointerTy()) {
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        valType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(valType)->getNumElements());
-+#else
-         valType = llvm::VectorType::get(scalarType, valType->getVectorNumElements());
-+#endif
-         val = new llvm::PtrToIntInst(val, valType, "svm_st_val_ptrtoint", SI);
-     }
- 
-@@ -6631,12 +6698,8 @@ llvm::Instruction *FixAddressSpace::processSVMVectorStore(llvm::Instruction *CI)
-     ptr = new llvm::IntToPtrInst(ptr, llvm::PointerType::get(valType, 0), CI->getName() + "_inttoptr", CI);
- 
-     llvm::Instruction *storeInst = NULL;
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    loadInst = new llvm::StoreInst(val, llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(),
--                                   storeInst, CI->getName(), (llvm::Instruction *)NULL);
--#else
--    storeInst = new llvm::StoreInst(val, ptr, (llvm::Instruction *)NULL);
--#endif
-+    storeInst = new llvm::StoreInst(val, ptr, (llvm::Instruction *)NULL,
-+                                    llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
-     Assert(storeInst);
-     return storeInst;
- }
-@@ -6645,15 +6708,18 @@ llvm::Instruction *FixAddressSpace::createInt8WrRegion(llvm::Value *Val, llvm::V
-     int width = g->target->getVectorWidth();
- 
-     llvm::Value *Args[8];
--
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Args[0] = llvm::UndefValue::get(llvm::FixedVectorType::get(LLVMTypes::Int8Type, width * 4)); // old value
-+#else
-     Args[0] = llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int8Type, width * 4)); // old value
--    Args[1] = Val;                                                                          // value to store
--    Args[2] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);                              // vstride
--    Args[3] = llvm::ConstantInt::get(LLVMTypes::Int32Type, width);                          // width
--    Args[4] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 4);                              // stride
--    Args[5] = llvm::ConstantInt::get(LLVMTypes::Int16Type, 0);                              // offsets
--    Args[6] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);                              // parent width (ignored)
--    Args[7] = Mask;                                                                         // mask
-+#endif
-+    Args[1] = Val;                                                 // value to store
-+    Args[2] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);     // vstride
-+    Args[3] = llvm::ConstantInt::get(LLVMTypes::Int32Type, width); // width
-+    Args[4] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 4);     // stride
-+    Args[5] = llvm::ConstantInt::get(LLVMTypes::Int16Type, 0);     // offsets
-+    Args[6] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);     // parent width (ignored)
-+    Args[7] = Mask;                                                // mask
- 
-     llvm::Type *Tys[4];
- 
-@@ -6708,7 +6774,12 @@ llvm::Instruction *FixAddressSpace::processGatherScatterPrivate(llvm::CallInst *
-         return NULL;
- 
-     llvm::Value *address = calculateGatherScatterAddress(ptr, offsets, CI);
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    llvm::Type *i8VecType = llvm::FixedVectorType::get(LLVMTypes::Int8Type, width * 4);
-+#else
-     llvm::Type *i8VecType = llvm::VectorType::get(LLVMTypes::Int8Type, width * 4);
-+#endif
-+
-     bool isInt8 = (value->getType()->getScalarType() == LLVMTypes::Int8Type);
- 
-     Assert(address && "Bad gather/scatter address!");
diff --git a/srcpkgs/ispc/patches/llvm12-006.patch b/srcpkgs/ispc/patches/llvm12-006.patch
deleted file mode 100644
index a829ea48391e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-006.patch
+++ /dev/null
@@ -1,126 +0,0 @@
-From bb3f493d1fbd45c79e1d9dee67a0430ba313eaad Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 19 Jan 2021 11:07:33 -0800
-Subject: [PATCH] Fixed ifdefs for LLVM_11
-
----
- src/ctx.cpp |  6 +++---
- src/opt.cpp | 18 +++++++++---------
- 2 files changed, 12 insertions(+), 12 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 2a72e6837..527a02f30 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1691,7 +1691,7 @@ llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const llvm::T
-     if (llvm::Constant *const_val = llvm::dyn_cast<llvm::Constant>(value)) {
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         ret = llvm::ConstantVector::getSplat(g->target->getVectorWidth(), const_val);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-         ret =
-             llvm::ConstantVector::getSplat({static_cast<unsigned int>(g->target->getVectorWidth()), false}, const_val);
- #else // LLVM 12.0+
-@@ -3148,7 +3148,7 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-     llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
-         vecType->getVectorNumElements(), llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-     llvm::Constant *zeroVec =
-         llvm::ConstantVector::getSplat({static_cast<unsigned int>(ty->getNumElements()), false},
-                                        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
-@@ -3688,7 +3688,7 @@ llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-         defaults = llvm::ConstantVector::getSplat({static_cast<unsigned int>(vt->getNumElements()), false},
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
- #else
-diff --git a/src/opt.cpp b/src/opt.cpp
-index 1789b8476..3ff191a0a 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -1045,7 +1045,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                 llvm::Instruction *loadInst =
-                     new llvm::LoadInst(castPtr, llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load",
-                                        false /* not volatile */, llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
-@@ -1472,7 +1472,7 @@ static llvm::Value *lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offse
-                     llvm::Value *zeroMask =
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                         llvm::ConstantVector::getSplat(cv->getType()->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                         llvm::ConstantVector::getSplat(
-                             {llvm::dyn_cast<llvm::VectorType>(cv->getType())->getNumElements(), false},
- #else // LLVM 12.0+
-@@ -1495,7 +1495,7 @@ static llvm::Value *lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offse
-                         llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                             bop_var_type->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                             {llvm::dyn_cast<llvm::VectorType>(bop_var_type)->getNumElements(), false},
- #else // LLVM 12.0+
-                             llvm::ElementCount::get(
-@@ -2803,7 +2803,7 @@ static bool lGSToLoadStore(llvm::CallInst *callInst) {
-             llvm::Value *zeroMask =
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                 llvm::ConstantVector::getSplat(callInst->getType()->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                 llvm::ConstantVector::getSplat(
-                     {llvm::dyn_cast<llvm::VectorType>(callInst->getType())->getNumElements(), false},
- 
-@@ -3100,7 +3100,7 @@ static bool lImproveMaskedLoad(llvm::CallInst *callInst, llvm::BasicBlock::itera
-         {
-             llvm::Type *ptrType = llvm::PointerType::get(callInst->getType(), 0);
-             ptr = new llvm::BitCastInst(ptr, ptrType, "ptr_cast_for_load", callInst);
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             load = new llvm::LoadInst(
-                 ptr, callInst->getName(), false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-@@ -3459,7 +3459,7 @@ llvm::Value *lGEPAndLoad(llvm::Value *basePtr, int64_t offset, int align, llvm::
-                          llvm::Type *type) {
-     llvm::Value *ptr = lGEPInst(basePtr, LLVMInt64(offset), "new_base", insertBefore);
-     ptr = new llvm::BitCastInst(ptr, llvm::PointerType::get(type, 0), "ptr_cast", insertBefore);
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-     return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, llvm::MaybeAlign(align), insertBefore);
- #else // LLVM 11.0+
-     return new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-@@ -6183,7 +6183,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 Args.push_back(llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                     g->target->getNativeVectorWidth(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                     {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
- #else // LLVM 12.0+
-                     llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-@@ -6195,7 +6195,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                     g->target->getNativeVectorWidth(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                     {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
- #else // LLVM 12.0+
-                     llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-@@ -6567,7 +6567,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
-         llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-             {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
- #else
-         llvm::ElementCount::get(
diff --git a/srcpkgs/ispc/patches/llvm12-007.patch b/srcpkgs/ispc/patches/llvm12-007.patch
deleted file mode 100644
index 1b975f896c7e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-007.patch
+++ /dev/null
@@ -1,160 +0,0 @@
-From 62f5a6c37bf26fc25a7cf81868052d3472874610 Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 23 Mar 2021 23:07:30 -0700
-Subject: [PATCH] Do not generate function mask when it is not required
-
----
- src/ctx.cpp                    | 39 ++++++++++++++-------
- tests/lit-tests/full_mask.ispc | 63 ++++++++++++++++++++++++++++++++++
- 2 files changed, 90 insertions(+), 12 deletions(-)
- create mode 100644 tests/lit-tests/full_mask.ispc
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 527a02f30..9e775fc5c 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -231,10 +231,18 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym, llvm::F
-     internalMaskPointer = AllocaInst(LLVMTypes::MaskType, "internal_mask_memory");
-     StoreInst(LLVMMaskAllOn, internalMaskPointer);
- 
--    functionMaskValue = LLVMMaskAllOn;
--
--    fullMaskPointer = AllocaInst(LLVMTypes::MaskType, "full_mask_memory");
--    StoreInst(LLVMMaskAllOn, fullMaskPointer);
-+    // If the function doesn't have __mask in parameters, there is no need to
-+    // have function mask
-+    if ((func->GetType()->isExported &&
-+         (lf->getFunctionType()->getNumParams() == func->GetType()->GetNumParameters())) ||
-+        (func->GetType()->isUnmasked) || (func->GetType()->isTask)) {
-+        functionMaskValue = NULL;
-+        fullMaskPointer = NULL;
-+    } else {
-+        functionMaskValue = LLVMMaskAllOn;
-+        fullMaskPointer = AllocaInst(LLVMTypes::MaskType, "full_mask_memory");
-+        StoreInst(LLVMMaskAllOn, fullMaskPointer);
-+    }
- 
-     blockEntryMask = NULL;
-     breakLanesPtr = continueLanesPtr = NULL;
-@@ -389,20 +397,26 @@ llvm::BasicBlock *FunctionEmitContext::GetCurrentBasicBlock() { return bblock; }
- 
- void FunctionEmitContext::SetCurrentBasicBlock(llvm::BasicBlock *bb) { bblock = bb; }
- 
--llvm::Value *FunctionEmitContext::GetFunctionMask() { return functionMaskValue; }
-+llvm::Value *FunctionEmitContext::GetFunctionMask() { return fullMaskPointer ? functionMaskValue : LLVMMaskAllOn; }
- 
- llvm::Value *FunctionEmitContext::GetInternalMask() { return LoadInst(internalMaskPointer, NULL, "load_mask"); }
- 
- llvm::Value *FunctionEmitContext::GetFullMask() {
--    return BinaryOperator(llvm::Instruction::And, GetInternalMask(), functionMaskValue, "internal_mask&function_mask");
-+    return fullMaskPointer ? BinaryOperator(llvm::Instruction::And, GetInternalMask(), functionMaskValue,
-+                                            "internal_mask&function_mask")
-+                           : GetInternalMask();
- }
- 
--llvm::Value *FunctionEmitContext::GetFullMaskPointer() { return fullMaskPointer; }
-+llvm::Value *FunctionEmitContext::GetFullMaskPointer() {
-+    return fullMaskPointer ? fullMaskPointer : internalMaskPointer;
-+}
- 
- void FunctionEmitContext::SetFunctionMask(llvm::Value *value) {
--    functionMaskValue = value;
--    if (bblock != NULL)
--        StoreInst(GetFullMask(), fullMaskPointer);
-+    if (fullMaskPointer != NULL) {
-+        functionMaskValue = value;
-+        if (bblock != NULL)
-+            StoreInst(GetFullMask(), fullMaskPointer);
-+    }
- }
- 
- void FunctionEmitContext::SetBlockEntryMask(llvm::Value *value) { blockEntryMask = value; }
-@@ -410,7 +424,8 @@ void FunctionEmitContext::SetBlockEntryMask(llvm::Value *value) { blockEntryMask
- void FunctionEmitContext::SetInternalMask(llvm::Value *value) {
-     StoreInst(value, internalMaskPointer);
-     // kludge so that __mask returns the right value in ispc code.
--    StoreInst(GetFullMask(), fullMaskPointer);
-+    if (fullMaskPointer)
-+        StoreInst(GetFullMask(), fullMaskPointer);
- }
- 
- void FunctionEmitContext::SetInternalMaskAnd(llvm::Value *oldMask, llvm::Value *test) {
-@@ -1265,7 +1280,7 @@ void FunctionEmitContext::CurrentLanesReturned(Expr *expr, bool doCoherenceCheck
-         // lanes have returned
-         if (doCoherenceCheck) {
-             // if newReturnedLanes == functionMaskValue, get out of here!
--            llvm::Value *cmp = MasksAllEqual(functionMaskValue, newReturnedLanes);
-+            llvm::Value *cmp = MasksAllEqual(GetFunctionMask(), newReturnedLanes);
-             llvm::BasicBlock *bDoReturn = CreateBasicBlock("do_return");
-             llvm::BasicBlock *bNoReturn = CreateBasicBlock("no_return");
-             BranchInst(bDoReturn, bNoReturn, cmp);
-diff --git a/tests/lit-tests/full_mask.ispc b/tests/lit-tests/full_mask.ispc
-new file mode 100644
-index 000000000..ac0b0bca3
---- /dev/null
-+++ b/tests/lit-tests/full_mask.ispc
-@@ -0,0 +1,63 @@
-+// RUN: %{ispc} %s -DISPC_EXPORT --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_EXPORT %s
-+
-+// RUN: %{ispc} %s -DISPC_UNMASKED --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_UNMASKED %s
-+
-+// RUN: %{ispc} %s -DISPC_NOQUALIF --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_NOQUALIF %s
-+
-+// RUN: %{ispc} %s -DISPC_TASK --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_TASK %s
-+
-+struct Parameters {
-+    float *vout;
-+    int param;
-+};
-+
-+#ifdef ISPC_EXPORT
-+// CHECK_ISPC_EXPORT: define void @simple_export___
-+// CHECK_ISPC_EXPORT: %full_mask_memory = alloca
-+// CHECK_ISPC_EXPORT: define void @simple_export(
-+// CHECK_ISPC_EXPORT-NOT: %full_mask_memory = alloca
-+export void simple_export(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_UNMASKED
-+// CHECK_ISPC_UNMASKED: define void @simple_unmasked
-+// CHECK_ISPC_UNMASKED-NOT: %full_mask_memory = alloca
-+unmasked void simple_unmasked(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_NOQUALIF
-+// CHECK_ISPC_NOQUALIF: define void @simple
-+// CHECK_ISPC_NOQUALIF: %full_mask_memory = alloca
-+void simple(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_TASK
-+
-+// CHECK_ISPC_TASK: define void @simple_task
-+// CHECK_ISPC_TASK-NOT: %full_mask_memory = alloca
-+// CHECK_ISPC_TASK: define void @simple_entry_point__
-+// CHECK_ISPC_TASK: %full_mask_memory = alloca
-+// CHECK_ISPC_TASK: define void @simple_entry_point(
-+// CHECK_ISPC_TASK-NOT: %full_mask_memory = alloca
-+task void simple_task(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+export void simple_entry_point(void *uniform parameters, uniform int dim0, uniform int dim1, uniform int dim2) {
-+    launch[dim0, dim1, dim2] simple_task(parameters);
-+}
-+#endif
-\ No newline at end of file
diff --git a/srcpkgs/ispc/patches/llvm12-008.patch b/srcpkgs/ispc/patches/llvm12-008.patch
deleted file mode 100644
index c8413d8b7887..000000000000
--- a/srcpkgs/ispc/patches/llvm12-008.patch
+++ /dev/null
@@ -1,149 +0,0 @@
-From afad14227d9204a3c8a626ca608f5b43c3218fe9 Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 4 May 2021 11:43:52 -0700
-Subject: [PATCH] Fixed ISPC gen build for LLVM12
-
----
- src/ctx.cpp |  4 ++++
- src/opt.cpp | 43 +++++++++++++++++++++++++++++--------------
- 2 files changed, 33 insertions(+), 14 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 0c7050591..f7dc06939 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -3738,7 +3738,11 @@ llvm::Value *FunctionEmitContext::GenXSimdCFAny(llvm::Value *value) {
- 
- llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::Value *defaults) {
-     AssertPos(currentPos, llvm::isa<llvm::VectorType>(value->getType()));
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    llvm::FixedVectorType *vt = llvm::dyn_cast<llvm::FixedVectorType>(value->getType());
-+#else
-     llvm::VectorType *vt = llvm::dyn_cast<llvm::VectorType>(value->getType());
-+#endif
-     if (defaults == NULL) {
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-diff --git a/src/opt.cpp b/src/opt.cpp
-index cea4afa23..4e33d6b1a 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -2916,9 +2916,13 @@ static llvm::Function *lGenXMaskedInt8Inst(llvm::Instruction *inst, bool isStore
- 
- static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::Instruction *inst) {
-     Assert(g->target->isGenXTarget());
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Assert(llvm::isa<llvm::FixedVectorType>(val->getType()));
-+    llvm::FixedVectorType *valVecType = llvm::dyn_cast<llvm::FixedVectorType>(val->getType());
-+#else
-     Assert(llvm::isa<llvm::VectorType>(val->getType()));
--
-     llvm::VectorType *valVecType = llvm::dyn_cast<llvm::VectorType>(val->getType());
-+#endif
-     Assert(llvm::isPowerOf2_32(valVecType->getNumElements()));
-     Assert(valVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
- 
-@@ -2942,9 +2946,13 @@ static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::
- }
- 
- static llvm::CallInst *lGenXLoadInst(llvm::Value *ptr, llvm::Type *retType, llvm::Instruction *inst) {
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Assert(llvm::isa<llvm::FixedVectorType>(retType));
-+    llvm::FixedVectorType *retVecType = llvm::dyn_cast<llvm::FixedVectorType>(retType);
-+#else
-     Assert(llvm::isa<llvm::VectorType>(retType));
--
-     llvm::VectorType *retVecType = llvm::dyn_cast<llvm::VectorType>(retType);
-+#endif
-     Assert(llvm::isPowerOf2_32(retVecType->getNumElements()));
-     Assert(retVecType->getPrimitiveSizeInBits());
-     Assert(retVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-@@ -5485,8 +5493,13 @@ static void lCreateBlockLDUse(llvm::Instruction *currInst, std::vector<llvm::Ext
-         } else if (auto gather = lGetPseudoGather(llvm::dyn_cast<llvm::Instruction>(ui->getUser()))) {
-             // Collect idxs from gather and fix users
-             llvm::Value *res = llvm::UndefValue::get(gather->getType());
--            for (unsigned i = 0, end = llvm::dyn_cast<llvm::VectorType>(res->getType())->getNumElements(); i < end;
--                 ++i) {
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            for (unsigned i = 0, end = llvm::dyn_cast<llvm::FixedVectorType>(res->getType())->getNumElements(); i < end;
-+                 ++i)
-+#else
-+            for (unsigned i = 0, end = llvm::dyn_cast<llvm::VectorType>(res->getType())->getNumElements(); i < end; ++i)
-+#endif
-+            {
-                 // Get element via IEI
-                 res = llvm::InsertElementInst::Create(res, EEIs[ptrUse.idxs[curr_idx++]],
-                                                       llvm::ConstantInt::get(LLVMTypes::Int32Type, i),
-@@ -5522,10 +5535,11 @@ static bool lVectorizeGEPs(llvm::Value *ptr, std::vector<PtrUse> &ptrUses, std::
- 
-     // Adjust values for vector load
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    if (auto vecTy = llvm::dyn_cast<llvm::FixedVectorType>(type)) {
-+    if (auto vecTy = llvm::dyn_cast<llvm::FixedVectorType>(type))
- #else
--    if (auto vecTy = llvm::dyn_cast<llvm::VectorType>(type)) {
-+    if (auto vecTy = llvm::dyn_cast<llvm::VectorType>(type))
- #endif
-+    {
-         // Get single element size
-         t_size /= vecTy->getNumElements();
-         // Get single element type
-@@ -6477,7 +6491,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-         Offsets,
-         llvm::FixedVectorType::get(LLVMTypes::Int64Type,
--                                   llvm::dyn_cast<llvm::VectorType>(Offsets->getType())->getNumElements()),
-+                                   llvm::dyn_cast<llvm::FixedVectorType>(Offsets->getType())->getNumElements()),
-         "svm_offset_zext", InsertBefore);
- #else
-         Offsets, llvm::VectorType::get(LLVMTypes::Int64Type, Offsets->getType()->getVectorNumElements()),
-@@ -6492,7 +6506,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
-         llvm::Value *undefInsertValue =
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-             llvm::UndefValue::get(llvm::FixedVectorType::get(
--                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements()));
- #else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
- #endif
-@@ -6501,17 +6515,16 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
- #elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
--            {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
-+            {llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements(), false},
- #else
--        llvm::ElementCount::get(
--                                llvm::dyn_cast<llvm::FixedVectorType>(addressType->getNumElements(), false),
-+            llvm::ElementCount::get(llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements(), false),
- #endif
-             llvm::Constant::getNullValue(llvm::Type::getInt32Ty(InsertBefore->getContext())));
- 
-         llvm::Value *undefShuffleValue =
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-             llvm::UndefValue::get(llvm::FixedVectorType::get(
--                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements()));
- #else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
- #endif
-@@ -6542,7 +6555,8 @@ llvm::Instruction *FixAddressSpace::processVectorLoad(llvm::LoadInst *LI) {
-         isPtrLoad = true;
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--        retType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(retType)->getNumElements());
-+        retType =
-+            llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::FixedVectorType>(retType)->getNumElements());
- #else
-         retType = llvm::VectorType::get(scalarType, retType->getVectorNumElements());
- #endif
-@@ -6604,7 +6618,8 @@ llvm::Instruction *FixAddressSpace::processVectorStore(llvm::StoreInst *SI) {
-     if (valType->getScalarType()->isPointerTy()) {
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--        valType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(valType)->getNumElements());
-+        valType =
-+            llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::FixedVectorType>(valType)->getNumElements());
- #else
-         valType = llvm::VectorType::get(scalarType, valType->getVectorNumElements());
- #endif
diff --git a/srcpkgs/ispc/patches/llvm12-009.patch b/srcpkgs/ispc/patches/llvm12-009.patch
deleted file mode 100644
index d3ea67828582..000000000000
--- a/srcpkgs/ispc/patches/llvm12-009.patch
+++ /dev/null
@@ -1,2109 +0,0 @@
-From 97b13c32132e2704a5e3e7b2eae49d854d087e3e Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 4 May 2021 11:31:55 -0700
-Subject: [PATCH] Updated builtins-cm* for switch to LLVM12
-
----
- builtins/builtins-cm-32.ll | 234 ++++++++++++++++++-------------------
- builtins/builtins-cm-64.ll | 232 ++++++++++++++++++------------------
- 2 files changed, 233 insertions(+), 233 deletions(-)
-
-diff --git a/builtins/builtins-cm-32.ll b/builtins/builtins-cm-32.ll
-index 32debf32e..481bbdc48 100644
---- a/builtins/builtins-cm-32.ll
-+++ b/builtins/builtins-cm-32.ll
-@@ -557,7 +557,7 @@ $_ZN13VaryingWriter12WriteVecElemIPvEEvv = comdat any
- @.str.10 = private unnamed_addr constant [5 x i8] c"%08X\00", align 1
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -618,7 +618,7 @@ define internal <1 x i8> @_ZN7details13__impl_divremILi1EEEu2CMvbT__cS1_S1_u2CMv
- declare <1 x i8> @llvm.genx.rdregioni.v1i8.v1i8.i16(<1 x i8>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -634,7 +634,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -680,7 +680,7 @@ define internal <2 x i8> @_ZN7details13__impl_divremILi2EEEu2CMvbT__cS1_S1_u2CMv
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -818,7 +818,7 @@ define internal <16 x i8> @_ZN7details13__impl_divremILi16EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -864,7 +864,7 @@ define internal <32 x i8> @_ZN7details13__impl_divremILi32EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -890,7 +890,7 @@ define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -904,7 +904,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -918,7 +918,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -932,7 +932,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -946,7 +946,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -960,7 +960,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -974,7 +974,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1058,7 +1058,7 @@ define internal <1 x i16> @_ZN7details13__impl_divremILi1EEEu2CMvbT__sS1_S1_u2CM
- declare <1 x i16> @llvm.genx.rdregioni.v1i16.v1i16.i16(<1 x i16>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1074,7 +1074,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1143,7 +1143,7 @@ define internal <2 x i16> @_ZN7details13__impl_divremILi2EEEu2CMvbT__sS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1350,7 +1350,7 @@ define internal <16 x i16> @_ZN7details13__impl_divremILi16EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1419,7 +1419,7 @@ define internal <32 x i16> @_ZN7details13__impl_divremILi32EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1445,7 +1445,7 @@ define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 si
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1459,7 +1459,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1473,7 +1473,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1487,7 +1487,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -1501,7 +1501,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -1515,7 +1515,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1529,7 +1529,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1730,7 +1730,7 @@ define internal <1 x i32> @_ZN7details13__impl_divremILi1EEEu2CMvbT__iS1_S1_u2CM
- declare <1 x i32> @llvm.genx.rdregioni.v1i32.v1i32.i16(<1 x i32>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1746,7 +1746,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -1932,7 +1932,7 @@ define internal <2 x i32> @_ZN7details13__impl_divremILi2EEEu2CMvbT__iS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2490,7 +2490,7 @@ define internal <16 x i32> @_ZN7details13__impl_divremILi16EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2676,7 +2676,7 @@ define internal <32 x i32> @_ZN7details13__impl_divremILi32EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2702,7 +2702,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2716,7 +2716,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -2730,7 +2730,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2744,7 +2744,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -2758,7 +2758,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -2772,7 +2772,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2786,7 +2786,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2844,7 +2844,7 @@ define internal <1 x i8> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2860,7 +2860,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -2906,7 +2906,7 @@ define internal <2 x i8> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3044,7 +3044,7 @@ define internal <16 x i8> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3090,7 +3090,7 @@ define internal <32 x i8> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3116,7 +3116,7 @@ define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3130,7 +3130,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -3144,7 +3144,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3158,7 +3158,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -3172,7 +3172,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -3186,7 +3186,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3200,7 +3200,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3278,7 +3278,7 @@ define internal <1 x i16> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3294,7 +3294,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3360,7 +3360,7 @@ define internal <2 x i16> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3558,7 +3558,7 @@ define internal <16 x i16> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3624,7 +3624,7 @@ define internal <32 x i16> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3650,7 +3650,7 @@ define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 ze
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3664,7 +3664,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3678,7 +3678,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3692,7 +3692,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -3706,7 +3706,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -3720,7 +3720,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3734,7 +3734,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3892,7 +3892,7 @@ define internal <1 x i32> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3908,7 +3908,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4054,7 +4054,7 @@ define internal <2 x i32> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4492,7 +4492,7 @@ define internal <16 x i32> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4638,7 +4638,7 @@ define internal <32 x i32> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4664,7 +4664,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4678,7 +4678,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4692,7 +4692,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4706,7 +4706,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -4720,7 +4720,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -4734,7 +4734,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4748,7 +4748,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-+define internal void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-   %8 = alloca i8*, align 4
-   %9 = alloca i8*, align 4
-   %10 = alloca i32, align 4
-@@ -4988,7 +4988,7 @@ define internal void @_ZN7details16_cm_print_formatILi128EEEv15cm_surfaceindexju
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i32) #26 !dbg !117 {
-+define internal void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i32) #26 !dbg !117 {
-   %10 = alloca i32, align 4
-   %11 = alloca i8*, align 4
-   %12 = alloca i32, align 4
-@@ -5069,7 +5069,7 @@ define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i3
-   %67 = load i64, i64* %13, align 8, !dbg !159, !tbaa !19
-   %68 = load <5 x i32>, <5 x i32>* %21, align 32, !dbg !160, !tbaa !7
-   call void @_ZN13VaryingWriterC2ERjRPKjiyu2CMvb5_i(%class.VaryingWriter* %23, i32* dereferenceable(4) %19, i32** dereferenceable(4) %14, i32 %66, i64 %67, <5 x i32> %68), !dbg !161
--  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval align 32 %22, %class.VaryingWriter* byval align 32 %23), !dbg !162
-+  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval(%class.UniformWriter) align 32 %22, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %23), !dbg !162
-   br label %70, !dbg !163
- 
- ; <label>:70:                                     ; preds = %60
-@@ -5187,7 +5187,7 @@ define internal <5 x i32> @_Z17get_auxiliary_strv() #28 comdat !dbg !178 {
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %class.VaryingWriter* byval align 32) #25 comdat !dbg !191 {
-+define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !191 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %class.VaryingWriter, align 32
-@@ -5196,7 +5196,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %8 = bitcast %class.UniformWriter* %5 to i8*, !dbg !196
-   %9 = bitcast %class.UniformWriter* %1 to i8*, !dbg !196
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %8, i8* align 32 %9, i32 64, i1 false), !dbg !196, !tbaa.struct !197
--  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval align 32 %5), !dbg !198
-+  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5), !dbg !198
-   br i1 %10, label %16, label %11, !dbg !199
- 
- ; <label>:11:                                     ; preds = %3
-@@ -5204,7 +5204,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %13 = bitcast %class.VaryingWriter* %6 to i8*, !dbg !201
-   %14 = bitcast %class.VaryingWriter* %2 to i8*, !dbg !201
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %13, i8* align 32 %14, i32 64, i1 false), !dbg !201, !tbaa.struct !197
--  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval align 32 %6), !dbg !202
-+  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %6), !dbg !202
-   br label %16, !dbg !199
- 
- ; <label>:16:                                     ; preds = %11, %3
-@@ -5279,7 +5279,7 @@ define internal void @_ZN13VaryingWriterC2ERjRPKjiyu2CMvb5_i(%class.VaryingWrite
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @__num_cores() #29 !dbg !236 {
-+define internal i32 @__num_cores() #29 !dbg !236 {
-   ret i32 -1, !dbg !237
- }
- 
-@@ -8860,7 +8860,7 @@ declare dso_local void @_ZN7details37__cm_intrinsic_impl_svm_scatter_writeIiLi1E
- declare void @llvm.genx.svm.scatter.v1i1.v1i64.v1i32(<1 x i1>, i32, <1 x i64>, <1 x i32>) #27
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval align 32) #25 comdat !dbg !1645 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32) #25 comdat !dbg !1645 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.UniformWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8869,7 +8869,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
-   %7 = bitcast %class.UniformWriter* %4 to i8*, !dbg !1647
-   %8 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1647
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %7, i8* align 32 %8, i32 64, i1 false), !dbg !1647, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %5), !dbg !1648
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval(%class.UniformWriter) align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %5), !dbg !1648
-   ret i1 %9, !dbg !1649
- }
- 
-@@ -8877,7 +8877,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
- declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture readonly, i32, i1) #32
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval align 32) #25 comdat !dbg !1650 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !1650 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.VaryingWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -8886,12 +8886,12 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWrite
-   %7 = bitcast %class.VaryingWriter* %4 to i8*, !dbg !1652
-   %8 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !1652
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %7, i8* align 32 %8, i32 64, i1 false), !dbg !1652, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %5), !dbg !1653
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %5), !dbg !1653
-   ret i1 %9, !dbg !1654
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1655 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1655 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8914,7 +8914,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %22 = bitcast %class.UniformWriter* %5 to i8*, !dbg !1657
-   %23 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1657
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %22, i8* align 32 %23, i32 64, i1 false), !dbg !1657, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %6), !dbg !1658
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %6), !dbg !1658
-   br i1 %24, label %60, label %25, !dbg !1659
- 
- ; <label>:25:                                     ; preds = %3
-@@ -8922,7 +8922,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %27 = bitcast %class.UniformWriter* %7 to i8*, !dbg !1661
-   %28 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1661
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %27, i8* align 32 %28, i32 64, i1 false), !dbg !1661, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %8), !dbg !1662
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval(%class.UniformWriter) align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %8), !dbg !1662
-   br i1 %29, label %60, label %30, !dbg !1663
- 
- ; <label>:30:                                     ; preds = %25
-@@ -8930,7 +8930,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %32 = bitcast %class.UniformWriter* %9 to i8*, !dbg !1665
-   %33 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1665
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %32, i8* align 32 %33, i32 64, i1 false), !dbg !1665, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %10), !dbg !1666
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval(%class.UniformWriter) align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %10), !dbg !1666
-   br i1 %34, label %60, label %35, !dbg !1667
- 
- ; <label>:35:                                     ; preds = %30
-@@ -8938,7 +8938,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %37 = bitcast %class.UniformWriter* %11 to i8*, !dbg !1669
-   %38 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1669
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %37, i8* align 32 %38, i32 64, i1 false), !dbg !1669, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %12), !dbg !1670
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval(%class.UniformWriter) align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %12), !dbg !1670
-   br i1 %39, label %60, label %40, !dbg !1671
- 
- ; <label>:40:                                     ; preds = %35
-@@ -8946,7 +8946,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %42 = bitcast %class.UniformWriter* %13 to i8*, !dbg !1673
-   %43 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1673
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %42, i8* align 32 %43, i32 64, i1 false), !dbg !1673, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %14), !dbg !1674
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval(%class.UniformWriter) align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %14), !dbg !1674
-   br i1 %44, label %60, label %45, !dbg !1675
- 
- ; <label>:45:                                     ; preds = %40
-@@ -8954,7 +8954,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %47 = bitcast %class.UniformWriter* %15 to i8*, !dbg !1677
-   %48 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1677
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %47, i8* align 32 %48, i32 64, i1 false), !dbg !1677, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %16), !dbg !1678
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval(%class.UniformWriter) align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %16), !dbg !1678
-   br i1 %49, label %60, label %50, !dbg !1679
- 
- ; <label>:50:                                     ; preds = %45
-@@ -8962,7 +8962,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %52 = bitcast %class.UniformWriter* %17 to i8*, !dbg !1681
-   %53 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1681
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %52, i8* align 32 %53, i32 64, i1 false), !dbg !1681, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %18), !dbg !1682
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval(%class.UniformWriter) align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %18), !dbg !1682
-   br i1 %54, label %60, label %55, !dbg !1683
- 
- ; <label>:55:                                     ; preds = %50
-@@ -8970,7 +8970,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %57 = bitcast %class.UniformWriter* %19 to i8*, !dbg !1685
-   %58 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1685
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %57, i8* align 32 %58, i32 64, i1 false), !dbg !1685, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %20), !dbg !1686
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval(%class.UniformWriter) align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %20), !dbg !1686
-   br label %60, !dbg !1683
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -8979,7 +8979,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1688 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1688 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9005,7 +9005,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1697 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1697 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9031,7 +9031,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1706 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1706 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9057,7 +9057,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1715 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1715 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9083,7 +9083,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1724 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1724 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9109,7 +9109,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1733 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1733 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9135,7 +9135,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1742 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1742 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9161,7 +9161,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1751 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1751 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9984,7 +9984,7 @@ define internal i32 @_ZN7details18_cm_print_type_oclIPvEENS_18SHADER_PRINTF_TYPE
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2055 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2055 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.VaryingWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -10007,7 +10007,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %22 = bitcast %class.VaryingWriter* %5 to i8*, !dbg !2057
-   %23 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2057
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %22, i8* align 32 %23, i32 64, i1 false), !dbg !2057, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %6), !dbg !2058
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %6), !dbg !2058
-   br i1 %24, label %60, label %25, !dbg !2059
- 
- ; <label>:25:                                     ; preds = %3
-@@ -10015,7 +10015,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %27 = bitcast %class.VaryingWriter* %7 to i8*, !dbg !2061
-   %28 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2061
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %27, i8* align 32 %28, i32 64, i1 false), !dbg !2061, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %8), !dbg !2062
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %8), !dbg !2062
-   br i1 %29, label %60, label %30, !dbg !2063
- 
- ; <label>:30:                                     ; preds = %25
-@@ -10023,7 +10023,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %32 = bitcast %class.VaryingWriter* %9 to i8*, !dbg !2065
-   %33 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2065
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %32, i8* align 32 %33, i32 64, i1 false), !dbg !2065, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %10), !dbg !2066
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %10), !dbg !2066
-   br i1 %34, label %60, label %35, !dbg !2067
- 
- ; <label>:35:                                     ; preds = %30
-@@ -10031,7 +10031,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %37 = bitcast %class.VaryingWriter* %11 to i8*, !dbg !2069
-   %38 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2069
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %37, i8* align 32 %38, i32 64, i1 false), !dbg !2069, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %12), !dbg !2070
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %12), !dbg !2070
-   br i1 %39, label %60, label %40, !dbg !2071
- 
- ; <label>:40:                                     ; preds = %35
-@@ -10039,7 +10039,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %42 = bitcast %class.VaryingWriter* %13 to i8*, !dbg !2073
-   %43 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2073
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %42, i8* align 32 %43, i32 64, i1 false), !dbg !2073, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %14), !dbg !2074
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %14), !dbg !2074
-   br i1 %44, label %60, label %45, !dbg !2075
- 
- ; <label>:45:                                     ; preds = %40
-@@ -10047,7 +10047,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %47 = bitcast %class.VaryingWriter* %15 to i8*, !dbg !2077
-   %48 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2077
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %47, i8* align 32 %48, i32 64, i1 false), !dbg !2077, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %16), !dbg !2078
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %16), !dbg !2078
-   br i1 %49, label %60, label %50, !dbg !2079
- 
- ; <label>:50:                                     ; preds = %45
-@@ -10055,7 +10055,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %52 = bitcast %class.VaryingWriter* %17 to i8*, !dbg !2081
-   %53 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2081
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %52, i8* align 32 %53, i32 64, i1 false), !dbg !2081, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %18), !dbg !2082
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %18), !dbg !2082
-   br i1 %54, label %60, label %55, !dbg !2083
- 
- ; <label>:55:                                     ; preds = %50
-@@ -10063,7 +10063,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %57 = bitcast %class.VaryingWriter* %19 to i8*, !dbg !2085
-   %58 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2085
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %57, i8* align 32 %58, i32 64, i1 false), !dbg !2085, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %20), !dbg !2086
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %20), !dbg !2086
-   br label %60, !dbg !2083
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -10072,7 +10072,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2088 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2088 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10098,7 +10098,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2097 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2097 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10124,7 +10124,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2106 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2106 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10150,7 +10150,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2115 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2115 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10176,7 +10176,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2124 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2124 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10202,7 +10202,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2133 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2133 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10228,7 +10228,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2142 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2142 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10254,7 +10254,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2151 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2151 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-diff --git a/builtins/builtins-cm-64.ll b/builtins/builtins-cm-64.ll
-index 39a2dd8be..375d01bed 100644
---- a/builtins/builtins-cm-64.ll
-+++ b/builtins/builtins-cm-64.ll
-@@ -557,7 +557,7 @@ $_ZN13VaryingWriter12WriteVecElemIPvEEvv = comdat any
- @.str.10 = private unnamed_addr constant [8 x i8] c"%016llX\00", align 1
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -618,7 +618,7 @@ define internal <1 x i8> @_ZN7details13__impl_divremILi1EEEu2CMvbT__cS1_S1_u2CMv
- declare <1 x i8> @llvm.genx.rdregioni.v1i8.v1i8.i16(<1 x i8>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -634,7 +634,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -680,7 +680,7 @@ define internal <2 x i8> @_ZN7details13__impl_divremILi2EEEu2CMvbT__cS1_S1_u2CMv
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -818,7 +818,7 @@ define internal <16 x i8> @_ZN7details13__impl_divremILi16EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -864,7 +864,7 @@ define internal <32 x i8> @_ZN7details13__impl_divremILi32EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -890,7 +890,7 @@ define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -904,7 +904,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -918,7 +918,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -932,7 +932,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -946,7 +946,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -960,7 +960,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -974,7 +974,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1058,7 +1058,7 @@ define internal <1 x i16> @_ZN7details13__impl_divremILi1EEEu2CMvbT__sS1_S1_u2CM
- declare <1 x i16> @llvm.genx.rdregioni.v1i16.v1i16.i16(<1 x i16>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1074,7 +1074,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1143,7 +1143,7 @@ define internal <2 x i16> @_ZN7details13__impl_divremILi2EEEu2CMvbT__sS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1350,7 +1350,7 @@ define internal <16 x i16> @_ZN7details13__impl_divremILi16EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1419,7 +1419,7 @@ define internal <32 x i16> @_ZN7details13__impl_divremILi32EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1445,7 +1445,7 @@ define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 si
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1459,7 +1459,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1473,7 +1473,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1487,7 +1487,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -1501,7 +1501,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -1515,7 +1515,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1529,7 +1529,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1730,7 +1730,7 @@ define internal <1 x i32> @_ZN7details13__impl_divremILi1EEEu2CMvbT__iS1_S1_u2CM
- declare <1 x i32> @llvm.genx.rdregioni.v1i32.v1i32.i16(<1 x i32>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1746,7 +1746,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -1932,7 +1932,7 @@ define internal <2 x i32> @_ZN7details13__impl_divremILi2EEEu2CMvbT__iS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2490,7 +2490,7 @@ define internal <16 x i32> @_ZN7details13__impl_divremILi16EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2676,7 +2676,7 @@ define internal <32 x i32> @_ZN7details13__impl_divremILi32EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2702,7 +2702,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2716,7 +2716,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -2730,7 +2730,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2744,7 +2744,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -2758,7 +2758,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -2772,7 +2772,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2786,7 +2786,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2844,7 +2844,7 @@ define internal <1 x i8> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2860,7 +2860,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -2906,7 +2906,7 @@ define internal <2 x i8> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3044,7 +3044,7 @@ define internal <16 x i8> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3090,7 +3090,7 @@ define internal <32 x i8> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3116,7 +3116,7 @@ define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3130,7 +3130,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -3144,7 +3144,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3158,7 +3158,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -3172,7 +3172,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -3186,7 +3186,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3200,7 +3200,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3278,7 +3278,7 @@ define internal <1 x i16> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3294,7 +3294,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3360,7 +3360,7 @@ define internal <2 x i16> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3558,7 +3558,7 @@ define internal <16 x i16> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3624,7 +3624,7 @@ define internal <32 x i16> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3650,7 +3650,7 @@ define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 ze
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3664,7 +3664,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3678,7 +3678,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3692,7 +3692,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -3706,7 +3706,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -3720,7 +3720,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3734,7 +3734,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3892,7 +3892,7 @@ define internal <1 x i32> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3908,7 +3908,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4054,7 +4054,7 @@ define internal <2 x i32> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4492,7 +4492,7 @@ define internal <16 x i32> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4638,7 +4638,7 @@ define internal <32 x i32> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4664,7 +4664,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4678,7 +4678,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4692,7 +4692,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4706,7 +4706,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -4720,7 +4720,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -4734,7 +4734,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4748,7 +4748,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-+define internal void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-   %8 = alloca i8*, align 8
-   %9 = alloca i8*, align 8
-   %10 = alloca i32, align 4
-@@ -5070,7 +5070,7 @@ define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i3
-   %67 = load i64, i64* %13, align 8, !dbg !159, !tbaa !19
-   %68 = load <5 x i32>, <5 x i32>* %21, align 32, !dbg !160, !tbaa !7
-   call void @_ZN13VaryingWriterC2ERyRPKjiyu2CMvb5_i(%class.VaryingWriter* %23, i64* dereferenceable(8) %19, i32** dereferenceable(8) %14, i32 %66, i64 %67, <5 x i32> %68), !dbg !161
--  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval align 32 %22, %class.VaryingWriter* byval align 32 %23), !dbg !162
-+  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval(%class.UniformWriter) align 32 %22, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %23), !dbg !162
-   br label %70, !dbg !163
- 
- ; <label>:70:                                     ; preds = %60
-@@ -5188,7 +5188,7 @@ define internal <5 x i32> @_Z17get_auxiliary_strv() #28 comdat !dbg !178 {
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %class.VaryingWriter* byval align 32) #25 comdat !dbg !191 {
-+define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !191 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %class.VaryingWriter, align 32
-@@ -5197,7 +5197,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %8 = bitcast %class.UniformWriter* %5 to i8*, !dbg !196
-   %9 = bitcast %class.UniformWriter* %1 to i8*, !dbg !196
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %8, i8* align 32 %9, i64 64, i1 false), !dbg !196, !tbaa.struct !197
--  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval align 32 %5), !dbg !198
-+  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5), !dbg !198
-   br i1 %10, label %16, label %11, !dbg !199
- 
- ; <label>:11:                                     ; preds = %3
-@@ -5205,7 +5205,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %13 = bitcast %class.VaryingWriter* %6 to i8*, !dbg !201
-   %14 = bitcast %class.VaryingWriter* %2 to i8*, !dbg !201
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %13, i8* align 32 %14, i64 64, i1 false), !dbg !201, !tbaa.struct !197
--  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval align 32 %6), !dbg !202
-+  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %6), !dbg !202
-   br label %16, !dbg !199
- 
- ; <label>:16:                                     ; preds = %11, %3
-@@ -5280,7 +5280,7 @@ define internal void @_ZN13VaryingWriterC2ERyRPKjiyu2CMvb5_i(%class.VaryingWrite
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @__num_cores() #29 !dbg !236 {
-+define internal i32 @__num_cores() #29 !dbg !236 {
-   ret i32 -1, !dbg !237
- }
- 
-@@ -8870,7 +8870,7 @@ declare dso_local void @_ZN7details37__cm_intrinsic_impl_svm_scatter_writeIiLi1E
- declare void @llvm.genx.svm.scatter.v1i1.v1i64.v1i32(<1 x i1>, i32, <1 x i64>, <1 x i32>) #27
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval align 32) #25 comdat !dbg !1645 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32) #25 comdat !dbg !1645 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.UniformWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8879,7 +8879,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
-   %7 = bitcast %class.UniformWriter* %4 to i8*, !dbg !1647
-   %8 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1647
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %7, i8* align 32 %8, i64 64, i1 false), !dbg !1647, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %5), !dbg !1648
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval(%class.UniformWriter) align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %5), !dbg !1648
-   ret i1 %9, !dbg !1649
- }
- 
-@@ -8887,7 +8887,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
- declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1) #32
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval align 32) #25 comdat !dbg !1650 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !1650 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.VaryingWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -8896,12 +8896,12 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWrite
-   %7 = bitcast %class.VaryingWriter* %4 to i8*, !dbg !1652
-   %8 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !1652
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %7, i8* align 32 %8, i64 64, i1 false), !dbg !1652, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %5), !dbg !1653
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %5), !dbg !1653
-   ret i1 %9, !dbg !1654
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1655 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1655 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8924,7 +8924,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %22 = bitcast %class.UniformWriter* %5 to i8*, !dbg !1657
-   %23 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1657
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %22, i8* align 32 %23, i64 64, i1 false), !dbg !1657, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %6), !dbg !1658
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %6), !dbg !1658
-   br i1 %24, label %60, label %25, !dbg !1659
- 
- ; <label>:25:                                     ; preds = %3
-@@ -8932,7 +8932,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %27 = bitcast %class.UniformWriter* %7 to i8*, !dbg !1661
-   %28 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1661
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %27, i8* align 32 %28, i64 64, i1 false), !dbg !1661, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %8), !dbg !1662
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval(%class.UniformWriter) align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %8), !dbg !1662
-   br i1 %29, label %60, label %30, !dbg !1663
- 
- ; <label>:30:                                     ; preds = %25
-@@ -8940,7 +8940,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %32 = bitcast %class.UniformWriter* %9 to i8*, !dbg !1665
-   %33 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1665
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %32, i8* align 32 %33, i64 64, i1 false), !dbg !1665, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %10), !dbg !1666
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval(%class.UniformWriter) align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %10), !dbg !1666
-   br i1 %34, label %60, label %35, !dbg !1667
- 
- ; <label>:35:                                     ; preds = %30
-@@ -8948,7 +8948,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %37 = bitcast %class.UniformWriter* %11 to i8*, !dbg !1669
-   %38 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1669
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %37, i8* align 32 %38, i64 64, i1 false), !dbg !1669, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %12), !dbg !1670
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval(%class.UniformWriter) align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %12), !dbg !1670
-   br i1 %39, label %60, label %40, !dbg !1671
- 
- ; <label>:40:                                     ; preds = %35
-@@ -8956,7 +8956,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %42 = bitcast %class.UniformWriter* %13 to i8*, !dbg !1673
-   %43 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1673
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %42, i8* align 32 %43, i64 64, i1 false), !dbg !1673, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %14), !dbg !1674
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval(%class.UniformWriter) align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %14), !dbg !1674
-   br i1 %44, label %60, label %45, !dbg !1675
- 
- ; <label>:45:                                     ; preds = %40
-@@ -8964,7 +8964,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %47 = bitcast %class.UniformWriter* %15 to i8*, !dbg !1677
-   %48 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1677
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %47, i8* align 32 %48, i64 64, i1 false), !dbg !1677, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %16), !dbg !1678
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval(%class.UniformWriter) align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %16), !dbg !1678
-   br i1 %49, label %60, label %50, !dbg !1679
- 
- ; <label>:50:                                     ; preds = %45
-@@ -8972,7 +8972,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %52 = bitcast %class.UniformWriter* %17 to i8*, !dbg !1681
-   %53 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1681
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %52, i8* align 32 %53, i64 64, i1 false), !dbg !1681, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %18), !dbg !1682
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval(%class.UniformWriter) align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %18), !dbg !1682
-   br i1 %54, label %60, label %55, !dbg !1683
- 
- ; <label>:55:                                     ; preds = %50
-@@ -8980,7 +8980,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %57 = bitcast %class.UniformWriter* %19 to i8*, !dbg !1685
-   %58 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1685
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %57, i8* align 32 %58, i64 64, i1 false), !dbg !1685, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %20), !dbg !1686
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval(%class.UniformWriter) align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %20), !dbg !1686
-   br label %60, !dbg !1683
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -8989,7 +8989,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1688 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1688 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9015,7 +9015,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1697 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1697 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9041,7 +9041,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1706 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1706 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9067,7 +9067,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1715 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1715 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9093,7 +9093,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1724 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1724 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9119,7 +9119,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1733 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1733 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9145,7 +9145,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1742 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1742 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9171,7 +9171,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1751 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1751 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10013,7 +10013,7 @@ define internal i32 @_ZN7details18_cm_print_type_oclIPvEENS_18SHADER_PRINTF_TYPE
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2061 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2061 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.VaryingWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -10036,7 +10036,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %22 = bitcast %class.VaryingWriter* %5 to i8*, !dbg !2063
-   %23 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2063
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %22, i8* align 32 %23, i64 64, i1 false), !dbg !2063, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %6), !dbg !2064
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %6), !dbg !2064
-   br i1 %24, label %60, label %25, !dbg !2065
- 
- ; <label>:25:                                     ; preds = %3
-@@ -10044,7 +10044,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %27 = bitcast %class.VaryingWriter* %7 to i8*, !dbg !2067
-   %28 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2067
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %27, i8* align 32 %28, i64 64, i1 false), !dbg !2067, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %8), !dbg !2068
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %8), !dbg !2068
-   br i1 %29, label %60, label %30, !dbg !2069
- 
- ; <label>:30:                                     ; preds = %25
-@@ -10052,7 +10052,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %32 = bitcast %class.VaryingWriter* %9 to i8*, !dbg !2071
-   %33 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2071
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %32, i8* align 32 %33, i64 64, i1 false), !dbg !2071, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %10), !dbg !2072
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %10), !dbg !2072
-   br i1 %34, label %60, label %35, !dbg !2073
- 
- ; <label>:35:                                     ; preds = %30
-@@ -10060,7 +10060,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %37 = bitcast %class.VaryingWriter* %11 to i8*, !dbg !2075
-   %38 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2075
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %37, i8* align 32 %38, i64 64, i1 false), !dbg !2075, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %12), !dbg !2076
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %12), !dbg !2076
-   br i1 %39, label %60, label %40, !dbg !2077
- 
- ; <label>:40:                                     ; preds = %35
-@@ -10068,7 +10068,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %42 = bitcast %class.VaryingWriter* %13 to i8*, !dbg !2079
-   %43 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2079
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %42, i8* align 32 %43, i64 64, i1 false), !dbg !2079, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %14), !dbg !2080
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %14), !dbg !2080
-   br i1 %44, label %60, label %45, !dbg !2081
- 
- ; <label>:45:                                     ; preds = %40
-@@ -10076,7 +10076,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %47 = bitcast %class.VaryingWriter* %15 to i8*, !dbg !2083
-   %48 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2083
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %47, i8* align 32 %48, i64 64, i1 false), !dbg !2083, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %16), !dbg !2084
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %16), !dbg !2084
-   br i1 %49, label %60, label %50, !dbg !2085
- 
- ; <label>:50:                                     ; preds = %45
-@@ -10084,7 +10084,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %52 = bitcast %class.VaryingWriter* %17 to i8*, !dbg !2087
-   %53 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2087
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %52, i8* align 32 %53, i64 64, i1 false), !dbg !2087, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %18), !dbg !2088
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %18), !dbg !2088
-   br i1 %54, label %60, label %55, !dbg !2089
- 
- ; <label>:55:                                     ; preds = %50
-@@ -10092,7 +10092,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %57 = bitcast %class.VaryingWriter* %19 to i8*, !dbg !2091
-   %58 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2091
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %57, i8* align 32 %58, i64 64, i1 false), !dbg !2091, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %20), !dbg !2092
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %20), !dbg !2092
-   br label %60, !dbg !2089
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -10101,7 +10101,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2094 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2094 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10127,7 +10127,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2103 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2103 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10153,7 +10153,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2112 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2112 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10179,7 +10179,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2121 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2121 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10205,7 +10205,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2130 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2130 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10231,7 +10231,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2139 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2139 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10257,7 +10257,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2148 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2148 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10283,7 +10283,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2157 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2157 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
diff --git a/srcpkgs/ispc/template b/srcpkgs/ispc/template
index 9c3acb42a9cf..3a85ff2605af 100644
--- a/srcpkgs/ispc/template
+++ b/srcpkgs/ispc/template
@@ -1,7 +1,7 @@
 # Template file for 'ispc'
 pkgname=ispc
-version=1.15.0
-revision=2
+version=1.17.0
+revision=1
 archs="x86_64*"
 build_style=cmake
 configure_args="-DISPC_NO_DUMPS=ON -DARM_ENABLED=OFF"
@@ -12,7 +12,7 @@ maintainer="Andrea Brancaleoni <abc@pompel.me>"
 license="BSD-3-Clause"
 homepage="https://ispc.github.io"
 distfiles="https://github.com/ispc/ispc/archive/v${version}.tar.gz"
-checksum=2658ff00dc045ac9fcefbf6bd26dffaf723b059a942a27df91bbb61bc503a285
+checksum=37fb1055d6c6b232e112d8d50145d726824ed4d8da93a7396315dceba6c76e62
 nocross=yes
 nopie=yes
 

From 10a88bd0ffd79badb198e4ab66db1f7edef2db44 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Tue, 3 May 2022 01:20:03 +0200
Subject: [PATCH 27/29] llvm14: switch to runtimes build.

https://reviews.llvm.org/rGac7031b2b2fa
https://reviews.llvm.org/D110338#3022952
---
 srcpkgs/llvm14/template | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
index 3e7e6ab2c00b..e731aa76130a 100644
--- a/srcpkgs/llvm14/template
+++ b/srcpkgs/llvm14/template
@@ -51,7 +51,8 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
-_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
+_enabled_projects="clang;clang-tools-extra;lld"
+_enabled_runtimes="compiler-rt;libcxx;libcxxabi;libunwind"
 
 _lldb_enable=yes
 _libomp_enable=no
@@ -67,9 +68,8 @@ esac
 
 subpackages="clang-tools-extra"
 
-# must go before clang
 if [ "$_libomp_enable" = "yes" ]; then
-	_enabled_projects+=";openmp"
+	_enabled_runtimes+=";openmp"
 	subpackages+=" libomp libomp-devel"
 	# because of cmake nonsense referencing libomptarget.so.*
 	depends+=" libomp>=${version}_${revision}"
@@ -88,6 +88,7 @@ fi
 subpackages+=" lld lld-devel"
 
 configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+configure_args+=" -DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}"
 
 post_patch() {
 	if [ "$_lldb_enable" = "yes" ]; then
@@ -156,7 +157,8 @@ pre_configure() {
 		CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
 			CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
-			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
+			-DLLVM_ENABLE_PROJECTS=${_enabled_projects} \
+			-DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}
 		make ${makejobs} -C utils/TableGen
 		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen

From 146e8973a3a031fe88de96c429d08996d24b41c7 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 14:07:14 +0200
Subject: [PATCH 28/29] zig: fix build.

---
 srcpkgs/zig/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/zig/template b/srcpkgs/zig/template
index 728c5a64e9df..c175de62c5f7 100644
--- a/srcpkgs/zig/template
+++ b/srcpkgs/zig/template
@@ -5,7 +5,7 @@ revision=2
 archs="x86_64* aarch64*"
 build_style=cmake
 make_cmd=make
-makedepends="clang llvm12 lld-devel"
+makedepends="clang12 llvm12 lld12-devel"
 short_desc="Programming language designed for robustness, optimality, and clarity"
 maintainer="Isaac Freund <mail@isaacfreund.com>"
 license="MIT"

From b231c5d54ac2642ffa2b81d0265562025905aa69 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 03:39:58 +0200
Subject: [PATCH 29/29] llvm14: fix build.

---
 .../llvm14/files/llvm-Config-llvm-config.h    |  9 +++
 srcpkgs/llvm14/template                       | 68 +++++++++++++------
 2 files changed, 55 insertions(+), 22 deletions(-)
 create mode 100644 srcpkgs/llvm14/files/llvm-Config-llvm-config.h

diff --git a/srcpkgs/llvm14/files/llvm-Config-llvm-config.h b/srcpkgs/llvm14/files/llvm-Config-llvm-config.h
new file mode 100644
index 000000000000..2fa08c9be696
--- /dev/null
+++ b/srcpkgs/llvm14/files/llvm-Config-llvm-config.h
@@ -0,0 +1,9 @@
+#include <bits/wordsize.h>
+
+#if __WORDSIZE == 32
+#include "llvm-config-32.h"
+#elif __WORDSIZE == 64
+#include "llvm-config-64.h"
+#else
+#error "Unknown word size"
+#endif
diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
index e731aa76130a..72aca5638a8e 100644
--- a/srcpkgs/llvm14/template
+++ b/srcpkgs/llvm14/template
@@ -15,6 +15,7 @@ configure_args="
  -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
  -DLIBOMP_ENABLE_SHARED=YES
  -DLIBOMP_INSTALL_ALIASES=NO
+ -DCOMPILER_RT_DEFAULT_TARGET_ONLY=YES
  -DLLVM_INCLUDE_DOCS=YES
  -DLLVM_BUILD_DOCS=YES
  -DLLVM_ENABLE_SPHINX=YES
@@ -38,6 +39,7 @@ distfiles="https://github.com/llvm/llvm-project/releases/download/llvmorg-${vers
 checksum=44d3e7a784d5cf805e72853bb03f218bd1058d448c03ca883dabbebc99204e0c
 lib32disabled=yes
 python_version=3
+nopie_files="/usr/bin/llvm-omp-device-info"
 
 if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
 	configure_args+=" -DLIBCXX_HAS_MUSL_LIBC=YES"
@@ -90,6 +92,33 @@ subpackages+=" lld lld-devel"
 configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
 configure_args+=" -DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}"
 
+case "$XBPS_TARGET_MACHINE" in
+	i686) _trp="i686-pc-linux-gnu";;
+	i686-musl) _trp="i686-linux-musl";;
+	x86_64) _trp="x86_64-unknown-linux-gnu";;
+	x86_64-musl) _trp="x86_64-linux-musl";;
+	armv5tel) _trp="arm-linux-gnueabi";;
+	armv5tel-musl) _trp="arm-linux-musleabi";;
+	armv6l) _trp="arm-linux-gnueabihf";;
+	armv7l) _trp="armv7l-linux-gnueabihf";;
+	armv6l-musl) _trp="arm-linux-musleabihf";;
+	armv7l-musl) _trp="armv7l-linux-musleabihf";;
+	aarch64) _trp="aarch64-linux-gnu";;
+	aarch64-musl) _trp="aarch64-linux-musl";;
+	ppc) _trp="powerpc-linux-gnu";;
+	ppc-musl) _trp="powerpc-linux-musl";;
+	ppcle) _trp="powerpcle-linux-gnu";;
+	ppcle-musl) _trp="powerpcle-linux-musl";;
+	ppc64le) _trp="powerpc64le-linux-gnu";;
+	ppc64le-musl) _trp="powerpc64le-linux-musl";;
+	ppc64) _trp="powerpc64-linux-gnu";;
+	ppc64-musl) _trp="powerpc64-linux-musl";;
+	mips-musl) _trp="mips-linux-musl";;
+	mipshf-musl) _trp="mips-linux-muslhf";;
+	mipsel-musl) _trp="mipsel-linux-musl";;
+	mipselhf-musl) _trp="mipsel-linux-muslhf";;
+esac
+
 post_patch() {
 	if [ "$_lldb_enable" = "yes" ]; then
 		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
@@ -136,8 +165,7 @@ post_patch() {
 }
 
 pre_configure() {
-	local triplet
-
+	local triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
 	# Vastly reduce size of debugging symbols:
 	CFLAGS=${CFLAGS/ -g/ -g1}
 	CXXFLAGS=${CXXFLAGS/ -g/ -g1}
@@ -168,6 +196,9 @@ pre_configure() {
 		cd ../..
 	fi
 
+	mkdir -p gnu
+	touch gnu/stubs-32.h
+
 	case "$XBPS_TARGET_MACHINE" in
 		i686*) _arch="X86";;
 		x86_64*) _arch="X86";;
@@ -180,8 +211,6 @@ pre_configure() {
 		riscv64*) _arch="RISCV64";;
 	esac
 
-	triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
-
 	configure_args+=" -DLLVM_TARGET_ARCH=${_arch}"
 	configure_args+=" -DLLVM_HOST_TRIPLE=${triplet}"
 	configure_args+=" -DLLVM_DEFAULT_TARGET_TRIPLE=${triplet}"
@@ -251,7 +280,7 @@ clang-tools-extra_package() {
 		vmove "usr/lib/libclangQuery*"
 		vmove "usr/lib/libclangTidy*"
 		vmove "usr/share/clang/*tidy*"
-		vmove usr/share/doc/clang-tools
+		vmove usr/share/doc/LLVM/clang-tools
 		vmove usr/share/man/man1/extraclangtools.1
 		vmove usr/share/man/man1/diagtool.1
 	}
@@ -273,7 +302,7 @@ clang_package() {
 		vmove "usr/lib/libclang*.a"
 		vmove "usr/lib/libclang*.so"
 		vmove usr/share/clang
-		vmove usr/share/doc/clang
+		vmove usr/share/doc/LLVM/clang
 		vmove usr/share/man/man1/clang.1
 	}
 }
@@ -301,7 +330,7 @@ lld_package() {
 		vmove usr/bin/wasm-ld
 		vmove usr/bin/ld.lld*
 		vmove usr/bin/ld64.lld*
-		vmove usr/share/doc/lld
+		vmove usr/share/doc/LLVM/lld
 	}
 }
 
@@ -342,7 +371,7 @@ lldb-devel_package() {
 llvm-libunwind_package() {
 	short_desc+=" - libunwind"
 	pkg_install() {
-		vmove "usr/lib/libunwind.so.*"
+		vmove "usr/lib/${_trp}/libunwind.so.*"
 	}
 }
 
@@ -351,18 +380,17 @@ llvm-libunwind-devel_package() {
 	depends="llvm-libunwind>=${version}_${revision}"
 	conflicts="libunwind-devel>=0"
 	pkg_install() {
-		vmove usr/lib/libunwind.so
-		vmove usr/lib/libunwind.a
+		vmove usr/lib/${_trp}/libunwind.so
+		vmove usr/lib/${_trp}/libunwind.a
 		vmove "usr/include/*unwind*"
 		vmove usr/include/mach-o
-		vmove usr/share/doc/libunwind
 	}
 }
 
 libcxxabi_package() {
 	short_desc+=" - low level support for libc++"
 	pkg_install() {
-		vmove "usr/lib/libc++abi.so.*"
+		vmove "usr/lib/${_trp}/libc++abi.so.*"
 	}
 }
 
@@ -370,8 +398,8 @@ libcxxabi-devel_package() {
 	short_desc+=" - low level support for libc++ - development files"
 	depends="libcxxabi>=${version}_${revision}"
 	pkg_install() {
-		vmove usr/lib/libc++abi.so
-		vmove usr/lib/libc++abi.a
+		vmove usr/lib/${_trp}/libc++abi.so
+		vmove usr/lib/${_trp}/libc++abi.a
 		vmove "usr/include/*cxxabi*"
 	}
 }
@@ -379,7 +407,7 @@ libcxxabi-devel_package() {
 libcxx_package() {
 	short_desc+=" - C++ standard library"
 	pkg_install() {
-		vmove "usr/lib/libc++.so.*"
+		vmove "usr/lib/${_trp}/libc++.so.*"
 	}
 }
 
@@ -387,11 +415,10 @@ libcxx-devel_package() {
 	short_desc+=" - C++ standard library - development files"
 	depends="libcxx>=${version}_${revision}"
 	pkg_install() {
-		vmove usr/lib/libc++.so
-		vmove usr/lib/libc++.a
-		vmove usr/lib/libc++experimental.a
+		vmove usr/lib/${_trp}/libc++.so
+		vmove usr/lib/${_trp}/libc++.a
+		vmove usr/lib/${_trp}/libc++experimental.a
 		vmove usr/include/c++
-		vmove usr/share/doc/libcxx
 	}
 }
 
@@ -401,7 +428,6 @@ libomp_package() {
 		vmove usr/lib/libomp.so
 		vmove "usr/lib/libomptarget.rtl.*.so"
 		vmove usr/lib/libarcher.so
-		vmove "usr/lib/libomp*.so.*"
 	}
 }
 
@@ -413,8 +439,6 @@ libomp-devel_package() {
 		vmove "usr/lib/libarcher*"
 		vmove "usr/include/omp*.h"
 		vmove "usr/lib/clang/${version}/include/omp*.h"
-		vmove usr/share/man/man1/llvmopenmp.1
-		vmove usr/share/doc/openmp
 	}
 }
 

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: [PR REVIEW] Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (7 preceding siblings ...)
  2022-05-05  1:25 ` prez
@ 2022-05-05 12:31 ` ftrvxmtrx
  2022-05-05 13:18 ` [PR PATCH] [Updated] Llvm14 prez
                   ` (60 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: ftrvxmtrx @ 2022-05-05 12:31 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 284 bytes --]

New review comment by ftrvxmtrx on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#discussion_r865852378

Comment:
With `-DCOMPILER_RT_DEFAULT_TARGET_ONLY=YES` I believe you don't need this. In any case having to touch empty files seems wrong anyway.

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: [PR PATCH] [Updated] Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (8 preceding siblings ...)
  2022-05-05 12:31 ` [PR REVIEW] Llvm14 ftrvxmtrx
@ 2022-05-05 13:18 ` prez
  2022-05-05 13:23 ` Llvm14 prez
                   ` (59 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-05-05 13:18 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 667 bytes --]

There is an updated pull request by prez against master on the void-packages repository

https://github.com/prez/void-packages llvm
https://github.com/void-linux/void-packages/pull/36962

Llvm14
Supersedes https://github.com/void-linux/void-packages/pull/36229, https://github.com/void-linux/void-packages/pull/34800 - thank you @motorto and @DBLouis.

Updated patches, ping @q66 .

@ifreund todo: zig. Since it depends on `lld-devel`, I guess we need to split out `lld12`? Would appreciate your help with this, I don't want to wait for the next zig version.

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/36962.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-llvm-36962.patch --]
[-- Type: text/x-diff, Size: 542108 bytes --]

From af3214d006e7bc77ca1201c220be4ce4b8bebd34 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:15:06 +0200
Subject: [PATCH 01/29] New package: llvm14-14.0.3

---
 common/shlibs                                 |  16 +-
 srcpkgs/clang                                 |   2 +-
 srcpkgs/clang-analyzer                        |   2 +-
 srcpkgs/clang-tools-extra                     |   2 +-
 srcpkgs/libclang                              |   2 +-
 srcpkgs/libclang-cpp                          |   2 +-
 srcpkgs/libcxx                                |   2 +-
 srcpkgs/libcxx-devel                          |   2 +-
 srcpkgs/libcxxabi                             |   2 +-
 srcpkgs/libcxxabi-devel                       |   2 +-
 srcpkgs/libllvm14                             |   1 +
 srcpkgs/libomp                                |   2 +-
 srcpkgs/libomp-devel                          |   2 +-
 srcpkgs/lld                                   |   2 +-
 srcpkgs/lld-devel                             |   2 +-
 srcpkgs/lldb                                  |   2 +-
 srcpkgs/lldb-devel                            |   2 +-
 srcpkgs/llvm-libunwind                        |   2 +-
 srcpkgs/llvm-libunwind-devel                  |   2 +-
 .../patches/clang-002-add-musl-triples.patch  | 110 +++++
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 +
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ++
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 ++
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 +++
 srcpkgs/llvm14/patches/libcxx-musl.patch      |  26 ++
 srcpkgs/llvm14/patches/libcxx-ppc.patch       |  22 +
 .../llvm14/patches/libcxx-ssp-nonshared.patch |  11 +
 srcpkgs/llvm14/patches/libcxxabi-dl.patch     |  25 ++
 srcpkgs/llvm14/patches/lldb-musl.patch        |  31 ++
 srcpkgs/llvm14/patches/llvm-001-musl.patch    |  57 +++
 .../patches/llvm-002-musl-ppc64-elfv2.patch   |  30 ++
 .../patches/llvm-003-ppc-secureplt.patch      |  11 +
 .../patches/llvm-004-override-opt.patch       |  18 +
 .../llvm14/patches/llvm-005-ppc-bigpic.patch  |  36 ++
 .../patches/llvm-006-aarch64-mf_exec.patch    |  25 ++
 srcpkgs/llvm14/template                       | 424 ++++++++++++++++++
 srcpkgs/llvm14/update                         |   3 +
 37 files changed, 1018 insertions(+), 20 deletions(-)
 create mode 120000 srcpkgs/libllvm14
 create mode 100644 srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
 create mode 100644 srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
 create mode 100644 srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
 create mode 100644 srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-ppc.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxxabi-dl.patch
 create mode 100644 srcpkgs/llvm14/patches/lldb-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-001-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-004-override-opt.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
 create mode 100644 srcpkgs/llvm14/template
 create mode 100644 srcpkgs/llvm14/update

diff --git a/common/shlibs b/common/shlibs
index 4114151662fb..81acc39defb4 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -975,11 +975,12 @@ libuchardet.so.0 uchardet-0.0.6_1
 libgtksourceviewmm-3.0.so.0 gtksourceviewmm-3.2.0_1
 libyajl.so.2 yajl-2.0.1_1
 libconfuse.so.2 confuse-3.2.1_1
-liblldb.so.12 lldb-12.0.0_1
-libclang.so.12 libclang-12.0.0_1
-libclang-cpp.so.12 libclang-cpp-12.0.0_1
+liblldb.so.14 lldb-14.0.3_1
+libclang.so.14 libclang-14.0.3_1
+libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
+libLLVM-14.so libllvm14-14.0.3_1
 libisofs.so.6 libisofs-0.6.24_1
 libmpack.so.0 libmpack-1.0.5_1
 libGeoIP.so.1 libgeoip-1.4.8_1
@@ -4152,3 +4153,12 @@ librz_bin.so.0.3.4 rizin-0.3.4_1
 libaravis-0.8.so.0 libaravis-0.8.21_1
 libLimeSuite.so.20.10-1 LimeSuite-20.10.0_1
 libnvme.so.1 libnvme-1.0_1
+libomp.so libomp-14.0.3_1
+libomptarget.rtl.amdgpu.so libomp-14.0.3_1
+libomptarget.rtl.cuda.so libomp-14.0.3_1
+libomptarget.rtl.x86_64.so libomp-14.0.3_1
+libarcher.so libomp-14.0.3_1
+libomptarget.so libomp-14.0.3_1
+liblldbIntelFeatures.so.14 lldb-14.0.3_1
+libLTO.so.14 llvm14-14.0.3_1
+libRemarks.so.14 llvm14-14.0.3_1
diff --git a/srcpkgs/clang b/srcpkgs/clang
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang
+++ b/srcpkgs/clang
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/clang-analyzer b/srcpkgs/clang-analyzer
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang-analyzer
+++ b/srcpkgs/clang-analyzer
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/clang-tools-extra b/srcpkgs/clang-tools-extra
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang-tools-extra
+++ b/srcpkgs/clang-tools-extra
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libclang b/srcpkgs/libclang
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libclang
+++ b/srcpkgs/libclang
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libclang-cpp b/srcpkgs/libclang-cpp
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libclang-cpp
+++ b/srcpkgs/libclang-cpp
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxx b/srcpkgs/libcxx
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxx
+++ b/srcpkgs/libcxx
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxx-devel b/srcpkgs/libcxx-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxx-devel
+++ b/srcpkgs/libcxx-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxxabi b/srcpkgs/libcxxabi
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxxabi
+++ b/srcpkgs/libcxxabi
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxxabi-devel b/srcpkgs/libcxxabi-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxxabi-devel
+++ b/srcpkgs/libcxxabi-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libllvm14 b/srcpkgs/libllvm14
new file mode 120000
index 000000000000..1d42ed7632a6
--- /dev/null
+++ b/srcpkgs/libllvm14
@@ -0,0 +1 @@
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libomp b/srcpkgs/libomp
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libomp
+++ b/srcpkgs/libomp
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libomp-devel b/srcpkgs/libomp-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libomp-devel
+++ b/srcpkgs/libomp-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lld b/srcpkgs/lld
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lld
+++ b/srcpkgs/lld
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lld-devel b/srcpkgs/lld-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lld-devel
+++ b/srcpkgs/lld-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lldb b/srcpkgs/lldb
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lldb
+++ b/srcpkgs/lldb
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lldb-devel b/srcpkgs/lldb-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lldb-devel
+++ b/srcpkgs/lldb-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm-libunwind b/srcpkgs/llvm-libunwind
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/llvm-libunwind
+++ b/srcpkgs/llvm-libunwind
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm-libunwind-devel b/srcpkgs/llvm-libunwind-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/llvm-libunwind-devel
+++ b/srcpkgs/llvm-libunwind-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
new file mode 100644
index 000000000000..7b640e102bed
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
@@ -0,0 +1,110 @@
+--- a/clang/lib/Driver/ToolChains/Gnu.cpp
++++ b/clang/lib/Driver/ToolChains/Gnu.cpp
+@@ -2083,7 +2083,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
+                                              "armv7hl-redhat-linux-gnueabi",
+                                              "armv6hl-suse-linux-gnueabi",
+-                                             "armv7hl-suse-linux-gnueabi"};
++                                             "armv7hl-suse-linux-gnueabi",
++                                             "armv7l-linux-gnueabihf"};
+   static const char *const ARMebLibDirs[] = {"/lib"};
+   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi"};
+   static const char *const ARMebHFTriples[] = {
+@@ -2151,8 +2152,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
+   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
+   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
+-                                             "powerpcle-unknown-linux-gnu",
+-                                             "powerpcle-linux-musl"};
++                                             "powerpcle-unknown-linux-gnu"};
+
+   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
+   static const char *const PPC64Triples[] = {
+@@ -2231,6 +2231,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+     return;
+   }
+
++  if (TargetTriple.isMusl()) {
++    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
++    static const char *const ARMHFMuslTriples[] = {
++        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
++    };
++    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
++    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
++    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
++    static const char *const MIPSMuslTriples[] = {
++        "mips-linux-musl", "mipsel-linux-musl",
++        "mipsel-linux-muslhf", "mips-linux-muslhf"
++    };
++    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
++    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
++    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
++    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
++
++    switch (TargetTriple.getArch()) {
++    case llvm::Triple::aarch64:
++      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      break;
++    case llvm::Triple::arm:
++      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
++      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
++        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
++      } else {
++        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
++      }
++      break;
++    case llvm::Triple::x86_64:
++      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      break;
++    case llvm::Triple::x86:
++      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      break;
++    case llvm::Triple::mips:
++      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
++      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
++      break;
++    case llvm::Triple::ppc:
++      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      break;
++    case llvm::Triple::ppcle:
++      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      break;
++    case llvm::Triple::ppc64:
++      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      break;
++    case llvm::Triple::ppc64le:
++      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      break;
++    default:
++      break;
++    }
++    TripleAliases.push_back(TargetTriple.str());
++    if (TargetTriple.str() != BiarchTriple.str())
++      BiarchTripleAliases.push_back(BiarchTriple.str());
++    return;
++  }
++
+   // Android targets should not use GNU/Linux tools or libraries.
+   if (TargetTriple.isAndroid()) {
+     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
new file mode 100644
index 000000000000..47128af79b7f
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
@@ -0,0 +1,13 @@
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -490,10 +490,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+     Loader = "ld.so.1";
+     break;
+   case llvm::Triple::ppc64:
+-    LibDir = "lib64";
+-    Loader =
+-        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
+-    break;
+   case llvm::Triple::ppc64le:
+     LibDir = "lib64";
+     Loader =
diff --git a/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
new file mode 100644
index 000000000000..21fc8003c5f1
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
@@ -0,0 +1,48 @@
+--- a/clang/lib/Basic/Targets/PPC.h
++++ b/clang/lib/Basic/Targets/PPC.h
+@@ -415,11 +415,10 @@ public:
+       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
+     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
+       DataLayout = "e-m:e-i64:64-n32:64";
+-      ABI = "elfv2";
+     } else {
+       DataLayout = "E-m:e-i64:64-n32:64";
+-      ABI = "elfv1";
+     }
++    ABI = "elfv2";
+ 
+     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
+       LongDoubleWidth = LongDoubleAlign = 64;
+--- a/clang/lib/CodeGen/TargetInfo.cpp
++++ b/clang/lib/CodeGen/TargetInfo.cpp
+@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
+       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
+ 
+     if (Triple.isOSBinFormatELF()) {
+-      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
+-      if (getTarget().getABI() == "elfv2")
+-        Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      if (getTarget().getABI() == "elfv1")
++        Kind = PPC64_SVR4_ABIInfo::ELFv1;
+       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
+ 
+       return SetCGInfo(
+--- a/clang/lib/Driver/ToolChains/Clang.cpp
++++ b/clang/lib/Driver/ToolChains/Clang.cpp
+@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
+   const llvm::Triple &T = getToolChain().getTriple();
+   if (T.isOSBinFormatELF()) {
+     switch (getToolChain().getArch()) {
+-    case llvm::Triple::ppc64: {
+-      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
+-          T.isOSOpenBSD() || T.isMusl())
+-        ABIName = "elfv2";
+-      else
+-        ABIName = "elfv1";
+-      break;
+-    }
++    case llvm::Triple::ppc64:
+     case llvm::Triple::ppc64le:
+       ABIName = "elfv2";
+       break;
diff --git a/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch b/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
new file mode 100644
index 000000000000..4135bfd4486a
--- /dev/null
+++ b/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
@@ -0,0 +1,35 @@
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
+@@ -74,6 +74,10 @@
+ #include <sys/utsname.h>
+ #endif
+
++#if SANITIZER_LINUX && defined(__powerpc__)
++#include <asm/ptrace.h>
++#endif
++
+ #if SANITIZER_LINUX && !SANITIZER_ANDROID
+ #include <sys/personality.h>
+ #endif
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
+@@ -92,7 +92,7 @@
+ # include <utime.h>
+ # include <sys/ptrace.h>
+ #    if defined(__mips64) || defined(__aarch64__) || defined(__arm__) || \
+-        defined(__hexagon__) || SANITIZER_RISCV64
++        defined(__hexagon__) || defined(__powerpc__) || SANITIZER_RISCV64
+ #      include <asm/ptrace.h>
+ #      ifdef __arm__
+ typedef struct user_fpregs elf_fpregset_t;
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
+@@ -31,7 +31,7 @@
+ #include <sys/types.h> // for pid_t
+ #include <sys/uio.h> // for iovec
+ #include <elf.h> // for NT_PRSTATUS
+-#if (defined(__aarch64__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
++#if (defined(__aarch64__) || defined(__powerpc__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
+ // GLIBC 2.20+ sys/user does not include asm/ptrace.h
+ # include <asm/ptrace.h>
+ #endif
diff --git a/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch b/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
new file mode 100644
index 000000000000..d0b61c80c897
--- /dev/null
+++ b/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
@@ -0,0 +1,62 @@
+--- a/compiler-rt/lib/xray/xray_powerpc64.inc
++++ b/compiler-rt/lib/xray/xray_powerpc64.inc
+@@ -12,7 +12,13 @@
+ 
+ #include <cstdint>
+ #include <mutex>
++#ifdef __GLIBC__
+ #include <sys/platform/ppc.h>
++#else
++#include <cctype>
++#include <cstring>
++#include <cstdlib>
++#endif
+ 
+ #include "xray_defs.h"
+ 
+@@ -20,13 +26,45 @@ namespace __xray {
+ 
+ ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
+   CPU = 0;
++#ifdef __GLIBC__
+   return __ppc_get_timebase();
++#else
++  return __builtin_ppc_get_timebase();
++#endif
+ }
+ 
+ inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
+   static std::mutex M;
+   std::lock_guard<std::mutex> Guard(M);
++#ifdef __GLIBC__
+   return __ppc_get_timebase_freq();
++#else
++  /* FIXME: a less dirty implementation? */
++  static uint64_t base;
++  if (!base) {
++    FILE *f = fopen("/proc/cpuinfo", "rb");
++    if (f) {
++      ssize_t nr;
++      /* virtually always big enough to hold the line */
++      char buf[512];
++      while (fgets(buf, sizeof(buf), f)) {
++        char *ret = strstr(buf, "timebase");
++        if (!ret) {
++          continue;
++        }
++        ret += sizeof("timebase") - 1;
++        ret = strchr(ret, ':');
++        if (!ret) {
++          continue;
++        }
++        base = strtoul(ret + 1, nullptr, 10);
++        break;
++      }
++      fclose(f);
++    }
++  }
++  return base;
++#endif
+ }
+ 
+ inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
diff --git a/srcpkgs/llvm14/patches/libcxx-musl.patch b/srcpkgs/llvm14/patches/libcxx-musl.patch
new file mode 100644
index 000000000000..bbd31ffc2cb1
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-musl.patch
@@ -0,0 +1,26 @@
+--- a/libcxx/include/locale
++++ b/libcxx/include/locale
+@@ -742,7 +742,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
+         typename remove_reference<decltype(errno)>::type __save_errno = errno;
+         errno = 0;
+         char *__p2;
++#if defined(__linux__) && !defined(__GLIBC__)
++        long long __ll = strtoll(__a, &__p2, __base);
++#else
+         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
++#endif
+         typename remove_reference<decltype(errno)>::type __current_errno = errno;
+         if (__current_errno == 0)
+             errno = __save_errno;
+@@ -782,7 +786,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
+         typename remove_reference<decltype(errno)>::type __save_errno = errno;
+         errno = 0;
+         char *__p2;
++#if defined(__linux__) && !defined(__GLIBC__)
++        unsigned long long __ll = strtoull(__a, &__p2, __base);
++#else
+         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
++#endif
+         typename remove_reference<decltype(errno)>::type __current_errno = errno;
+         if (__current_errno == 0)
+             errno = __save_errno;
diff --git a/srcpkgs/llvm14/patches/libcxx-ppc.patch b/srcpkgs/llvm14/patches/libcxx-ppc.patch
new file mode 100644
index 000000000000..7a92f8004e1c
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-ppc.patch
@@ -0,0 +1,22 @@
+This ensures `is_iec559` is defined correctly under all long double ABIs,
+including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__`
+is not defined on gcc.
+
+--- a/libcxx/include/limits
++++ b/libcxx/include/limits
+@@ -426,8 +426,14 @@ protected:
+     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
+     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
+ 
+-#if (defined(__ppc__) || defined(__ppc64__))
++#if defined(__powerpc__) || defined(__powerpc64__)
++#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__)
++    /* IEEE 754 quadruple or double precision */
++    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
++#else
++    /* 128-bit IBM double-double */
+     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
++#endif
+ #else
+     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
+ #endif
diff --git a/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch b/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
new file mode 100644
index 000000000000..70292beb2fcd
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
@@ -0,0 +1,11 @@
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -769,6 +769,8 @@ function(cxx_link_system_libraries target)
+     target_link_libraries(${target} PRIVATE atomic)
+   endif()
+ 
++#ssp  target_link_libraries(${target} PRIVATE ssp_nonshared)
++
+   if (MINGW)
+     target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
+   endif()
diff --git a/srcpkgs/llvm14/patches/libcxxabi-dl.patch b/srcpkgs/llvm14/patches/libcxxabi-dl.patch
new file mode 100644
index 000000000000..3a15f9db8c98
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxxabi-dl.patch
@@ -0,0 +1,25 @@
+Also link to -ldl to prevent undefined references.
+
+--- a/libcxxabi/src/CMakeLists.txt
++++ b/libcxxabi/src/CMakeLists.txt
+@@ -73,6 +73,7 @@
+   endif()
+ 
+   add_library_flags_if(LIBCXXABI_HAS_C_LIB c)
++  add_library_flags_if(LIBCXXABI_HAS_C_LIB dl)
+ endif()
+ 
+ if (LIBCXXABI_USE_LLVM_UNWINDER)
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -745,6 +745,10 @@
+     target_link_libraries(${target} PRIVATE m)
+   endif()
+ 
++  if (LIBCXX_HAS_C_LIB)
++    target_link_libraries(${target} PRIVATE dl)
++  endif()
++
+   if (LIBCXX_HAS_RT_LIB)
+     target_link_libraries(${target} PRIVATE rt)
+   endif()
diff --git a/srcpkgs/llvm14/patches/lldb-musl.patch b/srcpkgs/llvm14/patches/lldb-musl.patch
new file mode 100644
index 000000000000..601c0d138523
--- /dev/null
+++ b/srcpkgs/llvm14/patches/lldb-musl.patch
@@ -0,0 +1,31 @@
+--- a/lldb/source/Plugins/Process/Linux/Procfs.h
++++ b/lldb/source/Plugins/Process/Linux/Procfs.h
+@@ -10,21 +10,12 @@
+ // sys/procfs.h on Android/Linux for all supported architectures.
+ 
+ #include <sys/ptrace.h>
++#include <asm/ptrace.h>
+ 
+-#ifdef __ANDROID__
+-#if defined(__arm64__) || defined(__aarch64__)
+-typedef unsigned long elf_greg_t;
+-typedef elf_greg_t
+-    elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
+-typedef struct user_fpsimd_state elf_fpregset_t;
+-#ifndef NT_FPREGSET
+-#define NT_FPREGSET NT_PRFPREG
+-#endif // NT_FPREGSET
+-#elif defined(__mips__)
+-#ifndef NT_FPREGSET
+-#define NT_FPREGSET NT_PRFPREG
+-#endif // NT_FPREGSET
+-#endif
+-#else // __ANDROID__
++#if !defined(__GLIBC__) && defined(__powerpc__)
++#define pt_regs musl_pt_regs
++#include <sys/procfs.h>
++#undef pt_regs
++#else
+ #include <sys/procfs.h>
+-#endif // __ANDROID__
++#endif
diff --git a/srcpkgs/llvm14/patches/llvm-001-musl.patch b/srcpkgs/llvm14/patches/llvm-001-musl.patch
new file mode 100644
index 000000000000..f2a3f8d62813
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-001-musl.patch
@@ -0,0 +1,57 @@
+From faca3fbd15d0c3108493c3c54cd93138e049ac43 Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe@gmail.com>
+Date: Tue, 8 Sep 2015 22:03:02 +0200
+Subject: [PATCH 3/3] musl
+
+---
+ include/llvm/Analysis/TargetLibraryInfo.h | 9 +++++++++
+ lib/Support/DynamicLibrary.cpp            | 2 +-
+ lib/Support/Unix/Signals.inc              | 6 +++---
+ utils/unittest/googletest/src/gtest.cc    | 1 +
+ 5 files changed, 17 insertions(+), 6 deletions(-)
+
+diff --git a/include/llvm/Analysis/TargetLibraryInfo.h b/include/llvm/Analysis/TargetLibraryInfo.h
+index 34a8a1e3..1214ece5 100644
+--- a/llvm/include/llvm/Analysis/TargetLibraryInfo.h
++++ b/llvm/include/llvm/Analysis/TargetLibraryInfo.h
+@@ -18,6 +18,15 @@
+ #include "llvm/IR/PassManager.h"
+ #include "llvm/Pass.h"
+ 
++#undef fopen64
++#undef fseeko64
++#undef fstat64
++#undef fstatvfs64
++#undef ftello64
++#undef lstat64
++#undef stat64
++#undef tmpfile64
++
+ namespace llvm {
+ template <typename T> class ArrayRef;
+ class Triple;
+diff --git a/lib/Support/Unix/DynamicLibrary.inc b/lib/Support/Unix/DynamicLibrary.inc
+index a2a37996..2f86c470 100644
+--- a/llvm/lib/Support/Unix/DynamicLibrary.inc
++++ b/llvm/lib/Support/Unix/DynamicLibrary.inc
+@@ -102,7 +102,7 @@ static void *DoSearch(const char* SymbolName) {
+ 
+ // This macro returns the address of a well-known, explicit symbol
+ #define EXPLICIT_SYMBOL(SYM) \
+-   if (!strcmp(SymbolName, #SYM)) return &SYM
++   if (!strcmp(SymbolName, #SYM)) return (void *)&SYM
+ 
+ // Under glibc we have a weird situation. The stderr/out/in symbols are both
+ // macros and global variables because of standards requirements. So, we
+diff --git a/utils/unittest/googletest/src/gtest.cc b/utils/unittest/googletest/src/gtest.cc
+index d882ab2e..f1fb12d0 100644
+--- a/llvm/utils/unittest/googletest/src/gtest.cc
++++ b/llvm/utils/unittest/googletest/src/gtest.cc
+@@ -128,6 +128,7 @@
+ 
+ #if GTEST_CAN_STREAM_RESULTS_
+ # include <arpa/inet.h>  // NOLINT
++# include <sys/socket.h>  // NOLINT
+ # include <netdb.h>  // NOLINT
+ # include <sys/socket.h>  // NOLINT
+ # include <sys/types.h>  // NOLINT
diff --git a/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch b/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
new file mode 100644
index 000000000000..0071d964bd37
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
@@ -0,0 +1,30 @@
+This patches LLVM to use ELFv2 on ppc64 unconditionally unless overridden. We
+need this because unlike most distros we use ELFv2 for both glibc and musl
+on big endian ppc64.
+
+diff --git a/lib/Target/PowerPC/PPCTargetMachine.cpp b/lib/Target/PowerPC/PPCTargetMachine.cpp
+index 0634833e..b7cbc2e7 100644
+--- a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
++++ b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
+@@ -222,9 +222,8 @@ static PPCTargetMachine::PPCABI computeTargetABI(const Triple &TT,
+ 
+   switch (TT.getArch()) {
+   case Triple::ppc64le:
+-    return PPCTargetMachine::PPC_ABI_ELFv2;
+   case Triple::ppc64:
+-    return PPCTargetMachine::PPC_ABI_ELFv1;
++    return PPCTargetMachine::PPC_ABI_ELFv2;
+   default:
+     return PPCTargetMachine::PPC_ABI_UNKNOWN;
+   }
+diff --git a/test/CodeGen/PowerPC/ppc64-elf-abi.ll b/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+index 8b1cf6b5..296a2afa 100644
+--- a/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
++++ b/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+@@ -1,4 +1,5 @@
+-; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv1
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-musl < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv1 < %s | FileCheck %s -check-prefix=CHECK-ELFv1
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv2 < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
diff --git a/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch b/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
new file mode 100644
index 000000000000..b5d15974375d
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
@@ -0,0 +1,11 @@
+--- a/llvm/lib/Target/PowerPC/PPCSubtarget.cpp
++++ b/llvm/lib/Target/PowerPC/PPCSubtarget.cpp
+@@ -165,7 +165,7 @@ void PPCSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) {
+ 
+   if ((TargetTriple.isOSFreeBSD() && TargetTriple.getOSMajorVersion() >= 13) ||
+       TargetTriple.isOSNetBSD() || TargetTriple.isOSOpenBSD() ||
+-      TargetTriple.isMusl())
++      isTargetLinux())
+     SecurePlt = true;
+ 
+   if (HasSPE && IsPPC64)
diff --git a/srcpkgs/llvm14/patches/llvm-004-override-opt.patch b/srcpkgs/llvm14/patches/llvm-004-override-opt.patch
new file mode 100644
index 000000000000..51d0e4b31b32
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-004-override-opt.patch
@@ -0,0 +1,18 @@
+This allows us to override the optimization level as not all platforms can
+deal with -O3.
+
+--- a/llvm/CMakeLists.txt
++++ b/llvm/CMakeLists.txt
+@@ -918,6 +918,12 @@ if( MINGW AND NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" )
+   llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "-O2")
+ endif()
+ 
++set(VOID_CXX_OPT_FLAGS "" CACHE STRING "Optimization level to use")
++
++if (NOT VOID_CXX_OPT_FLAGS STREQUAL "")
++    llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "${VOID_CXX_OPT_FLAGS}")
++endif()
++
+ # Put this before tblgen. Else we have a circular dependence.
+ add_subdirectory(lib/Demangle)
+ add_subdirectory(lib/Support)
diff --git a/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch b/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
new file mode 100644
index 000000000000..d332687b9d92
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
@@ -0,0 +1,36 @@
+From f3dbdd49c06bfafc1d6138094cf42889c14d38b6 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Sun, 3 Nov 2019 10:57:27 -0600
+Subject: [PATCH] [LLVM][PowerPC] Assume BigPIC if no PIC level is specified
+
+---
+ llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp  | 2 +-
+ llvm/lib/Target/PowerPC/PPCMCInstLower.cpp | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/Target/PowerPC/PPCAsmPrinter.cpp b/lib/Target/PowerPC/PPCAsmPrinter.cpp
+index cce21f32..87ca5f9b 100644
+--- a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
++++ b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
+@@ -520,7 +520,7 @@ void PPCAsmPrinter::EmitTlsCall(const MachineInstr *MI,
+ 
+   // Add 32768 offset to the symbol so we follow up the latest GOT/PLT ABI.
+   if (Kind == MCSymbolRefExpr::VK_PLT && Subtarget->isSecurePlt() &&
+-      M->getPICLevel() == PICLevel::BigPIC)
++      M->getPICLevel() != PICLevel::SmallPIC)
+     TlsRef = MCBinaryExpr::createAdd(
+         TlsRef, MCConstantExpr::create(32768, OutContext), OutContext);
+   const MachineOperand &MO = MI->getOperand(2);
+diff --git a/lib/Target/PowerPC/PPCMCInstLower.cpp b/lib/Target/PowerPC/PPCMCInstLower.cpp
+index 5cc180d7..a5b02565 100644
+--- a/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
++++ b/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
+@@ -117,7 +117,7 @@ static MCOperand GetSymbolRef(const MachineOperand &MO, const MCSymbol *Symbol,
+   const MCExpr *Expr = MCSymbolRefExpr::create(Symbol, RefKind, Ctx);
+   // If -msecure-plt -fPIC, add 32768 to symbol.
+   if (Subtarget->isSecurePlt() && TM.isPositionIndependent() &&
+-      M->getPICLevel() == PICLevel::BigPIC &&
++      M->getPICLevel() != PICLevel::SmallPIC &&
+       MO.getTargetFlags() == PPCII::MO_PLT)
+     Expr =
+         MCBinaryExpr::createAdd(Expr, MCConstantExpr::create(32768, Ctx), Ctx);
diff --git a/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch b/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
new file mode 100644
index 000000000000..a00abd216665
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
@@ -0,0 +1,25 @@
+Fix failures in AllocationTests/MappedMemoryTest.* on aarch64:
+
+    Failing Tests (8):
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.AllocAndRelease/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.DuplicateNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.EnabledWrite/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.MultipleAllocAndRelease/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.SuccessiveNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.UnalignedNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.ZeroNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.ZeroSizeNear/3
+
+Upstream-Issue: https://bugs.llvm.org/show_bug.cgi?id=14278#c10
+
+--- a/llvm/lib/Support/Unix/Memory.inc
++++ b/llvm/lib/Support/Unix/Memory.inc
+@@ -58,7 +58,7 @@ static int getPosixProtectionFlags(unsigned Flags) {
+     return PROT_READ | PROT_WRITE | PROT_EXEC;
+   case llvm::sys::Memory::MF_EXEC:
+ #if (defined(__FreeBSD__) || defined(__POWERPC__) || defined (__ppc__) || \
+-     defined(_POWER) || defined(_ARCH_PPC))
++     defined(_POWER) || defined(_ARCH_PPC) || (defined(__linux__) && defined(__aarch64__)))
+     // On PowerPC, having an executable page that has no read permission
+     // can have unintended consequences.  The function InvalidateInstruction-
+     // Cache uses instructions dcbf and icbi, both of which are treated by
diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
new file mode 100644
index 000000000000..3e7e6ab2c00b
--- /dev/null
+++ b/srcpkgs/llvm14/template
@@ -0,0 +1,424 @@
+# Template file for 'llvm14'
+pkgname=llvm14
+version=14.0.3
+revision=1
+wrksrc="llvm-project-${version}.src"
+build_wrksrc=llvm
+build_style=cmake
+configure_args="
+ -DCMAKE_BUILD_TYPE=Release -Wno-dev
+ -DENABLE_LINKER_BUILD_ID=YES
+ -DLLDB_USE_SYSTEM_SIX=YES
+ -DLIBCXX_CXX_ABI=libcxxabi
+ -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
+ -DLIBCXXABI_USE_LLVM_UNWINDER=YES
+ -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
+ -DLIBOMP_ENABLE_SHARED=YES
+ -DLIBOMP_INSTALL_ALIASES=NO
+ -DLLVM_INCLUDE_DOCS=YES
+ -DLLVM_BUILD_DOCS=YES
+ -DLLVM_ENABLE_SPHINX=YES
+ -DSPHINX_WARNINGS_AS_ERRORS=NO
+ -DLLVM_INSTALL_UTILS=YES
+ -DLLVM_BUILD_LLVM_DYLIB=YES
+ -DLLVM_LINK_LLVM_DYLIB=YES
+ -DLLVM_ENABLE_RTTI=YES
+ -DLLVM_ENABLE_FFI=YES
+ -DLLVM_BINUTILS_INCDIR=/usr/include"
+hostmakedepends="perl python3 zlib-devel libffi-devel swig python3-Sphinx
+ python3-recommonmark python3-sphinx-automodapi"
+makedepends="python3-devel zlib-devel elfutils-devel libffi-devel libedit-devel
+ libxml2-devel binutils-devel libatomic-devel"
+depends="libllvm14>=${version}_${revision}"
+short_desc="Low Level Virtual Machine"
+maintainer="q66 <daniel@octaforge.org>"
+license="Apache-2.0"
+homepage="https://www.llvm.org"
+distfiles="https://github.com/llvm/llvm-project/releases/download/llvmorg-${version}/llvm-project-${version}.src.tar.xz"
+checksum=44d3e7a784d5cf805e72853bb03f218bd1058d448c03ca883dabbebc99204e0c
+lib32disabled=yes
+python_version=3
+
+if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+	configure_args+=" -DLIBCXX_HAS_MUSL_LIBC=YES"
+	makedepends+=" libexecinfo-devel"
+	depends+=" libexecinfo-devel"
+fi
+
+# "operand out of range" assembler failures
+case "$XBPS_TARGET_MACHINE" in
+	ppc64*) ;;
+	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
+esac
+
+_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
+
+_lldb_enable=yes
+_libomp_enable=no
+
+case "$XBPS_TARGET_MACHINE" in
+	ppc64le*) ;;
+	ppc*|i686*) _lldb_enable=no ;;
+esac
+
+case "$XBPS_TARGET_MACHINE" in
+	x86_64*|aarch64*|ppc64*) _libomp_enable=yes;;
+esac
+
+subpackages="clang-tools-extra"
+
+# must go before clang
+if [ "$_libomp_enable" = "yes" ]; then
+	_enabled_projects+=";openmp"
+	subpackages+=" libomp libomp-devel"
+	# because of cmake nonsense referencing libomptarget.so.*
+	depends+=" libomp>=${version}_${revision}"
+fi
+
+subpackages+=" clang clang-analyzer libclang libclang-cpp
+ llvm-libunwind llvm-libunwind-devel libcxx libcxx-devel
+ libcxxabi libcxxabi-devel libllvm14"
+
+if [ "$_lldb_enable" = "yes" ]; then
+	# XXX fails to cross compile due to python
+	_enabled_projects+=";lldb"
+	subpackages+=" lldb lldb-devel"
+fi
+
+subpackages+=" lld lld-devel"
+
+configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+
+post_patch() {
+	if [ "$_lldb_enable" = "yes" ]; then
+		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+			vsed -i 's|__ptrace_request|int|g' \
+				${wrksrc}/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
+		fi
+		# disable docs for lldb as they fail to generate
+		vsed -i '/add_subdirectory(docs)/d' \
+			${wrksrc}/lldb/CMakeLists.txt
+	fi
+
+	# update config.guess for better platform detection
+	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
+		${wrksrc}/llvm/cmake
+
+	# fix linker failures on some archs
+	vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
+		${wrksrc}/libcxxabi/cmake/config-ix.cmake
+	vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
+		${wrksrc}/libcxxabi/cmake/config-ix.cmake
+
+	# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*) ;;
+		ppc*-musl|i686-musl|mips*-musl)
+			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
+				${wrksrc}/libunwind/src/CMakeLists.txt
+			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
+				${wrksrc}/libcxxabi/src/CMakeLists.txt
+			vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
+			;;
+	esac
+
+	case "$XBPS_TARGET_MACHINE" in
+		x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
+			vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
+				${wrksrc}/compiler-rt/CMakeLists.txt
+			;;
+		arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
+			vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
+				${wrksrc}/compiler-rt/cmake/config-ix.cmake
+			;;
+	esac
+}
+
+pre_configure() {
+	local triplet
+
+	# Vastly reduce size of debugging symbols:
+	CFLAGS=${CFLAGS/ -g/ -g1}
+	CXXFLAGS=${CXXFLAGS/ -g/ -g1}
+
+	# since gcc9, the build likes to blow up for ppc32 apparently because
+	# of clang being too large for a 24-bit relative call to the PLT, so
+	# optimize for size instead
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*) ;;
+		mips*-musl|ppc*) configure_args+=" -DVOID_CXX_OPT_FLAGS=-Os" ;;
+	esac
+
+	if [ "$CROSS_BUILD" ]; then
+		msg_normal "Building host tblgen\n"
+		mkdir -p build/HOST
+		cd build/HOST
+		CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
+			CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
+			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
+			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
+		make ${makejobs} -C utils/TableGen
+		make ${makejobs} -C tools/clang/utils/TableGen
+		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
+		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
+		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
+		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
+		cd ../..
+	fi
+
+	case "$XBPS_TARGET_MACHINE" in
+		i686*) _arch="X86";;
+		x86_64*) _arch="X86";;
+		armv5*) _arch="Armv5te";;
+		armv6*) _arch="Armv6";;
+		armv7*) _arch="Armv7";;
+		aarch64*) _arch="AArch64";;
+		mips*) _arch="Mips";;
+		ppc*) _arch="PowerPC";;
+		riscv64*) _arch="RISCV64";;
+	esac
+
+	triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
+
+	configure_args+=" -DLLVM_TARGET_ARCH=${_arch}"
+	configure_args+=" -DLLVM_HOST_TRIPLE=${triplet}"
+	configure_args+=" -DLLVM_DEFAULT_TARGET_TRIPLE=${triplet}"
+}
+
+do_install() {
+	cd build
+	cmake -DCMAKE_INSTALL_PREFIX=${DESTDIR}/usr -P cmake_install.cmake
+
+	# Required for multilib.
+	if [ "$XBPS_TARGET_MACHINE" = "x86_64" ]; then
+		for _header in llvm-config; do
+			mv ${DESTDIR}/usr/include/llvm/Config/${_header}{,-64}.h
+			vinstall ${FILESDIR}/llvm-Config-${_header}.h 644 \
+				usr/include/llvm/Config ${_header}.h
+		done
+	fi
+
+	# Remove llvm-config-host in cross builds.
+	if [ "$CROSS_BUILD" ]; then
+		rm -f ${DESTDIR}/usr/bin/llvm-config-host
+	fi
+
+	# Install libcxxabi headers
+	vinstall ${wrksrc}/libcxxabi/include/__cxxabi_config.h 644 usr/include
+	vinstall ${wrksrc}/libcxxabi/include/cxxabi.h 644 usr/include
+
+	# Install libunwind headers
+	vinstall ${wrksrc}/libunwind/include/__libunwind_config.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/libunwind.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/unwind.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/mach-o/compact_unwind_encoding.h \
+		644 usr/include/mach-o
+}
+
+clang-analyzer_package() {
+	pycompile_dirs="usr/share/scan-view"
+	depends="clang-${version}_${revision} python3 perl"
+	short_desc+=" - A source code analysis framework"
+	homepage="https://clang-analyzer.llvm.org/"
+	pkg_install() {
+		vmove usr/share/man/man1/scan-build.1
+		vmove "/usr/bin/scan-*"
+		vmove "/usr/share/scan-*"
+		vmove "/usr/libexec/*analyzer"
+	}
+}
+
+clang-tools-extra_package() {
+	lib32disabled=yes
+	depends="clang-${version}_${revision} python3"
+	short_desc+=" - Extra Clang tools"
+	homepage="https://clang.llvm.org/extra/"
+	pkg_install() {
+		vmove usr/include/clang-tidy
+		vmove usr/bin/clang-apply-replacements
+		vmove usr/bin/clang-query
+		vmove usr/bin/clang-rename
+		vmove usr/bin/clang-tidy
+		vmove usr/bin/diagtool
+		vmove usr/bin/find-all-symbols
+		vmove usr/bin/hmaptool
+		vmove usr/bin/modularize
+		vmove usr/bin/pp-trace
+		vmove usr/bin/sancov
+		vmove "usr/lib/libclangApplyReplacements*"
+		vmove "usr/lib/libclangQuery*"
+		vmove "usr/lib/libclangTidy*"
+		vmove "usr/share/clang/*tidy*"
+		vmove usr/share/doc/clang-tools
+		vmove usr/share/man/man1/extraclangtools.1
+		vmove usr/share/man/man1/diagtool.1
+	}
+}
+
+clang_package() {
+	lib32disabled=yes
+	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
+	 libclang-${version}_${revision}"
+	short_desc+=" - C language family frontend"
+	homepage="https://clang.llvm.org/"
+	pkg_install() {
+		vmove usr/include/clang
+		vmove usr/include/clang-c
+		vmove "usr/bin/*clang*"
+		vmove usr/bin/c-index-test
+		vmove usr/lib/clang
+		vmove usr/lib/cmake/clang
+		vmove "usr/lib/libclang*.a"
+		vmove "usr/lib/libclang*.so"
+		vmove usr/share/clang
+		vmove usr/share/doc/clang
+		vmove usr/share/man/man1/clang.1
+	}
+}
+
+libclang_package() {
+	short_desc+=" - C frontend runtime library"
+	pkg_install() {
+		vmove "usr/lib/libclang.so.*"
+	}
+}
+
+libclang-cpp_package() {
+	short_desc+=" - C frontend runtime library (C++ interface)"
+	pkg_install() {
+		vmove "usr/lib/libclang-cpp.so.*"
+	}
+}
+
+lld_package() {
+	lib32disabled=yes
+	short_desc+=" - linker"
+	homepage="https://lld.llvm.org"
+	pkg_install() {
+		vmove usr/bin/lld*
+		vmove usr/bin/wasm-ld
+		vmove usr/bin/ld.lld*
+		vmove usr/bin/ld64.lld*
+		vmove usr/share/doc/lld
+	}
+}
+
+lld-devel_package() {
+	lib32disabled=yes
+	short_desc+=" - linker - development files"
+	homepage="https://lld.llvm.org"
+	depends="lld>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include/lld
+		vmove usr/lib/cmake/lld
+		vmove "usr/lib/liblld*a"
+	}
+}
+
+lldb_package() {
+	lib32disabled=yes
+	depends+=" python3-six"
+	short_desc+=" - LLDB debugger"
+	homepage="https://lldb.llvm.org/"
+	pkg_install() {
+		vmove usr/bin/*lldb*
+		vmove usr/lib/liblldb*so.*
+		vmove /usr/lib/python*
+	}
+}
+
+lldb-devel_package() {
+	lib32disabled=yes
+	depends="lldb>=${version}_${revision}"
+	short_desc+=" - LLDB debugger - development files"
+	pkg_install() {
+		vmove usr/include/lldb
+		vmove "usr/lib/liblldb*.so"
+	}
+}
+
+llvm-libunwind_package() {
+	short_desc+=" - libunwind"
+	pkg_install() {
+		vmove "usr/lib/libunwind.so.*"
+	}
+}
+
+llvm-libunwind-devel_package() {
+	short_desc+=" - libunwind - development files"
+	depends="llvm-libunwind>=${version}_${revision}"
+	conflicts="libunwind-devel>=0"
+	pkg_install() {
+		vmove usr/lib/libunwind.so
+		vmove usr/lib/libunwind.a
+		vmove "usr/include/*unwind*"
+		vmove usr/include/mach-o
+		vmove usr/share/doc/libunwind
+	}
+}
+
+libcxxabi_package() {
+	short_desc+=" - low level support for libc++"
+	pkg_install() {
+		vmove "usr/lib/libc++abi.so.*"
+	}
+}
+
+libcxxabi-devel_package() {
+	short_desc+=" - low level support for libc++ - development files"
+	depends="libcxxabi>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/lib/libc++abi.so
+		vmove usr/lib/libc++abi.a
+		vmove "usr/include/*cxxabi*"
+	}
+}
+
+libcxx_package() {
+	short_desc+=" - C++ standard library"
+	pkg_install() {
+		vmove "usr/lib/libc++.so.*"
+	}
+}
+
+libcxx-devel_package() {
+	short_desc+=" - C++ standard library - development files"
+	depends="libcxx>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/lib/libc++.so
+		vmove usr/lib/libc++.a
+		vmove usr/lib/libc++experimental.a
+		vmove usr/include/c++
+		vmove usr/share/doc/libcxx
+	}
+}
+
+libomp_package() {
+	short_desc+=" - Clang OpenMP support library"
+	pkg_install() {
+		vmove usr/lib/libomp.so
+		vmove "usr/lib/libomptarget.rtl.*.so"
+		vmove usr/lib/libarcher.so
+		vmove "usr/lib/libomp*.so.*"
+	}
+}
+
+libomp-devel_package() {
+	short_desc+=" - Clang OpenMP support library - development files"
+	depends="libomp>=${version}_${revision}"
+	pkg_install() {
+		vmove "usr/lib/libomp*.so"
+		vmove "usr/lib/libarcher*"
+		vmove "usr/include/omp*.h"
+		vmove "usr/lib/clang/${version}/include/omp*.h"
+		vmove usr/share/man/man1/llvmopenmp.1
+		vmove usr/share/doc/openmp
+	}
+}
+
+libllvm14_package() {
+	short_desc+=" - runtime library"
+	pkg_install() {
+		vmove "usr/lib/libLLVM-*.so*"
+	}
+}
diff --git a/srcpkgs/llvm14/update b/srcpkgs/llvm14/update
new file mode 100644
index 000000000000..e95cf26b3586
--- /dev/null
+++ b/srcpkgs/llvm14/update
@@ -0,0 +1,3 @@
+site="https://github.com/llvm/llvm-project/releases"
+pattern="llvmorg-\K(\d+.){2}\d+(-rc\d+)?"
+ignore="*-rc*"

From 8438d62e818f41e2c2663bb6ed0e30d730118cad Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:16:07 +0200
Subject: [PATCH 02/29] llvm: update to 14.0.3.

---
 srcpkgs/llvm/template | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/llvm/template b/srcpkgs/llvm/template
index a92db6f94f9f..d226c61c734e 100644
--- a/srcpkgs/llvm/template
+++ b/srcpkgs/llvm/template
@@ -1,10 +1,10 @@
 # Template file for 'llvm'
 pkgname=llvm
-version=12.0.0
+version=14.0.3
 revision=1
 build_style=meta
-depends="llvm12"
-replaces="llvm11>=0 llvm10>=0 llvm9>=0 llvm8>=0 llvm7>=0 llvm6.0>=0 llvm3.9>=0"
+depends="llvm14"
+replaces="llvm13>=0 llvm12>=0 llvm11>=0 llvm10>=0 llvm9>=0 llvm8>=0 llvm7>=0 llvm6.0>=0 llvm3.9>=0"
 short_desc="LLVM meta package"
 maintainer="Enno Boland <gottox@voidlinux.org>"
 license="Public Domain"

From 92edaa1759b7b52e98fd6a3adf5a761334849304 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:36:32 +0200
Subject: [PATCH 03/29] llvm12: drop non-llvm components

---
 ...clang-001-fix-unwind-chain-inclusion.patch |  44 ---
 .../patches/clang-002-add-musl-triples.patch  | 110 -------
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 -
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ---
 .../compiler-rt-aarch64-ucontext.patch        |  11 -
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 --
 .../llvm12/patches/compiler-rt-size_t.patch   |  10 -
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 ----
 srcpkgs/llvm12/patches/libcxx-musl.patch      |  26 --
 srcpkgs/llvm12/patches/libcxx-ppc.patch       |  22 --
 .../llvm12/patches/libcxx-ssp-nonshared.patch |  11 -
 srcpkgs/llvm12/patches/libcxxabi-dl.patch     |  25 --
 srcpkgs/llvm12/patches/libunwind-ppc32.patch  |  63 ----
 srcpkgs/llvm12/patches/lldb-musl.patch        |  31 --
 .../llvm12/patches/ppc32-compiler-rt.patch    |  21 --
 srcpkgs/llvm12/template                       | 301 +-----------------
 16 files changed, 1 insertion(+), 832 deletions(-)
 delete mode 100644 srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-size_t.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-ppc.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxxabi-dl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libunwind-ppc32.patch
 delete mode 100644 srcpkgs/llvm12/patches/lldb-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/ppc32-compiler-rt.patch

diff --git a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
deleted file mode 100644
index e4eaa7783e7a..000000000000
--- a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 352974169f0d2b5da3d5321f588f5e3b5941330e Mon Sep 17 00:00:00 2001
-From: Andrea Brancaleoni <miwaxe@gmail.com>
-Date: Tue, 8 Sep 2015 22:14:57 +0200
-Subject: [PATCH 2/7] fix unwind chain inclusion
-
----
- lib/Headers/unwind.h | 9 +++++----
- 1 file changed, 5 insertions(+), 4 deletions(-)
-
-diff --git a/lib/Headers/unwind.h b/lib/Headers/unwind.h
-index 303d792..44e10cc 100644
---- a/clang/lib/Headers/unwind.h
-+++ b/clang/lib/Headers/unwind.h
-@@ -9,9 +9,6 @@
- 
- /* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/
- 
--#ifndef __CLANG_UNWIND_H
--#define __CLANG_UNWIND_H
--
- #if defined(__APPLE__) && __has_include_next(<unwind.h>)
- /* Darwin (from 11.x on) provide an unwind.h. If that's available,
-  * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE,
-@@ -39,6 +36,9 @@
- # endif
- #else
- 
-+#ifndef __CLANG_UNWIND_H
-+#define __CLANG_UNWIND_H
-+
- #include <stdint.h>
- 
- #ifdef __cplusplus
-@@ -322,6 +322,7 @@ _Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *);
- }
- #endif
- 
-+#endif /* __CLANG_UNWIND_H */
-+
- #endif
- 
--#endif /* __CLANG_UNWIND_H */
--- 
-2.5.1
diff --git a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
deleted file mode 100644
index 25688d40dbc2..000000000000
--- a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
+++ /dev/null
@@ -1,110 +0,0 @@
---- a/clang/lib/Driver/ToolChains/Gnu.cpp
-+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
-@@ -2086,7 +2086,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
-                                              "armv7hl-redhat-linux-gnueabi",
-                                              "armv6hl-suse-linux-gnueabi",
--                                             "armv7hl-suse-linux-gnueabi"};
-+                                             "armv7hl-suse-linux-gnueabi",
-+                                             "armv7l-linux-gnueabihf"};
-   static const char *const ARMebLibDirs[] = {"/lib"};
-   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
-                                              "armeb-linux-androideabi"};
-@@ -2153,8 +2154,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
-   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
-   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
--                                             "powerpcle-unknown-linux-gnu",
--                                             "powerpcle-linux-musl"};
-+                                             "powerpcle-unknown-linux-gnu"};
- 
-   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
-   static const char *const PPC64Triples[] = {
-@@ -2235,6 +2235,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-     return;
-   }
- 
-+  if (TargetTriple.isMusl()) {
-+    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
-+    static const char *const ARMHFMuslTriples[] = {
-+        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
-+    };
-+    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
-+    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
-+    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
-+    static const char *const MIPSMuslTriples[] = {
-+        "mips-linux-musl", "mipsel-linux-musl",
-+        "mipsel-linux-muslhf", "mips-linux-muslhf"
-+    };
-+    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
-+    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
-+    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
-+    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
-+
-+    switch (TargetTriple.getArch()) {
-+    case llvm::Triple::aarch64:
-+      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
-+      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
-+      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
-+      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
-+      break;
-+    case llvm::Triple::arm:
-+      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
-+      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
-+        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
-+      } else {
-+        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
-+      }
-+      break;
-+    case llvm::Triple::x86_64:
-+      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-+      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
-+      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-+      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
-+      break;
-+    case llvm::Triple::x86:
-+      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-+      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
-+      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-+      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
-+      break;
-+    case llvm::Triple::mips:
-+      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
-+      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
-+      break;
-+    case llvm::Triple::ppc:
-+      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
-+      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
-+      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
-+      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
-+      break;
-+    case llvm::Triple::ppcle:
-+      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
-+      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
-+      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
-+      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
-+      break;
-+    case llvm::Triple::ppc64:
-+      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
-+      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
-+      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
-+      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
-+      break;
-+    case llvm::Triple::ppc64le:
-+      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
-+      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
-+      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
-+      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
-+      break;
-+    default:
-+      break;
-+    }
-+    TripleAliases.push_back(TargetTriple.str());
-+    if (TargetTriple.str() != BiarchTriple.str())
-+      BiarchTripleAliases.push_back(BiarchTriple.str());
-+    return;
-+  }
-+
-   // Android targets should not use GNU/Linux tools or libraries.
-   if (TargetTriple.isAndroid()) {
-     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
deleted file mode 100644
index 4ad6412d1e6c..000000000000
--- a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/clang/lib/Driver/ToolChains/Linux.cpp
-+++ b/clang/lib/Driver/ToolChains/Linux.cpp
-@@ -504,10 +504,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
-     Loader = "ld.so.1";
-     break;
-   case llvm::Triple::ppc64:
--    LibDir = "lib64";
--    Loader =
--        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
--    break;
-   case llvm::Triple::ppc64le:
-     LibDir = "lib64";
-     Loader =
diff --git a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
deleted file mode 100644
index 21fc8003c5f1..000000000000
--- a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
+++ /dev/null
@@ -1,48 +0,0 @@
---- a/clang/lib/Basic/Targets/PPC.h
-+++ b/clang/lib/Basic/Targets/PPC.h
-@@ -415,11 +415,10 @@ public:
-       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
-     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
-       DataLayout = "e-m:e-i64:64-n32:64";
--      ABI = "elfv2";
-     } else {
-       DataLayout = "E-m:e-i64:64-n32:64";
--      ABI = "elfv1";
-     }
-+    ABI = "elfv2";
- 
-     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
-       LongDoubleWidth = LongDoubleAlign = 64;
---- a/clang/lib/CodeGen/TargetInfo.cpp
-+++ b/clang/lib/CodeGen/TargetInfo.cpp
-@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
-       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
- 
-     if (Triple.isOSBinFormatELF()) {
--      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
--      if (getTarget().getABI() == "elfv2")
--        Kind = PPC64_SVR4_ABIInfo::ELFv2;
-+      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
-+      if (getTarget().getABI() == "elfv1")
-+        Kind = PPC64_SVR4_ABIInfo::ELFv1;
-       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
- 
-       return SetCGInfo(
---- a/clang/lib/Driver/ToolChains/Clang.cpp
-+++ b/clang/lib/Driver/ToolChains/Clang.cpp
-@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
-   const llvm::Triple &T = getToolChain().getTriple();
-   if (T.isOSBinFormatELF()) {
-     switch (getToolChain().getArch()) {
--    case llvm::Triple::ppc64: {
--      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
--          T.isOSOpenBSD() || T.isMusl())
--        ABIName = "elfv2";
--      else
--        ABIName = "elfv1";
--      break;
--    }
-+    case llvm::Triple::ppc64:
-     case llvm::Triple::ppc64le:
-       ABIName = "elfv2";
-       break;
diff --git a/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch b/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
deleted file mode 100644
index 893c059d7b8d..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp.orig
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-@@ -1799,7 +1799,7 @@
- 
- static bool Aarch64GetESR(ucontext_t *ucontext, u64 *esr) {
-   static const u32 kEsrMagic = 0x45535201;
--  u8 *aux = ucontext->uc_mcontext.__reserved;
-+  u8 *aux = reinterpret_cast<u8 *>(ucontext->uc_mcontext.__reserved);
-   while (true) {
-     _aarch64_ctx *ctx = (_aarch64_ctx *)aux;
-     if (ctx->size == 0) break;
diff --git a/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch b/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
deleted file mode 100644
index 35f16d24f340..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
+++ /dev/null
@@ -1,35 +0,0 @@
---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-@@ -74,6 +74,10 @@
- #include <sys/utsname.h>
- #endif
- 
-+#if SANITIZER_LINUX && defined(__powerpc__)
-+#include <asm/ptrace.h>
-+#endif
-+
- #if SANITIZER_LINUX && !SANITIZER_ANDROID
- #include <sys/personality.h>
- #endif
---- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
-@@ -92,7 +92,7 @@
- # include <utime.h>
- # include <sys/ptrace.h>
- #if defined(__mips64) || defined(__aarch64__) || defined(__arm__) || \
--    SANITIZER_RISCV64
-+    defined(__powerpc__) || SANITIZER_RISCV64
- #  include <asm/ptrace.h>
- #  ifdef __arm__
- typedef struct user_fpregs elf_fpregset_t;
---- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
-@@ -31,7 +31,7 @@
- #include <sys/types.h> // for pid_t
- #include <sys/uio.h> // for iovec
- #include <elf.h> // for NT_PRSTATUS
--#if (defined(__aarch64__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
-+#if (defined(__aarch64__) || defined(__powerpc__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
- // GLIBC 2.20+ sys/user does not include asm/ptrace.h
- # include <asm/ptrace.h>
- #endif
diff --git a/srcpkgs/llvm12/patches/compiler-rt-size_t.patch b/srcpkgs/llvm12/patches/compiler-rt-size_t.patch
deleted file mode 100644
index 2c63063a5e9e..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-size_t.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/compiler-rt/lib/fuzzer/FuzzerInterceptors.cpp.orig
-+++ b/compiler-rt/lib/fuzzer/FuzzerInterceptors.cpp
-@@ -25,6 +25,7 @@
-   }
- 
- #include <cassert>
-+#include <cstddef>
- #include <cstdint>
- #include <dlfcn.h> // for dlsym()
- 
diff --git a/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch b/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
deleted file mode 100644
index d0b61c80c897..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
+++ /dev/null
@@ -1,62 +0,0 @@
---- a/compiler-rt/lib/xray/xray_powerpc64.inc
-+++ b/compiler-rt/lib/xray/xray_powerpc64.inc
-@@ -12,7 +12,13 @@
- 
- #include <cstdint>
- #include <mutex>
-+#ifdef __GLIBC__
- #include <sys/platform/ppc.h>
-+#else
-+#include <cctype>
-+#include <cstring>
-+#include <cstdlib>
-+#endif
- 
- #include "xray_defs.h"
- 
-@@ -20,13 +26,45 @@ namespace __xray {
- 
- ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
-   CPU = 0;
-+#ifdef __GLIBC__
-   return __ppc_get_timebase();
-+#else
-+  return __builtin_ppc_get_timebase();
-+#endif
- }
- 
- inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
-   static std::mutex M;
-   std::lock_guard<std::mutex> Guard(M);
-+#ifdef __GLIBC__
-   return __ppc_get_timebase_freq();
-+#else
-+  /* FIXME: a less dirty implementation? */
-+  static uint64_t base;
-+  if (!base) {
-+    FILE *f = fopen("/proc/cpuinfo", "rb");
-+    if (f) {
-+      ssize_t nr;
-+      /* virtually always big enough to hold the line */
-+      char buf[512];
-+      while (fgets(buf, sizeof(buf), f)) {
-+        char *ret = strstr(buf, "timebase");
-+        if (!ret) {
-+          continue;
-+        }
-+        ret += sizeof("timebase") - 1;
-+        ret = strchr(ret, ':');
-+        if (!ret) {
-+          continue;
-+        }
-+        base = strtoul(ret + 1, nullptr, 10);
-+        break;
-+      }
-+      fclose(f);
-+    }
-+  }
-+  return base;
-+#endif
- }
- 
- inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
diff --git a/srcpkgs/llvm12/patches/libcxx-musl.patch b/srcpkgs/llvm12/patches/libcxx-musl.patch
deleted file mode 100644
index bbd31ffc2cb1..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-musl.patch
+++ /dev/null
@@ -1,26 +0,0 @@
---- a/libcxx/include/locale
-+++ b/libcxx/include/locale
-@@ -742,7 +742,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
-         typename remove_reference<decltype(errno)>::type __save_errno = errno;
-         errno = 0;
-         char *__p2;
-+#if defined(__linux__) && !defined(__GLIBC__)
-+        long long __ll = strtoll(__a, &__p2, __base);
-+#else
-         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
-+#endif
-         typename remove_reference<decltype(errno)>::type __current_errno = errno;
-         if (__current_errno == 0)
-             errno = __save_errno;
-@@ -782,7 +786,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
-         typename remove_reference<decltype(errno)>::type __save_errno = errno;
-         errno = 0;
-         char *__p2;
-+#if defined(__linux__) && !defined(__GLIBC__)
-+        unsigned long long __ll = strtoull(__a, &__p2, __base);
-+#else
-         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
-+#endif
-         typename remove_reference<decltype(errno)>::type __current_errno = errno;
-         if (__current_errno == 0)
-             errno = __save_errno;
diff --git a/srcpkgs/llvm12/patches/libcxx-ppc.patch b/srcpkgs/llvm12/patches/libcxx-ppc.patch
deleted file mode 100644
index 7a92f8004e1c..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-ppc.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-This ensures `is_iec559` is defined correctly under all long double ABIs,
-including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__`
-is not defined on gcc.
-
---- a/libcxx/include/limits
-+++ b/libcxx/include/limits
-@@ -426,8 +426,14 @@ protected:
-     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
-     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
- 
--#if (defined(__ppc__) || defined(__ppc64__))
-+#if defined(__powerpc__) || defined(__powerpc64__)
-+#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__)
-+    /* IEEE 754 quadruple or double precision */
-+    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
-+#else
-+    /* 128-bit IBM double-double */
-     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
-+#endif
- #else
-     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
- #endif
diff --git a/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch b/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
deleted file mode 100644
index 70292beb2fcd..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/libcxx/CMakeLists.txt
-+++ b/libcxx/CMakeLists.txt
-@@ -769,6 +769,8 @@ function(cxx_link_system_libraries target)
-     target_link_libraries(${target} PRIVATE atomic)
-   endif()
- 
-+#ssp  target_link_libraries(${target} PRIVATE ssp_nonshared)
-+
-   if (MINGW)
-     target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
-   endif()
diff --git a/srcpkgs/llvm12/patches/libcxxabi-dl.patch b/srcpkgs/llvm12/patches/libcxxabi-dl.patch
deleted file mode 100644
index 3a15f9db8c98..000000000000
--- a/srcpkgs/llvm12/patches/libcxxabi-dl.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-Also link to -ldl to prevent undefined references.
-
---- a/libcxxabi/src/CMakeLists.txt
-+++ b/libcxxabi/src/CMakeLists.txt
-@@ -73,6 +73,7 @@
-   endif()
- 
-   add_library_flags_if(LIBCXXABI_HAS_C_LIB c)
-+  add_library_flags_if(LIBCXXABI_HAS_C_LIB dl)
- endif()
- 
- if (LIBCXXABI_USE_LLVM_UNWINDER)
---- a/libcxx/CMakeLists.txt
-+++ b/libcxx/CMakeLists.txt
-@@ -745,6 +745,10 @@
-     target_link_libraries(${target} PRIVATE m)
-   endif()
- 
-+  if (LIBCXX_HAS_C_LIB)
-+    target_link_libraries(${target} PRIVATE dl)
-+  endif()
-+
-   if (LIBCXX_HAS_RT_LIB)
-     target_link_libraries(${target} PRIVATE rt)
-   endif()
diff --git a/srcpkgs/llvm12/patches/libunwind-ppc32.patch b/srcpkgs/llvm12/patches/libunwind-ppc32.patch
deleted file mode 100644
index 74aa7576ecf9..000000000000
--- a/srcpkgs/llvm12/patches/libunwind-ppc32.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-This fixes build at least with gcc9 which does not define `__ppc__`.
-
---- a/libunwind/include/__libunwind_config.h
-+++ b/libunwind/include/__libunwind_config.h
-@@ -49,7 +49,7 @@
- #  define _LIBUNWIND_CONTEXT_SIZE 167
- #  define _LIBUNWIND_CURSOR_SIZE 179
- #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64
--# elif defined(__ppc__)
-+# elif defined(__powerpc__)
- #  define _LIBUNWIND_TARGET_PPC 1
- #  define _LIBUNWIND_CONTEXT_SIZE 117
- #  define _LIBUNWIND_CURSOR_SIZE 124
---- a/libunwind/src/UnwindRegistersRestore.S
-+++ b/libunwind/src/UnwindRegistersRestore.S
-@@ -392,7 +392,7 @@ Lnovec:
-   PPC64_LR(3)
-   bctr
- 
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- 
- DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind13Registers_ppc6jumptoEv)
- //
---- a/libunwind/src/UnwindRegistersSave.S
-+++ b/libunwind/src/UnwindRegistersSave.S
-@@ -554,7 +554,7 @@ DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext)
-   blr
- 
- 
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- 
- //
- // extern int unw_getcontext(unw_context_t* thread_state)
---- a/libunwind/src/config.h
-+++ b/libunwind/src/config.h
-@@ -95,12 +95,12 @@
- #define _LIBUNWIND_BUILD_SJLJ_APIS
- #endif
- 
--#if defined(__i386__) || defined(__x86_64__) || defined(__ppc__) || defined(__ppc64__) || defined(__powerpc64__)
-+#if defined(__i386__) || defined(__x86_64__) || defined(__powerpc__) || defined(__powerpc64__)
- #define _LIBUNWIND_SUPPORT_FRAME_APIS
- #endif
- 
- #if defined(__i386__) || defined(__x86_64__) ||                                \
--    defined(__ppc__) || defined(__ppc64__) || defined(__powerpc64__) ||        \
-+    defined(__powerpc__) || defined(__powerpc64__) ||                          \
-     (!defined(__APPLE__) && defined(__arm__)) ||                               \
-     (defined(__arm64__) || defined(__aarch64__)) ||                            \
-     defined(__mips__)
---- a/libunwind/src/libunwind.cpp
-+++ b/libunwind/src/libunwind.cpp
-@@ -42,7 +42,7 @@ _LIBUNWIND_HIDDEN int __unw_init_local(unw_cursor_t *cursor,
- # define REGISTER_KIND Registers_x86_64
- #elif defined(__powerpc64__)
- # define REGISTER_KIND Registers_ppc64
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- # define REGISTER_KIND Registers_ppc
- #elif defined(__aarch64__)
- # define REGISTER_KIND Registers_arm64
diff --git a/srcpkgs/llvm12/patches/lldb-musl.patch b/srcpkgs/llvm12/patches/lldb-musl.patch
deleted file mode 100644
index 601c0d138523..000000000000
--- a/srcpkgs/llvm12/patches/lldb-musl.patch
+++ /dev/null
@@ -1,31 +0,0 @@
---- a/lldb/source/Plugins/Process/Linux/Procfs.h
-+++ b/lldb/source/Plugins/Process/Linux/Procfs.h
-@@ -10,21 +10,12 @@
- // sys/procfs.h on Android/Linux for all supported architectures.
- 
- #include <sys/ptrace.h>
-+#include <asm/ptrace.h>
- 
--#ifdef __ANDROID__
--#if defined(__arm64__) || defined(__aarch64__)
--typedef unsigned long elf_greg_t;
--typedef elf_greg_t
--    elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
--typedef struct user_fpsimd_state elf_fpregset_t;
--#ifndef NT_FPREGSET
--#define NT_FPREGSET NT_PRFPREG
--#endif // NT_FPREGSET
--#elif defined(__mips__)
--#ifndef NT_FPREGSET
--#define NT_FPREGSET NT_PRFPREG
--#endif // NT_FPREGSET
--#endif
--#else // __ANDROID__
-+#if !defined(__GLIBC__) && defined(__powerpc__)
-+#define pt_regs musl_pt_regs
-+#include <sys/procfs.h>
-+#undef pt_regs
-+#else
- #include <sys/procfs.h>
--#endif // __ANDROID__
-+#endif
diff --git a/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch b/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch
deleted file mode 100644
index 8e0a9a779d1b..000000000000
--- a/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-commit ba4ede595ff9599232f5dd2b4384c243137b53fc
-Author: Daniel Kolesa <daniel@octaforge.org>
-Date:   Tue Jun 22 23:40:54 2021 +0200
-
-    enable compiler-rt support for ppc32
-
-diff --git a/compiler-rt/cmake/base-config-ix.cmake b/compiler-rt/cmake/base-config-ix.cmake
-index 1edab43..5c0c8a2 100644
---- a/compiler-rt/cmake/base-config-ix.cmake
-+++ b/compiler-rt/cmake/base-config-ix.cmake
-@@ -182,9 +182,7 @@ macro(test_targets)
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc64le")
-       test_target_arch(powerpc64le "" "-m64")
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc")
--      if(CMAKE_SYSTEM_NAME MATCHES "AIX")
--        test_target_arch(powerpc "" "-m32")
--      endif()
-+      test_target_arch(powerpc "" "-m32")
-       test_target_arch(powerpc64 "" "-m64")
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "s390x")
-       test_target_arch(s390x "" "")
diff --git a/srcpkgs/llvm12/template b/srcpkgs/llvm12/template
index 7ce18028e4a3..7b361bbbf5bc 100644
--- a/srcpkgs/llvm12/template
+++ b/srcpkgs/llvm12/template
@@ -1,25 +1,17 @@
 # Template file for 'llvm12'
 pkgname=llvm12
 version=12.0.1
-revision=2
+revision=3
 wrksrc="llvm-project-${version}.src"
 build_wrksrc=llvm
 build_style=cmake
 configure_args="
  -DCMAKE_BUILD_TYPE=Release -Wno-dev
  -DENABLE_LINKER_BUILD_ID=YES
- -DLLDB_USE_SYSTEM_SIX=YES
- -DLIBCXX_CXX_ABI=libcxxabi
- -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
- -DLIBCXXABI_USE_LLVM_UNWINDER=YES
- -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
- -DLIBOMP_ENABLE_SHARED=YES
- -DLIBOMP_INSTALL_ALIASES=NO
  -DLLVM_INCLUDE_DOCS=YES
  -DLLVM_BUILD_DOCS=YES
  -DLLVM_ENABLE_SPHINX=YES
  -DSPHINX_WARNINGS_AS_ERRORS=NO
- -DLLVM_INSTALL_UTILS=YES
  -DLLVM_BUILD_LLVM_DYLIB=YES
  -DLLVM_LINK_LLVM_DYLIB=YES
  -DLLVM_ENABLE_RTTI=YES
@@ -51,87 +43,10 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
-_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
-
-_lldb_enable=yes
-_libomp_enable=no
-
-case "$XBPS_TARGET_MACHINE" in
-	ppc64le*) ;;
-	ppc*|i686*) _lldb_enable=no ;;
-esac
-
-case "$XBPS_TARGET_MACHINE" in
-	x86_64*|aarch64*|ppc64*) _libomp_enable=yes;;
-esac
-
-subpackages="clang-tools-extra"
-
-# must go before clang
-if [ "$_libomp_enable" = "yes" ]; then
-	_enabled_projects+=";openmp"
-	subpackages+=" libomp libomp-devel"
-	# because of cmake nonsense referencing libomptarget.so.*
-	depends+=" libomp>=${version}_${revision}"
-fi
-
-subpackages+=" clang clang-analyzer libclang libclang-cpp
- llvm-libunwind llvm-libunwind-devel libcxx libcxx-devel
- libcxxabi libcxxabi-devel libllvm12"
-
-if [ "$_lldb_enable" = "yes" ]; then
-	# XXX fails to cross compile due to python
-	_enabled_projects+=";lldb"
-	subpackages+=" lldb lldb-devel"
-fi
-
-subpackages+=" lld lld-devel"
-
-configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
-
 post_patch() {
-	if [ "$_lldb_enable" = "yes" ]; then
-		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
-			vsed -i 's|__ptrace_request|int|g' \
-				${wrksrc}/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
-		fi
-		# disable docs for lldb as they fail to generate
-		vsed -i '/add_subdirectory(docs)/d' \
-			${wrksrc}/lldb/CMakeLists.txt
-	fi
-
 	# update config.guess for better platform detection
 	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
 		${wrksrc}/llvm/cmake
-
-	# fix linker failures on some archs
-	vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
-		${wrksrc}/libcxxabi/cmake/config-ix.cmake
-	vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
-		${wrksrc}/libcxxabi/cmake/config-ix.cmake
-
-	# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
-	case "$XBPS_TARGET_MACHINE" in
-		ppc64*) ;;
-		ppc*-musl|i686-musl|mips*-musl)
-			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
-				${wrksrc}/libunwind/src/CMakeLists.txt
-			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
-				${wrksrc}/libcxxabi/src/CMakeLists.txt
-			vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
-			;;
-	esac
-
-	case "$XBPS_TARGET_MACHINE" in
-		x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
-			vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
-				${wrksrc}/compiler-rt/CMakeLists.txt
-			;;
-		arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
-			vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
-				${wrksrc}/compiler-rt/cmake/config-ix.cmake
-			;;
-	esac
 }
 
 pre_configure() {
@@ -158,10 +73,8 @@ pre_configure() {
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
 			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
 		make ${makejobs} -C utils/TableGen
-		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
 		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
-		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
 		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
 		cd ../..
 	fi
@@ -202,218 +115,6 @@ do_install() {
 	if [ "$CROSS_BUILD" ]; then
 		rm -f ${DESTDIR}/usr/bin/llvm-config-host
 	fi
-
-	# Install libcxxabi headers
-	vinstall ${wrksrc}/libcxxabi/include/__cxxabi_config.h 644 usr/include
-	vinstall ${wrksrc}/libcxxabi/include/cxxabi.h 644 usr/include
-
-	# Install libunwind headers
-	vinstall ${wrksrc}/libunwind/include/__libunwind_config.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/libunwind.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/unwind.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/mach-o/compact_unwind_encoding.h \
-		644 usr/include/mach-o
-}
-
-clang-analyzer_package() {
-	pycompile_dirs="usr/share/scan-view"
-	depends="clang-${version}_${revision} python3 perl"
-	short_desc+=" - A source code analysis framework"
-	homepage="https://clang-analyzer.llvm.org/"
-	pkg_install() {
-		vmove usr/share/man/man1/scan-build.1
-		vmove "/usr/bin/scan-*"
-		vmove "/usr/share/scan-*"
-		vmove "/usr/libexec/*analyzer"
-	}
-}
-
-clang-tools-extra_package() {
-	lib32disabled=yes
-	depends="clang-${version}_${revision} python3"
-	short_desc+=" - Extra Clang tools"
-	homepage="https://clang.llvm.org/extra/"
-	pkg_install() {
-		vmove usr/include/clang-tidy
-		vmove usr/bin/clang-apply-replacements
-		vmove usr/bin/clang-query
-		vmove usr/bin/clang-rename
-		vmove usr/bin/clang-tidy
-		vmove usr/bin/diagtool
-		vmove usr/bin/find-all-symbols
-		vmove usr/bin/hmaptool
-		vmove usr/bin/modularize
-		vmove usr/bin/pp-trace
-		vmove usr/bin/sancov
-		vmove "usr/lib/libclangApplyReplacements*"
-		vmove "usr/lib/libclangQuery*"
-		vmove "usr/lib/libclangTidy*"
-		vmove "usr/share/clang/*tidy*"
-		vmove usr/share/doc/clang-tools
-		vmove usr/share/man/man1/extraclangtools.1
-		vmove usr/share/man/man1/diagtool.1
-	}
-}
-
-clang_package() {
-	lib32disabled=yes
-	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
-	 libclang-${version}_${revision}"
-	short_desc+=" - C language family frontend"
-	homepage="https://clang.llvm.org/"
-	pkg_install() {
-		vmove usr/include/clang
-		vmove usr/include/clang-c
-		vmove "usr/bin/*clang*"
-		vmove usr/bin/c-index-test
-		vmove usr/lib/clang
-		vmove usr/lib/cmake/clang
-		vmove "usr/lib/libclang*.a"
-		vmove "usr/lib/libclang*.so"
-		vmove usr/share/clang
-		vmove usr/share/doc/clang
-		vmove usr/share/man/man1/clang.1
-	}
-}
-
-libclang_package() {
-	short_desc+=" - C frontend runtime library"
-	pkg_install() {
-		vmove "usr/lib/libclang.so.*"
-	}
-}
-
-libclang-cpp_package() {
-	short_desc+=" - C frontend runtime library (C++ interface)"
-	pkg_install() {
-		vmove "usr/lib/libclang-cpp.so.*"
-	}
-}
-
-lld_package() {
-	lib32disabled=yes
-	short_desc+=" - linker"
-	homepage="https://lld.llvm.org"
-	pkg_install() {
-		vmove usr/bin/lld*
-		vmove usr/bin/wasm-ld
-		vmove usr/bin/ld.lld*
-		vmove usr/bin/ld64.lld*
-		vmove usr/share/doc/lld
-	}
-}
-
-lld-devel_package() {
-	lib32disabled=yes
-	short_desc+=" - linker - development files"
-	homepage="https://lld.llvm.org"
-	depends="lld>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/include/lld
-		vmove usr/lib/cmake/lld
-		vmove "usr/lib/liblld*a"
-	}
-}
-
-lldb_package() {
-	lib32disabled=yes
-	depends+=" python3-six"
-	short_desc+=" - LLDB debugger"
-	homepage="https://lldb.llvm.org/"
-	pkg_install() {
-		vmove usr/bin/*lldb*
-		vmove usr/lib/liblldb*so.*
-		vmove /usr/lib/python*
-	}
-}
-
-lldb-devel_package() {
-	lib32disabled=yes
-	depends="lldb>=${version}_${revision}"
-	short_desc+=" - LLDB debugger - development files"
-	pkg_install() {
-		vmove usr/include/lldb
-		vmove "usr/lib/liblldb*.so"
-	}
-}
-
-llvm-libunwind_package() {
-	short_desc+=" - libunwind"
-	pkg_install() {
-		vmove "usr/lib/libunwind.so.*"
-	}
-}
-
-llvm-libunwind-devel_package() {
-	short_desc+=" - libunwind - development files"
-	depends="llvm-libunwind>=${version}_${revision}"
-	conflicts="libunwind-devel>=0"
-	pkg_install() {
-		vmove usr/lib/libunwind.so
-		vmove usr/lib/libunwind.a
-		vmove "usr/include/*unwind*"
-		vmove usr/include/mach-o
-		vmove usr/share/doc/libunwind
-	}
-}
-
-libcxxabi_package() {
-	short_desc+=" - low level support for libc++"
-	pkg_install() {
-		vmove "usr/lib/libc++abi.so.*"
-	}
-}
-
-libcxxabi-devel_package() {
-	short_desc+=" - low level support for libc++ - development files"
-	depends="libcxxabi>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/lib/libc++abi.so
-		vmove usr/lib/libc++abi.a
-		vmove "usr/include/*cxxabi*"
-	}
-}
-
-libcxx_package() {
-	short_desc+=" - C++ standard library"
-	pkg_install() {
-		vmove "usr/lib/libc++.so.*"
-	}
-}
-
-libcxx-devel_package() {
-	short_desc+=" - C++ standard library - development files"
-	depends="libcxx>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/lib/libc++.so
-		vmove usr/lib/libc++.a
-		vmove usr/lib/libc++experimental.a
-		vmove usr/include/c++
-		vmove usr/share/doc/libcxx
-	}
-}
-
-libomp_package() {
-	short_desc+=" - Clang OpenMP support library"
-	pkg_install() {
-		vmove usr/lib/libomp.so
-		vmove "usr/lib/libomptarget.rtl.*.so"
-		vmove usr/lib/libarcher.so
-		vmove "usr/lib/libomp*.so.*"
-	}
-}
-
-libomp-devel_package() {
-	short_desc+=" - Clang OpenMP support library - development files"
-	depends="libomp>=${version}_${revision}"
-	pkg_install() {
-		vmove "usr/lib/libomp*.so"
-		vmove "usr/lib/libarcher*"
-		vmove "usr/include/omp*.h"
-		vmove "usr/lib/clang/${version}/include/omp*.h"
-		vmove usr/share/man/man1/llvmopenmp.1
-		vmove usr/share/doc/openmp
-	}
 }
 
 libllvm12_package() {

From dd0a815073454885bd6e389186b3464ba9a421a9 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 14:00:28 +0200
Subject: [PATCH 04/29] New packages: clang12, libclang12, libclang12-cpp,
 lld12, lld12-devel.

---
 common/shlibs                                 |   2 +
 srcpkgs/clang12                               |   1 +
 srcpkgs/libclang12                            |   1 +
 srcpkgs/libclang12-cpp                        |   1 +
 srcpkgs/lld12                                 |   1 +
 srcpkgs/lld12-devel                           |   1 +
 ...clang-001-fix-unwind-chain-inclusion.patch |  44 +++++++
 .../patches/clang-002-add-musl-triples.patch  | 110 ++++++++++++++++++
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 +++
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ++++++++
 srcpkgs/llvm12/template                       |  71 +++++++++++
 11 files changed, 293 insertions(+)
 create mode 120000 srcpkgs/clang12
 create mode 120000 srcpkgs/libclang12
 create mode 120000 srcpkgs/libclang12-cpp
 create mode 120000 srcpkgs/lld12
 create mode 120000 srcpkgs/lld12-devel
 create mode 100644 srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch

diff --git a/common/shlibs b/common/shlibs
index 81acc39defb4..86f4c9060d3b 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -975,6 +975,8 @@ libuchardet.so.0 uchardet-0.0.6_1
 libgtksourceviewmm-3.0.so.0 gtksourceviewmm-3.2.0_1
 libyajl.so.2 yajl-2.0.1_1
 libconfuse.so.2 confuse-3.2.1_1
+libclang.so.12 libclang12-12.0.0_1
+libclang-cpp.so.12 libclang12-cpp-12.0.0_1
 liblldb.so.14 lldb-14.0.3_1
 libclang.so.14 libclang-14.0.3_1
 libclang-cpp.so.14 libclang-cpp-14.0.3_1
diff --git a/srcpkgs/clang12 b/srcpkgs/clang12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/clang12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/libclang12 b/srcpkgs/libclang12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/libclang12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/libclang12-cpp b/srcpkgs/libclang12-cpp
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/libclang12-cpp
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/lld12 b/srcpkgs/lld12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/lld12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/lld12-devel b/srcpkgs/lld12-devel
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/lld12-devel
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
new file mode 100644
index 000000000000..e4eaa7783e7a
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
@@ -0,0 +1,44 @@
+From 352974169f0d2b5da3d5321f588f5e3b5941330e Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe@gmail.com>
+Date: Tue, 8 Sep 2015 22:14:57 +0200
+Subject: [PATCH 2/7] fix unwind chain inclusion
+
+---
+ lib/Headers/unwind.h | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/lib/Headers/unwind.h b/lib/Headers/unwind.h
+index 303d792..44e10cc 100644
+--- a/clang/lib/Headers/unwind.h
++++ b/clang/lib/Headers/unwind.h
+@@ -9,9 +9,6 @@
+ 
+ /* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/
+ 
+-#ifndef __CLANG_UNWIND_H
+-#define __CLANG_UNWIND_H
+-
+ #if defined(__APPLE__) && __has_include_next(<unwind.h>)
+ /* Darwin (from 11.x on) provide an unwind.h. If that's available,
+  * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE,
+@@ -39,6 +36,9 @@
+ # endif
+ #else
+ 
++#ifndef __CLANG_UNWIND_H
++#define __CLANG_UNWIND_H
++
+ #include <stdint.h>
+ 
+ #ifdef __cplusplus
+@@ -322,6 +322,7 @@ _Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *);
+ }
+ #endif
+ 
++#endif /* __CLANG_UNWIND_H */
++
+ #endif
+ 
+-#endif /* __CLANG_UNWIND_H */
+-- 
+2.5.1
diff --git a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
new file mode 100644
index 000000000000..25688d40dbc2
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
@@ -0,0 +1,110 @@
+--- a/clang/lib/Driver/ToolChains/Gnu.cpp
++++ b/clang/lib/Driver/ToolChains/Gnu.cpp
+@@ -2086,7 +2086,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
+                                              "armv7hl-redhat-linux-gnueabi",
+                                              "armv6hl-suse-linux-gnueabi",
+-                                             "armv7hl-suse-linux-gnueabi"};
++                                             "armv7hl-suse-linux-gnueabi",
++                                             "armv7l-linux-gnueabihf"};
+   static const char *const ARMebLibDirs[] = {"/lib"};
+   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
+                                              "armeb-linux-androideabi"};
+@@ -2153,8 +2154,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
+   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
+   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
+-                                             "powerpcle-unknown-linux-gnu",
+-                                             "powerpcle-linux-musl"};
++                                             "powerpcle-unknown-linux-gnu"};
+ 
+   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
+   static const char *const PPC64Triples[] = {
+@@ -2235,6 +2235,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+     return;
+   }
+ 
++  if (TargetTriple.isMusl()) {
++    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
++    static const char *const ARMHFMuslTriples[] = {
++        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
++    };
++    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
++    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
++    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
++    static const char *const MIPSMuslTriples[] = {
++        "mips-linux-musl", "mipsel-linux-musl",
++        "mipsel-linux-muslhf", "mips-linux-muslhf"
++    };
++    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
++    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
++    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
++    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
++
++    switch (TargetTriple.getArch()) {
++    case llvm::Triple::aarch64:
++      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      break;
++    case llvm::Triple::arm:
++      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
++      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
++        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
++      } else {
++        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
++      }
++      break;
++    case llvm::Triple::x86_64:
++      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      break;
++    case llvm::Triple::x86:
++      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      break;
++    case llvm::Triple::mips:
++      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
++      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
++      break;
++    case llvm::Triple::ppc:
++      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      break;
++    case llvm::Triple::ppcle:
++      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      break;
++    case llvm::Triple::ppc64:
++      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      break;
++    case llvm::Triple::ppc64le:
++      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      break;
++    default:
++      break;
++    }
++    TripleAliases.push_back(TargetTriple.str());
++    if (TargetTriple.str() != BiarchTriple.str())
++      BiarchTripleAliases.push_back(BiarchTriple.str());
++    return;
++  }
++
+   // Android targets should not use GNU/Linux tools or libraries.
+   if (TargetTriple.isAndroid()) {
+     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
new file mode 100644
index 000000000000..4ad6412d1e6c
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
@@ -0,0 +1,13 @@
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -504,10 +504,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+     Loader = "ld.so.1";
+     break;
+   case llvm::Triple::ppc64:
+-    LibDir = "lib64";
+-    Loader =
+-        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
+-    break;
+   case llvm::Triple::ppc64le:
+     LibDir = "lib64";
+     Loader =
diff --git a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
new file mode 100644
index 000000000000..21fc8003c5f1
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
@@ -0,0 +1,48 @@
+--- a/clang/lib/Basic/Targets/PPC.h
++++ b/clang/lib/Basic/Targets/PPC.h
+@@ -415,11 +415,10 @@ public:
+       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
+     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
+       DataLayout = "e-m:e-i64:64-n32:64";
+-      ABI = "elfv2";
+     } else {
+       DataLayout = "E-m:e-i64:64-n32:64";
+-      ABI = "elfv1";
+     }
++    ABI = "elfv2";
+ 
+     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
+       LongDoubleWidth = LongDoubleAlign = 64;
+--- a/clang/lib/CodeGen/TargetInfo.cpp
++++ b/clang/lib/CodeGen/TargetInfo.cpp
+@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
+       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
+ 
+     if (Triple.isOSBinFormatELF()) {
+-      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
+-      if (getTarget().getABI() == "elfv2")
+-        Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      if (getTarget().getABI() == "elfv1")
++        Kind = PPC64_SVR4_ABIInfo::ELFv1;
+       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
+ 
+       return SetCGInfo(
+--- a/clang/lib/Driver/ToolChains/Clang.cpp
++++ b/clang/lib/Driver/ToolChains/Clang.cpp
+@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
+   const llvm::Triple &T = getToolChain().getTriple();
+   if (T.isOSBinFormatELF()) {
+     switch (getToolChain().getArch()) {
+-    case llvm::Triple::ppc64: {
+-      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
+-          T.isOSOpenBSD() || T.isMusl())
+-        ABIName = "elfv2";
+-      else
+-        ABIName = "elfv1";
+-      break;
+-    }
++    case llvm::Triple::ppc64:
+     case llvm::Triple::ppc64le:
+       ABIName = "elfv2";
+       break;
diff --git a/srcpkgs/llvm12/template b/srcpkgs/llvm12/template
index 7b361bbbf5bc..274b57183654 100644
--- a/srcpkgs/llvm12/template
+++ b/srcpkgs/llvm12/template
@@ -43,6 +43,12 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
+_enabled_projects="clang;lld"
+
+subpackages+=" clang12 libclang12 libclang12-cpp libllvm12 lld12 lld12-devel"
+
+configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+
 post_patch() {
 	# update config.guess for better platform detection
 	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
@@ -73,8 +79,10 @@ pre_configure() {
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
 			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
 		make ${makejobs} -C utils/TableGen
+		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
 		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
+		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
 		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
 		cd ../..
 	fi
@@ -117,6 +125,69 @@ do_install() {
 	fi
 }
 
+clang12_package() {
+	conflicts="clang"
+	lib32disabled=yes
+	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
+	 libclang12-${version}_${revision}"
+	short_desc+=" - C language family frontend"
+	homepage="https://clang.llvm.org/"
+	pkg_install() {
+		vmove usr/include/clang
+		vmove usr/include/clang-c
+		vmove "usr/bin/*clang*"
+		vmove usr/bin/c-index-test
+		vmove usr/lib/clang
+		vmove usr/lib/cmake/clang
+		vmove "usr/lib/libclang*.a"
+		vmove "usr/lib/libclang*.so"
+		vmove usr/share/clang
+		vmove usr/share/doc/clang
+		vmove usr/share/man/man1/clang.1
+	}
+}
+
+libclang12_package() {
+	short_desc+=" - C frontend runtime library"
+	pkg_install() {
+		vmove "usr/lib/libclang.so.*"
+	}
+}
+
+libclang12-cpp_package() {
+	short_desc+=" - C frontend runtime library (C++ interface)"
+	pkg_install() {
+		vmove "usr/lib/libclang-cpp.so.*"
+	}
+}
+
+lld12_package() {
+	conflicts="lld"
+	lib32disabled=yes
+	short_desc+=" - linker"
+	homepage="https://lld.llvm.org"
+	pkg_install() {
+		vmove usr/bin/lld*
+		vmove usr/bin/wasm-ld
+		vmove usr/bin/ld.lld*
+		vmove usr/bin/ld64.lld*
+		vmove usr/share/doc/lld
+	}
+}
+
+lld12-devel_package() {
+	conflicts="lld-devel"
+	lib32disabled=yes
+	short_desc+=" - linker - development files"
+	homepage="https://lld.llvm.org"
+	depends="lld12>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include/lld
+		vmove usr/lib/cmake/lld
+		vmove "usr/lib/liblld*a"
+	}
+}
+
 libllvm12_package() {
 	short_desc+=" - runtime library"
 	pkg_install() {

From 78d156cc0e8cbf8d6628dc316523878417e952be Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 05/29] chromium: update for llvm14

---
 srcpkgs/chromium/template | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/srcpkgs/chromium/template b/srcpkgs/chromium/template
index 0dce8772fdb8..8b604a349229 100644
--- a/srcpkgs/chromium/template
+++ b/srcpkgs/chromium/template
@@ -2,7 +2,7 @@
 pkgname=chromium
 # See https://chromiumdash.appspot.com/releases?platform=Linux for the latest version
 version=101.0.4951.41
-revision=1
+revision=2
 archs="i686* x86_64* aarch64* armv7l* ppc64le*"
 short_desc="Google's attempt at creating a safer, faster, and more stable browser"
 maintainer="Duncaen <duncaen@voidlinux.org>"
@@ -20,7 +20,7 @@ desc_option_debug="Build with debug symbols"
 desc_option_js_optimize="Optimize the JS used for Chromium's UI"
 desc_option_pipewire="Enable support for screen sharing for WebRTC via PipeWire"
 
-hostmakedepends="$(vopt_if clang "clang lld llvm12") python python3 pkgconf perl gperf bison ninja nodejs hwids
+hostmakedepends="$(vopt_if clang "clang lld llvm14") python python3 pkgconf perl gperf bison ninja nodejs hwids
  libatomic-devel libevent-devel libglib-devel $(vopt_if js_optimize openjdk) wayland-devel libepoxy-devel"
 makedepends="libpng-devel gtk+-devel gtk+3-devel nss-devel pciutils-devel
  libXi-devel libgcrypt-devel libgnome-keyring-devel cups-devel elfutils-devel
@@ -266,12 +266,6 @@ do_configure() {
 		'disable_fieldtrial_testing_config=true'
 
 		'is_official_build=true'
-
-		# segfaults with llvm-12.0.1
-		'is_cfi=false'
-		'use_thin_lto=false'
-		'use_cfi_icall=false'
-		'chrome_pgo_phase=0'
 	)
 
 	if [ "$CROSS_BUILD" ]; then

From bc3cf98e2b9f6019b8ca00c820a3b358b091d1a9 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 06/29] ghdl: update for llvm14

---
 srcpkgs/ghdl/patches/{llvm12.patch => llvm.patch} | 2 ++
 srcpkgs/ghdl/template                             | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)
 rename srcpkgs/ghdl/patches/{llvm12.patch => llvm.patch} (82%)

diff --git a/srcpkgs/ghdl/patches/llvm12.patch b/srcpkgs/ghdl/patches/llvm.patch
similarity index 82%
rename from srcpkgs/ghdl/patches/llvm12.patch
rename to srcpkgs/ghdl/patches/llvm.patch
index 8d2f76bfda06..9201816ae053 100644
--- a/srcpkgs/ghdl/patches/llvm12.patch
+++ b/srcpkgs/ghdl/patches/llvm.patch
@@ -7,6 +7,8 @@ index c1c1a6d..dad7c38 100755
         check_version 10.0 $llvm_version ||
         check_version 11.0 $llvm_version ||
 +       check_version 12.0 $llvm_version ||
++       check_version 13.0 $llvm_version ||
++       check_version 14.0 $llvm_version ||
         false; then
      echo "Debugging is enabled with llvm $llvm_version"
    else
diff --git a/srcpkgs/ghdl/template b/srcpkgs/ghdl/template
index e756d8c3cd87..9ca1169b22bd 100644
--- a/srcpkgs/ghdl/template
+++ b/srcpkgs/ghdl/template
@@ -7,7 +7,7 @@
 pkgname=ghdl
 reverts="20181129_1"
 version=1.0.0
-revision=1
+revision=2
 build_style=configure
 configure_args="--prefix=/usr --srcdir=.. --incdir=lib/ghdl/include"
 makedepends="zlib-devel"

From 8744d7d79b7b6f2bdf5e89453a5f8584fdb99df8 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 07/29] qt5: rebuild for llvm14

---
 srcpkgs/qt5/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index ee788fad2019..25f15583a42d 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -3,7 +3,7 @@ pkgname=qt5
 version=5.15.3+20220222
 # commit fcca82ca40a5d8a02a4ddd90846d070f2c58cfad
 # base repo: https://invent.kde.org/qt/qt/qt5
-revision=3
+revision=4
 build_style=meta
 hostmakedepends="cmake clang flex perl glib-devel pkg-config
  python re2c ruby which"

From fdc1b9b45f51d61cb9e93148eb181103a6188f85 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 08/29] tilix: rebuild for llvm14

---
 srcpkgs/tilix/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/tilix/template b/srcpkgs/tilix/template
index d8f014bc78c5..ac1bf7dd3bdd 100644
--- a/srcpkgs/tilix/template
+++ b/srcpkgs/tilix/template
@@ -1,7 +1,7 @@
 # Template file for 'tilix'
 pkgname=tilix
 version=1.9.4
-revision=3
+revision=4
 build_style=meson
 configure_args="-Db_lto=false"
 hostmakedepends="automake gettext-devel gdk-pixbuf glib-devel ldc po4a pkg-config

From 5a1cbff7e2cb513167841e803e7f1f4d905842b4 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 09/29] shiboken2: rebuild for llvm14

---
 srcpkgs/shiboken2/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/shiboken2/template b/srcpkgs/shiboken2/template
index b56613229c13..ab9d2c4cb8f9 100644
--- a/srcpkgs/shiboken2/template
+++ b/srcpkgs/shiboken2/template
@@ -1,7 +1,7 @@
 # Template file for 'shiboken2'
 pkgname=shiboken2
 version=5.15.2
-revision=4
+revision=5
 _pkgname="pyside-setup-opensource-src-${version}"
 wrksrc="${_pkgname/%5.14.2.1/5.14.2}"
 build_wrksrc="sources/shiboken2"

From c448e99709e362dd785b7348faec90e85e0ea8ab Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 10/29] gnome-builder: rebuild for llvm14

---
 srcpkgs/gnome-builder/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/gnome-builder/template b/srcpkgs/gnome-builder/template
index 93559b21774f..5a5a51893ae8 100644
--- a/srcpkgs/gnome-builder/template
+++ b/srcpkgs/gnome-builder/template
@@ -1,7 +1,7 @@
 # Template file for 'gnome-builder'
 pkgname=gnome-builder
 version=41.3
-revision=1
+revision=2
 build_style=meson
 build_helper=qemu
 configure_args="-Dhelp=true -Dnetwork_tests=false"

From c580f7815d7a81d7c4bd56bd27ebcd22b82635d6 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 11/29] bcc: rebuild for llvm14

---
 srcpkgs/bcc/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/bcc/template b/srcpkgs/bcc/template
index 54509b63d5a7..2cfa0a2977d0 100644
--- a/srcpkgs/bcc/template
+++ b/srcpkgs/bcc/template
@@ -1,7 +1,7 @@
 # Template file for 'bcc'
 pkgname=bcc
 version=0.24.0
-revision=1
+revision=2
 wrksrc="bcc"
 build_style=cmake
 configure_args="-DREVISION=${version} -DENABLE_LLVM_SHARED=1"

From 46690d5c043d37c6b3209ce8098e1a7cd85ab123 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 12/29] mesa: rebuild for llvm14

---
 srcpkgs/mesa/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/mesa/template b/srcpkgs/mesa/template
index c90500de7416..8f08262fb135 100644
--- a/srcpkgs/mesa/template
+++ b/srcpkgs/mesa/template
@@ -1,7 +1,7 @@
 # Template file for 'mesa'
 pkgname=mesa
 version=21.3.7
-revision=1
+revision=2
 build_style=meson
 configure_args="-Dglvnd=true -Dshared-glapi=enabled -Dgbm=enabled -Degl=enabled
  -Dosmesa=true -Dgles1=enabled -Dgles2=enabled -Dglx=dri -Ddri3=enabled

From 127a0bb67ac383aecbbe9025649c63cc2ae4a743 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 13/29] juCi++: rebuild for llvm14

---
 srcpkgs/juCi++/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/juCi++/template b/srcpkgs/juCi++/template
index 1a7604b44a00..5103324dec20 100644
--- a/srcpkgs/juCi++/template
+++ b/srcpkgs/juCi++/template
@@ -1,7 +1,7 @@
 # Template file for 'juCi++'
 pkgname=juCi++
 version=1.6.2
-revision=2
+revision=3
 _libclangmm_commit="b342f4dd6de4fe509a692a4b4fcfc7e24aae9590"
 _tiny_commit="c9c8bf810ddad8cd17882b9a9ee628a690e779f5"
 wrksrc="jucipp-v${version}"

From 394ee70e8242cfee71f4afee3dc30ef81f0e7cff Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 14/29] kdevelop: rebuild for llvm14

---
 srcpkgs/kdevelop/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/kdevelop/template b/srcpkgs/kdevelop/template
index 010185849d80..abf08c313071 100644
--- a/srcpkgs/kdevelop/template
+++ b/srcpkgs/kdevelop/template
@@ -1,7 +1,7 @@
 # Template file for 'kdevelop'
 pkgname=kdevelop
 version=21.12.3
-revision=1
+revision=2
 build_style=cmake
 configure_args="-DBUILD_TESTING=OFF"
 hostmakedepends="extra-cmake-modules qt5-qmake qt5-host-tools qt5-tools

From b8e909079e1f1f70b87876da73ad6b1718f2a24d Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 15/29] codelite: rebuild for llvm14

---
 srcpkgs/codelite/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/codelite/template b/srcpkgs/codelite/template
index 3a993a2c0cfb..24e2c879dd45 100644
--- a/srcpkgs/codelite/template
+++ b/srcpkgs/codelite/template
@@ -1,7 +1,7 @@
 # Template file for 'codelite'
 pkgname=codelite
 version=15.0.6
-revision=1
+revision=2
 build_style=cmake
 build_helper=cmake-wxWidgets-gtk3
 configure_args="-DWITH_PCH=0 -DWITH_WX_CONFIG=wx-config-gtk3

From 72aad906e80a17ccc97398f1324176e9d0cf3857 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 16/29] ccls: rebuild for llvm14

---
 srcpkgs/ccls/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/ccls/template b/srcpkgs/ccls/template
index fbb7c6847bc1..40aba3b55bfe 100644
--- a/srcpkgs/ccls/template
+++ b/srcpkgs/ccls/template
@@ -1,7 +1,7 @@
 # Template file for 'ccls'
 pkgname=ccls
 version=0.20210330
-revision=2
+revision=3
 build_style=cmake
 hostmakedepends="clang-tools-extra"
 makedepends="llvm ncurses-devel rapidjson zlib-devel clang-tools-extra"

From 313b9dcaed208ddc1198390cdf5d0f60e01c00c1 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 17/29] clazy: rebuild for llvm14

---
 srcpkgs/clazy/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/clazy/template b/srcpkgs/clazy/template
index 11f3bab55aef..f81de08ab836 100644
--- a/srcpkgs/clazy/template
+++ b/srcpkgs/clazy/template
@@ -1,7 +1,7 @@
 # Template file for 'clazy'
 pkgname=clazy
 version=1.11
-revision=1
+revision=2
 build_style=cmake
 build_helper=qemu
 hostmakedepends="llvm"

From 4550c56aeda7a1fb90cc0c8f1b584a2d1c2ea400 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 18/29] bpftrace: rebuild for llvm14

---
 srcpkgs/bpftrace/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/bpftrace/template b/srcpkgs/bpftrace/template
index 28ab3c626399..eb2480d2230e 100644
--- a/srcpkgs/bpftrace/template
+++ b/srcpkgs/bpftrace/template
@@ -1,7 +1,7 @@
 # Template file for 'bpftrace'
 pkgname=bpftrace
 version=0.14.1
-revision=1
+revision=2
 archs="x86_64* aarch64* ppc64*"
 build_style=cmake
 configure_args="-DBUILD_TESTING=OFF"  # needs root to run

From bd26ab8eff3ab9fc7c1450122507057bda8429fb Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 19/29] rtags: rebuild for llvm14

---
 srcpkgs/rtags/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/rtags/template b/srcpkgs/rtags/template
index b496a1b0e721..9b161e690d76 100644
--- a/srcpkgs/rtags/template
+++ b/srcpkgs/rtags/template
@@ -1,7 +1,7 @@
 # Template file for 'rtags'
 pkgname=rtags
 version=2.38
-revision=5
+revision=6
 build_style=cmake
 # Don't run tests in do_install, please.
 configure_args="-DSKIP_CTEST=TRUE"

From 85c1d5ed55c9cfec26fb359efdf77773f30bc64c Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:07:19 +0200
Subject: [PATCH 20/29] beignet: remove package

---
 srcpkgs/beignet/patches/cl_uint.patch         |  22 -
 ...419a0008e38ef2d9d255d9e9c74e9fba084b.patch | 134 ---
 srcpkgs/beignet/patches/llvm06.patch          |  33 -
 srcpkgs/beignet/patches/llvm08.patch          |  56 --
 srcpkgs/beignet/patches/llvm09.patch          | 111 ---
 srcpkgs/beignet/patches/llvm10.patch          | 347 -------
 srcpkgs/beignet/patches/llvm11.patch          | 937 ------------------
 srcpkgs/beignet/patches/llvm12.patch          | 115 ---
 srcpkgs/beignet/patches/musl.patch            |  11 -
 srcpkgs/beignet/template                      |  22 -
 srcpkgs/beignet/update                        |   1 -
 srcpkgs/removed-packages/template             |   3 +-
 12 files changed, 2 insertions(+), 1790 deletions(-)
 delete mode 100644 srcpkgs/beignet/patches/cl_uint.patch
 delete mode 100644 srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm06.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm08.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm09.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm10.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm11.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm12.patch
 delete mode 100644 srcpkgs/beignet/patches/musl.patch
 delete mode 100644 srcpkgs/beignet/template
 delete mode 100644 srcpkgs/beignet/update

diff --git a/srcpkgs/beignet/patches/cl_uint.patch b/srcpkgs/beignet/patches/cl_uint.patch
deleted file mode 100644
index 86ba00f04e95..000000000000
--- a/srcpkgs/beignet/patches/cl_uint.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/src/cl_api_kernel.c	2017-09-22 10:05:22.000000000 +0200
-+++ b/src/cl_api_kernel.c	2020-03-24 18:27:40.186485887 +0100
-@@ -151,7 +151,7 @@
-         fixed_local_sz[0] = 16;
-         fixed_local_sz[1] = 1;
-       } else {
--        uint j, maxDimSize = 64 /* from 64? */, maxGroupSize = 256; //MAX_WORK_GROUP_SIZE may too large
-+        cl_uint j, maxDimSize = 64 /* from 64? */, maxGroupSize = 256; //MAX_WORK_GROUP_SIZE may too large
-         size_t realGroupSize = 1;
-         for (i = 0; i < work_dim; i++) {
-           for (j = maxDimSize; j > 1; j--) {
---- a/src/cl_enqueue.c	2017-09-22 10:05:22.000000000 +0200
-+++ b/src/cl_enqueue.c	2020-03-24 18:30:12.031479833 +0100
-@@ -494,7 +494,7 @@
- cl_int cl_enqueue_svm_free(enqueue_data *data, cl_int status) {
-   int i;
-   void **pointers = data->pointers;
--  uint num_svm_ptrs = data->size;
-+  cl_uint num_svm_ptrs = data->size;
-   cl_int err = CL_SUCCESS;
- 
-   if (status != CL_COMPLETE)
diff --git a/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch b/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
deleted file mode 100644
index 8de9e6e2f093..000000000000
--- a/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
+++ /dev/null
@@ -1,134 +0,0 @@
-From e1b2419a0008e38ef2d9d255d9e9c74e9fba084b Mon Sep 17 00:00:00 2001
-From: "Rebecca N. Palmer" <rebecca_palmer@zoho.com>
-Date: Sat, 21 Jul 2018 20:05:54 +0100
-Subject: Add preliminary LLVM 7 support
-
-This is preliminary because LLVM 7 has not been released yet:
-it was tested with the snapshot from Debian experimental (svn336894).
-
-1.Change linking order, as clangCodeGen now links to clangFrontend
-2.Pass references not pointers to WriteBitcodeToFile and CloneModule
-3.Add the headers that LoopSimplifyID, LCSSAID and
-some create*Pass have moved to
-4.Define our DEBUG whether or not we just undefined LLVM's
-(theirs is now LLVM_DEBUG, but we never actually use it)
-
-Signed-off-by: Rebecca N. Palmer <rebecca_palmer@zoho.com>
-Reviewed-by: Yang Rong <rong.r.yang@intel.com>
----
- CMake/FindLLVM.cmake                     | 2 +-
- backend/src/backend/gen_program.cpp      | 8 ++++++++
- backend/src/backend/program.cpp          | 4 ++++
- backend/src/llvm/ExpandLargeIntegers.cpp | 2 +-
- backend/src/llvm/llvm_bitcode_link.cpp   | 4 ++++
- backend/src/llvm/llvm_includes.hpp       | 4 ++++
- 6 files changed, 22 insertions(+), 2 deletions(-)
-
-diff --git a/CMake/FindLLVM.cmake b/CMake/FindLLVM.cmake
-index 5457f24..f882589 100644
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -113,10 +113,10 @@ macro(add_one_lib name)
- endmacro()
- 
- #Assume clang lib path same as llvm lib path
-+add_one_lib("clangCodeGen")
- add_one_lib("clangFrontend")
- add_one_lib("clangSerialization")
- add_one_lib("clangDriver")
--add_one_lib("clangCodeGen")
- add_one_lib("clangSema")
- add_one_lib("clangStaticAnalyzerFrontend")
- add_one_lib("clangStaticAnalyzerCheckers")
-diff --git a/backend/src/backend/gen_program.cpp b/backend/src/backend/gen_program.cpp
-index 274c99c..4159234 100644
---- a/backend/src/backend/gen_program.cpp
-+++ b/backend/src/backend/gen_program.cpp
-@@ -454,7 +454,11 @@ namespace gbe {
- #ifdef GBE_COMPILER_AVAILABLE
-       std::string str;
-       llvm::raw_string_ostream OS(str);
-+#if LLVM_VERSION_MAJOR >= 7
-+      llvm::WriteBitcodeToFile(*((llvm::Module*)prog->module), OS);
-+#else
-       llvm::WriteBitcodeToFile((llvm::Module*)prog->module, OS);
-+#endif
-       std::string& bin_str = OS.str();
-       int llsz = bin_str.size();
-       *binary = (char *)malloc(sizeof(char) * (llsz+1) );
-@@ -545,7 +549,11 @@ namespace gbe {
-                                     &modRef);
-         src = llvm::unwrap(modRef);
-       }
-+#if LLVM_VERSION_MAJOR >= 7
-+      llvm::Module* clone = llvm::CloneModule(*src).release();
-+#else
-       llvm::Module* clone = llvm::CloneModule(src).release();
-+#endif
-       if (LLVMLinkModules2(wrap(dst), wrap(clone))) {
- #elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-       if (LLVMLinkModules(wrap(dst), wrap(src), LLVMLinkerPreserveSource_Removed, &errMsg)) {
-diff --git a/backend/src/backend/program.cpp b/backend/src/backend/program.cpp
-index c37c595..b36f7b4 100644
---- a/backend/src/backend/program.cpp
-+++ b/backend/src/backend/program.cpp
-@@ -794,7 +794,11 @@ namespace gbe {
-       llvm::raw_fd_ostream ostream (dumpSPIRBinaryName.c_str(),
-                                     err, llvm::sys::fs::F_None);
-       if (!err)
-+#if LLVM_VERSION_MAJOR<7
-         llvm::WriteBitcodeToFile(*out_module, ostream);
-+#else
-+        llvm::WriteBitcodeToFile(**out_module, ostream);
-+#endif
-     }
- #endif
-     return true;
-diff --git a/backend/src/llvm/ExpandLargeIntegers.cpp b/backend/src/llvm/ExpandLargeIntegers.cpp
-index 8515dc1..4aec44e 100644
---- a/backend/src/llvm/ExpandLargeIntegers.cpp
-+++ b/backend/src/llvm/ExpandLargeIntegers.cpp
-@@ -99,8 +99,8 @@ using namespace llvm;
- 
- #ifdef DEBUG
-   #undef DEBUG
--  #define DEBUG(...)
- #endif
-+#define DEBUG(...)
- // Break instructions up into no larger than 64-bit chunks.
- static const unsigned kChunkBits = 64;
- static const unsigned kChunkBytes = kChunkBits / CHAR_BIT;
-diff --git a/backend/src/llvm/llvm_bitcode_link.cpp b/backend/src/llvm/llvm_bitcode_link.cpp
-index ef56e4c..4c3e20e 100644
---- a/backend/src/llvm/llvm_bitcode_link.cpp
-+++ b/backend/src/llvm/llvm_bitcode_link.cpp
-@@ -340,7 +340,11 @@ namespace gbe
-     /* We use beignet's bitcode as dst because it will have a lot of
-        lazy functions which will not be loaded. */
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 39
-+#if LLVM_VERSION_MAJOR >= 7
-+    llvm::Module * linked_module = llvm::CloneModule(*(llvm::Module*)mod).release();
-+#else
-     llvm::Module * linked_module = llvm::CloneModule((llvm::Module*)mod).release();
-+#endif
-     if(LLVMLinkModules2(wrap(clonedLib), wrap(linked_module))) {
- #else
-     char* errorMsg;
-diff --git a/backend/src/llvm/llvm_includes.hpp b/backend/src/llvm/llvm_includes.hpp
-index 184553a..ffccf02 100644
---- a/backend/src/llvm/llvm_includes.hpp
-+++ b/backend/src/llvm/llvm_includes.hpp
-@@ -89,6 +89,10 @@
- #include "llvm/CodeGen/IntrinsicLowering.h"
- 
- #include "llvm/Transforms/Scalar.h"
-+#if LLVM_VERSION_MAJOR >= 7
-+#include "llvm/Transforms/Utils.h"
-+#include "llvm/Transforms/InstCombine/InstCombine.h"
-+#endif
- #include "llvm/MC/MCAsmInfo.h"
- #include "llvm/MC/MCContext.h"
- #include "llvm/MC/MCInstrInfo.h"
--- 
-cgit v1.1
-
diff --git a/srcpkgs/beignet/patches/llvm06.patch b/srcpkgs/beignet/patches/llvm06.patch
deleted file mode 100644
index 3389e66c82df..000000000000
--- a/srcpkgs/beignet/patches/llvm06.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-Source: Arch Linux
-Upstream: unknown
-Reason: fixes llvm6 compilation
-
---- a/backend/src/llvm/llvm_to_gen.cpp	2017-10-24 09:04:48.000000000 +0300
-+++ b/backend/src/llvm/llvm_to_gen.cpp	2018-03-16 16:08:54.669963824 +0200
-@@ -322,7 +322,11 @@ namespace gbe
-     DataLayout DL(&mod);
-     
-     gbeDiagnosticContext dc;
-+#if LLVM_VERSION_MAJOR >= 6
-+    mod.getContext().setDiagnosticHandlerCallBack(&gbeDiagnosticHandler,&dc);
-+#else
-     mod.getContext().setDiagnosticHandler(&gbeDiagnosticHandler,&dc);
-+#endif
- 
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-     mod.setDataLayout(DL);
---- a/backend/src/llvm/llvm_unroll.cpp	2017-10-24 09:04:48.000000000 +0300
-+++ b/backend/src/llvm/llvm_unroll.cpp	2018-03-16 16:09:47.736403557 +0200
-@@ -205,7 +205,9 @@ namespace gbe {
-           if (parentTripCount != 0 && currTripCount * parentTripCount > 32) {
-             //Don't change the unrollID if doesn't force unroll.
-             //setUnrollID(parentL, false);
--#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-+#if LLVM_VERSION_MAJOR >= 6
-+            loopInfo.erase(parentL);
-+#elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-             loopInfo.markAsRemoved(parentL);
- #else
-             LPM.deleteLoopFromQueue(parentL);
-Only in Beignet-1.3.2-Source: build
-
diff --git a/srcpkgs/beignet/patches/llvm08.patch b/srcpkgs/beignet/patches/llvm08.patch
deleted file mode 100644
index a0c5e7a7c4f7..000000000000
--- a/srcpkgs/beignet/patches/llvm08.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 75c152599a7c1739e6dadcdb9b377acf7e44d9cf Mon Sep 17 00:00:00 2001
-From: Jan Beich <jbeich@FreeBSD.org>
-Date: Wed, 30 Jan 2019 12:42:34 +0000
-Subject: [PATCH] lang/beignet: unbreak with llvm80
-
-Regressed by https://github.com/llvm/llvm-project/commit/721d95713a9e
-
-unable to load /usr/local/lib/beignet//libgbeinterp.so which is part of the driver, please check!
-ld-elf.so.1: /usr/local/lib/beignet//libgbeinterp.so: Undefined symbol "_ZN4llvm24DisableABIBreakingChecksE"
-
-Regressed by https://github.com/llvm/llvm-project/commit/4a2d58e16acc
-
-backend/src/llvm/llvm_gen_backend.cpp:3076:5: error:
-      unknown type name 'TerminatorInst'
-    TerminatorInst *term = bb->getTerminator();
-    ^
-backend/src/llvm/llvm_gen_backend.cpp:3083:5: error:
-      unknown type name 'TerminatorInst'
-    TerminatorInst *term = bb->getTerminator();
-    ^
-
---- a/backend/src/CMakeLists.txt	2017-09-22 08:05:22 UTC
-+++ b/backend/src/CMakeLists.txt
-@@ -168,6 +168,7 @@ add_dependencies(gbe beignet_bitcode)
- endif (NOT (USE_STANDALONE_GBE_COMPILER STREQUAL "true"))
- 
- add_library(gbeinterp SHARED gbe_bin_interpreter.cpp)
-+target_link_libraries(gbeinterp ${LLVM_MODULE_LIBS})
- 
- if (LLVM_VERSION_NODOT VERSION_EQUAL 34)
-   find_library(TERMINFO NAMES tinfo ncurses)
---- a/backend/src/llvm/llvm_gen_backend.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -3073,14 +3073,22 @@ namespace gbe
- 
- 
-   static unsigned getChildNo(BasicBlock *bb) {
-+#if LLVM_VERSION_MAJOR < 8
-     TerminatorInst *term = bb->getTerminator();
-+#else
-+    Instruction *term = bb->getTerminator();
-+#endif
-     return term->getNumSuccessors();
-   }
- 
-   // return NULL if index out-range of children number
-   static BasicBlock *getChildPossible(BasicBlock *bb, unsigned index) {
- 
-+#if LLVM_VERSION_MAJOR < 8
-     TerminatorInst *term = bb->getTerminator();
-+#else
-+    Instruction *term = bb->getTerminator();
-+#endif
-     unsigned childNo = term->getNumSuccessors();
-     BasicBlock *child = NULL;
-     if(index < childNo) {
diff --git a/srcpkgs/beignet/patches/llvm09.patch b/srcpkgs/beignet/patches/llvm09.patch
deleted file mode 100644
index acaeceabb6dd..000000000000
--- a/srcpkgs/beignet/patches/llvm09.patch
+++ /dev/null
@@ -1,111 +0,0 @@
-Source: FreeBSD + q66
-
-Mostly FreeBSD other than FindLLVM.cmake changes.
-Linking against clang-cpp does not work for us.
-
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -140,6 +140,7 @@ add_one_lib("clangStaticAnalyzerCore")
- add_one_lib("clangAnalysis")
- add_one_lib("clangEdit")
- add_one_lib("clangAST")
-+add_one_lib("clangASTMatchers")
- add_one_lib("clangParse")
- add_one_lib("clangSema")
- add_one_lib("clangLex")
---- a/backend/src/llvm/llvm_intrinsic_lowering.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_intrinsic_lowering.cpp
-@@ -77,7 +77,11 @@ namespace gbe {
-         std::vector<Type *> ParamTys;
-         for (Value** I = ArgBegin; I != ArgEnd; ++I)
-           ParamTys.push_back((*I)->getType());
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+        FunctionCallee FCache = M->getOrInsertFunction(NewFn,
-+#else
-         Constant* FCache = M->getOrInsertFunction(NewFn,
-+#endif
-                                         FunctionType::get(RetTy, ParamTys, false));
- 
-         IRBuilder<> Builder(CI->getParent(), BasicBlock::iterator(CI));
---- a/backend/src/llvm/llvm_sampler_fix.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp
-@@ -82,7 +82,11 @@ namespace gbe {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-           Module *M = I->getParent()->getParent()->getParent();
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+          FunctionCallee samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#endif
- #else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType(), nullptr);
- #endif
-@@ -124,7 +128,11 @@ namespace gbe {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-           Module *M = I->getParent()->getParent()->getParent();
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+          FunctionCallee samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#endif
- #else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType(), nullptr);
- #endif
---- a/backend/src/llvm/llvm_profiling.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_profiling.cpp
-@@ -163,10 +163,18 @@ namespace gbe
-       // __gen_ocl_store_timestamp(int nth, int type);
-       Value *Args[2] = {ConstantInt::get(intTy, pointNum++), ConstantInt::get(intTy, profilingType)};
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+      builder->CreateCall(module->getOrInsertFunction(
-+#else
-       builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-+#endif
-               "__gen_ocl_calc_timestamp", Type::getVoidTy(module->getContext()),
-               IntegerType::getInt32Ty(module->getContext()),
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+              IntegerType::getInt32Ty(module->getContext())),
-+#else
-               IntegerType::getInt32Ty(module->getContext()))),
-+#endif
-               ArrayRef<Value*>(Args));
- #else
-       builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-@@ -185,10 +193,18 @@ namespace gbe
-     Value *Args2[2] = {profilingBuf, ConstantInt::get(intTy, profilingType)};
- 
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+    builder->CreateCall(module->getOrInsertFunction(
-+#else
-     builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-+#endif
-             "__gen_ocl_store_profiling", Type::getVoidTy(module->getContext()),
-             ptrTy,
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+            IntegerType::getInt32Ty(module->getContext())),
-+#else
-             IntegerType::getInt32Ty(module->getContext()))),
-+#endif
-             ArrayRef<Value*>(Args2));
- #else
-     builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
---- a/backend/src/llvm/llvm_device_enqueue.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_device_enqueue.cpp
-@@ -398,8 +398,13 @@ namespace gbe {
-               std::vector<Type *> ParamTys;
-               for (Value** iter = args.begin(); iter != args.end(); ++iter)
-                 ParamTys.push_back((*iter)->getType());
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+              CallInst* newCI = builder.CreateCall(mod->getOrInsertFunction(
-+                              "__gen_enqueue_kernel_slm", FunctionType::get(intTy, ParamTys, false)), args);
-+#else
-               CallInst* newCI = builder.CreateCall(cast<llvm::Function>(mod->getOrInsertFunction(
-                               "__gen_enqueue_kernel_slm", FunctionType::get(intTy, ParamTys, false))), args);
-+#endif
-               CI->replaceAllUsesWith(newCI);
-               deadInsnSet.insert(CI);
-             }
diff --git a/srcpkgs/beignet/patches/llvm10.patch b/srcpkgs/beignet/patches/llvm10.patch
deleted file mode 100644
index 8aafe48a240d..000000000000
--- a/srcpkgs/beignet/patches/llvm10.patch
+++ /dev/null
@@ -1,347 +0,0 @@
-diff --git CMake/FindLLVM.cmake CMake/FindLLVM.cmake
-index 0a59e47..6e90923 100644
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -104,28 +104,16 @@ string(REGEX REPLACE " *\n" "" LLVM_SYSTEM_LIBS ${LLVM_SYSTEM_LIBS_ORIG})
- endif (LLVM_SYSTEM_LIBS_ORIG)
- endif (LLVM_VERSION_NODOT VERSION_GREATER 34)
- 
-+#something harmless because whitespace at start is an error
-+set(CLANG_LIBRARIES "-ldl")
- macro(add_one_lib name)
-   FIND_LIBRARY(CLANG_LIB
-     NAMES ${name}
-     PATHS ${LLVM_LIBRARY_DIR} NO_DEFAULT_PATH)
--  set(CLANG_LIBRARIES ${CLANG_LIBRARIES} ${CLANG_LIB})
-+  set(CLANG_LIBRARIES "${CLANG_LIBRARIES} ${CLANG_LIB}")
-+  message(STATUS "clanglibs name ${name} this ${CLANG_LIB} all ${CLANG_LIBRARIES} ")
- 	unset(CLANG_LIB CACHE)
- endmacro()
- 
- #Assume clang lib path same as llvm lib path
--add_one_lib("clangCodeGen")
--add_one_lib("clangFrontend")
--add_one_lib("clangSerialization")
--add_one_lib("clangDriver")
--add_one_lib("clangSema")
--add_one_lib("clangStaticAnalyzerFrontend")
--add_one_lib("clangStaticAnalyzerCheckers")
--add_one_lib("clangStaticAnalyzerCore")
--add_one_lib("clangAnalysis")
--add_one_lib("clangEdit")
--add_one_lib("clangAST")
--add_one_lib("clangASTMatchers")
--add_one_lib("clangParse")
--add_one_lib("clangSema")
--add_one_lib("clangLex")
--add_one_lib("clangBasic")
-+add_one_lib("clang-cpp")
-diff --git CMakeLists.txt CMakeLists.txt
-index c11acbb..08f427d 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -79,7 +79,7 @@ elseif (COMPILER STREQUAL "CLANG")
- elseif (COMPILER STREQUAL "ICC")
-   set (CMAKE_C_CXX_FLAGS "${CMAKE_C_CXX_FLAGS}  -wd2928 -Wall -fPIC -fstrict-aliasing -fp-model fast -msse4.1 -Wl,-E")
- endif ()
--set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
-+set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof")
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
- set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
- set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
-diff --git backend/src/backend/program.cpp backend/src/backend/program.cpp
-index b36f7b4..e666031 100644
---- a/backend/src/backend/program.cpp
-+++ b/backend/src/backend/program.cpp
-@@ -694,9 +694,9 @@ namespace gbe {
- #endif
-                 );
- 
-+    llvm::cl::ResetAllOptionOccurrences();
-     clang::CompilerInvocation::CreateFromArgs(*CI,
--                                              &args[0],
--                                              &args[0] + args.size(),
-+                                              clang::ArrayRef<const char*>(args),
-                                               Diags);
-     // Create the compiler instance
-     clang::CompilerInstance Clang;
-@@ -1242,8 +1242,7 @@ EXTEND_QUOTE:
-       // Create the compiler invocation
-       std::unique_ptr<clang::CompilerInvocation> CI(new clang::CompilerInvocation);
-       return clang::CompilerInvocation::CreateFromArgs(*CI,
--                                                       &args[0],
--                                                       &args[0] + args.size(),
-+                                                       clang::ArrayRef<const char*>(args),
-                                                        Diags);
-     }
- #endif
-diff --git backend/src/llvm/llvm_gen_backend.cpp backend/src/llvm/llvm_gen_backend.cpp
-index c6fc30d..82441d8 100644
---- a/backend/src/llvm/llvm_gen_backend.cpp
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -575,10 +575,12 @@ namespace gbe
-         has_errors(false),
-         legacyMode(true)
-     {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-       initializeLoopInfoWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeLoopInfoPass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-       pass = PASS_EMIT_REGISTERS;
-     }
-diff --git backend/src/llvm/llvm_gen_backend.hpp backend/src/llvm/llvm_gen_backend.hpp
-index b4715b1..8e74f7a 100644
---- a/backend/src/llvm/llvm_gen_backend.hpp
-+++ b/backend/src/llvm/llvm_gen_backend.hpp
-@@ -130,10 +130,10 @@ namespace gbe
-   llvm::FunctionPass *createGenPass(ir::Unit &unit);
- 
-   /*! Remove the GEP instructions */
--  llvm::BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit);
-+  llvm::FunctionPass *createRemoveGEPPass(const ir::Unit &unit);
- 
-   /*! Merge load/store if possible */
--  llvm::BasicBlockPass *createLoadStoreOptimizationPass();
-+  llvm::FunctionPass *createLoadStoreOptimizationPass();
- 
-   /*! Scalarize all vector op instructions */
-   llvm::FunctionPass* createScalarizePass();
-@@ -141,7 +141,7 @@ namespace gbe
-   llvm::ModulePass* createBarrierNodupPass(bool);
- 
-   /*! Convert the Intrinsic call to gen function */
--  llvm::BasicBlockPass *createIntrinsicLoweringPass();
-+  llvm::FunctionPass *createIntrinsicLoweringPass();
- 
-   /*! Passer the printf function call. */
-   llvm::FunctionPass* createPrintfParserPass(ir::Unit &unit);
-diff --git backend/src/llvm/llvm_intrinsic_lowering.cpp backend/src/llvm/llvm_intrinsic_lowering.cpp
-index 94f0ce6..b5539e9 100644
---- a/backend/src/llvm/llvm_intrinsic_lowering.cpp
-+++ b/backend/src/llvm/llvm_intrinsic_lowering.cpp
-@@ -29,12 +29,12 @@
- using namespace llvm;
- 
- namespace gbe {
--    class InstrinsicLowering : public BasicBlockPass
-+    class InstrinsicLowering : public FunctionPass
-     {
-     public:
-       static char ID;
-       InstrinsicLowering() :
--        BasicBlockPass(ID) {}
-+        FunctionPass(ID) {}
- 
-       void getAnalysisUsage(AnalysisUsage &AU) const {
- 
-@@ -93,9 +93,9 @@ namespace gbe {
-         CI->eraseFromParent();
-         return NewCI;
-       }
--      virtual bool runOnBasicBlock(BasicBlock &BB)
-+      virtual bool runOnFunction(Function &F)
-       {
--        bool changedBlock = false;
-+        for (BasicBlock &BB : F) {
-         Module *M = BB.getParent()->getParent();
- 
-         DataLayout TD(M);
-@@ -159,13 +159,14 @@ namespace gbe {
-             }
-           }
-         }
--        return changedBlock;
-+        }
-+        return true;
-       }
-     };
- 
-     char InstrinsicLowering::ID = 0;
- 
--    BasicBlockPass *createIntrinsicLoweringPass() {
-+    FunctionPass *createIntrinsicLoweringPass() {
-       return new InstrinsicLowering();
-     }
- } // end namespace
-diff --git backend/src/llvm/llvm_loadstore_optimization.cpp backend/src/llvm/llvm_loadstore_optimization.cpp
-index 5aa38be..e314302 100644
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
-@@ -26,13 +26,13 @@
- 
- using namespace llvm;
- namespace gbe {
--  class GenLoadStoreOptimization : public BasicBlockPass {
-+  class GenLoadStoreOptimization : public FunctionPass {
- 
-   public:
-     static char ID;
-     ScalarEvolution *SE;
-     const DataLayout *TD;
--    GenLoadStoreOptimization() : BasicBlockPass(ID) {}
-+    GenLoadStoreOptimization() : FunctionPass(ID) {}
- 
-     void getAnalysisUsage(AnalysisUsage &AU) const {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-@@ -45,7 +45,9 @@ namespace gbe {
-       AU.setPreservesCFG();
-     }
- 
--    virtual bool runOnBasicBlock(BasicBlock &BB) {
-+    virtual bool runOnFunction(Function &F) {
-+        bool changedAnyBlock = false;
-+        for (BasicBlock &BB : F) {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-       SE = &getAnalysis<ScalarEvolutionWrapperPass>().getSE();
- #else
-@@ -59,7 +61,9 @@ namespace gbe {
-       #else
-         TD = getAnalysisIfAvailable<DataLayout>();
-       #endif
--      return optimizeLoadStore(BB);
-+           changedAnyBlock = optimizeLoadStore(BB) | changedAnyBlock;
-+        }
-+        return changedAnyBlock;
-     }
-     Type    *getValueType(Value *insn);
-     Value   *getPointerOperand(Value *I);
-@@ -148,7 +152,7 @@ namespace gbe {
-       values.push_back(merged[i]);
-     }
-     LoadInst *ld = cast<LoadInst>(merged[0]);
--    unsigned align = ld->getAlignment();
-+    MaybeAlign align = ld->getAlign();
-     unsigned addrSpace = ld->getPointerAddressSpace();
-     // insert before first load
-     Builder.SetInsertPoint(ld);
-@@ -231,7 +235,7 @@ namespace gbe {
- 
-     unsigned addrSpace = st->getPointerAddressSpace();
- 
--    unsigned align = st->getAlignment();
-+    MaybeAlign align = st->getAlign();
-     // insert before the last store
-     Builder.SetInsertPoint(merged[size-1]);
- 
-@@ -325,7 +329,7 @@ namespace gbe {
-     return changed;
-   }
- 
--  BasicBlockPass *createLoadStoreOptimizationPass() {
-+  FunctionPass *createLoadStoreOptimizationPass() {
-     return new GenLoadStoreOptimization();
-   }
- };
-diff --git backend/src/llvm/llvm_passes.cpp backend/src/llvm/llvm_passes.cpp
-index 10752a3..b8f2282 100644
---- a/backend/src/llvm/llvm_passes.cpp
-+++ b/backend/src/llvm/llvm_passes.cpp
-@@ -37,7 +37,7 @@
- #include "sys/map.hpp"
- 
- using namespace llvm;
--
-+template class cfg::Update<BasicBlock *>;
- namespace gbe
- {
-   bool isKernelFunction(const llvm::Function &F) {
-@@ -219,13 +219,13 @@ namespace gbe
-     return offset;
-   }
- 
--  class GenRemoveGEPPasss : public BasicBlockPass
-+  class GenRemoveGEPPasss : public FunctionPass
-   {
- 
-    public:
-     static char ID;
-     GenRemoveGEPPasss(const ir::Unit &unit) :
--      BasicBlockPass(ID),
-+      FunctionPass(ID),
-       unit(unit) {}
-     const ir::Unit &unit;
-     void getAnalysisUsage(AnalysisUsage &AU) const {
-@@ -242,16 +242,18 @@ namespace gbe
- 
-     bool simplifyGEPInstructions(GetElementPtrInst* GEPInst);
- 
--    virtual bool runOnBasicBlock(BasicBlock &BB)
-+    virtual bool runOnFunction(Function &F)
-     {
--      bool changedBlock = false;
-+      bool changedAnyBlock = false;
-+        for (BasicBlock &BB : F) {
-       iplist<Instruction>::iterator I = BB.getInstList().begin();
-       for (auto nextI = I, E = --BB.getInstList().end(); I != E; I = nextI) {
-         iplist<Instruction>::iterator I = nextI++;
-         if(GetElementPtrInst* gep = dyn_cast<GetElementPtrInst>(&*I))
--          changedBlock = (simplifyGEPInstructions(gep) || changedBlock);
-+          changedAnyBlock = (simplifyGEPInstructions(gep) | changedAnyBlock);
-       }
--      return changedBlock;
-+        }
-+      return changedAnyBlock;
-     }
-   };
- 
-@@ -367,7 +369,7 @@ namespace gbe
-     return true;
-   }
- 
--  BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit) {
-+  FunctionPass *createRemoveGEPPass(const ir::Unit &unit) {
-     return new GenRemoveGEPPasss(unit);
-   }
- } /* namespace gbe */
-diff --git backend/src/llvm/llvm_sampler_fix.cpp backend/src/llvm/llvm_sampler_fix.cpp
-index 2a097c8..863be6d 100644
---- a/backend/src/llvm/llvm_sampler_fix.cpp
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp
-@@ -33,10 +33,12 @@ namespace gbe {
-   class SamplerFix : public FunctionPass {
-   public:
-     SamplerFix() : FunctionPass(ID) {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
-       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-     }
- 
-diff --git backend/src/llvm/llvm_scalarize.cpp backend/src/llvm/llvm_scalarize.cpp
-index e9a2a66..e9d2ee4 100644
---- a/backend/src/llvm/llvm_scalarize.cpp
-+++ b/backend/src/llvm/llvm_scalarize.cpp
-@@ -96,10 +96,12 @@ namespace gbe {
- 
-     Scalarize() : FunctionPass(ID)
-     {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
-       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-     }
- 
-diff --git utests/CMakeLists.txt utests/CMakeLists.txt
-index 300d87a..64179c7 100644
---- a/utests/CMakeLists.txt
-+++ b/utests/CMakeLists.txt
-@@ -26,8 +26,8 @@ if (NOT NOT_BUILD_STAND_ALONE_UTEST)
-   # Threads
-   Find_Package(Threads)
- 
--  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
--  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
-+  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof -ffloat-store -fno-strict-aliasing")
-+  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS} -ffloat-store -fno-strict-aliasing") #compiler_{degrees,radians,function_argument2} use equality comparison of floats, compiler_long_bitcast uses aliasing
-   set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
-   set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
-   set (CMAKE_CXX_FLAGS_MINSIZEREL     "-Os -DNDEBUG -DGBE_DEBUG=0")
diff --git a/srcpkgs/beignet/patches/llvm11.patch b/srcpkgs/beignet/patches/llvm11.patch
deleted file mode 100644
index 2c3a4278943c..000000000000
--- a/srcpkgs/beignet/patches/llvm11.patch
+++ /dev/null
@@ -1,937 +0,0 @@
-Source: Snektron
-
-There were a few changes required for LLVM 11:
-* llvm::StringRef requires .str(), implicit conversion was removed
-* llvm::CallSite was removed, but the required methods are available on llvm::CallInst
-* VectorTyID was split into FixedVectorTyID and ScalableVectorTyID, FixedVectorTyID was used
-* CallInst::getCalledValue() was renamed to CallInst::getCalledOperand()
-* Implicit conversion from MaybeAlign to Align was removed, so MaybeAlign::valueOrOne was used instead.
-
---- a/backend/src/llvm/StripAttributes.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/StripAttributes.cpp	2020-11-09 19:04:19.641897141 +0100
-@@ -107,9 +107,8 @@
-        BB != E; ++BB) {
-     for (BasicBlock::iterator Inst = BB->begin(), E = BB->end();
-          Inst != E; ++Inst) {
--      CallSite Call(&*Inst);
--      if (Call)
--        Call.setCallingConv(CallingConv::C);
-+      if (CallInst* callInst = dyn_cast<CallInst>(&*Inst))
-+        callInst->setCallingConv(CallingConv::C);
-     }
-   }
-
---- a/backend/src/llvm/llvm_bitcode_link.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_bitcode_link.cpp	2020-11-09 17:04:09.633753428 +0100
-@@ -98,7 +98,7 @@
-         if (callFunc && callFunc->getIntrinsicID() != 0)
-           continue;
-
--        std::string fnName = call->getCalledValue()->stripPointerCasts()->getName();
-+        std::string fnName = call->getCalledOperand()->stripPointerCasts()->getName().str();
-
-         if (!MFS.insert(fnName).second) {
-           continue;
---- a/backend/src/llvm/llvm_device_enqueue.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_device_enqueue.cpp	2020-11-09 19:01:49.201915008 +0100
-@@ -45,7 +45,7 @@
-       return NULL;
-
-     /* This is a fake, to check the function bitcast is for block or not */
--    std::string fnName = Fn->getName();
-+    std::string fnName = Fn->getName().str();
-     if(fnName.find("_invoke") == std::string::npos)
-       return NULL;
-
-@@ -119,18 +119,18 @@
-       ParamTys.push_back(ty);
-     }
-     FunctionType* NewFT = FunctionType::get(Fn->getReturnType(), ParamTys, false);
--    Function* NewFn = Function::Create(NewFT, Function::ExternalLinkage, Fn->getName());
-+    Function* NewFn = Function::Create(NewFT, Function::ExternalLinkage, Fn->getName().str());
-     SmallVector<ReturnInst*, 8> Returns;
-
-     Function::arg_iterator NewFnArgIt = NewFn->arg_begin();
-     for (Function::arg_iterator I = Fn->arg_begin(), E = Fn->arg_end(); I != E; ++I) {
--      std::string ArgName = I->getName();
-+      std::string ArgName = I->getName().str();
-       NewFnArgIt->setName(ArgName);
-       VMap[&*I] = &(*NewFnArgIt++);
-     }
-     CloneFunctionInto(NewFn, Fn, VMap, /*ModuleLevelChanges=*/true, Returns);
-
--    Fn->setName("__d" + Fn->getName());
-+    Fn->setName("__d" + Fn->getName().str());
-     mod->getFunctionList().push_back(NewFn);
-     //mod->getOrInsertFunction(NewFn->getName(), NewFn->getFunctionType(),
-     //                         NewFn->getAttributes());
-@@ -147,7 +147,7 @@
-       argTypeNames.push_back(llvm::MDString::get(Context, "char*"));
-       argBaseTypeNames.push_back(llvm::MDString::get(Context, "char*"));
-       argTypeQuals.push_back(llvm::MDString::get(Context, ""));
--      argNames.push_back(llvm::MDString::get(Context, I->getName()));
-+      argNames.push_back(llvm::MDString::get(Context, I->getName().str()));
-     }
-
-     //If run to here, llvm version always > 3.9, add the version check just for build.
-@@ -198,7 +198,7 @@
-            * invoke pointer to store the index in the unit's block functions index.*/
-           Function *Fn = dyn_cast<Function>(bt->getOperand(0));
-
--          std::string fnName = Fn->getName();
-+          std::string fnName = Fn->getName().str();
-           int index = -1;
-           for(size_t i=0; i<unit.blockFuncs.size(); i++) {
-             if(unit.blockFuncs[i] == fnName) {
-@@ -241,7 +241,7 @@
-             //unnamed call function, parse the use to find the define of called function
-             SmallVector<Value*, 16> args(CI->op_begin(), CI->op_end()-1);
-
--            Value *v = CI->getCalledValue();
-+            Value *v = CI->getCalledOperand();
-             BitCastInst* bt = dyn_cast<BitCastInst>(v);
-             if(bt == NULL)
-               continue;
-@@ -316,7 +316,7 @@
-                   ConstantExpr *expr = dyn_cast<ConstantExpr>(c->getOperand(3));
-                   BitCastInst *bt = dyn_cast<BitCastInst>(expr->getAsInstruction());
-                   Function* f = dyn_cast<Function>(bt->getOperand(0));
--                  blocks[v] = f->getName();
-+                  blocks[v] = f->getName().str();
-                 }
-               }
-
-@@ -332,7 +332,7 @@
-           } else {
-             //handle enqueue_kernel function call
-             Function *fn = CI->getCalledFunction();
--            if (fn->getName().find("enqueue_kernel") == std::string::npos)
-+            if (fn->getName().str().find("enqueue_kernel") == std::string::npos)
-               continue;
-
-             //block parameter's index, 3 or 6
-@@ -361,7 +361,7 @@
-                   ConstantExpr *expr = dyn_cast<ConstantExpr>(c->getOperand(3));
-                   BitCastInst *bt = dyn_cast<BitCastInst>(expr->getAsInstruction());
-                   Function* f = dyn_cast<Function>(bt->getOperand(0));
--                  blocks[v] = f->getName();
-+                  blocks[v] = f->getName().str();
-                 }
-               }
-             } else if(isa<AllocaInst>(block)) {
---- a/backend/src/llvm/llvm_gen_backend.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_gen_backend.cpp	2020-11-09 18:33:50.919114327 +0100
-@@ -376,7 +376,7 @@
-           GBE_ASSERT(index == 0);
-           return this->_newScalar(value, key, type, index, uniform);
-           break;
--        case Type::VectorTyID:
-+        case Type::FixedVectorTyID:
-         {
-           auto vectorType = cast<VectorType>(type);
-           auto elementType = vectorType->getElementType();
-@@ -743,20 +743,20 @@
- #undef DECL_VISIT_FN
-
-     // Emit rounding instructions from gen native function
--    void emitRoundingCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode);
-+    void emitRoundingCallInst(CallInst &I, ir::Opcode opcode);
-     // Emit unary instructions from gen native function
--    void emitUnaryCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode, ir::Type = ir::TYPE_FLOAT);
-+    void emitUnaryCallInst(CallInst &I, ir::Opcode opcode, ir::Type = ir::TYPE_FLOAT);
-     // Emit unary instructions from gen native function
--    void emitAtomicInst(CallInst &I, CallSite &CS, ir::AtomicOps opcode);
-+    void emitAtomicInst(CallInst &I, ir::AtomicOps opcode);
-     // Emit workgroup instructions
--    void emitWorkGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode);
-+    void emitWorkGroupInst(CallInst &I, ir::WorkGroupOps opcode);
-     // Emit subgroup instructions
--    void emitSubGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode);
-+    void emitSubGroupInst(CallInst &I, ir::WorkGroupOps opcode);
-     // Emit subgroup instructions
--    void emitBlockReadWriteMemInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
--    void emitBlockReadWriteImageInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-+    void emitBlockReadWriteMemInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-+    void emitBlockReadWriteImageInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-
--    uint8_t appendSampler(CallSite::arg_iterator AI);
-+    uint8_t appendSampler(User::op_iterator AI);
-     uint8_t getImageID(CallInst &I);
-
-     // These instructions are not supported at all
-@@ -1320,13 +1320,13 @@
- #endif
-
-       if(typeNameNode) {
--        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
-+        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-       }
-       if(typeBaseNameNode) {
--        llvmInfo.typeBaseName= (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString();
-+        llvmInfo.typeBaseName= (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString().str();
-       }
--      llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
--      llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString();
-+      llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-+      llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString().str();
-       bool isImage = llvmInfo.isImageType();
-       bool isPipe = llvmInfo.isPipeType();
-       if (I->getType()->isPointerTy() || isImage || isPipe) {
-@@ -1531,7 +1531,7 @@
-             EltTy = getEltType(EltTy, TypeIndex);
-         }
-
--        ir::Constant cc = unit.getConstantSet().getConstant(pointer->getName());
-+        ir::Constant cc = unit.getConstantSet().getConstant(pointer->getName().str());
-         unsigned int defOffset = cc.getOffset();
-         relocs.push_back(ir::RelocEntry(offset, defOffset + constantOffset));
-
-@@ -1546,7 +1546,7 @@
-       return;
-     }
-     if (isa<GlobalVariable>(c)) {
--      ir::Constant cc = unit.getConstantSet().getConstant(c->getName());
-+      ir::Constant cc = unit.getConstantSet().getConstant(c->getName().str());
-       unsigned int defOffset = cc.getOffset();
-
-       relocs.push_back(ir::RelocEntry(offset, defOffset));
-@@ -1609,7 +1609,7 @@
-           }
-           break;
-         }
--      case Type::TypeID::VectorTyID:
-+      case Type::TypeID::FixedVectorTyID:
-         {
-           const ConstantDataSequential *cds = dyn_cast<ConstantDataSequential>(c);
-           const VectorType *vecTy = cast<VectorType>(type);
-@@ -1936,7 +1936,7 @@
-       case Type::PointerTyID:
-         regTranslator.newScalar(value, key, 0, uniform);
-         break;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         auto vectorType = cast<VectorType>(type);
-         const uint32_t elemNum = vectorType->getNumElements();
-@@ -2395,7 +2395,7 @@
- #endif
-         }
-         if(typeNameNode) {
--          llvmInfo.typeName = (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
-+          llvmInfo.typeName = (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-           //LLVM 3.9 image's type name include access qual, don't match OpenCL spec, erase them.
-           std::vector<std::string> filters = {"__read_only ", "__write_only "};
-           for (uint32_t i = 0; i < filters.size(); i++) {
-@@ -2406,16 +2406,16 @@
-           }
-         }
-         if(typeBaseNameNode){
--          llvmInfo.typeBaseName = (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString();
-+          llvmInfo.typeBaseName = (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString().str();
-         }
-         if(accessQualNode) {
--          llvmInfo.accessQual = (cast<MDString>(accessQualNode->getOperand(opID)))->getString();
-+          llvmInfo.accessQual = (cast<MDString>(accessQualNode->getOperand(opID)))->getString().str();
-         }
-         if(typeQualNode) {
--          llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString();
-+          llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString().str();
-         }
-         if(argNameNode){
--          llvmInfo.argName = (cast<MDString>(argNameNode->getOperand(opID)))->getString();
-+          llvmInfo.argName = (cast<MDString>(argNameNode->getOperand(opID)))->getString().str();
-         }
-
-         // function arguments are uniform values.
-@@ -3010,7 +3010,7 @@
-         } else {
-           this->newRegister(const_cast<GlobalVariable*>(&v));
-           ir::Register reg = regTranslator.getScalar(const_cast<GlobalVariable*>(&v), 0);
--          ir::Constant &con = unit.getConstantSet().getConstant(v.getName());
-+          ir::Constant &con = unit.getConstantSet().getConstant(v.getName().str());
-           if (!legacyMode) {
-             ir::Register regload = ctx.reg(getFamily(getType(ctx, v.getType())));
-             ctx.LOADI(getType(ctx, v.getType()), regload, ctx.newIntegerImmediate(con.getOffset(), getType(ctx, v.getType())));
-@@ -3212,7 +3212,7 @@
-         GBE_ASSERTM(false, "Unsupported calling convention");
-     }
-
--    ctx.startFunction(F.getName());
-+    ctx.startFunction(F.getName().str());
-
-     ir::Function &fn = ctx.getFunction();
-     this->regTranslator.clear();
-@@ -3810,9 +3810,9 @@
-
-   void GenWriter::regAllocateCallInst(CallInst &I) {
-     Value *dst = &I;
--    Value *Callee = I.getCalledValue();
-+    Value *Callee = I.getCalledOperand();
-     GBE_ASSERT(ctx.getFunction().getProfile() == ir::PROFILE_OCL);
--    GBE_ASSERT(isa<InlineAsm>(I.getCalledValue()) == false);
-+    GBE_ASSERT(isa<InlineAsm>(I.getCalledOperand()) == false);
-     if(I.getNumArgOperands()) GBE_ASSERT(I.hasStructRetAttr() == false);
-
-     // We only support a small number of intrinsics right now
-@@ -3870,7 +3870,7 @@
-       }
-     }
-     // Get the name of the called function and handle it
--    const std::string fnName = Callee->stripPointerCasts()->getName();
-+    const std::string fnName = Callee->stripPointerCasts()->getName().str();
-     auto genIntrinsicID = intrinsicMap.find(fnName);
-     switch (genIntrinsicID) {
-       case GEN_OCL_GET_GROUP_ID0:
-@@ -4166,7 +4166,7 @@
-     };
-   }
-
--  void GenWriter::emitRoundingCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode) {
-+  void GenWriter::emitRoundingCallInst(CallInst &I, ir::Opcode opcode) {
-     if (I.getType()->isHalfTy()) {
-       const ir::Register src = this->getRegister(I.getOperand(0));
-       const ir::Register srcFloat = ctx.reg(ir::FAMILY_DWORD);
-@@ -4177,14 +4177,14 @@
-       ctx.F32TO16(ir::TYPE_U16, ir::TYPE_FLOAT, dst, dstFloat);
-     } else {
-       GBE_ASSERT(I.getType()->isFloatTy());
--      this->emitUnaryCallInst(I,CS,opcode);
-+      this->emitUnaryCallInst(I,opcode);
-     }
-   }
-
--  void GenWriter::emitUnaryCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
-+  void GenWriter::emitUnaryCallInst(CallInst &I, ir::Opcode opcode, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--    CallSite::arg_iterator AE = CS.arg_end();
-+    User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-     GBE_ASSERT(AI != AE);
-     const ir::Register src = this->getRegister(*AI);
-@@ -4293,9 +4293,9 @@
-     this->emitAtomicInstHelper(opcode, type, dst, llvmPtr, payloadTuple);
-   }
-
--  void GenWriter::emitAtomicInst(CallInst &I, CallSite &CS, ir::AtomicOps opcode) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitAtomicInst(CallInst &I, ir::AtomicOps opcode) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-     Value *llvmPtr = *AI;
-     ir::AddressSpace addrSpace = addressSpaceLLVMToGen(llvmPtr->getType()->getPointerAddressSpace());
-@@ -4348,7 +4348,7 @@
-     }
-   }
-
--  void GenWriter::emitWorkGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode) {
-+  void GenWriter::emitWorkGroupInst(CallInst &I, ir::WorkGroupOps opcode) {
-     ir::Function &f = ctx.getFunction();
-
-     if (f.getwgBroadcastSLM() < 0 && opcode == ir::WORKGROUP_OP_BROADCAST) {
-@@ -4378,8 +4378,8 @@
-       GBE_ASSERT(f.gettidMapSLM() >= 0);
-     }
-
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     if (opcode == ir::WORKGROUP_OP_ALL || opcode == ir::WORKGROUP_OP_ANY) {
-@@ -4391,14 +4391,14 @@
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], 3);
-       ctx.WORKGROUP(opcode, (uint32_t)f.gettidMapSLM(), getRegister(&I), srcTuple, 3, ir::TYPE_S32);
-     } else if (opcode == ir::WORKGROUP_OP_BROADCAST) {
--      int argNum = CS.arg_size();
-+      int argNum = I.arg_size();
-       std::vector<ir::Register> src(argNum);
-       for (int i = 0; i < argNum; i++) {
-         src[i] = this->getRegister(*(AI++));
-       }
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], argNum);
-       ctx.WORKGROUP(ir::WORKGROUP_OP_BROADCAST, (uint32_t)f.getwgBroadcastSLM(), getRegister(&I), srcTuple, argNum,
--          getType(ctx, (*CS.arg_begin())->getType()));
-+          getType(ctx, (*I.arg_begin())->getType()));
-     } else {
-       ConstantInt *sign = dyn_cast<ConstantInt>(AI);
-       GBE_ASSERT(sign);
-@@ -4423,9 +4423,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitSubGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitSubGroupInst(CallInst &I, ir::WorkGroupOps opcode) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     if (opcode == ir::WORKGROUP_OP_ALL || opcode == ir::WORKGROUP_OP_ANY) {
-@@ -4435,7 +4435,7 @@
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], 1);
-       ctx.SUBGROUP(opcode, getRegister(&I), srcTuple, 1, ir::TYPE_S32);
-     } else if (opcode == ir::WORKGROUP_OP_BROADCAST) {
--      int argNum = CS.arg_size();
-+      int argNum = I.arg_size();
-       GBE_ASSERT(argNum == 2);
-       std::vector<ir::Register> src(argNum);
-       for (int i = 0; i < argNum; i++) {
-@@ -4443,7 +4443,7 @@
-       }
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], argNum);
-       ctx.SUBGROUP(ir::WORKGROUP_OP_BROADCAST, getRegister(&I), srcTuple, argNum,
--          getType(ctx, (*CS.arg_begin())->getType()));
-+          getType(ctx, (*I.arg_begin())->getType()));
-     } else {
-       ConstantInt *sign = dyn_cast<ConstantInt>(AI);
-       GBE_ASSERT(sign);
-@@ -4466,9 +4466,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitBlockReadWriteMemInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitBlockReadWriteMemInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     Value *llvmPtr = *(AI++);
-@@ -4522,9 +4522,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitBlockReadWriteImageInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitBlockReadWriteImageInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     const uint8_t imageID = getImageID(I);
-@@ -4557,7 +4557,7 @@
-
-   /* append a new sampler. should be called before any reference to
-    * a sampler_t value. */
--  uint8_t GenWriter::appendSampler(CallSite::arg_iterator AI) {
-+  uint8_t GenWriter::appendSampler(User::op_iterator AI) {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-     CallInst *TC = dyn_cast<CallInst>(*AI);
-     Constant *CPV = TC ? dyn_cast<Constant>(TC->getOperand(0)) : NULL;
-@@ -4595,10 +4595,9 @@
-         const ir::Function &fn = ctx.getFunction();
-
-         // Get the function arguments
--        CallSite CS(&I);
--        CallSite::arg_iterator AI = CS.arg_begin();
-+        User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--        CallSite::arg_iterator AE = CS.arg_end();
-+        User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-         switch (F->getIntrinsicID()) {
-           case Intrinsic::stacksave:
-@@ -4764,17 +4763,17 @@
-             ctx.MAD(srcType, dst, src0, src1, src2);
-           }
-           break;
--          case Intrinsic::sqrt: this->emitUnaryCallInst(I,CS,ir::OP_SQR); break;
--          case Intrinsic::ceil: this->emitRoundingCallInst(I,CS,ir::OP_RNDU); break;
--          case Intrinsic::trunc: this->emitRoundingCallInst(I,CS,ir::OP_RNDZ); break;
--          case Intrinsic::rint: this->emitRoundingCallInst(I,CS,ir::OP_RNDE); break;
--          case Intrinsic::floor: this->emitRoundingCallInst(I,CS,ir::OP_RNDD); break;
--          case Intrinsic::sin: this->emitUnaryCallInst(I,CS,ir::OP_SIN); break;
--          case Intrinsic::cos: this->emitUnaryCallInst(I,CS,ir::OP_COS); break;
--          case Intrinsic::log2: this->emitUnaryCallInst(I,CS,ir::OP_LOG); break;
--          case Intrinsic::exp2: this->emitUnaryCallInst(I,CS,ir::OP_EXP); break;
-+          case Intrinsic::sqrt: this->emitUnaryCallInst(I,ir::OP_SQR); break;
-+          case Intrinsic::ceil: this->emitRoundingCallInst(I,ir::OP_RNDU); break;
-+          case Intrinsic::trunc: this->emitRoundingCallInst(I,ir::OP_RNDZ); break;
-+          case Intrinsic::rint: this->emitRoundingCallInst(I,ir::OP_RNDE); break;
-+          case Intrinsic::floor: this->emitRoundingCallInst(I,ir::OP_RNDD); break;
-+          case Intrinsic::sin: this->emitUnaryCallInst(I,ir::OP_SIN); break;
-+          case Intrinsic::cos: this->emitUnaryCallInst(I,ir::OP_COS); break;
-+          case Intrinsic::log2: this->emitUnaryCallInst(I,ir::OP_LOG); break;
-+          case Intrinsic::exp2: this->emitUnaryCallInst(I,ir::OP_EXP); break;
-           case Intrinsic::bswap:
--            this->emitUnaryCallInst(I,CS,ir::OP_BSWAP, getUnsignedType(ctx, I.getType())); break;
-+            this->emitUnaryCallInst(I,ir::OP_BSWAP, getUnsignedType(ctx, I.getType())); break;
-           case Intrinsic::pow:
-           {
-             const ir::Register src0 = this->getRegister(*AI); ++AI;
-@@ -4794,21 +4793,20 @@
-         }
-       } else {
-         // Get the name of the called function and handle it
--        Value *Callee = I.getCalledValue();
--        const std::string fnName = Callee->stripPointerCasts()->getName();
-+        Value *Callee = I.getCalledOperand();
-+        const std::string fnName = Callee->stripPointerCasts()->getName().str();
-         auto genIntrinsicID = intrinsicMap.find(fnName);
-
-         // Get the function arguments
--        CallSite CS(&I);
--        CallSite::arg_iterator AI = CS.arg_begin();
-+        User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--        CallSite::arg_iterator AE = CS.arg_end();
-+        User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-
-         switch (genIntrinsicID) {
--          case GEN_OCL_FBH: this->emitUnaryCallInst(I,CS,ir::OP_FBH, ir::TYPE_U32); break;
--          case GEN_OCL_FBL: this->emitUnaryCallInst(I,CS,ir::OP_FBL, ir::TYPE_U32); break;
--          case GEN_OCL_CBIT: this->emitUnaryCallInst(I,CS,ir::OP_CBIT, getUnsignedType(ctx, (*AI)->getType())); break;
-+          case GEN_OCL_FBH: this->emitUnaryCallInst(I,ir::OP_FBH, ir::TYPE_U32); break;
-+          case GEN_OCL_FBL: this->emitUnaryCallInst(I,ir::OP_FBL, ir::TYPE_U32); break;
-+          case GEN_OCL_CBIT: this->emitUnaryCallInst(I,ir::OP_CBIT, getUnsignedType(ctx, (*AI)->getType())); break;
-           case GEN_OCL_ABS:
-           {
-             const ir::Register src = this->getRegister(*AI);
-@@ -4915,8 +4913,8 @@
-             ctx.REGION(dst, src, x.getIntegerValue());
-             break;
-           }
--          case GEN_OCL_RSQ: this->emitUnaryCallInst(I,CS,ir::OP_RSQ); break;
--          case GEN_OCL_RCP: this->emitUnaryCallInst(I,CS,ir::OP_RCP); break;
-+          case GEN_OCL_RSQ: this->emitUnaryCallInst(I,ir::OP_RSQ); break;
-+          case GEN_OCL_RCP: this->emitUnaryCallInst(I,ir::OP_RCP); break;
-           case GEN_OCL_FORCE_SIMD8: ctx.setSimdWidth(8); break;
-           case GEN_OCL_FORCE_SIMD16: ctx.setSimdWidth(16); break;
-           case GEN_OCL_LBARRIER: ctx.SYNC(ir::syncLocalBarrier); break;
-@@ -4947,31 +4945,31 @@
-             break;
-           }
-           case GEN_OCL_ATOMIC_ADD0:
--          case GEN_OCL_ATOMIC_ADD1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_ADD); break;
-+          case GEN_OCL_ATOMIC_ADD1: this->emitAtomicInst(I,ir::ATOMIC_OP_ADD); break;
-           case GEN_OCL_ATOMIC_SUB0:
--          case GEN_OCL_ATOMIC_SUB1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_SUB); break;
-+          case GEN_OCL_ATOMIC_SUB1: this->emitAtomicInst(I,ir::ATOMIC_OP_SUB); break;
-           case GEN_OCL_ATOMIC_AND0:
--          case GEN_OCL_ATOMIC_AND1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_AND); break;
-+          case GEN_OCL_ATOMIC_AND1: this->emitAtomicInst(I,ir::ATOMIC_OP_AND); break;
-           case GEN_OCL_ATOMIC_OR0:
--          case GEN_OCL_ATOMIC_OR1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_OR); break;
-+          case GEN_OCL_ATOMIC_OR1: this->emitAtomicInst(I,ir::ATOMIC_OP_OR); break;
-           case GEN_OCL_ATOMIC_XOR0:
--          case GEN_OCL_ATOMIC_XOR1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_XOR); break;
-+          case GEN_OCL_ATOMIC_XOR1: this->emitAtomicInst(I,ir::ATOMIC_OP_XOR); break;
-           case GEN_OCL_ATOMIC_XCHG0:
--          case GEN_OCL_ATOMIC_XCHG1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_XCHG); break;
-+          case GEN_OCL_ATOMIC_XCHG1: this->emitAtomicInst(I,ir::ATOMIC_OP_XCHG); break;
-           case GEN_OCL_ATOMIC_INC0:
--          case GEN_OCL_ATOMIC_INC1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_INC); break;
-+          case GEN_OCL_ATOMIC_INC1: this->emitAtomicInst(I,ir::ATOMIC_OP_INC); break;
-           case GEN_OCL_ATOMIC_DEC0:
--          case GEN_OCL_ATOMIC_DEC1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_DEC); break;
-+          case GEN_OCL_ATOMIC_DEC1: this->emitAtomicInst(I,ir::ATOMIC_OP_DEC); break;
-           case GEN_OCL_ATOMIC_UMIN0:
--          case GEN_OCL_ATOMIC_UMIN1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_UMIN); break;
-+          case GEN_OCL_ATOMIC_UMIN1: this->emitAtomicInst(I,ir::ATOMIC_OP_UMIN); break;
-           case GEN_OCL_ATOMIC_UMAX0:
--          case GEN_OCL_ATOMIC_UMAX1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_UMAX); break;
-+          case GEN_OCL_ATOMIC_UMAX1: this->emitAtomicInst(I,ir::ATOMIC_OP_UMAX); break;
-           case GEN_OCL_ATOMIC_IMIN0:
--          case GEN_OCL_ATOMIC_IMIN1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_IMIN); break;
-+          case GEN_OCL_ATOMIC_IMIN1: this->emitAtomicInst(I,ir::ATOMIC_OP_IMIN); break;
-           case GEN_OCL_ATOMIC_IMAX0:
--          case GEN_OCL_ATOMIC_IMAX1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_IMAX); break;
-+          case GEN_OCL_ATOMIC_IMAX1: this->emitAtomicInst(I,ir::ATOMIC_OP_IMAX); break;
-           case GEN_OCL_ATOMIC_CMPXCHG0:
--          case GEN_OCL_ATOMIC_CMPXCHG1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_CMPXCHG); break;
-+          case GEN_OCL_ATOMIC_CMPXCHG1: this->emitAtomicInst(I,ir::ATOMIC_OP_CMPXCHG); break;
-           case GEN_OCL_GET_IMAGE_WIDTH:
-           case GEN_OCL_GET_IMAGE_HEIGHT:
-           case GEN_OCL_GET_IMAGE_DEPTH:
-@@ -5429,48 +5427,48 @@
-             ctx.WAIT();
-             break;
-           }
--          case GEN_OCL_WORK_GROUP_ALL: this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_ALL); break;
--          case GEN_OCL_WORK_GROUP_ANY: this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_ANY); break;
-+          case GEN_OCL_WORK_GROUP_ALL: this->emitWorkGroupInst(I, ir::WORKGROUP_OP_ALL); break;
-+          case GEN_OCL_WORK_GROUP_ANY: this->emitWorkGroupInst(I, ir::WORKGROUP_OP_ANY); break;
-           case GEN_OCL_WORK_GROUP_BROADCAST:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_BROADCAST); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_BROADCAST); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_ADD); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_MAX); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_MIN); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-           case GEN_OCL_SUB_GROUP_BROADCAST:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_BROADCAST); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_BROADCAST); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_ADD); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_MAX); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_MIN); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-           case GEN_OCL_LRP:
-           {
-             const ir::Register dst  = this->getRegister(&I);
-@@ -5484,69 +5482,69 @@
-             break;
-           }
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, false, 1); break;
-+            this->emitBlockReadWriteMemInst(I, false, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, false, 2); break;
-+            this->emitBlockReadWriteMemInst(I, false, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, false, 4); break;
-+            this->emitBlockReadWriteMemInst(I, false, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, false, 8); break;
-+            this->emitBlockReadWriteMemInst(I, false, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, true, 1); break;
-+            this->emitBlockReadWriteMemInst(I, true, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, true, 2); break;
-+            this->emitBlockReadWriteMemInst(I, true, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, true, 4); break;
-+            this->emitBlockReadWriteMemInst(I, true, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, true, 8); break;
-+            this->emitBlockReadWriteMemInst(I, true, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, false, 1); break;
-+            this->emitBlockReadWriteImageInst(I, false, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, false, 2); break;
-+            this->emitBlockReadWriteImageInst(I, false, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, false, 4); break;
-+            this->emitBlockReadWriteImageInst(I, false, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, false, 8); break;
-+            this->emitBlockReadWriteImageInst(I, false, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, true, 1); break;
-+            this->emitBlockReadWriteImageInst(I, true, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, true, 2); break;
-+            this->emitBlockReadWriteImageInst(I, true, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, true, 4); break;
-+            this->emitBlockReadWriteImageInst(I, true, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, true, 8); break;
-+            this->emitBlockReadWriteImageInst(I, true, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, false, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, false, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, false, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, false, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, true, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, true, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, true, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, true, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, false, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, false, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, false, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, false, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, true, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, true, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, true, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, true, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 8, ir::TYPE_U16); break;
-           case GEN_OCL_GET_PIPE:
-           case GEN_OCL_MAKE_RID:
-           case GEN_OCL_GET_RID:
---- a/backend/src/llvm/llvm_includes.hpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_includes.hpp	2020-11-09 19:00:09.955926795 +0100
-@@ -103,7 +103,6 @@
-
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
- #include "llvm/IR/Mangler.h"
--#include "llvm/IR/CallSite.h"
- #include "llvm/IR/CFG.h"
- #include "llvm/IR/InstVisitor.h"
- #include "llvm/IR/IRPrintingPasses.h"
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-11-09 19:10:37.141852308 +0100
-@@ -160,7 +160,7 @@
-     Value *vecPtr = Builder.CreateBitCast(ld->getPointerOperand(),
-                                         PointerType::get(vecTy, addrSpace));
-     LoadInst *vecValue = Builder.CreateLoad(vecPtr);
--    vecValue->setAlignment(align);
-+    vecValue->setAlignment(align.valueOrOne());
-
-     for (unsigned i = 0; i < size; ++i) {
-       Value *S = Builder.CreateExtractElement(vecValue, Builder.getInt32(i));
-@@ -251,7 +251,7 @@
-       return;
-     Value *newPtr = Builder.CreateBitCast(stPointer, PointerType::get(vecTy, addrSpace));
-     StoreInst *newST = Builder.CreateStore(parent, newPtr);
--    newST->setAlignment(align);
-+    newST->setAlignment(align.valueOrOne());
-   }
-
-   // Find the safe iterator we can point to. If reorder happens, we need to
---- a/backend/src/llvm/llvm_passes.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_passes.cpp	2020-11-09 18:48:55.997006837 +0100
-@@ -95,7 +95,7 @@
-   {
-     switch (Ty->getTypeID()) {
-       case Type::VoidTyID: NOT_SUPPORTED;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         const VectorType* VecTy = cast<VectorType>(Ty);
-         uint32_t elemNum = VecTy->getNumElements();
-@@ -138,7 +138,7 @@
-       case Type::HalfTyID:    return 16;
-       case Type::FloatTyID:   return 32;
-       case Type::DoubleTyID:  return 64;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         const VectorType* VecTy = cast<VectorType>(Ty);
-         uint32_t numElem = VecTy->getNumElements();
-@@ -184,10 +184,12 @@
-     Type *elementType = NULL;
-     if (PointerType* ptrType = dyn_cast<PointerType>(eltTy))
-       elementType = ptrType->getElementType();
--    else if(SequentialType * seqType = dyn_cast<SequentialType>(eltTy))
--      elementType = seqType->getElementType();
--    else if(CompositeType * compTy= dyn_cast<CompositeType>(eltTy))
--      elementType = compTy->getTypeAtIndex(index);
-+    else if (ArrayType * arrType = dyn_cast<ArrayType>(eltTy))
-+      elementType = arrType->getElementType();
-+    else if(VectorType * vecType = dyn_cast<VectorType>(eltTy))
-+      elementType = vecType->getElementType();
-+    else if(StructType * structType = dyn_cast<StructType>(eltTy))
-+      elementType = structType->getTypeAtIndex(index);
-     GBE_ASSERT(elementType);
-     return elementType;
-   }
---- a/backend/src/llvm/llvm_printf_parser.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_printf_parser.cpp	2020-11-09 18:57:52.618943105 +0100
-@@ -323,8 +323,7 @@
-
-   bool PrintfParser::parseOnePrintfInstruction(CallInst * call)
-   {
--    CallSite CS(call);
--    CallSite::arg_iterator CI_FMT = CS.arg_begin();
-+    User::op_iterator CI_FMT = call->arg_begin();
-     int param_num = 0;
-
-     llvm::Constant* arg0 = dyn_cast<llvm::ConstantExpr>(*CI_FMT);
-@@ -341,7 +340,7 @@
-       return false;
-     }
-
--    std::string fmt = fmt_arg->getAsCString();
-+    std::string fmt = fmt_arg->getAsCString().str();
-     if (fmt.size() == 0)
-       return false;
-
-@@ -437,8 +436,8 @@
-         if ( callFunc->getIntrinsicID() != 0)
-           continue;
-
--        Value *Callee = call->getCalledValue();
--        const std::string fnName = Callee->getName();
-+        Value *Callee = call->getCalledOperand();
-+        const std::string fnName = Callee->getName().str();
-
-         if (fnName != "__gen_ocl_printf_stub" && fnName != "__gen_ocl_puts_stub")
-           continue;
-@@ -582,7 +581,7 @@
-             if (!fmt_arg || !fmt_arg->isCString()) {
-               return false;
-             }
--            slot.state.str = fmt_arg->getAsCString();
-+            slot.state.str = fmt_arg->getAsCString().str();
-             return true;
-           }
-           case PRINTF_CONVERSION_P: {
-@@ -595,10 +594,10 @@
-
-         break;
-
--      case Type::VectorTyID: {
--        Type* vect_type = arg->getType();
--        Type* elt_type = vect_type->getVectorElementType();
--        int vec_num = vect_type->getVectorNumElements();
-+      case Type::FixedVectorTyID: {
-+        VectorType* vect_type = dyn_cast<VectorType>(arg->getType());
-+        Type* elt_type = vect_type->getElementType();
-+        int vec_num = vect_type->getNumElements();
-         bool sign = false;
-
-         if (vec_num != slot.state.vector_n) {
---- a/backend/src/llvm/llvm_profiling.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_profiling.cpp	2020-11-09 18:59:50.120929150 +0100
-@@ -35,7 +35,6 @@
- #include "llvm/IR/IRBuilder.h"
-
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
--#include "llvm/IR/CallSite.h"
- #include "llvm/IR/CFG.h"
- #else
- #include "llvm/Support/CallSite.h"
---- a/backend/src/llvm/llvm_sampler_fix.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp	2020-11-09 17:01:09.407774832 +0100
-@@ -45,8 +45,8 @@
-     bool visitCallInst(CallInst *I) {
-       if(!I)
-         return false;
--      Value *Callee = I->getCalledValue();
--      const std::string fnName = Callee->getName();
-+      Value *Callee = I->getCalledOperand();
-+      const std::string fnName = Callee->getName().str();
-       bool changed = false;
-       Type *boolTy = IntegerType::get(I->getContext(), 1);
-       Type *i32Ty = IntegerType::get(I->getContext(), 32);
-@@ -59,7 +59,7 @@
-         Value *needFixVal;
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-         CallInst *init = dyn_cast<CallInst>(I->getOperand(0));
--        if (init && init->getCalledValue()->getName().compare("__translate_sampler_initializer"))
-+        if (init && init->getCalledOperand()->getName().compare("__translate_sampler_initializer"))
-         {
-           const ConstantInt *ci = dyn_cast<ConstantInt>(init->getOperand(0));
-           uint32_t samplerInt = ci->getZExtValue();
-@@ -113,7 +113,7 @@
-         Value *needFixVal;
-  #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-         CallInst *init = dyn_cast<CallInst>(I->getOperand(0));
--        if (init && init->getCalledValue()->getName().compare("__translate_sampler_initializer"))
-+        if (init && init->getCalledOperand()->getName().compare("__translate_sampler_initializer"))
-         {
-           const ConstantInt *ci = dyn_cast<ConstantInt>(init->getOperand(0));
-           uint32_t samplerInt = ci->getZExtValue();
---- a/backend/src/llvm/llvm_scalarize.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_scalarize.cpp	2020-11-09 18:51:16.888990104 +0100
-@@ -178,7 +178,7 @@
-       if(!type)
-         return type;
-       switch(type->getTypeID()) {
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       case Type::ArrayTyID:
-         return GetBasicType(type->getContainedType(0));
-       default:
-@@ -188,7 +188,7 @@
-     }
-
-     int GetComponentCount(const Type* type)  {
--      if (type && type->getTypeID() == Type::VectorTyID)
-+      if (type && type->getTypeID() == Type::FixedVectorTyID)
-         return llvm::dyn_cast<VectorType>(type)->getNumElements();
-       else
-         return 1;
-@@ -652,13 +652,12 @@
-           break;
-         }
-       } else {
--        Value *Callee = call->getCalledValue();
--        const std::string fnName = Callee->getName();
-+        Value *Callee = call->getCalledOperand();
-+        const std::string fnName = Callee->getName().str();
-         auto genIntrinsicID = intrinsicMap.find(fnName);
-
-         // Get the function arguments
--        CallSite CS(call);
--        CallSite::arg_iterator CI = CS.arg_begin() + 1;
-+        User::op_iterator CI = call->arg_begin() + 1;
-
-         switch (genIntrinsicID) {
-           case GEN_OCL_NOT_FOUND:
-@@ -729,7 +728,7 @@
-             extractFromVector(call);
-             break;
-           case GEN_OCL_PRINTF:
--            for (; CI != CS.arg_end(); ++CI)
-+            for (; CI != call->arg_end(); ++CI)
-               if ((*CI)->getType()->isVectorTy())
-                 *CI = InsertToVector(call, *CI);
-             break;
diff --git a/srcpkgs/beignet/patches/llvm12.patch b/srcpkgs/beignet/patches/llvm12.patch
deleted file mode 100644
index 6f8ab005c148..000000000000
--- a/srcpkgs/beignet/patches/llvm12.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-diff --git backend/src/llvm/ExpandLargeIntegers.cpp backend/src/llvm/ExpandLargeIntegers.cpp
-index 8515dc13..27080380 100644
---- a/backend/src/llvm/ExpandLargeIntegers.cpp
-+++ b/backend/src/llvm/ExpandLargeIntegers.cpp
-@@ -328,7 +328,7 @@ static Value *buildVectorOrScalar(ConversionState &State, IRBuilder<> &IRB, Smal
-     // splited, that's why these temporary values should be erased.
-     bool KeepInsert = isLegalBitSize(ElemTy->getPrimitiveSizeInBits() * ElemNo);
-     for (unsigned i = 0; i < ElemNo; ++i) {
--      Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo));
-+      Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo, false));
-       Value *idx = ConstantInt::get(IntTy, i);
-       vec = IRB.CreateInsertElement(tmp, Elements[i], idx);
-       if (!KeepInsert && !isa<Constant>(vec)) {
-@@ -373,7 +373,7 @@ static void unifyElementType(IRBuilder<> &IRB, SmallVector<Value *, 16> &Src, Sm
-       assert((Size % MinWidth) == 0);
- 
-       if (Size > MinWidth) {
--        VectorType *VecTy = VectorType::get(ElemTy, Size/MinWidth);
-+        VectorType *VecTy = VectorType::get(ElemTy, Size/MinWidth, false);
-         Value *Casted = IRB.CreateBitCast(Src[i], VecTy);
-         for (unsigned j = 0; j < Size/MinWidth; j++)
-           Dst.push_back(IRB.CreateExtractElement(Casted, ConstantInt::get(IntTy, j)));
-@@ -462,7 +462,7 @@ static void convertInstruction(Instruction *Inst, ConversionState &State,
-       unsigned ElemNo = Unified.size();
-       Type *ElemTy = Unified[0]->getType();
-       for (unsigned i = 0; i < ElemNo; ++i) {
--        Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo));
-+        Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo, false));
-         Value *idx = ConstantInt::get(IntTy, i);
-         vec = IRB.CreateInsertElement(tmp, Unified[i], idx);
-       }
-diff --git backend/src/llvm/llvm_gen_backend.cpp backend/src/llvm/llvm_gen_backend.cpp
-index c93d89cc..64d5b0e5 100644
---- a/backend/src/llvm/llvm_gen_backend.cpp
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -304,7 +304,7 @@ namespace gbe
-       TYPESIZEVEC(long,8)
-       TYPESIZEVEC(unsigned long,8)
-       else{
--        StructType *StrTy = M->getTypeByName("struct."+name);
-+        StructType *StrTy = StructType::getTypeByName(M->getContext(), "struct."+name);
-         if(StrTy)
-           return getTypeByteSize(unit,StrTy);
-       }
-diff --git backend/src/llvm/llvm_loadstore_optimization.cpp backend/src/llvm/llvm_loadstore_optimization.cpp
-index 5aa38bef..6b5c1bad 100644
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
-@@ -152,7 +152,7 @@ namespace gbe {
-     unsigned addrSpace = ld->getPointerAddressSpace();
-     // insert before first load
-     Builder.SetInsertPoint(ld);
--    VectorType *vecTy = VectorType::get(ld->getType(), size);
-+    VectorType *vecTy = VectorType::get(ld->getType(), size, false);
-     Value *vecPtr = Builder.CreateBitCast(ld->getPointerOperand(),
-                                         PointerType::get(vecTy, addrSpace));
-     LoadInst *vecValue = Builder.CreateLoad(vecPtr);
-@@ -236,7 +236,7 @@ namespace gbe {
-     Builder.SetInsertPoint(merged[size-1]);
- 
-     Type *dataTy = st->getValueOperand()->getType();
--    VectorType *vecTy = VectorType::get(dataTy, size);
-+    VectorType *vecTy = VectorType::get(dataTy, size, false);
-     Value * parent = UndefValue::get(vecTy);
-     for(unsigned i = 0; i < size; i++) {
-       parent = Builder.CreateInsertElement(parent, values[i], ConstantInt::get(IntegerType::get(st->getContext(), 32), i));
-diff --git backend/src/llvm/llvm_printf_parser.cpp backend/src/llvm/llvm_printf_parser.cpp
-index 6bb7c52a..af459cd2 100644
---- a/backend/src/llvm/llvm_printf_parser.cpp
-+++ b/backend/src/llvm/llvm_printf_parser.cpp
-@@ -630,7 +630,7 @@ error:
-             if (elt_type != elt_dst_type) {
-               Value *II = NULL;
-               for (int i = 0; i < vec_num; i++) {
--                Value *vec = II ? II : UndefValue::get(VectorType::get(elt_dst_type, vec_num));
-+                Value *vec = II ? II : UndefValue::get(VectorType::get(elt_dst_type, vec_num, false));
-                 Value *cv = ConstantInt::get(Type::getInt32Ty(elt_type->getContext()), i);
-                 Value *org = builder->CreateExtractElement(arg, cv);
-                 Value *cvt = builder->CreateIntCast(org, elt_dst_type, sign);
-@@ -658,7 +658,7 @@ error:
-             if (elt_type->getTypeID() != Type::FloatTyID) {
-               Value *II = NULL;
-               for (int i = 0; i < vec_num; i++) {
--                Value *vec = II ? II : UndefValue::get(VectorType::get(Type::getFloatTy(elt_type->getContext()), vec_num));
-+                Value *vec = II ? II : UndefValue::get(VectorType::get(Type::getFloatTy(elt_type->getContext()), vec_num, false));
-                 Value *cv = ConstantInt::get(Type::getInt32Ty(elt_type->getContext()), i);
-                 Value *org = builder->CreateExtractElement(arg, cv);
-                 Value* cvt  = builder->CreateFPCast(org, Type::getFloatTy(module->getContext()));
-diff --git backend/src/llvm/llvm_to_gen.cpp backend/src/llvm/llvm_to_gen.cpp
-index 7f7deffe..9e8ccc67 100644
---- a/backend/src/llvm/llvm_to_gen.cpp
-+++ b/backend/src/llvm/llvm_to_gen.cpp
-@@ -358,7 +358,7 @@ namespace gbe
-     passes.add(createScalarReplAggregatesPass(64, true, -1, -1, 64));
- #endif
-     passes.add(createLoadStoreOptimizationPass());
--    passes.add(createConstantPropagationPass());
-+    //passes.add(createConstantPropagationPass());
-     passes.add(createPromoteMemoryToRegisterPass());
-     if(optLevel > 0)
-       passes.add(createGVNPass());                 // Remove redundancies
-@@ -367,11 +367,11 @@ namespace gbe
-     passes.add(createScalarizePass());             // Expand all vector ops
-     passes.add(createExpandLargeIntegersPass());   // legalize large integer operation
-     passes.add(createInstructionCombiningPass());  // legalize will generate some silly instructions
--    passes.add(createConstantPropagationPass());   // propagate constant after scalarize/legalize
-+    //passes.add(createConstantPropagationPass());   // propagate constant after scalarize/legalize
-     passes.add(createExpandConstantExprPass());    // constant prop may generate ConstantExpr
-     passes.add(createPromoteIntegersPass());       // align integer size to power of two
-     passes.add(createRemoveGEPPass(unit));         // Constant prop may generate gep
--    passes.add(createDeadInstEliminationPass());   // Remove simplified instructions
-+    //passes.add(createDeadInstEliminationPass());   // Remove simplified instructions
-     passes.add(createCFGSimplificationPass());     // Merge & remove BBs
-     passes.add(createLowerSwitchPass());           // simplify cfg will generate switch-case instruction
-     if (profiling) {
diff --git a/srcpkgs/beignet/patches/musl.patch b/srcpkgs/beignet/patches/musl.patch
deleted file mode 100644
index cefafbb65588..000000000000
--- a/srcpkgs/beignet/patches/musl.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/backend/src/backend/gen/gen_mesa_disasm.c
-+++ b/backend/src/backend/gen/gen_mesa_disasm.c
-@@ -1137,7 +1137,7 @@ static uint32_t __conv_half_to_float(uint16_t h)
-       // Adjust mantissa so it's normalized (and keep
-       // track of exponent adjustment)
-       int e = -1;
--      uint m = i.mantissa;
-+      unsigned int m = i.mantissa;
-       do {
-         e++;
-         m <<= 1;
diff --git a/srcpkgs/beignet/template b/srcpkgs/beignet/template
deleted file mode 100644
index dce6bbb7ae24..000000000000
--- a/srcpkgs/beignet/template
+++ /dev/null
@@ -1,22 +0,0 @@
-# Template file for 'beignet'
-pkgname=beignet
-version=1.3.2
-revision=10
-archs="i686* x86_64*"
-wrksrc="Beignet-${version}-Source"
-build_style=cmake
-hostmakedepends="clang llvm pkg-config"
-makedepends="MesaLib-devel libedit-devel libffi-devel ocl-icd-devel zlib-devel
- libXfixes-devel"
-depends="ocl-icd"
-short_desc="Beignet GPGPU System for Intel GPUs"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://www.freedesktop.org/wiki/Software/Beignet/"
-distfiles="https://01.org/sites/default/files/${pkgname}-${version}-source.tar.gz"
-checksum=c555edba149de23243965a703f39f79fa06f15bcff5a3762b5544b0925010b43
-
-post_install() {
-	# remove CL headers, we do use opencl-headers instead.
-	rm -r ${DESTDIR}/usr/include
-}
diff --git a/srcpkgs/beignet/update b/srcpkgs/beignet/update
deleted file mode 100644
index ca41e0afe60c..000000000000
--- a/srcpkgs/beignet/update
+++ /dev/null
@@ -1 +0,0 @@
-site="https://01.org/beignet/downloads"
diff --git a/srcpkgs/removed-packages/template b/srcpkgs/removed-packages/template
index 0923c53cfc05..d59bd20f820c 100644
--- a/srcpkgs/removed-packages/template
+++ b/srcpkgs/removed-packages/template
@@ -1,7 +1,7 @@
 # Template file for 'removed-packages'
 pkgname=removed-packages
 version=0.1
-revision=69
+revision=70
 build_style=meta
 short_desc="Uninstalls packages removed from repository"
 maintainer="Piotr Wójcik <chocimier@tlen.pl>"
@@ -25,6 +25,7 @@ replaces="
  atom<=1.44.0_1
  avogadro-devel<=1.2.0_8
  avogadro<=1.2.0_8
+ beignet<=1.3.2_10
  bokken<=1.8_3
  bomi<=0.9.11_17
  burp-client<=1.4.40_13

From 97338ef68219b7d590bd10edc23bf882e6d2d9cb Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 21/29] ldc: rebuild for llvm14

---
 srcpkgs/ldc/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/ldc/template b/srcpkgs/ldc/template
index a27280dde3b8..e21bc6555e38 100644
--- a/srcpkgs/ldc/template
+++ b/srcpkgs/ldc/template
@@ -1,7 +1,7 @@
 # Template file for 'ldc'
 pkgname=ldc
 version=1.28.0
-revision=1
+revision=2
 wrksrc="ldc-${version}-src"
 build_style=cmake
 configure_args="

From 542f5c5ee5d187c465a6490af05c1133fe701723 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 22:31:25 +0200
Subject: [PATCH 22/29] ldc: update to 1.29.0.

---
 srcpkgs/ldc/template | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/srcpkgs/ldc/template b/srcpkgs/ldc/template
index e21bc6555e38..1d72a8805eb6 100644
--- a/srcpkgs/ldc/template
+++ b/srcpkgs/ldc/template
@@ -1,7 +1,7 @@
 # Template file for 'ldc'
 pkgname=ldc
-version=1.28.0
-revision=2
+version=1.29.0
+revision=1
 wrksrc="ldc-${version}-src"
 build_style=cmake
 configure_args="
@@ -11,7 +11,7 @@ configure_args="
  -DBASH_COMPLETION_COMPLETIONSDIR=/usr/share/bash-completion
  -DC_SYSTEM_LIBS='unwind;m;pthread;rt;dl'"
 conf_files="/etc/ldc2.conf"
-hostmakedepends="dmd llvm12 perl pkg-config"
+hostmakedepends="dmd llvm14 perl pkg-config"
 makedepends="libcurl-devel libffi-devel ncurses-devel zlib-devel
  llvm-libunwind-devel"
 depends="ldc-runtime llvm-libunwind-devel"
@@ -22,7 +22,7 @@ license="BSD-3-Clause, BSL-1.0"
 homepage="https://wiki.dlang.org/LDC"
 changelog="https://raw.githubusercontent.com/ldc-developers/ldc/master/CHANGELOG.md"
 distfiles="https://github.com/ldc-developers/ldc/releases/download/v${version}/ldc-${version}-src.tar.gz"
-checksum=17fee8bb535bcb8cda0a45947526555c46c045f302a7349cc8711b254e54cf09
+checksum=d0c066eb965467625d9c5e75c00c583451b9ffa363601f9e37275ca8a8aea140
 nopie=yes
 nocross="dmd compilation fails on cross"
 # tests timeout on musl; also require unpackaged python3-lit

From aedbfa1967184744cf68b38bb9b61cc8c6df6c5c Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 23/29] include-what-you-use: update to 0.18.

---
 srcpkgs/include-what-you-use/template | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/include-what-you-use/template b/srcpkgs/include-what-you-use/template
index b13bb7ee56af..297669f60459 100644
--- a/srcpkgs/include-what-you-use/template
+++ b/srcpkgs/include-what-you-use/template
@@ -1,6 +1,6 @@
 # Template file for 'include-what-you-use'
 pkgname=include-what-you-use
-version=0.16
+version=0.18
 revision=1
 wrksrc="${pkgname}"
 build_style=cmake
@@ -12,7 +12,7 @@ maintainer="Leah Neukirchen <leah@vuxu.org>"
 license="NCSA"
 homepage="https://include-what-you-use.org/"
 distfiles="https://include-what-you-use.org/downloads/${pkgname}-${version}.src.tar.gz"
-checksum=8d6fc9b255343bc1e5ec459e39512df1d51c60e03562985e0076036119ff5a1c
+checksum=9102fc8419294757df86a89ce6ec305f8d90a818d1f2598a139d15eb1894b8f3
 python_version=3
 
 post_install() {

From 7bb7e0998594c0853e98c3bfe8857c1deb7f9e45 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:18:24 +0200
Subject: [PATCH 24/29] SPIRV-LLVM-Translator: update to 14.0.0.

---
 common/shlibs                          |  1 +
 srcpkgs/SPIRV-LLVM-Translator/template | 11 ++++++-----
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/common/shlibs b/common/shlibs
index 86f4c9060d3b..df3eb79f921c 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -983,6 +983,7 @@ libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
 libLLVM-14.so libllvm14-14.0.3_1
+libLLVMSPIRVLib.so.14 SPIRV-LLVM-Translator-14.0.0_1
 libisofs.so.6 libisofs-0.6.24_1
 libmpack.so.0 libmpack-1.0.5_1
 libGeoIP.so.1 libgeoip-1.4.8_1
diff --git a/srcpkgs/SPIRV-LLVM-Translator/template b/srcpkgs/SPIRV-LLVM-Translator/template
index 2504cabed367..2277d062d992 100644
--- a/srcpkgs/SPIRV-LLVM-Translator/template
+++ b/srcpkgs/SPIRV-LLVM-Translator/template
@@ -1,19 +1,20 @@
 # Template file for 'SPIRV-LLVM-Translator'
 pkgname=SPIRV-LLVM-Translator
-version=12.0.0
+version=14.0.0
 revision=1
 build_style=cmake
 make_build_args="llvm-spirv"
-configure_args="-Wno-dev -DLLVM_LINK_LLVM_DYLIB=ON -DCMAKE_SKIP_RPATH=ON
- -DLLVM_SPIRV_INCLUDE_TESTS=OFF -DBUILD_SHARED_LIBS=ON"
+configure_args="-DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release
+ -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_SKIP_RPATH=ON -DLLVM_INCLUDE_TESTS=OFF
+ -DLLVM_LINK_LLVM_DYLIB=ON -DLLVM_EXTERNAL_LIT=/usr/bin/lit -Wno-dev -DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=/usr/include/spirv/ "
 hostmakedepends="clang clang-tools-extra llvm"
-makedepends="llvm"
+makedepends="llvm SPIRV-Headers"
 short_desc="API and commands for processing SPIR-V modules"
 maintainer="Orphaned <orphan@voidlinux.org>"
 license="NCSA"
 homepage="https://github.com/KhronosGroup/SPIRV-LLVM-Translator"
 distfiles="https://github.com/KhronosGroup/${pkgname}/archive/refs/tags/v${version}.tar.gz"
-checksum=6e4fad04203f25fcde4c308c53e9f59bd05a390978992db3212d4b63aff62108
+checksum=1afc52bb4e39aeb9b5b69324a201c81bd986364f347b559995eff6fd6f013318
 make_check=no
 
 post_install() {

From cddfa00dd1ed830105ca6d8480e086782f74b795 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:17:29 +0200
Subject: [PATCH 25/29] SPIRV-Headers: update to 1.3.211.0.

---
 srcpkgs/SPIRV-Headers/template | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/SPIRV-Headers/template b/srcpkgs/SPIRV-Headers/template
index 5dcf457c04c7..ce8288174e48 100644
--- a/srcpkgs/SPIRV-Headers/template
+++ b/srcpkgs/SPIRV-Headers/template
@@ -1,11 +1,13 @@
 # Template file for 'SPIRV-Headers'
 pkgname=SPIRV-Headers
-version=1.5.4.raytracing.fixed
+version=1.3.211.0
 revision=1
+reverts="1.5.4.raytracing.fixed"
+wrksrc=${pkgname}-sdk-${version}
 build_style=cmake
 short_desc="Machine-readable files for the SPIR-V Registry"
 maintainer="Orphaned <orphan@voidlinux.org>"
 license="GPL-3.0-or-later"
 homepage="https://github.com/KhronosGroup/SPIRV-Headers"
-distfiles="https://github.com/KhronosGroup/SPIRV-Headers/archive/${version}.tar.gz"
-checksum=df2ad2520be4d95a479fa248921065885bbf435a658349a7fc164ad7b26b68c6
+distfiles="https://github.com/KhronosGroup/SPIRV-Headers/archive/sdk-${version}.tar.gz"
+checksum=30a78e61bd812c75e09fdc7a319af206b1044536326bc3e85fea818376a12568

From f65e289140bd47a492e88429be7f5bfc7d252135 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:35:43 +0200
Subject: [PATCH 26/29] ispc: update to 1.17.0.

---
 .../ispc/patches/cmake-build-type-none.patch  |   18 -
 srcpkgs/ispc/patches/llvm12-001.patch         |   57 -
 srcpkgs/ispc/patches/llvm12-002.patch         |  923 --------
 srcpkgs/ispc/patches/llvm12-003.patch         | 1504 ------------
 srcpkgs/ispc/patches/llvm12-004.patch         |   34 -
 srcpkgs/ispc/patches/llvm12-005.patch         |  372 ---
 srcpkgs/ispc/patches/llvm12-006.patch         |  126 -
 srcpkgs/ispc/patches/llvm12-007.patch         |  160 --
 srcpkgs/ispc/patches/llvm12-008.patch         |  149 --
 srcpkgs/ispc/patches/llvm12-009.patch         | 2109 -----------------
 srcpkgs/ispc/template                         |    6 +-
 11 files changed, 3 insertions(+), 5455 deletions(-)
 delete mode 100644 srcpkgs/ispc/patches/cmake-build-type-none.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-001.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-002.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-003.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-004.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-005.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-006.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-007.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-008.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-009.patch

diff --git a/srcpkgs/ispc/patches/cmake-build-type-none.patch b/srcpkgs/ispc/patches/cmake-build-type-none.patch
deleted file mode 100644
index 411e353c7314..000000000000
--- a/srcpkgs/ispc/patches/cmake-build-type-none.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Index: ispc-1.15.0/CMakeLists.txt
-===================================================================
---- ispc-1.15.0.orig/CMakeLists.txt
-+++ ispc-1.15.0/CMakeLists.txt
-@@ -157,13 +157,6 @@ set(OUTPUT_RELEASE Release/bin)
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin )
- 
- if(CMAKE_BUILD_TYPE)
--    # Validate build type
--    set(CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo")
--
--    string(FIND "${CONFIGURATION_TYPES}" "${CMAKE_BUILD_TYPE}" MATCHED_CONFIG)
--    if (${MATCHED_CONFIG} EQUAL -1)
--         message(FATAL_ERROR "CMAKE_BUILD_TYPE (${CMAKE_BUILD_TYPE}) allows only the following values: ${CONFIGURATION_TYPES}")
--    endif()
- else(NOT CMAKE_BUILD_TYPE)
-     set(CMAKE_BUILD_TYPE "Release")
-     message(STATUS "Build type not specified: Use Release by default.")
diff --git a/srcpkgs/ispc/patches/llvm12-001.patch b/srcpkgs/ispc/patches/llvm12-001.patch
deleted file mode 100644
index 5f2d3f5a409e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-001.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 1c0f89dccb774f216c7f6e76a99ee907a1e641cb Mon Sep 17 00:00:00 2001
-From: Dmitry Babokin <dmitry.y.babokin@intel.com>
-Date: Tue, 22 Dec 2020 17:03:59 -0800
-Subject: [PATCH] Fix to work with LLVM trunk after llvm/llvm-project@41c3b2713
-
----
- src/ctx.cpp | 18 ++++++++++++------
- 1 file changed, 12 insertions(+), 6 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 6fbb8b9cf..977e9d222 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1473,11 +1473,15 @@ void FunctionEmitContext::AddDebugPos(llvm::Value *value, const SourcePos *pos,
-     llvm::Instruction *inst = llvm::dyn_cast<llvm::Instruction>(value);
-     if (inst != NULL && m->diBuilder) {
-         SourcePos p = pos ? *pos : currentPos;
--        if (p.first_line != 0)
-+        if (p.first_line != 0) {
-             // If first_line == 0, then we're in the middle of setting up
-             // the standard library or the like; don't add debug positions
-             // for those functions
--            inst->setDebugLoc(llvm::DebugLoc::get(p.first_line, p.first_column, scope ? scope : GetDIScope()));
-+            scope = scope ? scope : GetDIScope();
-+            llvm::DebugLoc diLoc =
-+                llvm::DILocation::get(scope->getContext(), p.first_line, p.first_column, scope, nullptr, false);
-+            inst->setDebugLoc(diLoc);
-+        }
-     }
- }
- 
-@@ -1518,9 +1522,10 @@ void FunctionEmitContext::EmitVariableDebugInfo(Symbol *sym) {
-     llvm::DILocalVariable *var = m->diBuilder->createAutoVariable(
-         scope, sym->name, sym->pos.GetDIFile(), sym->pos.first_line, diType, true /* preserve through opts */);
- 
-+    llvm::DebugLoc diLoc =
-+        llvm::DILocation::get(scope->getContext(), sym->pos.first_line, sym->pos.first_column, scope, nullptr, false);
-     llvm::Instruction *declareInst =
--        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(),
--                                    llvm::DebugLoc::get(sym->pos.first_line, sym->pos.first_column, scope), bblock);
-+        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(), diLoc, bblock);
-     AddDebugPos(declareInst, &sym->pos, scope);
- }
- 
-@@ -1535,9 +1540,10 @@ void FunctionEmitContext::EmitFunctionParameterDebugInfo(Symbol *sym, int argNum
-         m->diBuilder->createParameterVariable(scope, sym->name, argNum + 1, sym->pos.GetDIFile(), sym->pos.first_line,
-                                               diType, true /* preserve through opts */, flags);
- 
-+    llvm::DebugLoc diLoc =
-+        llvm::DILocation::get(scope->getContext(), sym->pos.first_line, sym->pos.first_column, scope, nullptr, false);
-     llvm::Instruction *declareInst =
--        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(),
--                                    llvm::DebugLoc::get(sym->pos.first_line, sym->pos.first_column, scope), bblock);
-+        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(), diLoc, bblock);
-     AddDebugPos(declareInst, &sym->pos, scope);
- }
- 
diff --git a/srcpkgs/ispc/patches/llvm12-002.patch b/srcpkgs/ispc/patches/llvm12-002.patch
deleted file mode 100644
index 0903f30da10d..000000000000
--- a/srcpkgs/ispc/patches/llvm12-002.patch
+++ /dev/null
@@ -1,923 +0,0 @@
-From 0597a79d084c014780136da906afe21d15e982cb Mon Sep 17 00:00:00 2001
-From: DeepakRajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Tue, 5 Jan 2021 13:53:30 -0800
-Subject: [PATCH] Remove LLVM 8.0 and LLVM 9.0. (#1966)
-
----
- .appveyor.yml                        |  3 --
- .travis.yml                          |  7 ---
- CMakeLists.txt                       | 12 ++----
- src/ast.cpp                          |  4 --
- src/ctx.cpp                          | 30 -------------
- src/gen/GlobalsLocalization.cpp      |  4 --
- src/ispc.cpp                         | 20 ---------
- src/ispc.h                           |  3 +-
- src/ispc_version.h                   |  4 +-
- src/main.cpp                         | 13 ------
- src/module.cpp                       | 27 ------------
- src/module.h                         |  2 -
- src/opt.cpp                          | 64 ++--------------------------
- src/type.cpp                         | 10 ++---
- tests/lit-tests/1771.ispc            |  1 -
- tests/lit-tests/1844.ispc            |  3 --
- tests/lit-tests/1926.ispc            |  2 -
- tests/lit-tests/cpus_x86.ispc        |  2 +
- tests/lit-tests/cpus_x86_llvm10.ispc | 11 -----
- tests/lit-tests/lit.cfg              |  5 ---
- 20 files changed, 14 insertions(+), 213 deletions(-)
- delete mode 100644 tests/lit-tests/cpus_x86_llvm10.ispc
-
-diff --git a/.appveyor.yml b/.appveyor.yml
-index 451a7b3e0..7945cca2a 100644
---- a/.appveyor.yml
-+++ b/.appveyor.yml
-@@ -41,8 +41,6 @@ environment:
-       LLVM_VERSION: latest
-     - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
-       LLVM_VERSION: 10.0
--    - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
--      LLVM_VERSION: 9.0
- 
- for:
- -
-@@ -62,7 +60,6 @@ for:
-         if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2019" ( (set generator="Visual Studio 16") & (set vsversion=2019))
-         set LLVM_TAR=llvm-11.0.0-win.vs2019-Release+Asserts-x86.arm.wasm.7z
-         if "%LLVM_VERSION%"=="10.0" (set LLVM_TAR=llvm-10.0.1-win.vs2019-Release+Asserts-x86.arm.wasm.zip)
--        if "%LLVM_VERSION%"=="9.0" (set LLVM_TAR=llvm-9.0.1-win.vs2017-Release+Asserts-x86.arm.wasm.zip)
-   install:
-     - ps: choco install --no-progress winflexbison3 wget 7zip
-     - cmd: |-
-diff --git a/.travis.yml b/.travis.yml
-index 2e96017a6..3a6b85264 100644
---- a/.travis.yml
-+++ b/.travis.yml
-@@ -108,13 +108,6 @@ jobs:
-         - LLVM_TAR=llvm-10.0.1-ubuntu16.04-Release+Asserts-x86.arm.wasm.tar.xz
-         - LLVM_REPO=https://github.com/dbabokin/llvm-project
-         - ISPC_HOME=$TRAVIS_BUILD_DIR
--    # LLVM 9.0 + Ubuntu 16.04: build, lit tests, examples (build + run), benchmarks (build + trial run)
--    - <<: *my_tag
--      env:
--        - LLVM_VERSION=9.0 OS=Ubuntu16.04
--        - LLVM_TAR=llvm-9.0.1-ubuntu16.04-Release+Asserts-x86.arm.wasm.tar.xz
--        - LLVM_REPO=https://github.com/dbabokin/llvm-project
--        - ISPC_HOME=$TRAVIS_BUILD_DIR
-     # WASM enabled build
-     # LLVM 11.0 + Ubuntu 16.04: build, lit tests, examples (build), benchmarks (build + trial run)
-     - <<: *my_tag
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 5fa863fcf..a6b3ed251 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -241,10 +241,8 @@ if (X86_ENABLED)
-         avx2-i8x32 avx2-i16x16
-         avx2-i32x4 avx2-i32x8 avx2-i32x16 avx2-i64x4
-         avx512knl-i32x16
--        avx512skx-i32x16 avx512skx-i32x8)
--    if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "10.0.0")
--        list(APPEND ISPC_TARGETS avx512skx-i8x64 avx512skx-i16x32)
--    endif()
-+        avx512skx-i32x16 avx512skx-i32x8
-+        avx512skx-i8x64 avx512skx-i16x32)
- endif()
- if (ARM_ENABLED)
-     list(APPEND ISPC_TARGETS neon-i8x16 neon-i16x8 neon-i32x4 neon-i32x8)
-@@ -259,11 +257,7 @@ if (WASM_ENABLED)
- endif()
- 
- set(CLANG_LIBRARY_LIST clangFrontend clangDriver clangSerialization clangParse clangSema clangAnalysis clangAST clangBasic clangEdit clangLex)
--set(LLVM_COMPONENTS engine ipo bitreader bitwriter instrumentation linker option)
--
--if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "10.0.0")
--    list(APPEND LLVM_COMPONENTS frontendopenmp)
--endif()
-+set(LLVM_COMPONENTS engine ipo bitreader bitwriter instrumentation linker option frontendopenmp)
- 
- if (X86_ENABLED)
-     list(APPEND LLVM_COMPONENTS x86)
-diff --git a/src/ast.cpp b/src/ast.cpp
-index 20f75a29c..5a43c4854 100644
---- a/src/ast.cpp
-+++ b/src/ast.cpp
-@@ -44,9 +44,7 @@
- #include "sym.h"
- #include "util.h"
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/TimeProfiler.h>
--#endif
- ///////////////////////////////////////////////////////////////////////////
- // ASTNode
- 
-@@ -62,9 +60,7 @@ void AST::AddFunction(Symbol *sym, Stmt *code) {
- }
- 
- void AST::GenerateIR() {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope TimeScope("GenerateIR");
--#endif
-     for (unsigned int i = 0; i < functions.size(); ++i)
-         functions[i]->GenerateIR();
- }
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 977e9d222..42c4ea09d 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -309,21 +309,13 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym, llvm::F
-             char buf[256];
-             snprintf(buf, sizeof(buf), "__off_all_on_mask_%s", g->target->GetISAString());
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_8_0
--            llvm::Constant *offFunc = m->module->getOrInsertFunction(buf, LLVMTypes::VoidType);
--#else // LLVM 9.0+
-             llvm::FunctionCallee offFuncCallee = m->module->getOrInsertFunction(buf, LLVMTypes::VoidType);
-             llvm::Constant *offFunc = llvm::cast<llvm::Constant>(offFuncCallee.getCallee());
--#endif
-             AssertPos(currentPos, llvm::isa<llvm::Function>(offFunc));
-             llvm::BasicBlock *offBB = llvm::BasicBlock::Create(*g->ctx, "entry", (llvm::Function *)offFunc, 0);
-             llvm::StoreInst *inst = new llvm::StoreInst(LLVMMaskAllOff, globalAllOnMaskPtr, offBB);
-             if (g->opt.forceAlignedMemory) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-                 inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-             }
-             llvm::ReturnInst::Create(*g->ctx, offBB);
-         }
-@@ -2288,11 +2280,7 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
- #endif
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-     }
- 
-     AddDebugPos(inst);
-@@ -2431,11 +2419,7 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-                 // vs the proper alignment in practice.)
-                 int align = 1;
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                inst->setAlignment(align);
--#else // LLVM 10.0+
-                 inst->setAlignment(llvm::MaybeAlign(align).valueOrOne());
--#endif
-             }
- 
-             AddDebugPos(inst);
-@@ -2649,11 +2633,7 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-         align = g->target->getNativeVectorAlignment();
- 
-     if (align != 0) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(align);
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(align).valueOrOne());
--#endif
-     }
-     // Don't add debugging info to alloca instructions
-     return inst;
-@@ -2926,11 +2906,7 @@ void FunctionEmitContext::StoreInst(llvm::Value *value, llvm::Value *ptr, const
-     llvm::StoreInst *inst = new llvm::StoreInst(value, ptr, bblock);
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-     }
- 
- #ifdef ISPC_GENX_ENABLED
-@@ -3025,16 +3001,10 @@ void FunctionEmitContext::MemcpyInst(llvm::Value *dest, llvm::Value *src, llvm::
-     }
-     if (align == NULL)
-         align = LLVMInt32(1);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_8_0
--    llvm::Constant *mcFunc =
--        m->module->getOrInsertFunction("llvm.memcpy.p0i8.p0i8.i64", LLVMTypes::VoidType, LLVMTypes::VoidPointerType,
--                                       LLVMTypes::VoidPointerType, LLVMTypes::Int64Type, LLVMTypes::BoolType);
--#else // LLVM 9.0+
-     llvm::FunctionCallee mcFuncCallee =
-         m->module->getOrInsertFunction("llvm.memcpy.p0i8.p0i8.i64", LLVMTypes::VoidType, LLVMTypes::VoidPointerType,
-                                        LLVMTypes::VoidPointerType, LLVMTypes::Int64Type, LLVMTypes::BoolType);
-     llvm::Constant *mcFunc = llvm::cast<llvm::Constant>(mcFuncCallee.getCallee());
--#endif
-     AssertPos(currentPos, mcFunc != NULL);
-     AssertPos(currentPos, llvm::isa<llvm::Function>(mcFunc));
- 
-diff --git a/src/gen/GlobalsLocalization.cpp b/src/gen/GlobalsLocalization.cpp
-index 193a66289..a176e9462 100644
---- a/src/gen/GlobalsLocalization.cpp
-+++ b/src/gen/GlobalsLocalization.cpp
-@@ -470,11 +470,7 @@ void GlobalsLocalization::LocalizeGlobals(LocalizationInfo &LI) {
-         Instruction &FirstI = *Fn->getEntryBlock().begin();
-         Type *ElemTy = GV->getType()->getElementType();
-         AllocaInst *Alloca = new AllocaInst(ElemTy, 0, GV->getName() + ".local", &FirstI);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        Alloca->setAlignment(GV->getAlignment());
--#else // LLVM 10.0+
-         Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()));
--#endif
-         if (!isa<UndefValue>(GV->getInitializer()))
-             new StoreInst(GV->getInitializer(), Alloca, &FirstI);
- 
-diff --git a/src/ispc.cpp b/src/ispc.cpp
-index e2d0f206e..fac5233f7 100644
---- a/src/ispc.cpp
-+++ b/src/ispc.cpp
-@@ -272,9 +272,7 @@ typedef enum {
-     CPU_Silvermont,
- 
-     CPU_ICX,
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     CPU_TGL,
--#endif
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-     CPU_ADL,
-     CPU_SPR,
-@@ -365,10 +363,8 @@ class AllCPUs {
- 
-         names[CPU_ICX].push_back("icelake-server");
-         names[CPU_ICX].push_back("icx");
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         names[CPU_TGL].push_back("tigerlake");
-         names[CPU_TGL].push_back("tgl");
--#endif
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-         names[CPU_ADL].push_back("alderlake");
-         names[CPU_ADL].push_back("adl");
-@@ -411,11 +407,9 @@ class AllCPUs {
-         compat[CPU_ADL] = Set(CPU_ADL, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont,
-                               CPU_SandyBridge, CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_None);
- #endif
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         compat[CPU_TGL] =
-             Set(CPU_TGL, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont, CPU_SandyBridge,
-                 CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_SKX, CPU_ICL, CPU_ICX, CPU_None);
--#endif
-         compat[CPU_ICX] = Set(CPU_ICX, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont,
-                               CPU_SandyBridge, CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_SKX, CPU_ICL, CPU_None);
- 
-@@ -556,9 +550,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-         case CPU_SPR:
- #endif
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         case CPU_TGL:
--#endif
-         case CPU_ICX:
-         case CPU_ICL:
-         case CPU_SKX:
-@@ -916,7 +908,6 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         }
-         break;
-     case ISPCTarget::avx512skx_i8x64:
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0 // LLVM 10.0+
-         // This target is enabled only for LLVM 10.0 and later
-         // because LLVM requires a number of fixes, which are
-         // committed to LLVM 11.0 and can be applied to 10.0, but not
-@@ -937,12 +928,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         this->m_hasVecPrefetch = false;
-         CPUfromISA = CPU_SKX;
-         break;
--#else
--        unsupported_target = true;
--        break;
--#endif
-     case ISPCTarget::avx512skx_i16x32:
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0 // LLVM 10.0+
-         // This target is enabled only for LLVM 10.0 and later
-         // because LLVM requires a number of fixes, which are
-         // committed to LLVM 11.0 and can be applied to 10.0, but not
-@@ -963,10 +949,6 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         this->m_hasVecPrefetch = false;
-         CPUfromISA = CPU_SKX;
-         break;
--#else
--        unsupported_target = true;
--        break;
--#endif
- #ifdef ISPC_ARM_ENABLED
-     case ISPCTarget::neon_i8x16:
-         this->m_isa = Target::NEON;
-@@ -1662,11 +1644,9 @@ Globals::Globals() {
-     isMultiTargetCompilation = false;
-     errorLimit = -1;
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     enableTimeTrace = false;
-     // set default granularity to 500.
-     timeTraceGranularity = 500;
--#endif
-     target = NULL;
-     ctx = new llvm::LLVMContext;
- 
-diff --git a/src/ispc.h b/src/ispc.h
-index e25d8830e..de357a21c 100644
---- a/src/ispc.h
-+++ b/src/ispc.h
-@@ -695,13 +695,12 @@ struct Globals {
- 
-     /* Number of errors to show in ISPC. */
-     int errorLimit;
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-+
-     /* When true, enable compile time tracing. */
-     bool enableTimeTrace;
- 
-     /* When compile time tracing is enabled, set time granularity. */
-     int timeTraceGranularity;
--#endif
- };
- 
- enum {
-diff --git a/src/ispc_version.h b/src/ispc_version.h
-index d781347fd..434b2d678 100644
---- a/src/ispc_version.h
-+++ b/src/ispc_version.h
-@@ -44,13 +44,11 @@
- 
- #define ISPC_LLVM_VERSION (LLVM_VERSION_MAJOR * 10000 + LLVM_VERSION_MINOR * 100)
- 
--#define ISPC_LLVM_8_0 80000
--#define ISPC_LLVM_9_0 90000
- #define ISPC_LLVM_10_0 100000
- #define ISPC_LLVM_11_0 110000
- #define ISPC_LLVM_12_0 120000
- 
--#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_8_0
-+#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_10_0
- #define LATEST_SUPPORTED_LLVM ISPC_LLVM_12_0
- 
- #ifdef __ispc__xstr
-diff --git a/src/main.cpp b/src/main.cpp
-index 8f64330cc..5c920eabc 100644
---- a/src/main.cpp
-+++ b/src/main.cpp
-@@ -55,9 +55,7 @@
- #include <llvm/Support/Signals.h>
- #include <llvm/Support/TargetRegistry.h>
- #include <llvm/Support/TargetSelect.h>
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/ToolOutputFile.h>
--#endif
- 
- #ifdef ISPC_HOST_IS_WINDOWS
- #define strcasecmp stricmp
-@@ -181,11 +179,9 @@ static void lPrintVersion() {
-     snprintf(targetHelp, sizeof(targetHelp), "[--target-os=<os>]\t\t\tSelect target OS.  <os>={%s}",
-              g->target_registry->getSupportedOSes().c_str());
-     PrintWithWordBreaks(targetHelp, 24, TerminalWidth(), stdout);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     printf("    [--time-trace]\t\t\tTurn on time profiler. Generates JSON file based on output filename.\n");
-     printf("    [--time-trace-granularity=<value>\tMinimum time granularity (in microseconds) traced by time "
-            "profiler.\n");
--#endif
-     printf("    [--version]\t\t\t\tPrint ispc version\n");
- #ifdef ISPC_GENX_ENABLED
-     printf("    [--vc-options=<\"-option1 -option2...\">]\t\t\t\tPass additional options to Vector Compiler backend\n");
-@@ -462,7 +458,6 @@ static void setCallingConv(VectorCallStatus vectorCall, Arch arch) {
-     }
- }
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- static void writeCompileTimeFile(const char *outFileName) {
-     llvm::SmallString<128> jsonFileName(outFileName);
-     jsonFileName.append(".json");
-@@ -479,7 +474,6 @@ static void writeCompileTimeFile(const char *outFileName) {
-     of->keep();
-     return;
- }
--#endif
- 
- static std::set<int> ParsingPhases(char *stages, ArgErrors &errorHandler) {
-     constexpr int parsing_limit = 100;
-@@ -791,12 +785,10 @@ int main(int Argc, char *Argv[]) {
-             }
-         } else if (!strncmp(argv[i], "--force-alignment=", 18)) {
-             g->forceAlignment = atoi(argv[i] + 18);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         } else if (!strcmp(argv[i], "--time-trace")) {
-             g->enableTimeTrace = true;
-         } else if (!strncmp(argv[i], "--time-trace-granularity=", 25)) {
-             g->timeTraceGranularity = atoi(argv[i] + 25);
--#endif
-         } else if (!strcmp(argv[i], "--woff") || !strcmp(argv[i], "-woff")) {
-             g->disableWarnings = true;
-             g->emitPerfWarnings = false;
-@@ -1059,7 +1051,6 @@ int main(int Argc, char *Argv[]) {
- 
-     // This needs to happen after the TargetOS is decided.
-     setCallingConv(vectorCall, arch);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     if (g->enableTimeTrace) {
-         llvm::timeTraceProfilerInitialize(g->timeTraceGranularity, "ispc");
-     }
-@@ -1077,9 +1068,5 @@ int main(int Argc, char *Argv[]) {
-         }
-         llvm::timeTraceProfilerCleanup();
-     }
--#else
--    int ret = Module::CompileAndOutput(file, arch, cpu, targets, flags, ot, outFileName, headerFileName, depsFileName,
--                                       depsTargetName, hostStubFileName, devStubFileName);
--#endif
-     return ret;
- }
-diff --git a/src/module.cpp b/src/module.cpp
-index fe7452df1..a85fec77a 100644
---- a/src/module.cpp
-+++ b/src/module.cpp
-@@ -170,9 +170,7 @@ Module::Module(const char *fn) {
-     module->setDataLayout(g->target->getDataLayout()->getStringRepresentation());
- 
-     if (g->generateDebuggingSymbols) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Create Debug Data");
--#endif
-         // To enable debug information on Windows, we have to let llvm know, that
-         // debug information should be emitted in CodeView format.
-         if (g->target_os == TargetOS::windows) {
-@@ -226,10 +224,8 @@ extern YY_BUFFER_STATE yy_create_buffer(FILE *, int);
- extern void yy_delete_buffer(YY_BUFFER_STATE);
- 
- int Module::CompileFile() {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope CompileFileTimeScope(
-         "CompileFile", llvm::StringRef(filename + ("_" + std::string(g->target->GetISAString()))));
--#endif
-     extern void ParserInit();
-     ParserInit();
- 
-@@ -238,18 +234,14 @@ int Module::CompileFile() {
-     // variable 'm' to be initialized and available (which it isn't until
-     // the Module constructor returns...)
-     {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("DefineStdlib");
--#endif
-         DefineStdlib(symbolTable, g->ctx, module, g->includeStdlib);
-     }
- 
-     bool runPreprocessor = g->runCPP;
- 
-     if (runPreprocessor) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Frontend parser");
--#endif
-         if (!IsStdin(filename)) {
-             // Try to open the file first, since otherwise we crash in the
-             // preprocessor if the file doesn't exist.
-@@ -268,9 +260,7 @@ int Module::CompileFile() {
-         yyparse();
-         yy_delete_buffer(strbuf);
-     } else {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Frontend parser");
--#endif
-         // No preprocessor, just open up the file if it's not stdin..
-         FILE *f = NULL;
-         if (IsStdin(filename)) {
-@@ -297,9 +287,7 @@ int Module::CompileFile() {
- 
-     if (diBuilder)
-         diBuilder->finalize();
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope TimeScope("Optimize");
--#endif
-     if (errorCount == 0)
-         Optimize(module, g->opt.level);
- 
-@@ -1243,15 +1231,8 @@ bool Module::writeObjectFileOrAssembly(llvm::TargetMachine *targetMachine, llvm:
-                                        const char *outFileName) {
-     // Figure out if we're generating object file or assembly output, and
-     // set binary output for object files
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    Assert(!g->target->isGenXTarget());
--    llvm::TargetMachine::CodeGenFileType fileType =
--        (outputType == Object) ? llvm::TargetMachine::CGFT_ObjectFile : llvm::TargetMachine::CGFT_AssemblyFile;
--    bool binary = (fileType == llvm::TargetMachine::CGFT_ObjectFile);
--#else // LLVM 10.0+
-     llvm::CodeGenFileType fileType = (outputType == Object) ? llvm::CGFT_ObjectFile : llvm::CGFT_AssemblyFile;
-     bool binary = (fileType == llvm::CGFT_ObjectFile);
--#endif
- 
-     llvm::sys::fs::OpenFlags flags = binary ? llvm::sys::fs::F_None : llvm::sys::fs::F_Text;
- 
-@@ -2219,11 +2200,7 @@ void Module::execPreprocessor(const char *infilename, llvm::raw_string_ostream *
-     inst.setTarget(target);
-     inst.createSourceManager(inst.getFileManager());
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    clang::FrontendInputFile inputFile(infilename, clang::InputKind::Unknown);
--#else // LLVM 10.0+
-     clang::FrontendInputFile inputFile(infilename, clang::InputKind());
--#endif
- 
-     inst.InitializeSourceManager(inputFile);
- 
-@@ -2722,9 +2699,7 @@ int Module::CompileAndOutput(const char *srcFile, Arch arch, const char *cpu, st
- 
-         m = new Module(srcFile);
-         if (m->CompileFile() == 0) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-             llvm::TimeTraceScope TimeScope("Backend");
--#endif
- #ifdef ISPC_GENX_ENABLED
-             if (outputType == Asm || outputType == Object) {
-                 if (g->target->isGenXTarget()) {
-@@ -2855,9 +2830,7 @@ int Module::CompileAndOutput(const char *srcFile, Arch arch, const char *cpu, st
- 
-             m = new Module(srcFile);
-             int compileFileError = m->CompileFile();
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-             llvm::TimeTraceScope TimeScope("Backend");
--#endif
-             if (compileFileError == 0) {
-                 // Create the dispatch module, unless already created;
-                 // in the latter case, just do the checking
-diff --git a/src/module.h b/src/module.h
-index 61d3cfea0..603124d50 100644
---- a/src/module.h
-+++ b/src/module.h
-@@ -43,9 +43,7 @@
- 
- #include <llvm/IR/DebugInfo.h>
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/TimeProfiler.h>
--#endif
- 
- #ifdef ISPC_GENX_ENABLED
- #include "ocl_igc_interface/igc_ocl_device_ctx.h"
-diff --git a/src/opt.cpp b/src/opt.cpp
-index a655a8344..5b1ac7b63 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -66,6 +66,7 @@
- #include <llvm/IR/Instructions.h>
- #include <llvm/IR/IntrinsicInst.h>
- #include <llvm/IR/Intrinsics.h>
-+#include <llvm/IR/IntrinsicsX86.h>
- #include <llvm/IR/LegacyPassManager.h>
- #include <llvm/IR/Module.h>
- #include <llvm/IR/PatternMatch.h>
-@@ -85,9 +86,6 @@
- #include <llvm/Transforms/Scalar/InstSimplifyPass.h>
- #include <llvm/Transforms/Utils.h>
- #include <llvm/Transforms/Utils/BasicBlockUtils.h>
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
--#include <llvm/IR/IntrinsicsX86.h>
--#endif
- 
- #ifdef ISPC_HOST_IS_LINUX
- #include <alloca.h>
-@@ -1003,10 +1001,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
-                 name = LLVMGetName(callInst->getArgOperand(0), "_load");
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                llvm::Instruction *loadInst =
--                    new llvm::LoadInst(castPtr, name, false /* not volatile */, align, (llvm::Instruction *)NULL);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-                 llvm::Instruction *loadInst = new llvm::LoadInst(castPtr, name, false /* not volatile */,
-                                                                  llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
- #else
-@@ -1043,13 +1038,8 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedStore32 ? 4 : 8;
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                llvm::StoreInst *storeInst = new llvm::StoreInst(rvalue, castPtr, (llvm::Instruction *)NULL);
--                storeInst->setAlignment(align);
--#else
-                 llvm::StoreInst *storeInst = new llvm::StoreInst(rvalue, castPtr, (llvm::Instruction *)NULL,
-                                                                  llvm::MaybeAlign(align).valueOrOne());
--#endif
-                 lCopyMetadata(storeInst, callInst);
-                 llvm::ReplaceInstWithInst(callInst, storeInst);
- 
-@@ -1066,9 +1056,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool IntrinsicsOpt::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("IntrinsicsOpt::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -1239,9 +1227,7 @@ bool InstructionSimplifyPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool InstructionSimplifyPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("InstructionSimplifyPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -2974,16 +2960,10 @@ static bool lImproveMaskedStore(llvm::CallInst *callInst) {
- 
-             lvalue = new llvm::BitCastInst(lvalue, ptrType, "lvalue_to_ptr_type", callInst);
-             lCopyMetadata(lvalue, callInst);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--            store =
--                new llvm::StoreInst(rvalue, lvalue, false /* not volatile */,
--                                    g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align);
--#else
-             store = new llvm::StoreInst(
-                 rvalue, lvalue, false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-                     .valueOrOne());
--#endif
-         }
-         if (store != NULL) {
-             lCopyMetadata(store, callInst);
-@@ -3059,11 +3039,7 @@ static bool lImproveMaskedLoad(llvm::CallInst *callInst, llvm::BasicBlock::itera
-         {
-             llvm::Type *ptrType = llvm::PointerType::get(callInst->getType(), 0);
-             ptr = new llvm::BitCastInst(ptr, ptrType, "ptr_cast_for_load", callInst);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--            load = new llvm::LoadInst(ptr, callInst->getName(), false /* not volatile */,
--                                      g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align,
--                                      (llvm::Instruction *)NULL);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-             load = new llvm::LoadInst(
-                 ptr, callInst->getName(), false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-@@ -3129,9 +3105,7 @@ bool ImproveMemoryOpsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ImproveMemoryOpsPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ImproveMemoryOpsPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -3424,9 +3398,7 @@ llvm::Value *lGEPAndLoad(llvm::Value *basePtr, int64_t offset, int align, llvm::
-                          llvm::Type *type) {
-     llvm::Value *ptr = lGEPInst(basePtr, LLVMInt64(offset), "new_base", insertBefore);
-     ptr = new llvm::BitCastInst(ptr, llvm::PointerType::get(type, 0), "ptr_cast", insertBefore);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, align, insertBefore);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-     return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, llvm::MaybeAlign(align), insertBefore);
- #else // LLVM 11.0+
-     return new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-@@ -4135,9 +4107,7 @@ bool GatherCoalescePass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool GatherCoalescePass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("GatherCoalescePass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -4467,9 +4437,7 @@ bool ReplacePseudoMemoryOpsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplacePseudoMemoryOpsPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplacePseudoMemoryOpsPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -4573,9 +4541,7 @@ bool IsCompileTimeConstantPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool IsCompileTimeConstantPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("IsCompileTimeConstantPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5201,9 +5167,7 @@ bool PeepholePass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool PeepholePass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("PeepholePass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5299,9 +5263,7 @@ bool ReplaceStdlibShiftPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceStdlibShiftPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceStdlibShiftPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5399,9 +5361,7 @@ llvm::Instruction *FixBooleanSelectPass::fixSelect(llvm::SelectInst *sel, llvm::
- }
- 
- bool FixBooleanSelectPass::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("FixBooleanSelectPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
- 
-     return modifiedAny;
-@@ -5964,9 +5924,7 @@ bool GenXGatherCoalescing::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool GenXGatherCoalescing::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("GenXGatherCoalescing::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6113,9 +6071,7 @@ bool PromoteToPrivateMemoryPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool PromoteToPrivateMemoryPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("PromoteToPrivateMemoryPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6181,9 +6137,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceLLVMIntrinsics::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceLLVMIntrinsics::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6278,9 +6232,7 @@ bool ReplaceUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceUnsupportedInsts::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceUnsupportedInsts::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6369,9 +6321,7 @@ bool CheckUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool CheckUnsupportedInsts::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("CheckUnsupportedInsts::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6440,9 +6390,7 @@ bool MangleOpenCLBuiltins::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool MangleOpenCLBuiltins::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("MangleOpenCLBuiltins::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6828,9 +6776,7 @@ bool FixAddressSpace::runOnFunction(llvm::Function &F) {
-     // Transformations are correct when the function is not internal.
-     // This is due to address space calculation algorithm.
-     // TODO: problems can be met in case of Stack Calls
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("FixAddressSpace::runOnFunction", F.getName());
--#endif
-     if (F.getLinkage() == llvm::GlobalValue::LinkageTypes::InternalLinkage)
-         return false;
- 
-@@ -6854,9 +6800,7 @@ class DemotePHIs : public llvm::FunctionPass {
- char DemotePHIs::ID = 0;
- 
- bool DemotePHIs::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("DemotePHIs::runOnFunction", F.getName());
--#endif
-     if (F.isDeclaration() || skipFunction(F))
-         return false;
-     std::vector<llvm::Instruction *> WorkList;
-diff --git a/src/type.cpp b/src/type.cpp
-index 688a4e874..fa0cb04db 100644
---- a/src/type.cpp
-+++ b/src/type.cpp
-@@ -1822,14 +1822,10 @@ llvm::DIType *StructType::GetDIType(llvm::DIScope *scope) const {
-     llvm::DIFile *diFile = pos.GetDIFile();
-     llvm::DINamespace *diSpace = pos.GetDINamespace();
-     return m->diBuilder->createStructType(diSpace, GetString(), diFile,
--                                          pos.first_line,          // Line number
--                                          layout->getSizeInBits(), // Size in bits
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                                          layout->getAlignment() * 8, // Alignment in bits
--#else                                                                 // LLVM 10.0+
-+                                          pos.first_line,                     // Line number
-+                                          layout->getSizeInBits(),            // Size in bits
-                                           layout->getAlignment().value() * 8, // Alignment in bits
--#endif
--                                          llvm::DINode::FlagZero, // Flags
-+                                          llvm::DINode::FlagZero,             // Flags
-                                           NULL, elements);
- }
- 
-diff --git a/tests/lit-tests/1771.ispc b/tests/lit-tests/1771.ispc
-index 98064d84d..4feb73dd7 100644
---- a/tests/lit-tests/1771.ispc
-+++ b/tests/lit-tests/1771.ispc
-@@ -5,7 +5,6 @@
- // RUN: %{ispc} %s --target=sse4-i16x8 --emit-asm -o - | FileCheck %s -check-prefix=CHECKSSE4_I16X8
- // RUN: %{ispc} %s --target=sse4-i8x16 --emit-asm -o - | FileCheck %s -check-prefix=CHECKSSE4_I8X16
- 
--// REQUIRES: LLVM_10_0+
- // REQUIRES: X86_ENABLED
- 
- // CHECKAVX2_I32X8: {{[a-z]*xor[a-z]*}}  %xmm0, %xmm0, %xmm0
-diff --git a/tests/lit-tests/1844.ispc b/tests/lit-tests/1844.ispc
-index 793a8866c..189edf4c3 100644
---- a/tests/lit-tests/1844.ispc
-+++ b/tests/lit-tests/1844.ispc
-@@ -6,9 +6,6 @@
- 
- // REQUIRES: X86_ENABLED
- 
--// It doesn't work for anything earlier than 10.0, but it will not be fixed, so don't run.
--// REQUIRES: LLVM_10_0+
--
- extern uniform unsigned int64 var_6;
- extern uniform unsigned int16 var_11;
- extern uniform bool arr_201 [1] [15] [20];
-diff --git a/tests/lit-tests/1926.ispc b/tests/lit-tests/1926.ispc
-index 70f7cc3c2..7921c91a6 100644
---- a/tests/lit-tests/1926.ispc
-+++ b/tests/lit-tests/1926.ispc
-@@ -2,8 +2,6 @@
- // RUN: cat %T/1926.o.json \
- // RUN:   | FileCheck %s
- 
--// REQUIRES: LLVM_10_0+
--
- // CHECK: "traceEvents"
- // CHECK: "detail"
- export uniform int foo(uniform int a[], uniform int count) {
-diff --git a/tests/lit-tests/cpus_x86.ispc b/tests/lit-tests/cpus_x86.ispc
-index 516efdd4c..4d60186f6 100644
---- a/tests/lit-tests/cpus_x86.ispc
-+++ b/tests/lit-tests/cpus_x86.ispc
-@@ -24,6 +24,8 @@
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icl
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icelake-server
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icx
-+//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tigerlake
-+//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tgl
- 
- // REQUIRES: X86_ENABLED
- 
-diff --git a/tests/lit-tests/cpus_x86_llvm10.ispc b/tests/lit-tests/cpus_x86_llvm10.ispc
-deleted file mode 100644
-index ef00000e5..000000000
---- a/tests/lit-tests/cpus_x86_llvm10.ispc
-+++ /dev/null
-@@ -1,11 +0,0 @@
--// The test checks that cpu definitions (including all synonyms) are successfully consumed by compiler.
--
--//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tigerlake
--//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tgl
--
--// REQUIRES: X86_ENABLED
--// REQUIRES: LLVM_10_0+
--
--uniform int i;
--
--void foo() {}
-diff --git a/tests/lit-tests/lit.cfg b/tests/lit-tests/lit.cfg
-index 17016579d..045e69437 100644
---- a/tests/lit-tests/lit.cfg
-+++ b/tests/lit-tests/lit.cfg
-@@ -30,11 +30,6 @@ print("Config:")
- 
- # LLVM version
- llvm_version = LooseVersion(ispc_llvm_version_number)
--if llvm_version >= LooseVersion("10.0.0"):
--    print("LLVM_10_0+: YES")
--    config.available_features.add("LLVM_10_0+")
--else:
--    print("LLVM_10_0+: NO")
- 
- if llvm_version >= LooseVersion("12.0.0"):
-     print("LLVM_12_0+: YES")
diff --git a/srcpkgs/ispc/patches/llvm12-003.patch b/srcpkgs/ispc/patches/llvm12-003.patch
deleted file mode 100644
index 0423afc9e3f9..000000000000
--- a/srcpkgs/ispc/patches/llvm12-003.patch
+++ /dev/null
@@ -1,1504 +0,0 @@
-From 1851d18b213dbad169937076176b2d5509733c76 Mon Sep 17 00:00:00 2001
-From: Deepak Rajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Tue, 12 Jan 2021 22:15:12 -0800
-Subject: [PATCH] fixes #1821 - Removing LLVMGetName() and switching to
- LLVM::Twine.
-
----
- src/ctx.cpp      | 304 ++++++++++++++++++++++-------------------------
- src/ctx.h        |  72 +++++------
- src/expr.cpp     |  36 +++---
- src/llvmutil.cpp |  17 ---
- src/llvmutil.h   |   5 -
- src/opt.cpp      | 103 +++++++++-------
- 6 files changed, 255 insertions(+), 282 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 42c4ea09d..ded524b71 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1020,8 +1020,8 @@ void FunctionEmitContext::EmitCaseLabel(int value, bool checkMask, SourcePos pos
-     llvm::BasicBlock *bbCaseImpl = NULL;
-     if (emitGenXHardwareMask()) {
-         // Create basic block with actual case implementation
--        std::string bbName = bbCase->getName().str() + "_impl";
--        bbCaseImpl = CreateBasicBlock(bbName.c_str(), bbCase);
-+        llvm::Twine bbName = llvm::Twine(bbCase->getName()) + "_impl";
-+        bbCaseImpl = CreateBasicBlock(bbName, bbCase);
-     }
- #endif
- 
-@@ -1185,7 +1185,7 @@ bool FunctionEmitContext::initLabelBBlocks(ASTNode *node, void *data) {
-     if (ctx->labelMap.find(ls->name) != ctx->labelMap.end())
-         Error(ls->pos, "Multiple labels named \"%s\" in function.", ls->name.c_str());
-     else {
--        llvm::BasicBlock *bb = ctx->CreateBasicBlock(ls->name.c_str());
-+        llvm::BasicBlock *bb = ctx->CreateBasicBlock(ls->name);
-         ctx->labelMap[ls->name] = bb;
-     }
-     return true;
-@@ -1299,7 +1299,7 @@ llvm::Value *FunctionEmitContext::Any(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_any"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_any");
- }
- 
- llvm::Value *FunctionEmitContext::All(llvm::Value *mask) {
-@@ -1315,7 +1315,7 @@ llvm::Value *FunctionEmitContext::All(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_all"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_all");
- }
- 
- llvm::Value *FunctionEmitContext::None(llvm::Value *mask) {
-@@ -1331,7 +1331,7 @@ llvm::Value *FunctionEmitContext::None(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_none"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_none");
- }
- 
- llvm::Value *FunctionEmitContext::LaneMask(llvm::Value *v) {
-@@ -1349,7 +1349,7 @@ llvm::Value *FunctionEmitContext::LaneMask(llvm::Value *v) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, v, LLVMGetName(v, "_movmsk"));
-+    return CallInst(fmm, NULL, v, llvm::Twine(v->getName()) + "_movmsk");
- }
- 
- llvm::Value *FunctionEmitContext::MasksAllEqual(llvm::Value *v1, llvm::Value *v2) {
-@@ -1364,11 +1364,12 @@ llvm::Value *FunctionEmitContext::MasksAllEqual(llvm::Value *v1, llvm::Value *v2
- #else
-     if (g->target->getArch() == Arch::wasm32) {
-         llvm::Function *fmm = m->module->getFunction("__wasm_cmp_msk_eq");
--        return CallInst(fmm, NULL, {v1, v2}, LLVMGetName("wasm_cmp_msk_eq", v1, v2));
-+        return CallInst(fmm, NULL, {v1, v2}, ((llvm::Twine("wasm_cmp_msk_eq_") + v1->getName()) + "_") + v2->getName());
-     }
-     llvm::Value *mm1 = LaneMask(v1);
-     llvm::Value *mm2 = LaneMask(v2);
--    return CmpInst(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_EQ, mm1, mm2, LLVMGetName("equal", v1, v2));
-+    return CmpInst(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_EQ, mm1, mm2,
-+                   ((llvm::Twine("equal_") + v1->getName()) + "_") + v2->getName());
- #endif
- }
- 
-@@ -1392,7 +1393,7 @@ llvm::Value *FunctionEmitContext::GetStringPtr(const std::string &str) {
-     return new llvm::BitCastInst(lstrPtr, LLVMTypes::VoidPointerType, "str_void_ptr", bblock);
- }
- 
--llvm::BasicBlock *FunctionEmitContext::CreateBasicBlock(const char *name, llvm::BasicBlock *insertAfter) {
-+llvm::BasicBlock *FunctionEmitContext::CreateBasicBlock(const llvm::Twine &name, llvm::BasicBlock *insertAfter) {
-     llvm::BasicBlock *newBB = llvm::BasicBlock::Create(*g->ctx, name, llvmFunction);
-     if (insertAfter)
-         newBB->moveAfter(insertAfter);
-@@ -1416,14 +1417,15 @@ llvm::Value *FunctionEmitContext::I1VecToBoolVec(llvm::Value *b) {
- 
-         for (unsigned int i = 0; i < at->getNumElements(); ++i) {
-             llvm::Value *elt = ExtractInst(b, i);
--            llvm::Value *sext = SwitchBoolSize(elt, LLVMTypes::BoolVectorStorageType, LLVMGetName(elt, "_to_boolvec"));
-+            llvm::Value *sext =
-+                SwitchBoolSize(elt, LLVMTypes::BoolVectorStorageType, llvm::Twine(elt->getName()) + "_to_boolvec");
-             ret = InsertInst(ret, sext, i);
-         }
-         return ret;
-     } else {
-         // For non-array types, convert to 'LLVMTypes::BoolVectorType' if
-         // necessary.
--        return SwitchBoolSize(b, LLVMTypes::BoolVectorType, LLVMGetName(b, "_to_boolvec"));
-+        return SwitchBoolSize(b, LLVMTypes::BoolVectorType, llvm::Twine(b->getName()) + "_to_boolvec");
-     }
- }
- 
-@@ -1563,7 +1565,7 @@ static int lArrayVectorWidth(llvm::Type *t) {
- }
- 
- llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps inst, llvm::Value *v0, llvm::Value *v1,
--                                                 const char *name) {
-+                                                 const llvm::Twine &name) {
-     if (v0 == NULL || v1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1573,7 +1575,7 @@ llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps in
-     llvm::Type *type = v0->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *bop = llvm::BinaryOperator::Create(inst, v0, v1, name ? name : "", bblock);
-+        llvm::Instruction *bop = llvm::BinaryOperator::Create(inst, v0, v1, name, bblock);
-         AddDebugPos(bop);
-         return bop;
-     } else {
-@@ -1591,7 +1593,7 @@ llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps in
-     }
- }
- 
--llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const char *name) {
-+llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const llvm::Twine &name) {
-     if (v == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1603,14 +1605,14 @@ llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const char *name)
-     llvm::Type *type = v->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *binst = llvm::BinaryOperator::CreateNot(v, name ? name : "not", bblock);
-+        llvm::Instruction *binst = llvm::BinaryOperator::CreateNot(v, name.isTriviallyEmpty() ? "not" : name, bblock);
-         AddDebugPos(binst);
-         return binst;
-     } else {
-         llvm::Value *ret = llvm::UndefValue::get(type);
-         for (int i = 0; i < arraySize; ++i) {
-             llvm::Value *a = ExtractInst(v, i);
--            llvm::Value *op = llvm::BinaryOperator::CreateNot(a, name ? name : "not", bblock);
-+            llvm::Value *op = llvm::BinaryOperator::CreateNot(a, name.isTriviallyEmpty() ? "not" : name, bblock);
-             AddDebugPos(op);
-             ret = InsertInst(ret, op, i);
-         }
-@@ -1638,7 +1640,7 @@ static llvm::Type *lGetMatchingBoolVectorType(llvm::Type *type) {
- }
- 
- llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm::CmpInst::Predicate pred,
--                                          llvm::Value *v0, llvm::Value *v1, const char *name) {
-+                                          llvm::Value *v0, llvm::Value *v1, const llvm::Twine &name) {
-     if (v0 == NULL || v1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1648,7 +1650,8 @@ llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm
-     llvm::Type *type = v0->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *ci = llvm::CmpInst::Create(inst, pred, v0, v1, name ? name : "cmp", bblock);
-+        llvm::Instruction *ci =
-+            llvm::CmpInst::Create(inst, pred, v0, v1, name.isTriviallyEmpty() ? "cmp" : name, bblock);
-         AddDebugPos(ci);
-         return ci;
-     } else {
-@@ -1657,14 +1660,14 @@ llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm
-         for (int i = 0; i < arraySize; ++i) {
-             llvm::Value *a = ExtractInst(v0, i);
-             llvm::Value *b = ExtractInst(v1, i);
--            llvm::Value *op = CmpInst(inst, pred, a, b, name);
-+            llvm::Value *op = CmpInst(inst, pred, a, b, name.isTriviallyEmpty() ? "cmp" : name);
-             ret = InsertInst(ret, op, i);
-         }
-         return ret;
-     }
- }
- 
--llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const char *name) {
-+llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1704,21 +1707,19 @@ llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const char *n
-     return ret;
- }
- 
--llvm::Value *FunctionEmitContext::BitCastInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Value *FunctionEmitContext::BitCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_bitcast");
--
--    llvm::Instruction *inst = new llvm::BitCastInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::BitCastInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_bitcast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const char *name) {
-+llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1728,23 +1729,19 @@ llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const char *n
-         // no-op for varying pointers; they're already vectors of ints
-         return value;
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_ptr2int");
-     llvm::Type *type = LLVMTypes::PointerIntType;
--    llvm::Instruction *inst = new llvm::PtrToIntInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::PtrToIntInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_ptr2int");
--
-     llvm::Type *fromType = value->getType();
-     if (llvm::isa<llvm::VectorType>(fromType)) {
-         // varying pointer
-@@ -1752,27 +1749,26 @@ llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *t
-             // already the right type--done
-             return value;
-         else if (fromType->getScalarSizeInBits() > toType->getScalarSizeInBits())
--            return TruncInst(value, toType, name);
-+            return TruncInst(value, toType,
-+                             name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name);
-         else {
-             AssertPos(currentPos, fromType->getScalarSizeInBits() < toType->getScalarSizeInBits());
--            return ZExtInst(value, toType, name);
-+            return ZExtInst(value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name);
-         }
-     }
- 
--    llvm::Instruction *inst = new llvm::PtrToIntInst(value, toType, name, bblock);
-+    llvm::Instruction *inst = new llvm::PtrToIntInst(
-+        value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_int2ptr");
--
-     llvm::Type *fromType = value->getType();
-     if (llvm::isa<llvm::VectorType>(fromType)) {
-         // varying pointer
-@@ -1780,95 +1776,87 @@ llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *t
-             // done
-             return value;
-         else if (fromType->getScalarSizeInBits() > toType->getScalarSizeInBits())
--            return TruncInst(value, toType, name);
-+            return TruncInst(value, toType,
-+                             name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name);
-         else {
-             AssertPos(currentPos, fromType->getScalarSizeInBits() < toType->getScalarSizeInBits());
--            return ZExtInst(value, toType, name);
-+            return ZExtInst(value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name);
-         }
-     }
- 
--    llvm::Instruction *inst = new llvm::IntToPtrInst(value, toType, name, bblock);
-+    llvm::Instruction *inst = new llvm::IntToPtrInst(
-+        value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::TruncInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::TruncInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_trunc");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::TruncInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::TruncInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_trunc" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
- llvm::Instruction *FunctionEmitContext::CastInst(llvm::Instruction::CastOps op, llvm::Value *value, llvm::Type *type,
--                                                 const char *name) {
-+                                                 const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_cast");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = llvm::CastInst::Create(op, value, type, name, bblock);
-+    llvm::Instruction *inst = llvm::CastInst::Create(
-+        op, value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_cast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::FPCastInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::FPCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_cast");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = llvm::CastInst::CreateFPCast(value, type, name, bblock);
-+    llvm::Instruction *inst = llvm::CastInst::CreateFPCast(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_cast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::SExtInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::SExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_sext");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::SExtInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::SExtInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_sext" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::ZExtInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::ZExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_zext");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::ZExtInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::ZExtInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_zext" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
-@@ -1913,14 +1901,15 @@ llvm::Value *FunctionEmitContext::applyVaryingGEP(llvm::Value *basePtr, llvm::Va
-         scale = SmearUniform(scale);
-         Assert(index != NULL);
-         // offset = index * scale
--        offset = BinaryOperator(llvm::Instruction::Mul, scale, index, LLVMGetName("mul", scale, index));
-+        offset = BinaryOperator(llvm::Instruction::Mul, scale, index,
-+                                ((llvm::Twine("mul_") + scale->getName()) + "_") + index->getName());
-     }
- 
-     // For 64-bit targets, if we've been doing our offset calculations in
-     // 32 bits, we still have to convert to a 64-bit value before we
-     // actually add the offset to the pointer.
-     if (g->target->is32Bit() == false && g->opt.force32BitAddressing == true)
--        offset = SExtInst(offset, LLVMTypes::Int64VectorType, LLVMGetName(offset, "_to_64"));
-+        offset = SExtInst(offset, LLVMTypes::Int64VectorType, llvm::Twine(offset->getName()) + "_to_64");
- 
-     // Smear out the pointer to be varying; either the base pointer or the
-     // index must be varying for this method to be called.
-@@ -1929,7 +1918,7 @@ llvm::Value *FunctionEmitContext::applyVaryingGEP(llvm::Value *basePtr, llvm::Va
-     llvm::Value *varyingPtr = baseIsUniform ? SmearUniform(basePtr) : basePtr;
- 
-     // newPtr = ptr + offset
--    return BinaryOperator(llvm::Instruction::Add, varyingPtr, offset, LLVMGetName(basePtr, "_offset"));
-+    return BinaryOperator(llvm::Instruction::Add, varyingPtr, offset, llvm::Twine(basePtr->getName()) + "_offset");
- }
- 
- void FunctionEmitContext::MatchIntegerTypes(llvm::Value **v0, llvm::Value **v1) {
-@@ -2006,13 +1995,13 @@ llvm::Value *FunctionEmitContext::MakeSlicePointer(llvm::Value *ptr, llvm::Value
-     llvm::StructType *st = llvm::StructType::get(*g->ctx, eltTypes);
- 
-     llvm::Value *ret = llvm::UndefValue::get(st);
--    ret = InsertInst(ret, ptr, 0, LLVMGetName(ret, "_slice_ptr"));
--    ret = InsertInst(ret, offset, 1, LLVMGetName(ret, "_slice_offset"));
-+    ret = InsertInst(ret, ptr, 0, llvm::Twine(ret->getName()) + "_slice_ptr");
-+    ret = InsertInst(ret, offset, 1, llvm::Twine(ret->getName()) + "_slice_offset");
-     return ret;
- }
- 
- llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index, const Type *ptrRefType,
--                                                    const char *name) {
-+                                                    const llvm::Twine &name) {
-     if (basePtr == NULL || index == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2065,8 +2054,8 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
-         // uniform, so just emit the regular LLVM GEP instruction
-         llvm::Value *ind[1] = {index};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&ind[0], &ind[1]);
--        llvm::Instruction *inst =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "gep", bblock);
-+        llvm::Instruction *inst = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                                  name.isTriviallyEmpty() ? "gep" : name, bblock);
-         AddDebugPos(inst);
-         return inst;
-     } else
-@@ -2074,7 +2063,7 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
- }
- 
- llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0, llvm::Value *index1,
--                                                    const Type *ptrRefType, const char *name) {
-+                                                    const Type *ptrRefType, const llvm::Twine &name) {
-     if (basePtr == NULL || index0 == NULL || index1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2114,8 +2103,8 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
-         // uniform, so just emit the regular LLVM GEP instruction
-         llvm::Value *indices[2] = {index0, index1};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&indices[0], &indices[2]);
--        llvm::Instruction *inst =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "gep", bblock);
-+        llvm::Instruction *inst = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                                  name.isTriviallyEmpty() ? "gep" : name, bblock);
-         AddDebugPos(inst);
-         return inst;
-     } else {
-@@ -2138,7 +2127,7 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
- }
- 
- llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int elementNum, const Type *ptrRefType,
--                                                   const char *name, const PointerType **resultPtrType) {
-+                                                   const llvm::Twine &name, const PointerType **resultPtrType) {
-     if (resultPtrType != NULL)
-         AssertPos(currentPos, ptrRefType != NULL);
- 
-@@ -2195,8 +2184,8 @@ llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int
-         // If the pointer is uniform, we can use the regular LLVM GEP.
-         llvm::Value *offsets[2] = {LLVMInt32(0), LLVMInt32(elementNum)};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&offsets[0], &offsets[2]);
--        resultPtr =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "struct_offset", bblock);
-+        resultPtr = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                    name.isTriviallyEmpty() ? "struct_offset" : name, bblock);
-     } else {
-         // Otherwise do the math to find the offset and add it to the given
-         // varying pointers
-@@ -2237,7 +2226,7 @@ llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int
-         return resultPtr;
- }
- 
--llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if ((value == NULL) || (toType == NULL)) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2248,20 +2237,18 @@ llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type
-     llvm::Value *newBool = value;
-     if (g->target->getDataLayout()->getTypeSizeInBits(fromType) >
-         g->target->getDataLayout()->getTypeSizeInBits(toType)) {
--        if (name == NULL)
--            name = LLVMGetName(value, "_switchBool");
--        newBool = TruncInst(value, toType, name);
-+        newBool =
-+            TruncInst(value, toType, name.isTriviallyEmpty() ? (llvm::Twine(value->getName()) + "_switchBool") : name);
-     } else if (g->target->getDataLayout()->getTypeSizeInBits(fromType) <
-                g->target->getDataLayout()->getTypeSizeInBits(toType)) {
--        if (name == NULL)
--            name = LLVMGetName(value, "_switchBool");
--        newBool = SExtInst(value, toType, name);
-+        newBool =
-+            SExtInst(value, toType, name.isTriviallyEmpty() ? (llvm::Twine(value->getName()) + "_switchBool") : name);
-     }
- 
-     return newBool;
- }
- 
--llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, const char *name) {
-+llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, const llvm::Twine &name) {
-     if (ptr == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2270,13 +2257,13 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
-     llvm::PointerType *pt = llvm::dyn_cast<llvm::PointerType>(ptr->getType());
-     AssertPos(currentPos, pt != NULL);
- 
--    if (name == NULL)
--        name = LLVMGetName(ptr, "_load");
--
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    llvm::LoadInst *inst = new llvm::LoadInst(pt->getPointerElementType(), ptr, name, bblock);
-+    llvm::LoadInst *inst =
-+        new llvm::LoadInst(pt->getPointerElementType(), ptr,
-+                           name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name, bblock);
- #else
--    llvm::LoadInst *inst = new llvm::LoadInst(ptr, name, bblock);
-+    llvm::LoadInst *inst =
-+        new llvm::LoadInst(ptr, name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name, bblock);
- #endif
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
-@@ -2307,8 +2294,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
- static llvm::Value *lFinalSliceOffset(FunctionEmitContext *ctx, llvm::Value *ptr, const PointerType **ptrType) {
-     Assert(CastType<PointerType>(*ptrType) != NULL);
- 
--    llvm::Value *slicePtr = ctx->ExtractInst(ptr, 0, LLVMGetName(ptr, "_ptr"));
--    llvm::Value *sliceOffset = ctx->ExtractInst(ptr, 1, LLVMGetName(ptr, "_offset"));
-+    llvm::Value *slicePtr = ctx->ExtractInst(ptr, 0, llvm::Twine(ptr->getName()) + "_ptr");
-+    llvm::Value *sliceOffset = ctx->ExtractInst(ptr, 1, llvm::Twine(ptr->getName()) + "_offset");
- 
-     // slicePtr should be a pointer to an soa-width wide array of the
-     // final atomic/enum/pointer type
-@@ -2327,14 +2314,14 @@ static llvm::Value *lFinalSliceOffset(FunctionEmitContext *ctx, llvm::Value *ptr
-         slicePtr = ctx->BitCastInst(slicePtr, (*ptrType)->LLVMType(g->ctx));
- 
-     // And finally index based on the slice offset
--    return ctx->GetElementPtrInst(slicePtr, sliceOffset, *ptrType, LLVMGetName(slicePtr, "_final_gep"));
-+    return ctx->GetElementPtrInst(slicePtr, sliceOffset, *ptrType, llvm::Twine(slicePtr->getName()) + "_final_gep");
- }
- 
- /** Utility routine that loads from a uniform pointer to soa<> data,
-     returning a regular uniform (non-SOA result).
-  */
- llvm::Value *FunctionEmitContext::loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType,
--                                                     const char *name) {
-+                                                     const llvm::Twine &name) {
-     const Type *unifType = ptrType->GetBaseType()->GetAsUniformType();
- 
-     const CollectionType *ct = CastType<CollectionType>(ptrType->GetBaseType());
-@@ -2363,7 +2350,7 @@ llvm::Value *FunctionEmitContext::loadUniformFromSOA(llvm::Value *ptr, llvm::Val
- }
- 
- llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrRefType,
--                                           const char *name, bool one_elem) {
-+                                           const llvm::Twine &name, bool one_elem) {
-     if (ptr == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2371,9 +2358,6 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
- 
-     AssertPos(currentPos, ptrRefType != NULL && mask != NULL);
- 
--    if (name == NULL)
--        name = LLVMGetName(ptr, "_load");
--
-     const PointerType *ptrType;
-     const Type *elType;
-     if (CastType<ReferenceType>(ptrRefType) != NULL) {
-@@ -2393,7 +2377,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
- 
-     if (ptrType->IsUniformType()) {
-         if (ptrType->IsSlice()) {
--            return loadUniformFromSOA(ptr, mask, ptrType, name);
-+            return loadUniformFromSOA(ptr, mask, ptrType,
-+                                      name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name);
-         } else {
-             // FIXME: same issue as above load inst regarding alignment...
-             //
-@@ -2405,11 +2390,15 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-             const AtomicType *atomicType = CastType<AtomicType>(ptrType->GetBaseType());
- 
- #if ISPC_LLVM_VERSION <= ISPC_LLVM_10_0
--            llvm::LoadInst *inst = new llvm::LoadInst(ptr, name, false /* not volatile */, bblock);
-+            llvm::LoadInst *inst =
-+                new llvm::LoadInst(ptr, name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name,
-+                                   false /* not volatile */, bblock);
- #else // LLVM 11.0+
-             llvm::PointerType *ptr_type = llvm::dyn_cast<llvm::PointerType>(ptr->getType());
-             llvm::LoadInst *inst =
--                new llvm::LoadInst(ptr_type->getPointerElementType(), ptr, name, false /* not volatile */, bblock);
-+                new llvm::LoadInst(ptr_type->getPointerElementType(), ptr,
-+                                   name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name,
-+                                   false /* not volatile */, bblock);
- #endif
- 
-             if (atomicType != NULL && atomicType->IsVaryingType()) {
-@@ -2433,7 +2422,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-     } else {
-         // Otherwise we should have a varying ptr and it's time for a
-         // gather.
--        llvm::Value *gather_result = gather(ptr, ptrType, GetFullMask(), name);
-+        llvm::Value *gather_result = gather(ptr, ptrType, GetFullMask(),
-+                                            name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name);
-         if (!one_elem)
-             return gather_result;
- 
-@@ -2453,19 +2443,19 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-         // We can actually call either one, since both are i32s as far as
-         // LLVM's type system is concerned...
-         llvm::Function *fmm = mm[0]->function;
--        llvm::Value *int_mask = CallInst(fmm, NULL, mask, LLVMGetName(mask, "_movmsk"));
-+        llvm::Value *int_mask = CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_movmsk");
-         std::vector<Symbol *> lz;
-         m->symbolTable->LookupFunction("__count_trailing_zeros_i64", &lz);
-         llvm::Function *flz = lz[0]->function;
--        llvm::Value *elem_idx = CallInst(flz, NULL, int_mask, LLVMGetName(mask, "_clz"));
--        llvm::Value *elem = llvm::ExtractElementInst::Create(gather_result, elem_idx,
--                                                             LLVMGetName(gather_result, "_umasked_elem"), bblock);
-+        llvm::Value *elem_idx = CallInst(flz, NULL, int_mask, llvm::Twine(mask->getName()) + "_clz");
-+        llvm::Value *elem = llvm::ExtractElementInst::Create(
-+            gather_result, elem_idx, llvm::Twine(gather_result->getName()) + "_umasked_elem", bblock);
-         return elem;
-     }
- }
- 
- llvm::Value *FunctionEmitContext::gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask,
--                                         const char *name) {
-+                                         const llvm::Twine &name) {
-     // We should have a varying pointer if we get here...
-     AssertPos(currentPos, ptrType->IsVaryingType());
- 
-@@ -2602,7 +2592,8 @@ void FunctionEmitContext::addGSMetadata(llvm::Value *v, SourcePos pos) {
-     inst->setMetadata("last_column", md);
- }
- 
--llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *name, int align, bool atEntryBlock) {
-+llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const llvm::Twine &name, int align,
-+                                             bool atEntryBlock) {
-     if (llvmType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2615,12 +2606,12 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-         llvm::Instruction *retInst = allocaBlock->getTerminator();
-         AssertPos(currentPos, retInst);
-         unsigned AS = llvmFunction->getParent()->getDataLayout().getAllocaAddrSpace();
--        inst = new llvm::AllocaInst(llvmType, AS, name ? name : "", retInst);
-+        inst = new llvm::AllocaInst(llvmType, AS, name, retInst);
-     } else {
-         // Unless the caller overrode the default and wants it in the
-         // current basic block
-         unsigned AS = llvmFunction->getParent()->getDataLayout().getAllocaAddrSpace();
--        inst = new llvm::AllocaInst(llvmType, AS, name ? name : "", bblock);
-+        inst = new llvm::AllocaInst(llvmType, AS, name, bblock);
-     }
- 
-     // If no alignment was specified but we have an array of a uniform
-@@ -2639,7 +2630,8 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::AllocaInst(const Type *ptrType, const char *name, int align, bool atEntryBlock) {
-+llvm::Value *FunctionEmitContext::AllocaInst(const Type *ptrType, const llvm::Twine &name, int align,
-+                                             bool atEntryBlock) {
-     if (ptrType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3075,66 +3067,59 @@ llvm::Instruction *FunctionEmitContext::BranchInst(llvm::BasicBlock *trueBlock,
-     return b;
- }
- 
--llvm::Value *FunctionEmitContext::ExtractInst(llvm::Value *v, int elt, const char *name) {
-+llvm::Value *FunctionEmitContext::ExtractInst(llvm::Value *v, int elt, const llvm::Twine &name) {
-     if (v == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_extract_%d", elt);
--        name = LLVMGetName(v, buf);
--    }
-     llvm::Instruction *ei = NULL;
-     if (llvm::isa<llvm::VectorType>(v->getType()))
--        ei = llvm::ExtractElementInst::Create(v, LLVMInt32(elt), name, bblock);
-+        ei = llvm::ExtractElementInst::Create(
-+            v, LLVMInt32(elt),
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_extract_") + llvm::Twine(elt)) : name, bblock);
-     else
--        ei = llvm::ExtractValueInst::Create(v, elt, name, bblock);
-+        ei = llvm::ExtractValueInst::Create(
-+            v, elt, name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_extract_") + llvm::Twine(elt)) : name,
-+            bblock);
-     AddDebugPos(ei);
-     return ei;
- }
- 
--llvm::Value *FunctionEmitContext::InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const char *name) {
-+llvm::Value *FunctionEmitContext::InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const llvm::Twine &name) {
-     if (v == NULL || eltVal == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_insert_%d", elt);
--        name = LLVMGetName(v, buf);
--    }
--
-     llvm::Instruction *ii = NULL;
-     if (llvm::isa<llvm::VectorType>(v->getType()))
--        ii = llvm::InsertElementInst::Create(v, eltVal, LLVMInt32(elt), name, bblock);
-+        ii = llvm::InsertElementInst::Create(
-+            v, eltVal, LLVMInt32(elt),
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_insert_") + llvm::Twine(elt)) : name, bblock);
-     else
--        ii = llvm::InsertValueInst::Create(v, eltVal, elt, name, bblock);
-+        ii = llvm::InsertValueInst::Create(
-+            v, eltVal, elt,
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_insert_") + llvm::Twine(elt)) : name, bblock);
-     AddDebugPos(ii);
-     return ii;
- }
- 
--llvm::Value *FunctionEmitContext::ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const char *name) {
-+llvm::Value *FunctionEmitContext::ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask,
-+                                              const llvm::Twine &name) {
-     if (v1 == NULL || v2 == NULL || mask == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_shuffle");
--        name = LLVMGetName(v1, buf);
--    }
--
--    llvm::Instruction *ii = new llvm::ShuffleVectorInst(v1, v2, mask, name, bblock);
-+    llvm::Instruction *ii = new llvm::ShuffleVectorInst(
-+        v1, v2, mask, name.isTriviallyEmpty() ? (llvm::Twine(v1->getName()) + "_shuffle") : name, bblock);
- 
-     AddDebugPos(ii);
-     return ii;
- }
- 
--llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vecType, const char *name) {
-+llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vecType, const llvm::Twine &name) {
-     if (v == NULL || vecType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3148,12 +3133,6 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     Assert(ty && ty->getVectorElementType() == v->getType());
- #endif
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_broadcast");
--        name = LLVMGetName(v, buf);
--    }
--
-     // Generate the following sequence:
-     //   %name_init.i = insertelement <4 x i32> undef, i32 %val, i32 0
-     //   %name.i = shufflevector <4 x i32> %name_init.i, <4 x i32> undef,
-@@ -3163,7 +3142,7 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     llvm::Value *undef2 = llvm::UndefValue::get(vecType);
- 
-     // InsertElement
--    llvm::Twine tw = llvm::Twine(name) + llvm::Twine("_init");
-+    llvm::Twine tw = name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + llvm::Twine("_init");
-     llvm::Value *insert = InsertInst(undef1, v, 0, tw.str().c_str());
- 
-     // ShuffleVector
-@@ -3179,28 +3158,27 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-         llvm::ConstantVector::getSplat(llvm::ElementCount::get(static_cast<unsigned int>(ty->getNumElements()), false),
-                                        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
- #endif
--    llvm::Value *ret = ShuffleInst(insert, undef2, zeroVec, name);
-+    llvm::Value *ret = ShuffleInst(insert, undef2, zeroVec,
-+                                   name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name);
- 
-     return ret;
- }
- 
--llvm::PHINode *FunctionEmitContext::PhiNode(llvm::Type *type, int count, const char *name) {
--    llvm::PHINode *pn = llvm::PHINode::Create(type, count, name ? name : "phi", bblock);
-+llvm::PHINode *FunctionEmitContext::PhiNode(llvm::Type *type, int count, const llvm::Twine &name) {
-+    llvm::PHINode *pn = llvm::PHINode::Create(type, count, name.isTriviallyEmpty() ? "phi" : name, bblock);
-     AddDebugPos(pn);
-     return pn;
- }
- 
- llvm::Instruction *FunctionEmitContext::SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1,
--                                                   const char *name) {
-+                                                   const llvm::Twine &name) {
-     if (test == NULL || val0 == NULL || val1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(test, "_select");
--
--    llvm::Instruction *inst = llvm::SelectInst::Create(test, val0, val1, name, bblock);
-+    llvm::Instruction *inst = llvm::SelectInst::Create(
-+        test, val0, val1, name.isTriviallyEmpty() ? (llvm::Twine(test->getName()) + "_select") : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
-@@ -3226,7 +3204,7 @@ static unsigned int lCalleeArgCount(llvm::Value *callee, const FunctionType *fun
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType,
--                                           const std::vector<llvm::Value *> &args, const char *name) {
-+                                           const std::vector<llvm::Value *> &args, const llvm::Twine &name) {
-     if (func == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3258,9 +3236,9 @@ llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-         llvm::PointerType *func_ptr_type = llvm::dyn_cast<llvm::PointerType>(func->getType());
-         llvm::FunctionType *func_type = llvm::dyn_cast<llvm::FunctionType>(func_ptr_type->getPointerElementType());
--        llvm::CallInst *callinst = llvm::CallInst::Create(func_type, func, argVals, name ? name : "", bblock);
-+        llvm::CallInst *callinst = llvm::CallInst::Create(func_type, func, argVals, name, bblock);
- #else
--        llvm::CallInst *callinst = llvm::CallInst::Create(func, argVals, name ? name : "", bblock);
-+        llvm::CallInst *callinst = llvm::CallInst::Create(func, argVals, name, bblock);
- #endif
- 
-         // We could be dealing with a function pointer in which case this will not be a 'llvm::Function'.
-@@ -3464,14 +3442,14 @@ llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg,
--                                           const char *name) {
-+                                           const llvm::Twine &name) {
-     std::vector<llvm::Value *> args;
-     args.push_back(arg);
-     return CallInst(func, funcType, args, name);
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg0,
--                                           llvm::Value *arg1, const char *name) {
-+                                           llvm::Value *arg1, const llvm::Twine &name) {
-     std::vector<llvm::Value *> args;
-     args.push_back(arg0);
-     args.push_back(arg1);
-diff --git a/src/ctx.h b/src/ctx.h
-index 6e5ad74ba..48b3bb826 100644
---- a/src/ctx.h
-+++ b/src/ctx.h
-@@ -302,7 +302,7 @@ class FunctionEmitContext {
-     llvm::Value *GetStringPtr(const std::string &str);
- 
-     /** Create a new basic block with given name */
--    llvm::BasicBlock *CreateBasicBlock(const char *name, llvm::BasicBlock *insertAfter = NULL);
-+    llvm::BasicBlock *CreateBasicBlock(const llvm::Twine &name, llvm::BasicBlock *insertAfter = NULL);
- 
-     /** Given a vector with element type i1, return a vector of type
-         LLVMTypes::BoolVectorType.  This method handles the conversion for
-@@ -380,33 +380,33 @@ class FunctionEmitContext {
-         this also handles applying the given operation to the vector
-         elements. */
-     llvm::Value *BinaryOperator(llvm::Instruction::BinaryOps inst, llvm::Value *v0, llvm::Value *v1,
--                                const char *name = NULL);
-+                                const llvm::Twine &name = "");
- 
-     /** Emit the "not" operator.  Like BinaryOperator(), this also handles
-         a VectorType-based operand. */
--    llvm::Value *NotOperator(llvm::Value *v, const char *name = NULL);
-+    llvm::Value *NotOperator(llvm::Value *v, const llvm::Twine &name = "");
- 
-     /** Emit a comparison instruction.  If the operands are VectorTypes,
-         then a value for the corresponding boolean VectorType is
-         returned. */
-     llvm::Value *CmpInst(llvm::Instruction::OtherOps inst, llvm::CmpInst::Predicate pred, llvm::Value *v0,
--                         llvm::Value *v1, const char *name = NULL);
-+                         llvm::Value *v1, const llvm::Twine &name = "");
- 
-     /** Given a scalar value, return a vector of the same type (or an
-         array, for pointer types). */
--    llvm::Value *SmearUniform(llvm::Value *value, const char *name = NULL);
-+    llvm::Value *SmearUniform(llvm::Value *value, const llvm::Twine &name = "");
- 
--    llvm::Value *BitCastInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Value *PtrToIntInst(llvm::Value *value, const char *name = NULL);
--    llvm::Value *PtrToIntInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Value *IntToPtrInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+    llvm::Value *BitCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Value *PtrToIntInst(llvm::Value *value, const llvm::Twine &name = "");
-+    llvm::Value *PtrToIntInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Value *IntToPtrInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
- 
--    llvm::Instruction *TruncInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+    llvm::Instruction *TruncInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-     llvm::Instruction *CastInst(llvm::Instruction::CastOps op, llvm::Value *value, llvm::Type *type,
--                                const char *name = NULL);
--    llvm::Instruction *FPCastInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Instruction *SExtInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Instruction *ZExtInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+                                const llvm::Twine &name = "");
-+    llvm::Instruction *FPCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Instruction *SExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Instruction *ZExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
- 
-     /** Given two integer-typed values (but possibly one vector and the
-         other not, and or of possibly-different bit-widths), update their
-@@ -426,9 +426,9 @@ class FunctionEmitContext {
-         pointers.  The underlying type of the base pointer must be provided
-         via the ptrType parameter */
-     llvm::Value *GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index, const Type *ptrType,
--                                   const char *name = NULL);
-+                                   const llvm::Twine &name = "");
-     llvm::Value *GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0, llvm::Value *index1, const Type *ptrType,
--                                   const char *name = NULL);
-+                                   const llvm::Twine &name = "");
- 
-     /** This method returns a new pointer that represents offsetting the
-         given base pointer to point at the given element number of the
-@@ -436,26 +436,26 @@ class FunctionEmitContext {
-         pointer must be a pointer to a structure type.  The ptrType gives
-         the type of the pointer, though it may be NULL if the base pointer
-         is uniform. */
--    llvm::Value *AddElementOffset(llvm::Value *basePtr, int elementNum, const Type *ptrType, const char *name = NULL,
--                                  const PointerType **resultPtrType = NULL);
-+    llvm::Value *AddElementOffset(llvm::Value *basePtr, int elementNum, const Type *ptrType,
-+                                  const llvm::Twine &name = "", const PointerType **resultPtrType = NULL);
- 
-     /** Bool is stored as i8 and <WIDTH x i8> but represented in IR as i1 and
-      * <WIDTH x MASK>. This is a helper function to match bool size at storage
-      * interface. */
--    llvm::Value *SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const char *name = NULL);
-+    llvm::Value *SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name = "");
-     /** Load from the memory location(s) given by lvalue, using the given
-         mask.  The lvalue may be varying, in which case this corresponds to
-         a gather from the multiple memory locations given by the array of
-         pointer values given by the lvalue.  If the lvalue is not varying,
-         then both the mask pointer and the type pointer may be NULL. */
--    llvm::Value *LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrType, const char *name = NULL,
-+    llvm::Value *LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrType, const llvm::Twine &name = "",
-                           bool one_elem = false);
- 
-     /* Load from memory location(s) given.
-      * 'type' needs to be provided when storage type is different from IR type. For example,
-      * 'unform bool' is 'i1' in IR but stored as 'i8'.
-      * Otherwise leave this as NULL. */
--    llvm::Value *LoadInst(llvm::Value *ptr, const Type *type = NULL, const char *name = NULL);
-+    llvm::Value *LoadInst(llvm::Value *ptr, const Type *type = NULL, const llvm::Twine &name = "");
- 
-     /** Emits an alloca instruction to allocate stack storage for the given
-         type.  If a non-zero alignment is specified, the object is also
-@@ -463,7 +463,8 @@ class FunctionEmitContext {
-         instruction is added at the start of the function in the entry
-         basic block; if it should be added to the current basic block, then
-         the atEntryBlock parameter should be false. */
--    llvm::Value *AllocaInst(llvm::Type *llvmType, const char *name = NULL, int align = 0, bool atEntryBlock = true);
-+    llvm::Value *AllocaInst(llvm::Type *llvmType, const llvm::Twine &name = "", int align = 0,
-+                            bool atEntryBlock = true);
- 
-     /** Emits an alloca instruction to allocate stack storage for the given
-         type.  If a non-zero alignment is specified, the object is also
-@@ -474,7 +475,7 @@ class FunctionEmitContext {
-         This implementation is preferred when possible. It is needed when
-         storage type is different from IR type. For example,
-         'unform bool' is 'i1' in IR but stored as 'i8'. */
--    llvm::Value *AllocaInst(const Type *ptrType, const char *name = NULL, int align = 0, bool atEntryBlock = true);
-+    llvm::Value *AllocaInst(const Type *ptrType, const llvm::Twine &name = "", int align = 0, bool atEntryBlock = true);
- 
-     /** Standard store instruction; for this variant, the lvalue must be a
-         single pointer, not a varying lvalue.
-@@ -502,39 +503,41 @@ class FunctionEmitContext {
-     /** This convenience method maps to an llvm::ExtractElementInst if the
-         given value is a llvm::VectorType, and to an llvm::ExtractValueInst
-         otherwise. */
--    llvm::Value *ExtractInst(llvm::Value *v, int elt, const char *name = NULL);
-+    llvm::Value *ExtractInst(llvm::Value *v, int elt, const llvm::Twine &name = "");
- 
-     /** This convenience method maps to an llvm::InsertElementInst if the
-         given value is a llvm::VectorType, and to an llvm::InsertValueInst
-         otherwise. */
--    llvm::Value *InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const char *name = NULL);
-+    llvm::Value *InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const llvm::Twine &name = "");
- 
-     /** This convenience method maps to an llvm::ShuffleVectorInst. */
--    llvm::Value *ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const char *name = NULL);
-+    llvm::Value *ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const llvm::Twine &name = "");
- 
-     /** This convenience method to generate broadcast pattern. It takes a value
-         and a vector type. Type of the value must match element type of the
-         vector. */
--    llvm::Value *BroadcastValue(llvm::Value *v, llvm::Type *vecType, const char *name = NULL);
-+    llvm::Value *BroadcastValue(llvm::Value *v, llvm::Type *vecType, const llvm::Twine &name = "");
- 
--    llvm::PHINode *PhiNode(llvm::Type *type, int count, const char *name = NULL);
--    llvm::Instruction *SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1, const char *name = NULL);
-+    llvm::PHINode *PhiNode(llvm::Type *type, int count, const llvm::Twine &name = "");
-+    llvm::Instruction *SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1,
-+                                  const llvm::Twine &name = "");
- 
-     /** Emits IR to do a function call with the given arguments.  If the
-         function type is a varying function pointer type, its full type
-         must be provided in funcType.  funcType can be NULL if func is a
-         uniform function pointer. */
-     llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, const std::vector<llvm::Value *> &args,
--                          const char *name = NULL);
-+                          const llvm::Twine &name = "");
- 
-     /** This is a convenience method that issues a call instruction to a
-         function that takes just a single argument. */
--    llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg, const char *name = NULL);
-+    llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg,
-+                          const llvm::Twine &name = "");
- 
-     /** This is a convenience method that issues a call instruction to a
-         function that takes two arguments. */
-     llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg0, llvm::Value *arg1,
--                          const char *name = NULL);
-+                          const llvm::Twine &name = "");
- 
-     /** Launch an asynchronous task to run the given function, passing it
-         he given argument values. */
-@@ -756,9 +759,10 @@ class FunctionEmitContext {
-     void maskedStore(llvm::Value *value, llvm::Value *ptr, const Type *ptrType, llvm::Value *mask);
-     void storeUniformToSOA(llvm::Value *value, llvm::Value *ptr, llvm::Value *mask, const Type *valueType,
-                            const PointerType *ptrType);
--    llvm::Value *loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType, const char *name);
-+    llvm::Value *loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType,
-+                                    const llvm::Twine &name = "");
- 
--    llvm::Value *gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask, const char *name);
-+    llvm::Value *gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask, const llvm::Twine &name = "");
- 
-     llvm::Value *addVaryingOffsetsIfNeeded(llvm::Value *ptr, const Type *ptrType);
- };
-diff --git a/src/expr.cpp b/src/expr.cpp
-index 80cc3020a..6d38d1889 100644
---- a/src/expr.cpp
-+++ b/src/expr.cpp
-@@ -1021,11 +1021,11 @@ static llvm::Value *lEmitNegate(Expr *arg, SourcePos pos, FunctionEmitContext *c
-     ctx->SetDebugPos(pos);
-     if (type->IsFloatType()) {
-         llvm::Value *zero = llvm::ConstantFP::getZeroValueForNegation(type->LLVMType(g->ctx));
--        return ctx->BinaryOperator(llvm::Instruction::FSub, zero, argVal, LLVMGetName(argVal, "_negate"));
-+        return ctx->BinaryOperator(llvm::Instruction::FSub, zero, argVal, llvm::Twine(argVal->getName()) + "_negate");
-     } else {
-         llvm::Value *zero = lLLVMConstantValue(type, g->ctx, 0.);
-         AssertPos(pos, type->IsIntType());
--        return ctx->BinaryOperator(llvm::Instruction::Sub, zero, argVal, LLVMGetName(argVal, "_negate"));
-+        return ctx->BinaryOperator(llvm::Instruction::Sub, zero, argVal, llvm::Twine(argVal->getName()) + "_negate");
-     }
- }
- 
-@@ -1047,11 +1047,11 @@ llvm::Value *UnaryExpr::GetValue(FunctionEmitContext *ctx) const {
-         return lEmitNegate(expr, pos, ctx);
-     case LogicalNot: {
-         llvm::Value *argVal = expr->GetValue(ctx);
--        return ctx->NotOperator(argVal, LLVMGetName(argVal, "_logicalnot"));
-+        return ctx->NotOperator(argVal, llvm::Twine(argVal->getName()) + "_logicalnot");
-     }
-     case BitNot: {
-         llvm::Value *argVal = expr->GetValue(ctx);
--        return ctx->NotOperator(argVal, LLVMGetName(argVal, "_bitnot"));
-+        return ctx->NotOperator(argVal, llvm::Twine(argVal->getName()) + "_bitnot");
-     }
-     default:
-         FATAL("logic error");
-@@ -1518,7 +1518,8 @@ static llvm::Value *lEmitBinaryArith(BinaryExpr::Op op, llvm::Value *value0, llv
-             return NULL;
-         }
- 
--        return ctx->BinaryOperator(inst, value0, value1, LLVMGetName(opName, value0, value1));
-+        return ctx->BinaryOperator(inst, value0, value1,
-+                                   (((llvm::Twine(opName) + "_") + value0->getName()) + "_") + value1->getName());
-     }
- }
- 
-@@ -1563,7 +1564,7 @@ static llvm::Value *lEmitBinaryCmp(BinaryExpr::Op op, llvm::Value *e0Val, llvm::
-     }
- 
-     llvm::Value *cmp = ctx->CmpInst(isFloatOp ? llvm::Instruction::FCmp : llvm::Instruction::ICmp, pred, e0Val, e1Val,
--                                    LLVMGetName(opName, e0Val, e1Val));
-+                                    (((llvm::Twine(opName) + "_") + e0Val->getName()) + "_") + e1Val->getName());
-     // This is a little ugly: CmpInst returns i1 values, but we use vectors
-     // of i32s for varying bool values; type convert the result here if
-     // needed.
-@@ -4177,7 +4178,7 @@ static llvm::Value *lConvertToSlicePointer(FunctionEmitContext *ctx, llvm::Value
-     // offsets
-     llvm::Value *result = llvm::Constant::getNullValue(sliceStructType);
-     // And replace the pointer in the struct with the given pointer
--    return ctx->InsertInst(result, ptr, 0, LLVMGetName(ptr, "_slice"));
-+    return ctx->InsertInst(result, ptr, 0, llvm::Twine(ptr->getName()) + "_slice");
- }
- 
- /** If the given array index is a compile time constant, check to see if it
-@@ -4258,8 +4259,8 @@ llvm::Value *IndexExpr::GetLValue(FunctionEmitContext *ctx) const {
-         // Convert to a slice pointer if we're indexing into SOA data
-         basePtrValue = lConvertPtrToSliceIfNeeded(ctx, basePtrValue, &baseExprType);
- 
--        llvm::Value *ptr =
--            ctx->GetElementPtrInst(basePtrValue, indexValue, baseExprType, LLVMGetName(basePtrValue, "_offset"));
-+        llvm::Value *ptr = ctx->GetElementPtrInst(basePtrValue, indexValue, baseExprType,
-+                                                  llvm::Twine(basePtrValue->getName()) + "_offset");
-         return lAddVaryingOffsetsIfNeeded(ctx, ptr, GetLValueType());
-     }
- 
-@@ -4290,8 +4291,8 @@ llvm::Value *IndexExpr::GetLValue(FunctionEmitContext *ctx) const {
-     ctx->SetDebugPos(pos);
- 
-     // And do the actual indexing calculation..
--    llvm::Value *ptr =
--        ctx->GetElementPtrInst(basePtr, LLVMInt32(0), indexValue, basePtrType, LLVMGetName(basePtr, "_offset"));
-+    llvm::Value *ptr = ctx->GetElementPtrInst(basePtr, LLVMInt32(0), indexValue, basePtrType,
-+                                              llvm::Twine(basePtr->getName()) + "_offset");
-     return lAddVaryingOffsetsIfNeeded(ctx, ptr, GetLValueType());
- }
- 
-@@ -4788,15 +4789,14 @@ llvm::Value *VectorMemberExpr::GetValue(FunctionEmitContext *ctx) const {
-         for (size_t i = 0; i < identifier.size(); ++i) {
-             char idStr[2] = {identifier[i], '\0'};
-             llvm::Value *elementPtr =
--                ctx->AddElementOffset(basePtr, indices[i], basePtrType, LLVMGetName(basePtr, idStr));
-+                ctx->AddElementOffset(basePtr, indices[i], basePtrType, llvm::Twine(basePtr->getName()) + idStr);
-             llvm::Value *elementValue = ctx->LoadInst(elementPtr, elementMask, elementPtrType);
- 
--            const char *resultName = LLVMGetName(resultPtr, idStr);
--            llvm::Value *ptmp = ctx->AddElementOffset(resultPtr, i, NULL, resultName);
-+            llvm::Value *ptmp = ctx->AddElementOffset(resultPtr, i, NULL, llvm::Twine(resultPtr->getName()) + idStr);
-             ctx->StoreInst(elementValue, ptmp, elementPtrType, expr->GetType()->IsUniformType());
-         }
- 
--        return ctx->LoadInst(resultPtr, memberType, LLVMGetName(basePtr, "_swizzle"));
-+        return ctx->LoadInst(resultPtr, memberType, llvm::Twine(basePtr->getName()) + "_swizzle");
-     }
- }
- 
-@@ -4932,7 +4932,7 @@ llvm::Value *MemberExpr::GetValue(FunctionEmitContext *ctx) const {
- 
-     ctx->SetDebugPos(pos);
-     std::string suffix = std::string("_") + identifier;
--    return ctx->LoadInst(lvalue, mask, lvalueType, LLVMGetName(lvalue, suffix.c_str()));
-+    return ctx->LoadInst(lvalue, mask, lvalueType, llvm::Twine(lvalue->getName()) + suffix);
- }
- 
- const Type *MemberExpr::GetType() const { return NULL; }
-@@ -6502,7 +6502,7 @@ static llvm::Value *lTypeConvAtomic(FunctionEmitContext *ctx, llvm::Value *exprV
-                 // does for everyone else...
-                 Assert(cast);
-                 cast = ctx->SwitchBoolSize(cast, LLVMTypes::BoolVectorType->getElementType(),
--                                           LLVMGetName(cast, "to_i_bool"));
-+                                           llvm::Twine(cast->getName()) + "to_i_bool");
-             }
-         } else {
-             // fromType->IsVaryingType())
-@@ -8246,7 +8246,7 @@ llvm::Value *NewExpr::GetValue(FunctionEmitContext *ctx) const {
-         // pointer of the return type and to run the code for initializers,
-         // if present.
-         llvm::Type *ptrType = retType->LLVMType(g->ctx);
--        ptrValue = ctx->BitCastInst(ptrValue, ptrType, LLVMGetName(ptrValue, "_cast_ptr"));
-+        ptrValue = ctx->BitCastInst(ptrValue, ptrType, llvm::Twine(ptrValue->getName()) + "_cast_ptr");
- 
-         if (initExpr != NULL)
-             InitSymbol(ptrValue, allocType, initExpr, ctx, pos);
-diff --git a/src/llvmutil.cpp b/src/llvmutil.cpp
-index 970175dbf..d0becb9f5 100644
---- a/src/llvmutil.cpp
-+++ b/src/llvmutil.cpp
-@@ -1605,23 +1605,6 @@ llvm::Value *LLVMShuffleVectors(llvm::Value *v1, llvm::Value *v2, int32_t shuf[]
-     return new llvm::ShuffleVectorInst(v1, v2, vec, "shuffle", insertBefore);
- }
- 
--const char *LLVMGetName(llvm::Value *v, const char *s) {
--    if (v == NULL)
--        return s;
--    std::string ret = std::string(v->getName());
--    ret += s;
--    return strdup(ret.c_str());
--}
--
--const char *LLVMGetName(const char *op, llvm::Value *v1, llvm::Value *v2) {
--    std::string r = op;
--    r += "_";
--    r += v1->getName().str();
--    r += "_";
--    r += v2->getName().str();
--    return strdup(r.c_str());
--}
--
- #ifdef ISPC_GENX_ENABLED
- bool lIsSVMLoad(llvm::Instruction *inst) {
-     Assert(inst);
-diff --git a/src/llvmutil.h b/src/llvmutil.h
-index 42cce4d83..07d089bb4 100644
---- a/src/llvmutil.h
-+++ b/src/llvmutil.h
-@@ -328,11 +328,6 @@ extern llvm::Value *LLVMConcatVectors(llvm::Value *v1, llvm::Value *v2, llvm::In
- extern llvm::Value *LLVMShuffleVectors(llvm::Value *v1, llvm::Value *v2, int32_t shuf[], int shufSize,
-                                        llvm::Instruction *insertBefore);
- 
--/** Utility routines to concat strings with the names of existing values to
--    create meaningful new names for instruction values.
--*/
--extern const char *LLVMGetName(llvm::Value *v, const char *);
--extern const char *LLVMGetName(const char *op, llvm::Value *v1, llvm::Value *v2);
- #ifdef ISPC_GENX_ENABLED
- enum AddressSpace { Local, Global, External };
- 
-diff --git a/src/opt.cpp b/src/opt.cpp
-index 5b1ac7b63..9d6cae058 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -257,7 +257,7 @@ static bool lGetSourcePosFromMetadata(const llvm::Instruction *inst, SourcePos *
-     return true;
- }
- 
--static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, const char *name,
-+static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[2] = {arg0, arg1};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[2]);
-@@ -265,21 +265,22 @@ static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llv
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    const char *name, llvm::Instruction *insertBefore = NULL) {
-+                                    const llvm::Twine &name, llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[3] = {arg0, arg1, arg2};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[3]);
-     return llvm::CallInst::Create(func, newArgArray, name, insertBefore);
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, const char *name, llvm::Instruction *insertBefore = NULL) {
-+                                    llvm::Value *arg3, const llvm::Twine &name,
-+                                    llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[4] = {arg0, arg1, arg2, arg3};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[4]);
-     return llvm::CallInst::Create(func, newArgArray, name, insertBefore);
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, llvm::Value *arg4, const char *name,
-+                                    llvm::Value *arg3, llvm::Value *arg4, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[5] = {arg0, arg1, arg2, arg3, arg4};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[5]);
-@@ -287,7 +288,7 @@ static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llv
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, llvm::Value *arg4, llvm::Value *arg5, const char *name,
-+                                    llvm::Value *arg3, llvm::Value *arg4, llvm::Value *arg5, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[6] = {arg0, arg1, arg2, arg3, arg4, arg5};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[6]);
-@@ -991,23 +992,24 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 llvm::Type *returnType = callInst->getType();
-                 Assert(llvm::isa<llvm::VectorType>(returnType));
-                 // cast the i8 * to the appropriate type
--                const char *name = LLVMGetName(callInst->getArgOperand(0), "_cast");
--                llvm::Value *castPtr = new llvm::BitCastInst(callInst->getArgOperand(0),
--                                                             llvm::PointerType::get(returnType, 0), name, callInst);
-+                llvm::Value *castPtr =
-+                    new llvm::BitCastInst(callInst->getArgOperand(0), llvm::PointerType::get(returnType, 0),
-+                                          llvm::Twine(callInst->getArgOperand(0)->getName()) + "_cast", callInst);
-                 lCopyMetadata(castPtr, callInst);
-                 int align;
-                 if (g->opt.forceAlignedMemory)
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
--                name = LLVMGetName(callInst->getArgOperand(0), "_load");
- #if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
--                llvm::Instruction *loadInst = new llvm::LoadInst(castPtr, name, false /* not volatile */,
--                                                                 llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
-+                llvm::Instruction *loadInst =
-+                    new llvm::LoadInst(castPtr, llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load",
-+                                       false /* not volatile */, llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
- #else
-                 llvm::Instruction *loadInst = new llvm::LoadInst(
--                    llvm::dyn_cast<llvm::PointerType>(castPtr->getType())->getPointerElementType(), castPtr, name,
--                    false /* not volatile */, llvm::MaybeAlign(align).valueOrOne(), (llvm::Instruction *)NULL);
-+                    llvm::dyn_cast<llvm::PointerType>(castPtr->getType())->getPointerElementType(), castPtr,
-+                    llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load", false /* not volatile */,
-+                    llvm::MaybeAlign(align).valueOrOne(), (llvm::Instruction *)NULL);
- #endif
-                 lCopyMetadata(loadInst, callInst);
-                 llvm::ReplaceInstWithInst(callInst, loadInst);
-@@ -1028,9 +1030,9 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 // all lanes storing, so replace with a regular store
-                 llvm::Value *rvalue = callInst->getArgOperand(2);
-                 llvm::Type *storeType = rvalue->getType();
--                const char *name = LLVMGetName(callInst->getArgOperand(0), "_ptrcast");
--                llvm::Value *castPtr = new llvm::BitCastInst(callInst->getArgOperand(0),
--                                                             llvm::PointerType::get(storeType, 0), name, callInst);
-+                llvm::Value *castPtr =
-+                    new llvm::BitCastInst(callInst->getArgOperand(0), llvm::PointerType::get(storeType, 0),
-+                                          llvm::Twine(callInst->getArgOperand(0)->getName()) + "_ptrcast", callInst);
-                 lCopyMetadata(castPtr, callInst);
- 
-                 int align;
-@@ -1339,8 +1341,8 @@ static llvm::Value *lGetBasePointer(llvm::Value *v, llvm::Instruction *insertBef
-         if (t == NULL) {
-             return NULL;
-         } else {
--            return llvm::CastInst::Create(ci->getOpcode(), t, ci->getType()->getScalarType(), LLVMGetName(t, "_cast"),
--                                          insertBefore);
-+            return llvm::CastInst::Create(ci->getOpcode(), t, ci->getType()->getScalarType(),
-+                                          llvm::Twine(t->getName()) + "_cast", insertBefore);
-         }
-     }
- 
-@@ -1583,13 +1585,13 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-         if (co == NULL)
-             *constOffset = NULL;
-         else
--            *constOffset =
--                llvm::CastInst::Create(cast->getOpcode(), co, cast->getType(), LLVMGetName(co, "_cast"), insertBefore);
-+            *constOffset = llvm::CastInst::Create(cast->getOpcode(), co, cast->getType(),
-+                                                  llvm::Twine(co->getName()) + "_cast", insertBefore);
-         if (vo == NULL)
-             *variableOffset = NULL;
-         else
--            *variableOffset =
--                llvm::CastInst::Create(cast->getOpcode(), vo, cast->getType(), LLVMGetName(vo, "_cast"), insertBefore);
-+            *variableOffset = llvm::CastInst::Create(cast->getOpcode(), vo, cast->getType(),
-+                                                     llvm::Twine(vo->getName()) + "_cast", insertBefore);
-         return;
-     }
- 
-@@ -1608,16 +1610,18 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-             else if (c1 == NULL || llvm::isa<llvm::ConstantAggregateZero>(c1))
-                 *constOffset = c0;
-             else
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, c0, c1, LLVMGetName("add", c0, c1),
--                                                            insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, c0, c1, ((llvm::Twine("add_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
- 
-             if (v0 == NULL || llvm::isa<llvm::ConstantAggregateZero>(v0))
-                 *variableOffset = v1;
-             else if (v1 == NULL || llvm::isa<llvm::ConstantAggregateZero>(v1))
-                 *variableOffset = v0;
-             else
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, v0, v1,
--                                                               LLVMGetName("add", v0, v1), insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, v0, v1, ((llvm::Twine("add_") + v0->getName()) + "_") + v1->getName(),
-+                    insertBefore);
-             return;
-         } else if (bop->getOpcode() == llvm::Instruction::Shl) {
-             lExtractConstantOffset(op0, &c0, &v0, insertBefore);
-@@ -1633,10 +1637,12 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-                 *constOffset = vec;
-                 *variableOffset = NULL;
-             } else {
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Shl, c0, c1, LLVMGetName("shl", c0, c1),
--                                                            insertBefore);
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Shl, v0, c1,
--                                                               LLVMGetName("shl", v0, c1), insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Shl, c0, c1, ((llvm::Twine("shl_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Shl, v0, c1, ((llvm::Twine("shl_") + v0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-             }
-             return;
-         } else if (bop->getOpcode() == llvm::Instruction::Mul) {
-@@ -1648,25 +1654,30 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-             // Note that the first term is a constant and the last three are
-             // variable.
-             if (c0 != NULL && c1 != NULL)
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, c1, LLVMGetName("mul", c0, c1),
--                                                            insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Mul, c0, c1, ((llvm::Twine("mul_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-             else
-                 *constOffset = NULL;
- 
-             llvm::Value *va = NULL, *vb = NULL, *vc = NULL;
-             if (v0 != NULL && c1 != NULL)
--                va = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, c1, LLVMGetName("mul", v0, c1),
-+                va = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, c1,
-+                                                  ((llvm::Twine("mul_") + v0->getName()) + "_") + c1->getName(),
-                                                   insertBefore);
-             if (c0 != NULL && v1 != NULL)
--                vb = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, v1, LLVMGetName("mul", c0, v1),
-+                vb = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, v1,
-+                                                  ((llvm::Twine("mul_") + c0->getName()) + "_") + v1->getName(),
-                                                   insertBefore);
-             if (v0 != NULL && v1 != NULL)
--                vc = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, v1, LLVMGetName("mul", v0, v1),
-+                vc = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, v1,
-+                                                  ((llvm::Twine("mul_") + v0->getName()) + "_") + v1->getName(),
-                                                   insertBefore);
- 
-             llvm::Value *vab = NULL;
-             if (va != NULL && vb != NULL)
--                vab = llvm::BinaryOperator::Create(llvm::Instruction::Add, va, vb, LLVMGetName("add", va, vb),
-+                vab = llvm::BinaryOperator::Create(llvm::Instruction::Add, va, vb,
-+                                                   ((llvm::Twine("add_") + va->getName()) + "_") + vb->getName(),
-                                                    insertBefore);
-             else if (va != NULL)
-                 vab = va;
-@@ -1674,8 +1685,9 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-                 vab = vb;
- 
-             if (vab != NULL && vc != NULL)
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, vab, vc,
--                                                               LLVMGetName("add", vab, vc), insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, vab, vc, ((llvm::Twine("add_") + vab->getName()) + "_") + vc->getName(),
-+                    insertBefore);
-             else if (vab != NULL)
-                 *variableOffset = vab;
-             else
-@@ -1943,7 +1955,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-             // all zeros (i.e. a ConstantAggregateZero, but just in case,
-             // do the more general check with lVectorIs32BitInts().
-             variableOffset = new llvm::TruncInst(variableOffset, LLVMTypes::Int32VectorType,
--                                                 LLVMGetName(variableOffset, "_trunc"), insertBefore);
-+                                                 llvm::Twine(variableOffset->getName()) + "_trunc", insertBefore);
-         else
-             return false;
-     }
-@@ -1952,7 +1964,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-         if (lVectorIs32BitInts(constOffset)) {
-             // Truncate them so we have a 32-bit vector type for them.
-             constOffset = new llvm::TruncInst(constOffset, LLVMTypes::Int32VectorType,
--                                              LLVMGetName(constOffset, "_trunc"), insertBefore);
-+                                              llvm::Twine(constOffset->getName()) + "_trunc", insertBefore);
-         } else {
-             // FIXME: otherwise we just assume that all constant offsets
-             // can actually always fit into 32-bits...  (This could be
-@@ -1963,7 +1975,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-             // llvm::ConstantFoldInstruction() doesn't seem to be doing
-             // enough for us in some cases if we call it from here.
-             constOffset = new llvm::TruncInst(constOffset, LLVMTypes::Int32VectorType,
--                                              LLVMGetName(constOffset, "_trunc"), insertBefore);
-+                                              llvm::Twine(constOffset->getName()) + "_trunc", insertBefore);
-         }
-     }
- 
-@@ -2012,8 +2024,8 @@ static bool lOffsets32BitSafe(llvm::Value **offsetPtr, llvm::Instruction *insert
- 
-         // Alternatively, offset could be a sequence of adds terminating
-         // in safe constant vectors or a SExt.
--        *offsetPtr =
--            new llvm::TruncInst(offset, LLVMTypes::Int32VectorType, LLVMGetName(offset, "_trunc"), insertBefore);
-+        *offsetPtr = new llvm::TruncInst(offset, LLVMTypes::Int32VectorType, llvm::Twine(offset->getName()) + "_trunc",
-+                                         insertBefore);
-         return true;
-     } else
-         return false;
-@@ -2229,7 +2241,8 @@ static bool lGSToGSBaseOffsets(llvm::CallInst *callInst) {
-     }
-     // Cast the base pointer to a void *, since that's what the
-     // __pseudo_*_base_offsets_* functions want.
--    basePtr = new llvm::IntToPtrInst(basePtr, LLVMTypes::VoidPointerType, LLVMGetName(basePtr, "_2void"), callInst);
-+    basePtr = new llvm::IntToPtrInst(basePtr, LLVMTypes::VoidPointerType, llvm::Twine(basePtr->getName()) + "_2void",
-+                                     callInst);
-     lCopyMetadata(basePtr, callInst);
-     llvm::Function *gatherScatterFunc = info->baseOffsetsFunc;
- 
-@@ -2803,7 +2816,7 @@ static bool lGSToLoadStore(llvm::CallInst *callInst) {
-                 lCopyMetadata(ptr, callInst);
-                 Debug(pos, "Transformed gather to unaligned vector load!");
-                 llvm::Instruction *newCall =
--                    lCallInst(gatherInfo->loadMaskedFunc, ptr, mask, LLVMGetName(ptr, "_masked_load"));
-+                    lCallInst(gatherInfo->loadMaskedFunc, ptr, mask, llvm::Twine(ptr->getName()) + "_masked_load");
-                 lCopyMetadata(newCall, callInst);
-                 llvm::ReplaceInstWithInst(callInst, newCall);
-                 return true;
diff --git a/srcpkgs/ispc/patches/llvm12-004.patch b/srcpkgs/ispc/patches/llvm12-004.patch
deleted file mode 100644
index 3a94d8443a5e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-004.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From c03a5142444476a1caa5c2ba7fa2d92d7793d6f1 Mon Sep 17 00:00:00 2001
-From: Deepak Rajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Mon, 25 Jan 2021 09:22:49 -0800
-Subject: [PATCH] Fixing build on llvm trunk.
-
----
- src/ctx.cpp | 7 +++----
- 1 file changed, 3 insertions(+), 4 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index ded524b71..b60e6fe84 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1020,8 +1020,7 @@ void FunctionEmitContext::EmitCaseLabel(int value, bool checkMask, SourcePos pos
-     llvm::BasicBlock *bbCaseImpl = NULL;
-     if (emitGenXHardwareMask()) {
-         // Create basic block with actual case implementation
--        llvm::Twine bbName = llvm::Twine(bbCase->getName()) + "_impl";
--        bbCaseImpl = CreateBasicBlock(bbName, bbCase);
-+        bbCaseImpl = CreateBasicBlock(llvm::Twine(bbCase->getName()) + "_impl", bbCase);
-     }
- #endif
- 
-@@ -3142,8 +3141,8 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     llvm::Value *undef2 = llvm::UndefValue::get(vecType);
- 
-     // InsertElement
--    llvm::Twine tw = name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + llvm::Twine("_init");
--    llvm::Value *insert = InsertInst(undef1, v, 0, tw.str().c_str());
-+    llvm::Value *insert =
-+        InsertInst(undef1, v, 0, name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + "_init");
- 
-     // ShuffleVector
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
diff --git a/srcpkgs/ispc/patches/llvm12-005.patch b/srcpkgs/ispc/patches/llvm12-005.patch
deleted file mode 100644
index e3e96b00abfa..000000000000
--- a/srcpkgs/ispc/patches/llvm12-005.patch
+++ /dev/null
@@ -1,372 +0,0 @@
-From c1d0a51bf8416d42144de9e2bdd59825eaeff1ac Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Fri, 8 Jan 2021 14:13:49 -0800
-Subject: [PATCH] LLVM 11 support for gen code
-
----
- src/ctx.cpp                     |  13 ++-
- src/gen/GlobalsLocalization.cpp |   9 +-
- src/opt.cpp                     | 143 ++++++++++++++++++++++++--------
- 3 files changed, 124 insertions(+), 41 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index b60e6fe84..2a72e6837 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1,5 +1,5 @@
- /*
--  Copyright (c) 2010-2020, Intel Corporation
-+  Copyright (c) 2010-2021, Intel Corporation
-   All rights reserved.
- 
-   Redistribution and use in source and binary forms, with or without
-@@ -3685,8 +3685,17 @@ llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::
-     AssertPos(currentPos, llvm::isa<llvm::VectorType>(value->getType()));
-     llvm::VectorType *vt = llvm::dyn_cast<llvm::VectorType>(value->getType());
-     if (defaults == NULL) {
--        defaults = llvm::ConstantVector::getSplat(value->getType()->getVectorNumElements(),
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+        defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-+                                                  llvm::Constant::getNullValue(vt->getElementType()));
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+        defaults = llvm::ConstantVector::getSplat({static_cast<unsigned int>(vt->getNumElements()), false},
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
-+#else
-+        defaults = llvm::ConstantVector::getSplat(
-+            llvm::ElementCount::get(static_cast<unsigned int>(vt->getNumElements()), false),
-+            llvm::Constant::getNullValue(vt->getElementType()));
-+#endif
-     }
- 
-     auto Fn = llvm::GenXIntrinsic::getGenXDeclaration(m->module, llvm::GenXIntrinsic::genx_simdcf_predicate,
-diff --git a/src/gen/GlobalsLocalization.cpp b/src/gen/GlobalsLocalization.cpp
-index a176e9462..41f3b00e2 100644
---- a/src/gen/GlobalsLocalization.cpp
-+++ b/src/gen/GlobalsLocalization.cpp
-@@ -1,5 +1,5 @@
- /*
--  Copyright (c) 2014, 2016-2020, Intel Corporation
-+  Copyright (c) 2014, 2016-2021, Intel Corporation
-   All rights reserved.
- 
-   Redistribution and use in source and binary forms, with or without
-@@ -53,8 +53,10 @@
- #include <llvm/GenXIntrinsics/GenXIntrOpts.h>
- #include <llvm/GenXIntrinsics/GenXIntrinsics.h>
- #include <llvm/GenXIntrinsics/GenXMetadata.h>
--#include <llvm/IR/CFG.h>
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
- #include <llvm/IR/CallSite.h>
-+#endif
-+#include <llvm/IR/CFG.h>
- #include <llvm/IR/DebugInfo.h>
- #include <llvm/IR/Dominators.h>
- #include <llvm/IR/Function.h>
-@@ -470,7 +472,8 @@ void GlobalsLocalization::LocalizeGlobals(LocalizationInfo &LI) {
-         Instruction &FirstI = *Fn->getEntryBlock().begin();
-         Type *ElemTy = GV->getType()->getElementType();
-         AllocaInst *Alloca = new AllocaInst(ElemTy, 0, GV->getName() + ".local", &FirstI);
--        Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()));
-+        Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()).valueOrOne());
-+
-         if (!isa<UndefValue>(GV->getInitializer()))
-             new StoreInst(GV->getInitializer(), Alloca, &FirstI);
- 
-diff --git a/src/opt.cpp b/src/opt.cpp
-index d58d77f73..1789b8476 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -2899,15 +2899,17 @@ static llvm::Function *lGenXMaskedInt8Inst(llvm::Instruction *inst, bool isStore
- static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::Instruction *inst) {
-     Assert(g->target->isGenXTarget());
-     Assert(llvm::isa<llvm::VectorType>(val->getType()));
--    Assert(llvm::isPowerOf2_32(val->getType()->getVectorNumElements()));
--    Assert(val->getType()->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-+
-+    llvm::VectorType *valVecType = llvm::dyn_cast<llvm::VectorType>(val->getType());
-+    Assert(llvm::isPowerOf2_32(valVecType->getNumElements()));
-+    Assert(valVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
- 
-     // The data write of svm store must have a size that is a power of two from 16 to 128
-     // bytes. However for int8 type and simd width = 8, the data write size is 8.
-     // So we use masked store function here instead of svm store which process int8 type
-     // correctly.
--    if (val->getType()->getPrimitiveSizeInBits() / 8 < 16) {
--        Assert(val->getType()->getScalarType() == LLVMTypes::Int8Type);
-+    if (valVecType->getPrimitiveSizeInBits() / 8 < 16) {
-+        Assert(valVecType->getScalarType() == LLVMTypes::Int8Type);
-         if (llvm::Function *maskedFunc = lGenXMaskedInt8Inst(inst, true))
-             return llvm::dyn_cast<llvm::CallInst>(lCallInst(maskedFunc, ptr, val, LLVMMaskAllOn, ""));
-         else {
-@@ -2923,15 +2925,17 @@ static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::
- 
- static llvm::CallInst *lGenXLoadInst(llvm::Value *ptr, llvm::Type *retType, llvm::Instruction *inst) {
-     Assert(llvm::isa<llvm::VectorType>(retType));
--    Assert(llvm::isPowerOf2_32(retType->getVectorNumElements()));
--    Assert(retType->getPrimitiveSizeInBits());
--    Assert(retType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-+
-+    llvm::VectorType *retVecType = llvm::dyn_cast<llvm::VectorType>(retType);
-+    Assert(llvm::isPowerOf2_32(retVecType->getNumElements()));
-+    Assert(retVecType->getPrimitiveSizeInBits());
-+    Assert(retVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-     // The data read of svm load must have a size that is a power of two from 16 to 128
-     // bytes. However for int8 type and simd width = 8, the data read size is 8.
-     // So we use masked load function here instead of svm load which process int8 type
-     // correctly.
--    if (retType->getPrimitiveSizeInBits() / 8 < 16) {
--        Assert(retType->getScalarType() == LLVMTypes::Int8Type);
-+    if (retVecType->getPrimitiveSizeInBits() / 8 < 16) {
-+        Assert(retVecType->getScalarType() == LLVMTypes::Int8Type);
-         if (llvm::Function *maskedFunc = lGenXMaskedInt8Inst(inst, false))
-             return llvm::dyn_cast<llvm::CallInst>(lCallInst(maskedFunc, ptr, LLVMMaskAllOn, ""));
-         else {
-@@ -5622,15 +5626,24 @@ static bool lVectorizeGEPs(llvm::Value *ptr, std::vector<PtrUse> &ptrUses, std::
-         llvm::PtrToIntInst *ptrToInt =
-             new llvm::PtrToIntInst(ptr, LLVMTypes::Int64Type, "vectorized_ptrtoint", insertBefore);
-         llvm::Instruction *addr = llvm::BinaryOperator::CreateAdd(ptrToInt, offset, "vectorized_address", insertBefore);
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        llvm::Type *retType = llvm::FixedVectorType::get(scalar_type, reqSize / t_size);
-+#else
-         llvm::Type *retType = llvm::VectorType::get(scalar_type, reqSize / t_size);
-+#endif
-         llvm::Function *fn = llvm::GenXIntrinsic::getGenXDeclaration(
-             m->module, llvm::GenXIntrinsic::genx_svm_block_ld_unaligned, {retType, addr->getType()});
-         llvm::Instruction *ld = llvm::CallInst::Create(fn, {addr}, "vectorized_ld", insertBefore);
- 
-         if (loadingPtr) {
-             // Cast int to ptr via inttoptr
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            ld = new llvm::IntToPtrInst(ld, llvm::FixedVectorType::get(originalType, reqSize / t_size),
-+                                        "vectorized_inttoptr", insertBefore);
-+#else
-             ld = new llvm::IntToPtrInst(ld, llvm::VectorType::get(originalType, reqSize / t_size),
-                                         "vectorized_inttoptr", insertBefore);
-+#endif
-         }
- 
-         // Scalar extracts for all loaded elements
-@@ -6160,19 +6173,34 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-         llvm::Instruction *inst = &*I;
-         if (llvm::CallInst *ci = llvm::dyn_cast<llvm::CallInst>(inst)) {
-             llvm::Function *func = ci->getCalledFunction();
--            if (func && func->getName() == "llvm.trap") {
-+            if (func && func->getName().equals("llvm.trap")) {
-                 llvm::Type *argTypes[] = {LLVMTypes::Int1VectorType, LLVMTypes::Int16VectorType};
-                 // Description of parameters for genx_raw_send_noresult can be found in target-genx.ll
-                 auto Fn = +llvm::GenXIntrinsic::getGenXDeclaration(
-                     m->module, llvm::GenXIntrinsic::genx_raw_send_noresult, argTypes);
-                 llvm::SmallVector<llvm::Value *, 8> Args;
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 0));
--                Args.push_back(llvm::ConstantVector::getSplat(g->target->getNativeVectorWidth(),
--                                                              llvm::ConstantInt::getTrue(*g->ctx)));
-+                Args.push_back(llvm::ConstantVector::getSplat(
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+                    g->target->getNativeVectorWidth(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+                    {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
-+#else // LLVM 12.0+
-+                    llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-+#endif
-+                    llvm::ConstantInt::getTrue(*g->ctx)));
-+
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 39));
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 33554448));
-                 llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
--                    g->target->getNativeVectorWidth(), llvm::Constant::getNullValue(llvm::Type::getInt16Ty(*g->ctx)));
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+                    g->target->getNativeVectorWidth(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+                    {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
-+#else // LLVM 12.0+
-+                    llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-+#endif
-+                    llvm::Constant::getNullValue(llvm::Type::getInt16Ty(*g->ctx)));
-                 Args.push_back(zeroMask);
- 
-                 llvm::Instruction *newInst = llvm::CallInst::Create(Fn, Args, ci->getName());
-@@ -6181,7 +6209,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     modifiedAny = true;
-                     goto restart;
-                 }
--            } else if (func && func->getName() == "llvm.assume") {
-+            } else if (func && func->getName().equals("llvm.assume")) {
-                 ci->eraseFromParent();
-                 modifiedAny = true;
-                 goto restart;
-@@ -6335,7 +6363,7 @@ bool CheckUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 continue;
-             for (int i = 0; i < unsupportedFuncs.size(); i++) {
-                 std::smatch match;
--                std::string funcName = func->getName();
-+                std::string funcName = func->getName().str();
-                 if (std::regex_match(funcName, match, unsupportedFuncs[i])) {
-                     // We found unsupported function. Generate error and stop compilation.
-                     SourcePos pos;
-@@ -6418,12 +6446,14 @@ bool MangleOpenCLBuiltins::runOnBasicBlock(llvm::BasicBlock &bb) {
-             if (func->getName().startswith("__spirv_ocl")) {
-                 std::string mangledName;
-                 llvm::Type *retType = func->getReturnType();
--                std::string funcName = func->getName();
-+                std::string funcName = func->getName().str();
-                 std::vector<llvm::Type *> ArgTy;
-                 // spirv OpenCL builtins are used for double types only
--                Assert(retType->isVectorTy() && retType->getVectorElementType()->isDoubleTy() ||
-+                Assert(retType->isVectorTy() &&
-+                           llvm::dyn_cast<llvm::VectorType>(retType)->getElementType()->isDoubleTy() ||
-                        retType->isSingleValueType() && retType->isDoubleTy());
--                if (retType->isVectorTy() && retType->getVectorElementType()->isDoubleTy()) {
-+                if (retType->isVectorTy() &&
-+                    llvm::dyn_cast<llvm::VectorType>(retType)->getElementType()->isDoubleTy()) {
-                     ArgTy.push_back(LLVMTypes::DoubleVectorType);
-                     // _DvWIDTH suffix is used in target file to differentiate scalar
-                     // and vector versions of intrinsics. Here we remove this
-@@ -6511,8 +6541,15 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- 
-     // Cast offsets to int64
-     Offsets = new llvm::ZExtInst(
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        Offsets,
-+        llvm::FixedVectorType::get(LLVMTypes::Int64Type,
-+                                   llvm::dyn_cast<llvm::VectorType>(Offsets->getType())->getNumElements()),
-+        "svm_offset_zext", InsertBefore);
-+#else
-         Offsets, llvm::VectorType::get(LLVMTypes::Int64Type, Offsets->getType()->getVectorNumElements()),
-         "svm_offset_zext", InsertBefore);
-+#endif
- 
-     if (!llvm::isa<llvm::ConstantPointerNull>(Ptr)) {
-         // Cast ptr to int64
-@@ -6520,13 +6557,31 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- 
-         // Vectorize ptr
-         llvm::Value *undefInsertValue =
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            llvm::UndefValue::get(llvm::FixedVectorType::get(
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+#else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
-+#endif
-         address = llvm::InsertElementInst::Create(undefInsertValue, address, LLVMInt32(0), "svm_ptr_iei", InsertBefore);
-         llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+            {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
-+#else
-+        llvm::ElementCount::get(
-+                                llvm::dyn_cast<llvm::FixedVectorType>(addressType->getNumElements(), false),
-+#endif
-             llvm::Constant::getNullValue(llvm::Type::getInt32Ty(InsertBefore->getContext())));
-+
-         llvm::Value *undefShuffleValue =
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            llvm::UndefValue::get(llvm::FixedVectorType::get(
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+#else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
-+#endif
-         address = new llvm::ShuffleVectorInst(address, undefShuffleValue, zeroVec, "svm_ptr_svi", InsertBefore);
- 
-         // Calculate address
-@@ -6553,9 +6608,12 @@ llvm::Instruction *FixAddressSpace::processVectorLoad(llvm::LoadInst *LI) {
-     if (retType->getScalarType()->isPointerTy()) {
-         isPtrLoad = true;
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        retType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(retType)->getNumElements());
-+#else
-         retType = llvm::VectorType::get(scalarType, retType->getVectorNumElements());
-+#endif
-     }
--
-     llvm::Instruction *res = lGenXLoadInst(ptr, retType, llvm::dyn_cast<llvm::Instruction>(LI));
-     Assert(res);
- 
-@@ -6580,11 +6638,16 @@ llvm::Instruction *FixAddressSpace::processSVMVectorLoad(llvm::Instruction *CI)
-     ptr = new llvm::IntToPtrInst(ptr, llvm::PointerType::get(retType, 0), CI->getName() + "_inttoptr", CI);
-     llvm::Instruction *loadInst = NULL;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    loadInst = new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), loadInst,
--                                  CI->getName(), (llvm::Instruction *)NULL);
-+    loadInst = new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-+                                  CI->getName(), false /* not volatile */,
-+                                  llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne(),
-+                                  (llvm::Instruction *)NULL);
- #else
--    loadInst = new llvm::LoadInst(ptr, CI->getName(), (llvm::Instruction *)NULL);
-+    loadInst = new llvm::LoadInst(ptr, CI->getName(), false,
-+                                  llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne(),
-+                                  (llvm::Instruction *)NULL);
- #endif
-+
-     Assert(loadInst);
-     return loadInst;
- }
-@@ -6606,7 +6669,11 @@ llvm::Instruction *FixAddressSpace::processVectorStore(llvm::StoreInst *SI) {
-     // Note: it doesn't look like a normal case for GenX target
-     if (valType->getScalarType()->isPointerTy()) {
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        valType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(valType)->getNumElements());
-+#else
-         valType = llvm::VectorType::get(scalarType, valType->getVectorNumElements());
-+#endif
-         val = new llvm::PtrToIntInst(val, valType, "svm_st_val_ptrtoint", SI);
-     }
- 
-@@ -6631,12 +6698,8 @@ llvm::Instruction *FixAddressSpace::processSVMVectorStore(llvm::Instruction *CI)
-     ptr = new llvm::IntToPtrInst(ptr, llvm::PointerType::get(valType, 0), CI->getName() + "_inttoptr", CI);
- 
-     llvm::Instruction *storeInst = NULL;
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    loadInst = new llvm::StoreInst(val, llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(),
--                                   storeInst, CI->getName(), (llvm::Instruction *)NULL);
--#else
--    storeInst = new llvm::StoreInst(val, ptr, (llvm::Instruction *)NULL);
--#endif
-+    storeInst = new llvm::StoreInst(val, ptr, (llvm::Instruction *)NULL,
-+                                    llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
-     Assert(storeInst);
-     return storeInst;
- }
-@@ -6645,15 +6708,18 @@ llvm::Instruction *FixAddressSpace::createInt8WrRegion(llvm::Value *Val, llvm::V
-     int width = g->target->getVectorWidth();
- 
-     llvm::Value *Args[8];
--
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Args[0] = llvm::UndefValue::get(llvm::FixedVectorType::get(LLVMTypes::Int8Type, width * 4)); // old value
-+#else
-     Args[0] = llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int8Type, width * 4)); // old value
--    Args[1] = Val;                                                                          // value to store
--    Args[2] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);                              // vstride
--    Args[3] = llvm::ConstantInt::get(LLVMTypes::Int32Type, width);                          // width
--    Args[4] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 4);                              // stride
--    Args[5] = llvm::ConstantInt::get(LLVMTypes::Int16Type, 0);                              // offsets
--    Args[6] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);                              // parent width (ignored)
--    Args[7] = Mask;                                                                         // mask
-+#endif
-+    Args[1] = Val;                                                 // value to store
-+    Args[2] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);     // vstride
-+    Args[3] = llvm::ConstantInt::get(LLVMTypes::Int32Type, width); // width
-+    Args[4] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 4);     // stride
-+    Args[5] = llvm::ConstantInt::get(LLVMTypes::Int16Type, 0);     // offsets
-+    Args[6] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);     // parent width (ignored)
-+    Args[7] = Mask;                                                // mask
- 
-     llvm::Type *Tys[4];
- 
-@@ -6708,7 +6774,12 @@ llvm::Instruction *FixAddressSpace::processGatherScatterPrivate(llvm::CallInst *
-         return NULL;
- 
-     llvm::Value *address = calculateGatherScatterAddress(ptr, offsets, CI);
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    llvm::Type *i8VecType = llvm::FixedVectorType::get(LLVMTypes::Int8Type, width * 4);
-+#else
-     llvm::Type *i8VecType = llvm::VectorType::get(LLVMTypes::Int8Type, width * 4);
-+#endif
-+
-     bool isInt8 = (value->getType()->getScalarType() == LLVMTypes::Int8Type);
- 
-     Assert(address && "Bad gather/scatter address!");
diff --git a/srcpkgs/ispc/patches/llvm12-006.patch b/srcpkgs/ispc/patches/llvm12-006.patch
deleted file mode 100644
index a829ea48391e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-006.patch
+++ /dev/null
@@ -1,126 +0,0 @@
-From bb3f493d1fbd45c79e1d9dee67a0430ba313eaad Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 19 Jan 2021 11:07:33 -0800
-Subject: [PATCH] Fixed ifdefs for LLVM_11
-
----
- src/ctx.cpp |  6 +++---
- src/opt.cpp | 18 +++++++++---------
- 2 files changed, 12 insertions(+), 12 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 2a72e6837..527a02f30 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1691,7 +1691,7 @@ llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const llvm::T
-     if (llvm::Constant *const_val = llvm::dyn_cast<llvm::Constant>(value)) {
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         ret = llvm::ConstantVector::getSplat(g->target->getVectorWidth(), const_val);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-         ret =
-             llvm::ConstantVector::getSplat({static_cast<unsigned int>(g->target->getVectorWidth()), false}, const_val);
- #else // LLVM 12.0+
-@@ -3148,7 +3148,7 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-     llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
-         vecType->getVectorNumElements(), llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-     llvm::Constant *zeroVec =
-         llvm::ConstantVector::getSplat({static_cast<unsigned int>(ty->getNumElements()), false},
-                                        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
-@@ -3688,7 +3688,7 @@ llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-         defaults = llvm::ConstantVector::getSplat({static_cast<unsigned int>(vt->getNumElements()), false},
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
- #else
-diff --git a/src/opt.cpp b/src/opt.cpp
-index 1789b8476..3ff191a0a 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -1045,7 +1045,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                 llvm::Instruction *loadInst =
-                     new llvm::LoadInst(castPtr, llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load",
-                                        false /* not volatile */, llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
-@@ -1472,7 +1472,7 @@ static llvm::Value *lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offse
-                     llvm::Value *zeroMask =
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                         llvm::ConstantVector::getSplat(cv->getType()->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                         llvm::ConstantVector::getSplat(
-                             {llvm::dyn_cast<llvm::VectorType>(cv->getType())->getNumElements(), false},
- #else // LLVM 12.0+
-@@ -1495,7 +1495,7 @@ static llvm::Value *lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offse
-                         llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                             bop_var_type->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                             {llvm::dyn_cast<llvm::VectorType>(bop_var_type)->getNumElements(), false},
- #else // LLVM 12.0+
-                             llvm::ElementCount::get(
-@@ -2803,7 +2803,7 @@ static bool lGSToLoadStore(llvm::CallInst *callInst) {
-             llvm::Value *zeroMask =
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                 llvm::ConstantVector::getSplat(callInst->getType()->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                 llvm::ConstantVector::getSplat(
-                     {llvm::dyn_cast<llvm::VectorType>(callInst->getType())->getNumElements(), false},
- 
-@@ -3100,7 +3100,7 @@ static bool lImproveMaskedLoad(llvm::CallInst *callInst, llvm::BasicBlock::itera
-         {
-             llvm::Type *ptrType = llvm::PointerType::get(callInst->getType(), 0);
-             ptr = new llvm::BitCastInst(ptr, ptrType, "ptr_cast_for_load", callInst);
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             load = new llvm::LoadInst(
-                 ptr, callInst->getName(), false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-@@ -3459,7 +3459,7 @@ llvm::Value *lGEPAndLoad(llvm::Value *basePtr, int64_t offset, int align, llvm::
-                          llvm::Type *type) {
-     llvm::Value *ptr = lGEPInst(basePtr, LLVMInt64(offset), "new_base", insertBefore);
-     ptr = new llvm::BitCastInst(ptr, llvm::PointerType::get(type, 0), "ptr_cast", insertBefore);
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-     return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, llvm::MaybeAlign(align), insertBefore);
- #else // LLVM 11.0+
-     return new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-@@ -6183,7 +6183,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 Args.push_back(llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                     g->target->getNativeVectorWidth(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                     {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
- #else // LLVM 12.0+
-                     llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-@@ -6195,7 +6195,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                     g->target->getNativeVectorWidth(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                     {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
- #else // LLVM 12.0+
-                     llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-@@ -6567,7 +6567,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
-         llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-             {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
- #else
-         llvm::ElementCount::get(
diff --git a/srcpkgs/ispc/patches/llvm12-007.patch b/srcpkgs/ispc/patches/llvm12-007.patch
deleted file mode 100644
index 1b975f896c7e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-007.patch
+++ /dev/null
@@ -1,160 +0,0 @@
-From 62f5a6c37bf26fc25a7cf81868052d3472874610 Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 23 Mar 2021 23:07:30 -0700
-Subject: [PATCH] Do not generate function mask when it is not required
-
----
- src/ctx.cpp                    | 39 ++++++++++++++-------
- tests/lit-tests/full_mask.ispc | 63 ++++++++++++++++++++++++++++++++++
- 2 files changed, 90 insertions(+), 12 deletions(-)
- create mode 100644 tests/lit-tests/full_mask.ispc
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 527a02f30..9e775fc5c 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -231,10 +231,18 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym, llvm::F
-     internalMaskPointer = AllocaInst(LLVMTypes::MaskType, "internal_mask_memory");
-     StoreInst(LLVMMaskAllOn, internalMaskPointer);
- 
--    functionMaskValue = LLVMMaskAllOn;
--
--    fullMaskPointer = AllocaInst(LLVMTypes::MaskType, "full_mask_memory");
--    StoreInst(LLVMMaskAllOn, fullMaskPointer);
-+    // If the function doesn't have __mask in parameters, there is no need to
-+    // have function mask
-+    if ((func->GetType()->isExported &&
-+         (lf->getFunctionType()->getNumParams() == func->GetType()->GetNumParameters())) ||
-+        (func->GetType()->isUnmasked) || (func->GetType()->isTask)) {
-+        functionMaskValue = NULL;
-+        fullMaskPointer = NULL;
-+    } else {
-+        functionMaskValue = LLVMMaskAllOn;
-+        fullMaskPointer = AllocaInst(LLVMTypes::MaskType, "full_mask_memory");
-+        StoreInst(LLVMMaskAllOn, fullMaskPointer);
-+    }
- 
-     blockEntryMask = NULL;
-     breakLanesPtr = continueLanesPtr = NULL;
-@@ -389,20 +397,26 @@ llvm::BasicBlock *FunctionEmitContext::GetCurrentBasicBlock() { return bblock; }
- 
- void FunctionEmitContext::SetCurrentBasicBlock(llvm::BasicBlock *bb) { bblock = bb; }
- 
--llvm::Value *FunctionEmitContext::GetFunctionMask() { return functionMaskValue; }
-+llvm::Value *FunctionEmitContext::GetFunctionMask() { return fullMaskPointer ? functionMaskValue : LLVMMaskAllOn; }
- 
- llvm::Value *FunctionEmitContext::GetInternalMask() { return LoadInst(internalMaskPointer, NULL, "load_mask"); }
- 
- llvm::Value *FunctionEmitContext::GetFullMask() {
--    return BinaryOperator(llvm::Instruction::And, GetInternalMask(), functionMaskValue, "internal_mask&function_mask");
-+    return fullMaskPointer ? BinaryOperator(llvm::Instruction::And, GetInternalMask(), functionMaskValue,
-+                                            "internal_mask&function_mask")
-+                           : GetInternalMask();
- }
- 
--llvm::Value *FunctionEmitContext::GetFullMaskPointer() { return fullMaskPointer; }
-+llvm::Value *FunctionEmitContext::GetFullMaskPointer() {
-+    return fullMaskPointer ? fullMaskPointer : internalMaskPointer;
-+}
- 
- void FunctionEmitContext::SetFunctionMask(llvm::Value *value) {
--    functionMaskValue = value;
--    if (bblock != NULL)
--        StoreInst(GetFullMask(), fullMaskPointer);
-+    if (fullMaskPointer != NULL) {
-+        functionMaskValue = value;
-+        if (bblock != NULL)
-+            StoreInst(GetFullMask(), fullMaskPointer);
-+    }
- }
- 
- void FunctionEmitContext::SetBlockEntryMask(llvm::Value *value) { blockEntryMask = value; }
-@@ -410,7 +424,8 @@ void FunctionEmitContext::SetBlockEntryMask(llvm::Value *value) { blockEntryMask
- void FunctionEmitContext::SetInternalMask(llvm::Value *value) {
-     StoreInst(value, internalMaskPointer);
-     // kludge so that __mask returns the right value in ispc code.
--    StoreInst(GetFullMask(), fullMaskPointer);
-+    if (fullMaskPointer)
-+        StoreInst(GetFullMask(), fullMaskPointer);
- }
- 
- void FunctionEmitContext::SetInternalMaskAnd(llvm::Value *oldMask, llvm::Value *test) {
-@@ -1265,7 +1280,7 @@ void FunctionEmitContext::CurrentLanesReturned(Expr *expr, bool doCoherenceCheck
-         // lanes have returned
-         if (doCoherenceCheck) {
-             // if newReturnedLanes == functionMaskValue, get out of here!
--            llvm::Value *cmp = MasksAllEqual(functionMaskValue, newReturnedLanes);
-+            llvm::Value *cmp = MasksAllEqual(GetFunctionMask(), newReturnedLanes);
-             llvm::BasicBlock *bDoReturn = CreateBasicBlock("do_return");
-             llvm::BasicBlock *bNoReturn = CreateBasicBlock("no_return");
-             BranchInst(bDoReturn, bNoReturn, cmp);
-diff --git a/tests/lit-tests/full_mask.ispc b/tests/lit-tests/full_mask.ispc
-new file mode 100644
-index 000000000..ac0b0bca3
---- /dev/null
-+++ b/tests/lit-tests/full_mask.ispc
-@@ -0,0 +1,63 @@
-+// RUN: %{ispc} %s -DISPC_EXPORT --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_EXPORT %s
-+
-+// RUN: %{ispc} %s -DISPC_UNMASKED --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_UNMASKED %s
-+
-+// RUN: %{ispc} %s -DISPC_NOQUALIF --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_NOQUALIF %s
-+
-+// RUN: %{ispc} %s -DISPC_TASK --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_TASK %s
-+
-+struct Parameters {
-+    float *vout;
-+    int param;
-+};
-+
-+#ifdef ISPC_EXPORT
-+// CHECK_ISPC_EXPORT: define void @simple_export___
-+// CHECK_ISPC_EXPORT: %full_mask_memory = alloca
-+// CHECK_ISPC_EXPORT: define void @simple_export(
-+// CHECK_ISPC_EXPORT-NOT: %full_mask_memory = alloca
-+export void simple_export(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_UNMASKED
-+// CHECK_ISPC_UNMASKED: define void @simple_unmasked
-+// CHECK_ISPC_UNMASKED-NOT: %full_mask_memory = alloca
-+unmasked void simple_unmasked(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_NOQUALIF
-+// CHECK_ISPC_NOQUALIF: define void @simple
-+// CHECK_ISPC_NOQUALIF: %full_mask_memory = alloca
-+void simple(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_TASK
-+
-+// CHECK_ISPC_TASK: define void @simple_task
-+// CHECK_ISPC_TASK-NOT: %full_mask_memory = alloca
-+// CHECK_ISPC_TASK: define void @simple_entry_point__
-+// CHECK_ISPC_TASK: %full_mask_memory = alloca
-+// CHECK_ISPC_TASK: define void @simple_entry_point(
-+// CHECK_ISPC_TASK-NOT: %full_mask_memory = alloca
-+task void simple_task(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+export void simple_entry_point(void *uniform parameters, uniform int dim0, uniform int dim1, uniform int dim2) {
-+    launch[dim0, dim1, dim2] simple_task(parameters);
-+}
-+#endif
-\ No newline at end of file
diff --git a/srcpkgs/ispc/patches/llvm12-008.patch b/srcpkgs/ispc/patches/llvm12-008.patch
deleted file mode 100644
index c8413d8b7887..000000000000
--- a/srcpkgs/ispc/patches/llvm12-008.patch
+++ /dev/null
@@ -1,149 +0,0 @@
-From afad14227d9204a3c8a626ca608f5b43c3218fe9 Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 4 May 2021 11:43:52 -0700
-Subject: [PATCH] Fixed ISPC gen build for LLVM12
-
----
- src/ctx.cpp |  4 ++++
- src/opt.cpp | 43 +++++++++++++++++++++++++++++--------------
- 2 files changed, 33 insertions(+), 14 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 0c7050591..f7dc06939 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -3738,7 +3738,11 @@ llvm::Value *FunctionEmitContext::GenXSimdCFAny(llvm::Value *value) {
- 
- llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::Value *defaults) {
-     AssertPos(currentPos, llvm::isa<llvm::VectorType>(value->getType()));
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    llvm::FixedVectorType *vt = llvm::dyn_cast<llvm::FixedVectorType>(value->getType());
-+#else
-     llvm::VectorType *vt = llvm::dyn_cast<llvm::VectorType>(value->getType());
-+#endif
-     if (defaults == NULL) {
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-diff --git a/src/opt.cpp b/src/opt.cpp
-index cea4afa23..4e33d6b1a 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -2916,9 +2916,13 @@ static llvm::Function *lGenXMaskedInt8Inst(llvm::Instruction *inst, bool isStore
- 
- static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::Instruction *inst) {
-     Assert(g->target->isGenXTarget());
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Assert(llvm::isa<llvm::FixedVectorType>(val->getType()));
-+    llvm::FixedVectorType *valVecType = llvm::dyn_cast<llvm::FixedVectorType>(val->getType());
-+#else
-     Assert(llvm::isa<llvm::VectorType>(val->getType()));
--
-     llvm::VectorType *valVecType = llvm::dyn_cast<llvm::VectorType>(val->getType());
-+#endif
-     Assert(llvm::isPowerOf2_32(valVecType->getNumElements()));
-     Assert(valVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
- 
-@@ -2942,9 +2946,13 @@ static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::
- }
- 
- static llvm::CallInst *lGenXLoadInst(llvm::Value *ptr, llvm::Type *retType, llvm::Instruction *inst) {
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Assert(llvm::isa<llvm::FixedVectorType>(retType));
-+    llvm::FixedVectorType *retVecType = llvm::dyn_cast<llvm::FixedVectorType>(retType);
-+#else
-     Assert(llvm::isa<llvm::VectorType>(retType));
--
-     llvm::VectorType *retVecType = llvm::dyn_cast<llvm::VectorType>(retType);
-+#endif
-     Assert(llvm::isPowerOf2_32(retVecType->getNumElements()));
-     Assert(retVecType->getPrimitiveSizeInBits());
-     Assert(retVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-@@ -5485,8 +5493,13 @@ static void lCreateBlockLDUse(llvm::Instruction *currInst, std::vector<llvm::Ext
-         } else if (auto gather = lGetPseudoGather(llvm::dyn_cast<llvm::Instruction>(ui->getUser()))) {
-             // Collect idxs from gather and fix users
-             llvm::Value *res = llvm::UndefValue::get(gather->getType());
--            for (unsigned i = 0, end = llvm::dyn_cast<llvm::VectorType>(res->getType())->getNumElements(); i < end;
--                 ++i) {
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            for (unsigned i = 0, end = llvm::dyn_cast<llvm::FixedVectorType>(res->getType())->getNumElements(); i < end;
-+                 ++i)
-+#else
-+            for (unsigned i = 0, end = llvm::dyn_cast<llvm::VectorType>(res->getType())->getNumElements(); i < end; ++i)
-+#endif
-+            {
-                 // Get element via IEI
-                 res = llvm::InsertElementInst::Create(res, EEIs[ptrUse.idxs[curr_idx++]],
-                                                       llvm::ConstantInt::get(LLVMTypes::Int32Type, i),
-@@ -5522,10 +5535,11 @@ static bool lVectorizeGEPs(llvm::Value *ptr, std::vector<PtrUse> &ptrUses, std::
- 
-     // Adjust values for vector load
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    if (auto vecTy = llvm::dyn_cast<llvm::FixedVectorType>(type)) {
-+    if (auto vecTy = llvm::dyn_cast<llvm::FixedVectorType>(type))
- #else
--    if (auto vecTy = llvm::dyn_cast<llvm::VectorType>(type)) {
-+    if (auto vecTy = llvm::dyn_cast<llvm::VectorType>(type))
- #endif
-+    {
-         // Get single element size
-         t_size /= vecTy->getNumElements();
-         // Get single element type
-@@ -6477,7 +6491,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-         Offsets,
-         llvm::FixedVectorType::get(LLVMTypes::Int64Type,
--                                   llvm::dyn_cast<llvm::VectorType>(Offsets->getType())->getNumElements()),
-+                                   llvm::dyn_cast<llvm::FixedVectorType>(Offsets->getType())->getNumElements()),
-         "svm_offset_zext", InsertBefore);
- #else
-         Offsets, llvm::VectorType::get(LLVMTypes::Int64Type, Offsets->getType()->getVectorNumElements()),
-@@ -6492,7 +6506,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
-         llvm::Value *undefInsertValue =
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-             llvm::UndefValue::get(llvm::FixedVectorType::get(
--                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements()));
- #else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
- #endif
-@@ -6501,17 +6515,16 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
- #elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
--            {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
-+            {llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements(), false},
- #else
--        llvm::ElementCount::get(
--                                llvm::dyn_cast<llvm::FixedVectorType>(addressType->getNumElements(), false),
-+            llvm::ElementCount::get(llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements(), false),
- #endif
-             llvm::Constant::getNullValue(llvm::Type::getInt32Ty(InsertBefore->getContext())));
- 
-         llvm::Value *undefShuffleValue =
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-             llvm::UndefValue::get(llvm::FixedVectorType::get(
--                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements()));
- #else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
- #endif
-@@ -6542,7 +6555,8 @@ llvm::Instruction *FixAddressSpace::processVectorLoad(llvm::LoadInst *LI) {
-         isPtrLoad = true;
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--        retType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(retType)->getNumElements());
-+        retType =
-+            llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::FixedVectorType>(retType)->getNumElements());
- #else
-         retType = llvm::VectorType::get(scalarType, retType->getVectorNumElements());
- #endif
-@@ -6604,7 +6618,8 @@ llvm::Instruction *FixAddressSpace::processVectorStore(llvm::StoreInst *SI) {
-     if (valType->getScalarType()->isPointerTy()) {
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--        valType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(valType)->getNumElements());
-+        valType =
-+            llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::FixedVectorType>(valType)->getNumElements());
- #else
-         valType = llvm::VectorType::get(scalarType, valType->getVectorNumElements());
- #endif
diff --git a/srcpkgs/ispc/patches/llvm12-009.patch b/srcpkgs/ispc/patches/llvm12-009.patch
deleted file mode 100644
index d3ea67828582..000000000000
--- a/srcpkgs/ispc/patches/llvm12-009.patch
+++ /dev/null
@@ -1,2109 +0,0 @@
-From 97b13c32132e2704a5e3e7b2eae49d854d087e3e Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 4 May 2021 11:31:55 -0700
-Subject: [PATCH] Updated builtins-cm* for switch to LLVM12
-
----
- builtins/builtins-cm-32.ll | 234 ++++++++++++++++++-------------------
- builtins/builtins-cm-64.ll | 232 ++++++++++++++++++------------------
- 2 files changed, 233 insertions(+), 233 deletions(-)
-
-diff --git a/builtins/builtins-cm-32.ll b/builtins/builtins-cm-32.ll
-index 32debf32e..481bbdc48 100644
---- a/builtins/builtins-cm-32.ll
-+++ b/builtins/builtins-cm-32.ll
-@@ -557,7 +557,7 @@ $_ZN13VaryingWriter12WriteVecElemIPvEEvv = comdat any
- @.str.10 = private unnamed_addr constant [5 x i8] c"%08X\00", align 1
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -618,7 +618,7 @@ define internal <1 x i8> @_ZN7details13__impl_divremILi1EEEu2CMvbT__cS1_S1_u2CMv
- declare <1 x i8> @llvm.genx.rdregioni.v1i8.v1i8.i16(<1 x i8>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -634,7 +634,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -680,7 +680,7 @@ define internal <2 x i8> @_ZN7details13__impl_divremILi2EEEu2CMvbT__cS1_S1_u2CMv
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -818,7 +818,7 @@ define internal <16 x i8> @_ZN7details13__impl_divremILi16EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -864,7 +864,7 @@ define internal <32 x i8> @_ZN7details13__impl_divremILi32EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -890,7 +890,7 @@ define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -904,7 +904,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -918,7 +918,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -932,7 +932,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -946,7 +946,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -960,7 +960,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -974,7 +974,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1058,7 +1058,7 @@ define internal <1 x i16> @_ZN7details13__impl_divremILi1EEEu2CMvbT__sS1_S1_u2CM
- declare <1 x i16> @llvm.genx.rdregioni.v1i16.v1i16.i16(<1 x i16>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1074,7 +1074,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1143,7 +1143,7 @@ define internal <2 x i16> @_ZN7details13__impl_divremILi2EEEu2CMvbT__sS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1350,7 +1350,7 @@ define internal <16 x i16> @_ZN7details13__impl_divremILi16EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1419,7 +1419,7 @@ define internal <32 x i16> @_ZN7details13__impl_divremILi32EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1445,7 +1445,7 @@ define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 si
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1459,7 +1459,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1473,7 +1473,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1487,7 +1487,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -1501,7 +1501,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -1515,7 +1515,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1529,7 +1529,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1730,7 +1730,7 @@ define internal <1 x i32> @_ZN7details13__impl_divremILi1EEEu2CMvbT__iS1_S1_u2CM
- declare <1 x i32> @llvm.genx.rdregioni.v1i32.v1i32.i16(<1 x i32>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1746,7 +1746,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -1932,7 +1932,7 @@ define internal <2 x i32> @_ZN7details13__impl_divremILi2EEEu2CMvbT__iS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2490,7 +2490,7 @@ define internal <16 x i32> @_ZN7details13__impl_divremILi16EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2676,7 +2676,7 @@ define internal <32 x i32> @_ZN7details13__impl_divremILi32EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2702,7 +2702,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2716,7 +2716,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -2730,7 +2730,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2744,7 +2744,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -2758,7 +2758,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -2772,7 +2772,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2786,7 +2786,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2844,7 +2844,7 @@ define internal <1 x i8> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2860,7 +2860,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -2906,7 +2906,7 @@ define internal <2 x i8> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3044,7 +3044,7 @@ define internal <16 x i8> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3090,7 +3090,7 @@ define internal <32 x i8> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3116,7 +3116,7 @@ define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3130,7 +3130,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -3144,7 +3144,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3158,7 +3158,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -3172,7 +3172,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -3186,7 +3186,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3200,7 +3200,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3278,7 +3278,7 @@ define internal <1 x i16> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3294,7 +3294,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3360,7 +3360,7 @@ define internal <2 x i16> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3558,7 +3558,7 @@ define internal <16 x i16> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3624,7 +3624,7 @@ define internal <32 x i16> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3650,7 +3650,7 @@ define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 ze
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3664,7 +3664,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3678,7 +3678,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3692,7 +3692,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -3706,7 +3706,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -3720,7 +3720,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3734,7 +3734,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3892,7 +3892,7 @@ define internal <1 x i32> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3908,7 +3908,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4054,7 +4054,7 @@ define internal <2 x i32> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4492,7 +4492,7 @@ define internal <16 x i32> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4638,7 +4638,7 @@ define internal <32 x i32> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4664,7 +4664,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4678,7 +4678,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4692,7 +4692,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4706,7 +4706,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -4720,7 +4720,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -4734,7 +4734,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4748,7 +4748,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-+define internal void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-   %8 = alloca i8*, align 4
-   %9 = alloca i8*, align 4
-   %10 = alloca i32, align 4
-@@ -4988,7 +4988,7 @@ define internal void @_ZN7details16_cm_print_formatILi128EEEv15cm_surfaceindexju
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i32) #26 !dbg !117 {
-+define internal void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i32) #26 !dbg !117 {
-   %10 = alloca i32, align 4
-   %11 = alloca i8*, align 4
-   %12 = alloca i32, align 4
-@@ -5069,7 +5069,7 @@ define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i3
-   %67 = load i64, i64* %13, align 8, !dbg !159, !tbaa !19
-   %68 = load <5 x i32>, <5 x i32>* %21, align 32, !dbg !160, !tbaa !7
-   call void @_ZN13VaryingWriterC2ERjRPKjiyu2CMvb5_i(%class.VaryingWriter* %23, i32* dereferenceable(4) %19, i32** dereferenceable(4) %14, i32 %66, i64 %67, <5 x i32> %68), !dbg !161
--  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval align 32 %22, %class.VaryingWriter* byval align 32 %23), !dbg !162
-+  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval(%class.UniformWriter) align 32 %22, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %23), !dbg !162
-   br label %70, !dbg !163
- 
- ; <label>:70:                                     ; preds = %60
-@@ -5187,7 +5187,7 @@ define internal <5 x i32> @_Z17get_auxiliary_strv() #28 comdat !dbg !178 {
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %class.VaryingWriter* byval align 32) #25 comdat !dbg !191 {
-+define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !191 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %class.VaryingWriter, align 32
-@@ -5196,7 +5196,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %8 = bitcast %class.UniformWriter* %5 to i8*, !dbg !196
-   %9 = bitcast %class.UniformWriter* %1 to i8*, !dbg !196
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %8, i8* align 32 %9, i32 64, i1 false), !dbg !196, !tbaa.struct !197
--  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval align 32 %5), !dbg !198
-+  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5), !dbg !198
-   br i1 %10, label %16, label %11, !dbg !199
- 
- ; <label>:11:                                     ; preds = %3
-@@ -5204,7 +5204,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %13 = bitcast %class.VaryingWriter* %6 to i8*, !dbg !201
-   %14 = bitcast %class.VaryingWriter* %2 to i8*, !dbg !201
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %13, i8* align 32 %14, i32 64, i1 false), !dbg !201, !tbaa.struct !197
--  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval align 32 %6), !dbg !202
-+  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %6), !dbg !202
-   br label %16, !dbg !199
- 
- ; <label>:16:                                     ; preds = %11, %3
-@@ -5279,7 +5279,7 @@ define internal void @_ZN13VaryingWriterC2ERjRPKjiyu2CMvb5_i(%class.VaryingWrite
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @__num_cores() #29 !dbg !236 {
-+define internal i32 @__num_cores() #29 !dbg !236 {
-   ret i32 -1, !dbg !237
- }
- 
-@@ -8860,7 +8860,7 @@ declare dso_local void @_ZN7details37__cm_intrinsic_impl_svm_scatter_writeIiLi1E
- declare void @llvm.genx.svm.scatter.v1i1.v1i64.v1i32(<1 x i1>, i32, <1 x i64>, <1 x i32>) #27
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval align 32) #25 comdat !dbg !1645 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32) #25 comdat !dbg !1645 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.UniformWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8869,7 +8869,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
-   %7 = bitcast %class.UniformWriter* %4 to i8*, !dbg !1647
-   %8 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1647
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %7, i8* align 32 %8, i32 64, i1 false), !dbg !1647, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %5), !dbg !1648
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval(%class.UniformWriter) align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %5), !dbg !1648
-   ret i1 %9, !dbg !1649
- }
- 
-@@ -8877,7 +8877,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
- declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture readonly, i32, i1) #32
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval align 32) #25 comdat !dbg !1650 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !1650 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.VaryingWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -8886,12 +8886,12 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWrite
-   %7 = bitcast %class.VaryingWriter* %4 to i8*, !dbg !1652
-   %8 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !1652
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %7, i8* align 32 %8, i32 64, i1 false), !dbg !1652, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %5), !dbg !1653
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %5), !dbg !1653
-   ret i1 %9, !dbg !1654
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1655 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1655 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8914,7 +8914,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %22 = bitcast %class.UniformWriter* %5 to i8*, !dbg !1657
-   %23 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1657
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %22, i8* align 32 %23, i32 64, i1 false), !dbg !1657, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %6), !dbg !1658
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %6), !dbg !1658
-   br i1 %24, label %60, label %25, !dbg !1659
- 
- ; <label>:25:                                     ; preds = %3
-@@ -8922,7 +8922,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %27 = bitcast %class.UniformWriter* %7 to i8*, !dbg !1661
-   %28 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1661
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %27, i8* align 32 %28, i32 64, i1 false), !dbg !1661, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %8), !dbg !1662
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval(%class.UniformWriter) align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %8), !dbg !1662
-   br i1 %29, label %60, label %30, !dbg !1663
- 
- ; <label>:30:                                     ; preds = %25
-@@ -8930,7 +8930,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %32 = bitcast %class.UniformWriter* %9 to i8*, !dbg !1665
-   %33 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1665
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %32, i8* align 32 %33, i32 64, i1 false), !dbg !1665, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %10), !dbg !1666
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval(%class.UniformWriter) align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %10), !dbg !1666
-   br i1 %34, label %60, label %35, !dbg !1667
- 
- ; <label>:35:                                     ; preds = %30
-@@ -8938,7 +8938,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %37 = bitcast %class.UniformWriter* %11 to i8*, !dbg !1669
-   %38 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1669
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %37, i8* align 32 %38, i32 64, i1 false), !dbg !1669, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %12), !dbg !1670
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval(%class.UniformWriter) align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %12), !dbg !1670
-   br i1 %39, label %60, label %40, !dbg !1671
- 
- ; <label>:40:                                     ; preds = %35
-@@ -8946,7 +8946,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %42 = bitcast %class.UniformWriter* %13 to i8*, !dbg !1673
-   %43 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1673
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %42, i8* align 32 %43, i32 64, i1 false), !dbg !1673, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %14), !dbg !1674
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval(%class.UniformWriter) align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %14), !dbg !1674
-   br i1 %44, label %60, label %45, !dbg !1675
- 
- ; <label>:45:                                     ; preds = %40
-@@ -8954,7 +8954,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %47 = bitcast %class.UniformWriter* %15 to i8*, !dbg !1677
-   %48 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1677
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %47, i8* align 32 %48, i32 64, i1 false), !dbg !1677, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %16), !dbg !1678
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval(%class.UniformWriter) align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %16), !dbg !1678
-   br i1 %49, label %60, label %50, !dbg !1679
- 
- ; <label>:50:                                     ; preds = %45
-@@ -8962,7 +8962,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %52 = bitcast %class.UniformWriter* %17 to i8*, !dbg !1681
-   %53 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1681
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %52, i8* align 32 %53, i32 64, i1 false), !dbg !1681, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %18), !dbg !1682
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval(%class.UniformWriter) align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %18), !dbg !1682
-   br i1 %54, label %60, label %55, !dbg !1683
- 
- ; <label>:55:                                     ; preds = %50
-@@ -8970,7 +8970,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %57 = bitcast %class.UniformWriter* %19 to i8*, !dbg !1685
-   %58 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1685
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %57, i8* align 32 %58, i32 64, i1 false), !dbg !1685, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %20), !dbg !1686
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval(%class.UniformWriter) align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %20), !dbg !1686
-   br label %60, !dbg !1683
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -8979,7 +8979,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1688 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1688 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9005,7 +9005,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1697 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1697 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9031,7 +9031,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1706 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1706 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9057,7 +9057,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1715 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1715 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9083,7 +9083,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1724 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1724 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9109,7 +9109,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1733 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1733 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9135,7 +9135,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1742 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1742 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9161,7 +9161,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1751 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1751 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9984,7 +9984,7 @@ define internal i32 @_ZN7details18_cm_print_type_oclIPvEENS_18SHADER_PRINTF_TYPE
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2055 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2055 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.VaryingWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -10007,7 +10007,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %22 = bitcast %class.VaryingWriter* %5 to i8*, !dbg !2057
-   %23 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2057
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %22, i8* align 32 %23, i32 64, i1 false), !dbg !2057, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %6), !dbg !2058
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %6), !dbg !2058
-   br i1 %24, label %60, label %25, !dbg !2059
- 
- ; <label>:25:                                     ; preds = %3
-@@ -10015,7 +10015,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %27 = bitcast %class.VaryingWriter* %7 to i8*, !dbg !2061
-   %28 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2061
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %27, i8* align 32 %28, i32 64, i1 false), !dbg !2061, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %8), !dbg !2062
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %8), !dbg !2062
-   br i1 %29, label %60, label %30, !dbg !2063
- 
- ; <label>:30:                                     ; preds = %25
-@@ -10023,7 +10023,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %32 = bitcast %class.VaryingWriter* %9 to i8*, !dbg !2065
-   %33 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2065
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %32, i8* align 32 %33, i32 64, i1 false), !dbg !2065, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %10), !dbg !2066
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %10), !dbg !2066
-   br i1 %34, label %60, label %35, !dbg !2067
- 
- ; <label>:35:                                     ; preds = %30
-@@ -10031,7 +10031,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %37 = bitcast %class.VaryingWriter* %11 to i8*, !dbg !2069
-   %38 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2069
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %37, i8* align 32 %38, i32 64, i1 false), !dbg !2069, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %12), !dbg !2070
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %12), !dbg !2070
-   br i1 %39, label %60, label %40, !dbg !2071
- 
- ; <label>:40:                                     ; preds = %35
-@@ -10039,7 +10039,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %42 = bitcast %class.VaryingWriter* %13 to i8*, !dbg !2073
-   %43 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2073
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %42, i8* align 32 %43, i32 64, i1 false), !dbg !2073, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %14), !dbg !2074
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %14), !dbg !2074
-   br i1 %44, label %60, label %45, !dbg !2075
- 
- ; <label>:45:                                     ; preds = %40
-@@ -10047,7 +10047,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %47 = bitcast %class.VaryingWriter* %15 to i8*, !dbg !2077
-   %48 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2077
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %47, i8* align 32 %48, i32 64, i1 false), !dbg !2077, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %16), !dbg !2078
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %16), !dbg !2078
-   br i1 %49, label %60, label %50, !dbg !2079
- 
- ; <label>:50:                                     ; preds = %45
-@@ -10055,7 +10055,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %52 = bitcast %class.VaryingWriter* %17 to i8*, !dbg !2081
-   %53 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2081
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %52, i8* align 32 %53, i32 64, i1 false), !dbg !2081, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %18), !dbg !2082
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %18), !dbg !2082
-   br i1 %54, label %60, label %55, !dbg !2083
- 
- ; <label>:55:                                     ; preds = %50
-@@ -10063,7 +10063,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %57 = bitcast %class.VaryingWriter* %19 to i8*, !dbg !2085
-   %58 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2085
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %57, i8* align 32 %58, i32 64, i1 false), !dbg !2085, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %20), !dbg !2086
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %20), !dbg !2086
-   br label %60, !dbg !2083
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -10072,7 +10072,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2088 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2088 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10098,7 +10098,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2097 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2097 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10124,7 +10124,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2106 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2106 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10150,7 +10150,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2115 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2115 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10176,7 +10176,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2124 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2124 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10202,7 +10202,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2133 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2133 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10228,7 +10228,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2142 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2142 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10254,7 +10254,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2151 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2151 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-diff --git a/builtins/builtins-cm-64.ll b/builtins/builtins-cm-64.ll
-index 39a2dd8be..375d01bed 100644
---- a/builtins/builtins-cm-64.ll
-+++ b/builtins/builtins-cm-64.ll
-@@ -557,7 +557,7 @@ $_ZN13VaryingWriter12WriteVecElemIPvEEvv = comdat any
- @.str.10 = private unnamed_addr constant [8 x i8] c"%016llX\00", align 1
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -618,7 +618,7 @@ define internal <1 x i8> @_ZN7details13__impl_divremILi1EEEu2CMvbT__cS1_S1_u2CMv
- declare <1 x i8> @llvm.genx.rdregioni.v1i8.v1i8.i16(<1 x i8>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -634,7 +634,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -680,7 +680,7 @@ define internal <2 x i8> @_ZN7details13__impl_divremILi2EEEu2CMvbT__cS1_S1_u2CMv
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -818,7 +818,7 @@ define internal <16 x i8> @_ZN7details13__impl_divremILi16EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -864,7 +864,7 @@ define internal <32 x i8> @_ZN7details13__impl_divremILi32EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -890,7 +890,7 @@ define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -904,7 +904,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -918,7 +918,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -932,7 +932,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -946,7 +946,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -960,7 +960,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -974,7 +974,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1058,7 +1058,7 @@ define internal <1 x i16> @_ZN7details13__impl_divremILi1EEEu2CMvbT__sS1_S1_u2CM
- declare <1 x i16> @llvm.genx.rdregioni.v1i16.v1i16.i16(<1 x i16>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1074,7 +1074,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1143,7 +1143,7 @@ define internal <2 x i16> @_ZN7details13__impl_divremILi2EEEu2CMvbT__sS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1350,7 +1350,7 @@ define internal <16 x i16> @_ZN7details13__impl_divremILi16EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1419,7 +1419,7 @@ define internal <32 x i16> @_ZN7details13__impl_divremILi32EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1445,7 +1445,7 @@ define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 si
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1459,7 +1459,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1473,7 +1473,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1487,7 +1487,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -1501,7 +1501,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -1515,7 +1515,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1529,7 +1529,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1730,7 +1730,7 @@ define internal <1 x i32> @_ZN7details13__impl_divremILi1EEEu2CMvbT__iS1_S1_u2CM
- declare <1 x i32> @llvm.genx.rdregioni.v1i32.v1i32.i16(<1 x i32>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1746,7 +1746,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -1932,7 +1932,7 @@ define internal <2 x i32> @_ZN7details13__impl_divremILi2EEEu2CMvbT__iS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2490,7 +2490,7 @@ define internal <16 x i32> @_ZN7details13__impl_divremILi16EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2676,7 +2676,7 @@ define internal <32 x i32> @_ZN7details13__impl_divremILi32EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2702,7 +2702,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2716,7 +2716,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -2730,7 +2730,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2744,7 +2744,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -2758,7 +2758,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -2772,7 +2772,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2786,7 +2786,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2844,7 +2844,7 @@ define internal <1 x i8> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2860,7 +2860,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -2906,7 +2906,7 @@ define internal <2 x i8> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3044,7 +3044,7 @@ define internal <16 x i8> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3090,7 +3090,7 @@ define internal <32 x i8> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3116,7 +3116,7 @@ define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3130,7 +3130,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -3144,7 +3144,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3158,7 +3158,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -3172,7 +3172,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -3186,7 +3186,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3200,7 +3200,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3278,7 +3278,7 @@ define internal <1 x i16> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3294,7 +3294,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3360,7 +3360,7 @@ define internal <2 x i16> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3558,7 +3558,7 @@ define internal <16 x i16> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3624,7 +3624,7 @@ define internal <32 x i16> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3650,7 +3650,7 @@ define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 ze
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3664,7 +3664,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3678,7 +3678,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3692,7 +3692,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -3706,7 +3706,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -3720,7 +3720,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3734,7 +3734,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3892,7 +3892,7 @@ define internal <1 x i32> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3908,7 +3908,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4054,7 +4054,7 @@ define internal <2 x i32> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4492,7 +4492,7 @@ define internal <16 x i32> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4638,7 +4638,7 @@ define internal <32 x i32> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4664,7 +4664,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4678,7 +4678,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4692,7 +4692,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4706,7 +4706,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -4720,7 +4720,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -4734,7 +4734,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4748,7 +4748,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-+define internal void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-   %8 = alloca i8*, align 8
-   %9 = alloca i8*, align 8
-   %10 = alloca i32, align 4
-@@ -5070,7 +5070,7 @@ define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i3
-   %67 = load i64, i64* %13, align 8, !dbg !159, !tbaa !19
-   %68 = load <5 x i32>, <5 x i32>* %21, align 32, !dbg !160, !tbaa !7
-   call void @_ZN13VaryingWriterC2ERyRPKjiyu2CMvb5_i(%class.VaryingWriter* %23, i64* dereferenceable(8) %19, i32** dereferenceable(8) %14, i32 %66, i64 %67, <5 x i32> %68), !dbg !161
--  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval align 32 %22, %class.VaryingWriter* byval align 32 %23), !dbg !162
-+  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval(%class.UniformWriter) align 32 %22, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %23), !dbg !162
-   br label %70, !dbg !163
- 
- ; <label>:70:                                     ; preds = %60
-@@ -5188,7 +5188,7 @@ define internal <5 x i32> @_Z17get_auxiliary_strv() #28 comdat !dbg !178 {
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %class.VaryingWriter* byval align 32) #25 comdat !dbg !191 {
-+define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !191 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %class.VaryingWriter, align 32
-@@ -5197,7 +5197,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %8 = bitcast %class.UniformWriter* %5 to i8*, !dbg !196
-   %9 = bitcast %class.UniformWriter* %1 to i8*, !dbg !196
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %8, i8* align 32 %9, i64 64, i1 false), !dbg !196, !tbaa.struct !197
--  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval align 32 %5), !dbg !198
-+  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5), !dbg !198
-   br i1 %10, label %16, label %11, !dbg !199
- 
- ; <label>:11:                                     ; preds = %3
-@@ -5205,7 +5205,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %13 = bitcast %class.VaryingWriter* %6 to i8*, !dbg !201
-   %14 = bitcast %class.VaryingWriter* %2 to i8*, !dbg !201
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %13, i8* align 32 %14, i64 64, i1 false), !dbg !201, !tbaa.struct !197
--  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval align 32 %6), !dbg !202
-+  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %6), !dbg !202
-   br label %16, !dbg !199
- 
- ; <label>:16:                                     ; preds = %11, %3
-@@ -5280,7 +5280,7 @@ define internal void @_ZN13VaryingWriterC2ERyRPKjiyu2CMvb5_i(%class.VaryingWrite
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @__num_cores() #29 !dbg !236 {
-+define internal i32 @__num_cores() #29 !dbg !236 {
-   ret i32 -1, !dbg !237
- }
- 
-@@ -8870,7 +8870,7 @@ declare dso_local void @_ZN7details37__cm_intrinsic_impl_svm_scatter_writeIiLi1E
- declare void @llvm.genx.svm.scatter.v1i1.v1i64.v1i32(<1 x i1>, i32, <1 x i64>, <1 x i32>) #27
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval align 32) #25 comdat !dbg !1645 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32) #25 comdat !dbg !1645 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.UniformWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8879,7 +8879,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
-   %7 = bitcast %class.UniformWriter* %4 to i8*, !dbg !1647
-   %8 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1647
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %7, i8* align 32 %8, i64 64, i1 false), !dbg !1647, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %5), !dbg !1648
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval(%class.UniformWriter) align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %5), !dbg !1648
-   ret i1 %9, !dbg !1649
- }
- 
-@@ -8887,7 +8887,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
- declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1) #32
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval align 32) #25 comdat !dbg !1650 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !1650 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.VaryingWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -8896,12 +8896,12 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWrite
-   %7 = bitcast %class.VaryingWriter* %4 to i8*, !dbg !1652
-   %8 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !1652
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %7, i8* align 32 %8, i64 64, i1 false), !dbg !1652, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %5), !dbg !1653
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %5), !dbg !1653
-   ret i1 %9, !dbg !1654
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1655 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1655 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8924,7 +8924,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %22 = bitcast %class.UniformWriter* %5 to i8*, !dbg !1657
-   %23 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1657
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %22, i8* align 32 %23, i64 64, i1 false), !dbg !1657, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %6), !dbg !1658
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %6), !dbg !1658
-   br i1 %24, label %60, label %25, !dbg !1659
- 
- ; <label>:25:                                     ; preds = %3
-@@ -8932,7 +8932,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %27 = bitcast %class.UniformWriter* %7 to i8*, !dbg !1661
-   %28 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1661
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %27, i8* align 32 %28, i64 64, i1 false), !dbg !1661, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %8), !dbg !1662
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval(%class.UniformWriter) align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %8), !dbg !1662
-   br i1 %29, label %60, label %30, !dbg !1663
- 
- ; <label>:30:                                     ; preds = %25
-@@ -8940,7 +8940,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %32 = bitcast %class.UniformWriter* %9 to i8*, !dbg !1665
-   %33 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1665
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %32, i8* align 32 %33, i64 64, i1 false), !dbg !1665, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %10), !dbg !1666
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval(%class.UniformWriter) align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %10), !dbg !1666
-   br i1 %34, label %60, label %35, !dbg !1667
- 
- ; <label>:35:                                     ; preds = %30
-@@ -8948,7 +8948,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %37 = bitcast %class.UniformWriter* %11 to i8*, !dbg !1669
-   %38 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1669
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %37, i8* align 32 %38, i64 64, i1 false), !dbg !1669, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %12), !dbg !1670
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval(%class.UniformWriter) align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %12), !dbg !1670
-   br i1 %39, label %60, label %40, !dbg !1671
- 
- ; <label>:40:                                     ; preds = %35
-@@ -8956,7 +8956,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %42 = bitcast %class.UniformWriter* %13 to i8*, !dbg !1673
-   %43 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1673
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %42, i8* align 32 %43, i64 64, i1 false), !dbg !1673, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %14), !dbg !1674
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval(%class.UniformWriter) align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %14), !dbg !1674
-   br i1 %44, label %60, label %45, !dbg !1675
- 
- ; <label>:45:                                     ; preds = %40
-@@ -8964,7 +8964,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %47 = bitcast %class.UniformWriter* %15 to i8*, !dbg !1677
-   %48 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1677
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %47, i8* align 32 %48, i64 64, i1 false), !dbg !1677, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %16), !dbg !1678
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval(%class.UniformWriter) align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %16), !dbg !1678
-   br i1 %49, label %60, label %50, !dbg !1679
- 
- ; <label>:50:                                     ; preds = %45
-@@ -8972,7 +8972,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %52 = bitcast %class.UniformWriter* %17 to i8*, !dbg !1681
-   %53 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1681
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %52, i8* align 32 %53, i64 64, i1 false), !dbg !1681, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %18), !dbg !1682
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval(%class.UniformWriter) align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %18), !dbg !1682
-   br i1 %54, label %60, label %55, !dbg !1683
- 
- ; <label>:55:                                     ; preds = %50
-@@ -8980,7 +8980,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %57 = bitcast %class.UniformWriter* %19 to i8*, !dbg !1685
-   %58 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1685
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %57, i8* align 32 %58, i64 64, i1 false), !dbg !1685, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %20), !dbg !1686
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval(%class.UniformWriter) align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %20), !dbg !1686
-   br label %60, !dbg !1683
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -8989,7 +8989,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1688 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1688 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9015,7 +9015,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1697 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1697 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9041,7 +9041,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1706 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1706 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9067,7 +9067,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1715 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1715 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9093,7 +9093,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1724 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1724 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9119,7 +9119,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1733 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1733 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9145,7 +9145,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1742 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1742 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9171,7 +9171,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1751 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1751 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10013,7 +10013,7 @@ define internal i32 @_ZN7details18_cm_print_type_oclIPvEENS_18SHADER_PRINTF_TYPE
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2061 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2061 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.VaryingWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -10036,7 +10036,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %22 = bitcast %class.VaryingWriter* %5 to i8*, !dbg !2063
-   %23 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2063
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %22, i8* align 32 %23, i64 64, i1 false), !dbg !2063, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %6), !dbg !2064
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %6), !dbg !2064
-   br i1 %24, label %60, label %25, !dbg !2065
- 
- ; <label>:25:                                     ; preds = %3
-@@ -10044,7 +10044,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %27 = bitcast %class.VaryingWriter* %7 to i8*, !dbg !2067
-   %28 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2067
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %27, i8* align 32 %28, i64 64, i1 false), !dbg !2067, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %8), !dbg !2068
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %8), !dbg !2068
-   br i1 %29, label %60, label %30, !dbg !2069
- 
- ; <label>:30:                                     ; preds = %25
-@@ -10052,7 +10052,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %32 = bitcast %class.VaryingWriter* %9 to i8*, !dbg !2071
-   %33 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2071
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %32, i8* align 32 %33, i64 64, i1 false), !dbg !2071, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %10), !dbg !2072
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %10), !dbg !2072
-   br i1 %34, label %60, label %35, !dbg !2073
- 
- ; <label>:35:                                     ; preds = %30
-@@ -10060,7 +10060,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %37 = bitcast %class.VaryingWriter* %11 to i8*, !dbg !2075
-   %38 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2075
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %37, i8* align 32 %38, i64 64, i1 false), !dbg !2075, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %12), !dbg !2076
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %12), !dbg !2076
-   br i1 %39, label %60, label %40, !dbg !2077
- 
- ; <label>:40:                                     ; preds = %35
-@@ -10068,7 +10068,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %42 = bitcast %class.VaryingWriter* %13 to i8*, !dbg !2079
-   %43 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2079
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %42, i8* align 32 %43, i64 64, i1 false), !dbg !2079, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %14), !dbg !2080
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %14), !dbg !2080
-   br i1 %44, label %60, label %45, !dbg !2081
- 
- ; <label>:45:                                     ; preds = %40
-@@ -10076,7 +10076,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %47 = bitcast %class.VaryingWriter* %15 to i8*, !dbg !2083
-   %48 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2083
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %47, i8* align 32 %48, i64 64, i1 false), !dbg !2083, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %16), !dbg !2084
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %16), !dbg !2084
-   br i1 %49, label %60, label %50, !dbg !2085
- 
- ; <label>:50:                                     ; preds = %45
-@@ -10084,7 +10084,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %52 = bitcast %class.VaryingWriter* %17 to i8*, !dbg !2087
-   %53 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2087
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %52, i8* align 32 %53, i64 64, i1 false), !dbg !2087, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %18), !dbg !2088
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %18), !dbg !2088
-   br i1 %54, label %60, label %55, !dbg !2089
- 
- ; <label>:55:                                     ; preds = %50
-@@ -10092,7 +10092,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %57 = bitcast %class.VaryingWriter* %19 to i8*, !dbg !2091
-   %58 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2091
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %57, i8* align 32 %58, i64 64, i1 false), !dbg !2091, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %20), !dbg !2092
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %20), !dbg !2092
-   br label %60, !dbg !2089
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -10101,7 +10101,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2094 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2094 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10127,7 +10127,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2103 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2103 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10153,7 +10153,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2112 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2112 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10179,7 +10179,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2121 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2121 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10205,7 +10205,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2130 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2130 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10231,7 +10231,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2139 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2139 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10257,7 +10257,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2148 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2148 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10283,7 +10283,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2157 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2157 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
diff --git a/srcpkgs/ispc/template b/srcpkgs/ispc/template
index 9c3acb42a9cf..3a85ff2605af 100644
--- a/srcpkgs/ispc/template
+++ b/srcpkgs/ispc/template
@@ -1,7 +1,7 @@
 # Template file for 'ispc'
 pkgname=ispc
-version=1.15.0
-revision=2
+version=1.17.0
+revision=1
 archs="x86_64*"
 build_style=cmake
 configure_args="-DISPC_NO_DUMPS=ON -DARM_ENABLED=OFF"
@@ -12,7 +12,7 @@ maintainer="Andrea Brancaleoni <abc@pompel.me>"
 license="BSD-3-Clause"
 homepage="https://ispc.github.io"
 distfiles="https://github.com/ispc/ispc/archive/v${version}.tar.gz"
-checksum=2658ff00dc045ac9fcefbf6bd26dffaf723b059a942a27df91bbb61bc503a285
+checksum=37fb1055d6c6b232e112d8d50145d726824ed4d8da93a7396315dceba6c76e62
 nocross=yes
 nopie=yes
 

From 10a88bd0ffd79badb198e4ab66db1f7edef2db44 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Tue, 3 May 2022 01:20:03 +0200
Subject: [PATCH 27/29] llvm14: switch to runtimes build.

https://reviews.llvm.org/rGac7031b2b2fa
https://reviews.llvm.org/D110338#3022952
---
 srcpkgs/llvm14/template | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
index 3e7e6ab2c00b..e731aa76130a 100644
--- a/srcpkgs/llvm14/template
+++ b/srcpkgs/llvm14/template
@@ -51,7 +51,8 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
-_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
+_enabled_projects="clang;clang-tools-extra;lld"
+_enabled_runtimes="compiler-rt;libcxx;libcxxabi;libunwind"
 
 _lldb_enable=yes
 _libomp_enable=no
@@ -67,9 +68,8 @@ esac
 
 subpackages="clang-tools-extra"
 
-# must go before clang
 if [ "$_libomp_enable" = "yes" ]; then
-	_enabled_projects+=";openmp"
+	_enabled_runtimes+=";openmp"
 	subpackages+=" libomp libomp-devel"
 	# because of cmake nonsense referencing libomptarget.so.*
 	depends+=" libomp>=${version}_${revision}"
@@ -88,6 +88,7 @@ fi
 subpackages+=" lld lld-devel"
 
 configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+configure_args+=" -DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}"
 
 post_patch() {
 	if [ "$_lldb_enable" = "yes" ]; then
@@ -156,7 +157,8 @@ pre_configure() {
 		CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
 			CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
-			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
+			-DLLVM_ENABLE_PROJECTS=${_enabled_projects} \
+			-DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}
 		make ${makejobs} -C utils/TableGen
 		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen

From 146e8973a3a031fe88de96c429d08996d24b41c7 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 14:07:14 +0200
Subject: [PATCH 28/29] zig: fix build.

---
 srcpkgs/zig/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/zig/template b/srcpkgs/zig/template
index 728c5a64e9df..c175de62c5f7 100644
--- a/srcpkgs/zig/template
+++ b/srcpkgs/zig/template
@@ -5,7 +5,7 @@ revision=2
 archs="x86_64* aarch64*"
 build_style=cmake
 make_cmd=make
-makedepends="clang llvm12 lld-devel"
+makedepends="clang12 llvm12 lld12-devel"
 short_desc="Programming language designed for robustness, optimality, and clarity"
 maintainer="Isaac Freund <mail@isaacfreund.com>"
 license="MIT"

From ff69db26b0a3e47c4749382493f66ce1331898b2 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 03:39:58 +0200
Subject: [PATCH 29/29] llvm14: fix build.

---
 .../llvm14/files/llvm-Config-llvm-config.h    |  9 +++
 srcpkgs/llvm14/template                       | 65 ++++++++++++-------
 2 files changed, 52 insertions(+), 22 deletions(-)
 create mode 100644 srcpkgs/llvm14/files/llvm-Config-llvm-config.h

diff --git a/srcpkgs/llvm14/files/llvm-Config-llvm-config.h b/srcpkgs/llvm14/files/llvm-Config-llvm-config.h
new file mode 100644
index 000000000000..2fa08c9be696
--- /dev/null
+++ b/srcpkgs/llvm14/files/llvm-Config-llvm-config.h
@@ -0,0 +1,9 @@
+#include <bits/wordsize.h>
+
+#if __WORDSIZE == 32
+#include "llvm-config-32.h"
+#elif __WORDSIZE == 64
+#include "llvm-config-64.h"
+#else
+#error "Unknown word size"
+#endif
diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
index e731aa76130a..f3242f0549a2 100644
--- a/srcpkgs/llvm14/template
+++ b/srcpkgs/llvm14/template
@@ -15,6 +15,7 @@ configure_args="
  -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
  -DLIBOMP_ENABLE_SHARED=YES
  -DLIBOMP_INSTALL_ALIASES=NO
+ -DCOMPILER_RT_DEFAULT_TARGET_ONLY=YES
  -DLLVM_INCLUDE_DOCS=YES
  -DLLVM_BUILD_DOCS=YES
  -DLLVM_ENABLE_SPHINX=YES
@@ -38,6 +39,7 @@ distfiles="https://github.com/llvm/llvm-project/releases/download/llvmorg-${vers
 checksum=44d3e7a784d5cf805e72853bb03f218bd1058d448c03ca883dabbebc99204e0c
 lib32disabled=yes
 python_version=3
+nopie_files="/usr/bin/llvm-omp-device-info"
 
 if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
 	configure_args+=" -DLIBCXX_HAS_MUSL_LIBC=YES"
@@ -90,6 +92,33 @@ subpackages+=" lld lld-devel"
 configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
 configure_args+=" -DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}"
 
+case "$XBPS_TARGET_MACHINE" in
+	i686) _trp="i686-pc-linux-gnu";;
+	i686-musl) _trp="i686-linux-musl";;
+	x86_64) _trp="x86_64-unknown-linux-gnu";;
+	x86_64-musl) _trp="x86_64-linux-musl";;
+	armv5tel) _trp="arm-linux-gnueabi";;
+	armv5tel-musl) _trp="arm-linux-musleabi";;
+	armv6l) _trp="arm-linux-gnueabihf";;
+	armv7l) _trp="armv7l-linux-gnueabihf";;
+	armv6l-musl) _trp="arm-linux-musleabihf";;
+	armv7l-musl) _trp="armv7l-linux-musleabihf";;
+	aarch64) _trp="aarch64-linux-gnu";;
+	aarch64-musl) _trp="aarch64-linux-musl";;
+	ppc) _trp="powerpc-linux-gnu";;
+	ppc-musl) _trp="powerpc-linux-musl";;
+	ppcle) _trp="powerpcle-linux-gnu";;
+	ppcle-musl) _trp="powerpcle-linux-musl";;
+	ppc64le) _trp="powerpc64le-linux-gnu";;
+	ppc64le-musl) _trp="powerpc64le-linux-musl";;
+	ppc64) _trp="powerpc64-linux-gnu";;
+	ppc64-musl) _trp="powerpc64-linux-musl";;
+	mips-musl) _trp="mips-linux-musl";;
+	mipshf-musl) _trp="mips-linux-muslhf";;
+	mipsel-musl) _trp="mipsel-linux-musl";;
+	mipselhf-musl) _trp="mipsel-linux-muslhf";;
+esac
+
 post_patch() {
 	if [ "$_lldb_enable" = "yes" ]; then
 		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
@@ -136,8 +165,7 @@ post_patch() {
 }
 
 pre_configure() {
-	local triplet
-
+	local triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
 	# Vastly reduce size of debugging symbols:
 	CFLAGS=${CFLAGS/ -g/ -g1}
 	CXXFLAGS=${CXXFLAGS/ -g/ -g1}
@@ -180,8 +208,6 @@ pre_configure() {
 		riscv64*) _arch="RISCV64";;
 	esac
 
-	triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
-
 	configure_args+=" -DLLVM_TARGET_ARCH=${_arch}"
 	configure_args+=" -DLLVM_HOST_TRIPLE=${triplet}"
 	configure_args+=" -DLLVM_DEFAULT_TARGET_TRIPLE=${triplet}"
@@ -251,7 +277,7 @@ clang-tools-extra_package() {
 		vmove "usr/lib/libclangQuery*"
 		vmove "usr/lib/libclangTidy*"
 		vmove "usr/share/clang/*tidy*"
-		vmove usr/share/doc/clang-tools
+		vmove usr/share/doc/LLVM/clang-tools
 		vmove usr/share/man/man1/extraclangtools.1
 		vmove usr/share/man/man1/diagtool.1
 	}
@@ -273,7 +299,7 @@ clang_package() {
 		vmove "usr/lib/libclang*.a"
 		vmove "usr/lib/libclang*.so"
 		vmove usr/share/clang
-		vmove usr/share/doc/clang
+		vmove usr/share/doc/LLVM/clang
 		vmove usr/share/man/man1/clang.1
 	}
 }
@@ -301,7 +327,7 @@ lld_package() {
 		vmove usr/bin/wasm-ld
 		vmove usr/bin/ld.lld*
 		vmove usr/bin/ld64.lld*
-		vmove usr/share/doc/lld
+		vmove usr/share/doc/LLVM/lld
 	}
 }
 
@@ -342,7 +368,7 @@ lldb-devel_package() {
 llvm-libunwind_package() {
 	short_desc+=" - libunwind"
 	pkg_install() {
-		vmove "usr/lib/libunwind.so.*"
+		vmove "usr/lib/${_trp}/libunwind.so.*"
 	}
 }
 
@@ -351,18 +377,17 @@ llvm-libunwind-devel_package() {
 	depends="llvm-libunwind>=${version}_${revision}"
 	conflicts="libunwind-devel>=0"
 	pkg_install() {
-		vmove usr/lib/libunwind.so
-		vmove usr/lib/libunwind.a
+		vmove usr/lib/${_trp}/libunwind.so
+		vmove usr/lib/${_trp}/libunwind.a
 		vmove "usr/include/*unwind*"
 		vmove usr/include/mach-o
-		vmove usr/share/doc/libunwind
 	}
 }
 
 libcxxabi_package() {
 	short_desc+=" - low level support for libc++"
 	pkg_install() {
-		vmove "usr/lib/libc++abi.so.*"
+		vmove "usr/lib/${_trp}/libc++abi.so.*"
 	}
 }
 
@@ -370,8 +395,8 @@ libcxxabi-devel_package() {
 	short_desc+=" - low level support for libc++ - development files"
 	depends="libcxxabi>=${version}_${revision}"
 	pkg_install() {
-		vmove usr/lib/libc++abi.so
-		vmove usr/lib/libc++abi.a
+		vmove usr/lib/${_trp}/libc++abi.so
+		vmove usr/lib/${_trp}/libc++abi.a
 		vmove "usr/include/*cxxabi*"
 	}
 }
@@ -379,7 +404,7 @@ libcxxabi-devel_package() {
 libcxx_package() {
 	short_desc+=" - C++ standard library"
 	pkg_install() {
-		vmove "usr/lib/libc++.so.*"
+		vmove "usr/lib/${_trp}/libc++.so.*"
 	}
 }
 
@@ -387,11 +412,10 @@ libcxx-devel_package() {
 	short_desc+=" - C++ standard library - development files"
 	depends="libcxx>=${version}_${revision}"
 	pkg_install() {
-		vmove usr/lib/libc++.so
-		vmove usr/lib/libc++.a
-		vmove usr/lib/libc++experimental.a
+		vmove usr/lib/${_trp}/libc++.so
+		vmove usr/lib/${_trp}/libc++.a
+		vmove usr/lib/${_trp}/libc++experimental.a
 		vmove usr/include/c++
-		vmove usr/share/doc/libcxx
 	}
 }
 
@@ -401,7 +425,6 @@ libomp_package() {
 		vmove usr/lib/libomp.so
 		vmove "usr/lib/libomptarget.rtl.*.so"
 		vmove usr/lib/libarcher.so
-		vmove "usr/lib/libomp*.so.*"
 	}
 }
 
@@ -413,8 +436,6 @@ libomp-devel_package() {
 		vmove "usr/lib/libarcher*"
 		vmove "usr/include/omp*.h"
 		vmove "usr/lib/clang/${version}/include/omp*.h"
-		vmove usr/share/man/man1/llvmopenmp.1
-		vmove usr/share/doc/openmp
 	}
 }
 

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (9 preceding siblings ...)
  2022-05-05 13:18 ` [PR PATCH] [Updated] Llvm14 prez
@ 2022-05-05 13:23 ` prez
  2022-05-05 16:19 ` Llvm14 q66
                   ` (58 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-05-05 13:23 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 877 bytes --]

New comment by prez on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1118545419

Comment:
Stuck on:
```
=> clang-14.0.3_1: running pre-pkg hook: 04-generate-runtime-deps ...
   SONAME: libstdc++.so.6 <-> libstdc++>=4.4.0_1
   SONAME: libgcc_s.so.1 <-> libgcc>=4.4.0_1
   SONAME: libc.so.6 <-> glibc>=2.32_1
   SONAME: libdl.so.2 <-> glibc>=2.32_1
   SONAME: libpthread.so.0 <-> glibc>=2.32_1
   SONAME: libm.so.6 <-> glibc>=2.32_1
   SONAME: ld-linux-x86-64.so.2 <-> glibc>=2.32_1
   SONAME: libclang-cpp.so.14 <-> libclang-cpp-14.0.3_1
   SONAME: libLLVM-14.so <-> libllvm14-14.0.3_1
   **SONAME: libclang.so.13 <-> UNKNOWN PKG PLEASE FIX!**
   SONAME: libxml2.so.2 <-> libxml2>=2.7.0_1
=> ERROR: clang-14.0.3_1: cannot guess required shlibs, aborting!
```
I have no idea why it's pulling in libclang.so.13 atm.

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (10 preceding siblings ...)
  2022-05-05 13:23 ` Llvm14 prez
@ 2022-05-05 16:19 ` q66
  2022-05-05 22:45 ` [PR PATCH] [Updated] Llvm14 prez
                   ` (57 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: q66 @ 2022-05-05 16:19 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 202 bytes --]

New comment by q66 on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1118763243

Comment:
the soname for libclang 14 is libclang.so.13, not libclang.so.14

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: [PR PATCH] [Updated] Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (11 preceding siblings ...)
  2022-05-05 16:19 ` Llvm14 q66
@ 2022-05-05 22:45 ` prez
  2022-05-05 22:55 ` Llvm14 q66
                   ` (56 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-05-05 22:45 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 667 bytes --]

There is an updated pull request by prez against master on the void-packages repository

https://github.com/prez/void-packages llvm
https://github.com/void-linux/void-packages/pull/36962

Llvm14
Supersedes https://github.com/void-linux/void-packages/pull/36229, https://github.com/void-linux/void-packages/pull/34800 - thank you @motorto and @DBLouis.

Updated patches, ping @q66 .

@ifreund todo: zig. Since it depends on `lld-devel`, I guess we need to split out `lld12`? Would appreciate your help with this, I don't want to wait for the next zig version.

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/36962.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-llvm-36962.patch --]
[-- Type: text/x-diff, Size: 542625 bytes --]

From af3214d006e7bc77ca1201c220be4ce4b8bebd34 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:15:06 +0200
Subject: [PATCH 01/29] New package: llvm14-14.0.3

---
 common/shlibs                                 |  16 +-
 srcpkgs/clang                                 |   2 +-
 srcpkgs/clang-analyzer                        |   2 +-
 srcpkgs/clang-tools-extra                     |   2 +-
 srcpkgs/libclang                              |   2 +-
 srcpkgs/libclang-cpp                          |   2 +-
 srcpkgs/libcxx                                |   2 +-
 srcpkgs/libcxx-devel                          |   2 +-
 srcpkgs/libcxxabi                             |   2 +-
 srcpkgs/libcxxabi-devel                       |   2 +-
 srcpkgs/libllvm14                             |   1 +
 srcpkgs/libomp                                |   2 +-
 srcpkgs/libomp-devel                          |   2 +-
 srcpkgs/lld                                   |   2 +-
 srcpkgs/lld-devel                             |   2 +-
 srcpkgs/lldb                                  |   2 +-
 srcpkgs/lldb-devel                            |   2 +-
 srcpkgs/llvm-libunwind                        |   2 +-
 srcpkgs/llvm-libunwind-devel                  |   2 +-
 .../patches/clang-002-add-musl-triples.patch  | 110 +++++
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 +
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ++
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 ++
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 +++
 srcpkgs/llvm14/patches/libcxx-musl.patch      |  26 ++
 srcpkgs/llvm14/patches/libcxx-ppc.patch       |  22 +
 .../llvm14/patches/libcxx-ssp-nonshared.patch |  11 +
 srcpkgs/llvm14/patches/libcxxabi-dl.patch     |  25 ++
 srcpkgs/llvm14/patches/lldb-musl.patch        |  31 ++
 srcpkgs/llvm14/patches/llvm-001-musl.patch    |  57 +++
 .../patches/llvm-002-musl-ppc64-elfv2.patch   |  30 ++
 .../patches/llvm-003-ppc-secureplt.patch      |  11 +
 .../patches/llvm-004-override-opt.patch       |  18 +
 .../llvm14/patches/llvm-005-ppc-bigpic.patch  |  36 ++
 .../patches/llvm-006-aarch64-mf_exec.patch    |  25 ++
 srcpkgs/llvm14/template                       | 424 ++++++++++++++++++
 srcpkgs/llvm14/update                         |   3 +
 37 files changed, 1018 insertions(+), 20 deletions(-)
 create mode 120000 srcpkgs/libllvm14
 create mode 100644 srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
 create mode 100644 srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
 create mode 100644 srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
 create mode 100644 srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-ppc.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxxabi-dl.patch
 create mode 100644 srcpkgs/llvm14/patches/lldb-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-001-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-004-override-opt.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
 create mode 100644 srcpkgs/llvm14/template
 create mode 100644 srcpkgs/llvm14/update

diff --git a/common/shlibs b/common/shlibs
index 4114151662fb..81acc39defb4 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -975,11 +975,12 @@ libuchardet.so.0 uchardet-0.0.6_1
 libgtksourceviewmm-3.0.so.0 gtksourceviewmm-3.2.0_1
 libyajl.so.2 yajl-2.0.1_1
 libconfuse.so.2 confuse-3.2.1_1
-liblldb.so.12 lldb-12.0.0_1
-libclang.so.12 libclang-12.0.0_1
-libclang-cpp.so.12 libclang-cpp-12.0.0_1
+liblldb.so.14 lldb-14.0.3_1
+libclang.so.14 libclang-14.0.3_1
+libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
+libLLVM-14.so libllvm14-14.0.3_1
 libisofs.so.6 libisofs-0.6.24_1
 libmpack.so.0 libmpack-1.0.5_1
 libGeoIP.so.1 libgeoip-1.4.8_1
@@ -4152,3 +4153,12 @@ librz_bin.so.0.3.4 rizin-0.3.4_1
 libaravis-0.8.so.0 libaravis-0.8.21_1
 libLimeSuite.so.20.10-1 LimeSuite-20.10.0_1
 libnvme.so.1 libnvme-1.0_1
+libomp.so libomp-14.0.3_1
+libomptarget.rtl.amdgpu.so libomp-14.0.3_1
+libomptarget.rtl.cuda.so libomp-14.0.3_1
+libomptarget.rtl.x86_64.so libomp-14.0.3_1
+libarcher.so libomp-14.0.3_1
+libomptarget.so libomp-14.0.3_1
+liblldbIntelFeatures.so.14 lldb-14.0.3_1
+libLTO.so.14 llvm14-14.0.3_1
+libRemarks.so.14 llvm14-14.0.3_1
diff --git a/srcpkgs/clang b/srcpkgs/clang
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang
+++ b/srcpkgs/clang
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/clang-analyzer b/srcpkgs/clang-analyzer
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang-analyzer
+++ b/srcpkgs/clang-analyzer
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/clang-tools-extra b/srcpkgs/clang-tools-extra
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang-tools-extra
+++ b/srcpkgs/clang-tools-extra
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libclang b/srcpkgs/libclang
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libclang
+++ b/srcpkgs/libclang
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libclang-cpp b/srcpkgs/libclang-cpp
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libclang-cpp
+++ b/srcpkgs/libclang-cpp
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxx b/srcpkgs/libcxx
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxx
+++ b/srcpkgs/libcxx
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxx-devel b/srcpkgs/libcxx-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxx-devel
+++ b/srcpkgs/libcxx-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxxabi b/srcpkgs/libcxxabi
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxxabi
+++ b/srcpkgs/libcxxabi
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxxabi-devel b/srcpkgs/libcxxabi-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxxabi-devel
+++ b/srcpkgs/libcxxabi-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libllvm14 b/srcpkgs/libllvm14
new file mode 120000
index 000000000000..1d42ed7632a6
--- /dev/null
+++ b/srcpkgs/libllvm14
@@ -0,0 +1 @@
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libomp b/srcpkgs/libomp
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libomp
+++ b/srcpkgs/libomp
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libomp-devel b/srcpkgs/libomp-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libomp-devel
+++ b/srcpkgs/libomp-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lld b/srcpkgs/lld
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lld
+++ b/srcpkgs/lld
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lld-devel b/srcpkgs/lld-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lld-devel
+++ b/srcpkgs/lld-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lldb b/srcpkgs/lldb
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lldb
+++ b/srcpkgs/lldb
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lldb-devel b/srcpkgs/lldb-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lldb-devel
+++ b/srcpkgs/lldb-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm-libunwind b/srcpkgs/llvm-libunwind
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/llvm-libunwind
+++ b/srcpkgs/llvm-libunwind
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm-libunwind-devel b/srcpkgs/llvm-libunwind-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/llvm-libunwind-devel
+++ b/srcpkgs/llvm-libunwind-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
new file mode 100644
index 000000000000..7b640e102bed
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
@@ -0,0 +1,110 @@
+--- a/clang/lib/Driver/ToolChains/Gnu.cpp
++++ b/clang/lib/Driver/ToolChains/Gnu.cpp
+@@ -2083,7 +2083,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
+                                              "armv7hl-redhat-linux-gnueabi",
+                                              "armv6hl-suse-linux-gnueabi",
+-                                             "armv7hl-suse-linux-gnueabi"};
++                                             "armv7hl-suse-linux-gnueabi",
++                                             "armv7l-linux-gnueabihf"};
+   static const char *const ARMebLibDirs[] = {"/lib"};
+   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi"};
+   static const char *const ARMebHFTriples[] = {
+@@ -2151,8 +2152,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
+   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
+   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
+-                                             "powerpcle-unknown-linux-gnu",
+-                                             "powerpcle-linux-musl"};
++                                             "powerpcle-unknown-linux-gnu"};
+
+   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
+   static const char *const PPC64Triples[] = {
+@@ -2231,6 +2231,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+     return;
+   }
+
++  if (TargetTriple.isMusl()) {
++    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
++    static const char *const ARMHFMuslTriples[] = {
++        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
++    };
++    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
++    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
++    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
++    static const char *const MIPSMuslTriples[] = {
++        "mips-linux-musl", "mipsel-linux-musl",
++        "mipsel-linux-muslhf", "mips-linux-muslhf"
++    };
++    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
++    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
++    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
++    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
++
++    switch (TargetTriple.getArch()) {
++    case llvm::Triple::aarch64:
++      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      break;
++    case llvm::Triple::arm:
++      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
++      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
++        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
++      } else {
++        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
++      }
++      break;
++    case llvm::Triple::x86_64:
++      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      break;
++    case llvm::Triple::x86:
++      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      break;
++    case llvm::Triple::mips:
++      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
++      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
++      break;
++    case llvm::Triple::ppc:
++      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      break;
++    case llvm::Triple::ppcle:
++      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      break;
++    case llvm::Triple::ppc64:
++      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      break;
++    case llvm::Triple::ppc64le:
++      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      break;
++    default:
++      break;
++    }
++    TripleAliases.push_back(TargetTriple.str());
++    if (TargetTriple.str() != BiarchTriple.str())
++      BiarchTripleAliases.push_back(BiarchTriple.str());
++    return;
++  }
++
+   // Android targets should not use GNU/Linux tools or libraries.
+   if (TargetTriple.isAndroid()) {
+     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
new file mode 100644
index 000000000000..47128af79b7f
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
@@ -0,0 +1,13 @@
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -490,10 +490,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+     Loader = "ld.so.1";
+     break;
+   case llvm::Triple::ppc64:
+-    LibDir = "lib64";
+-    Loader =
+-        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
+-    break;
+   case llvm::Triple::ppc64le:
+     LibDir = "lib64";
+     Loader =
diff --git a/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
new file mode 100644
index 000000000000..21fc8003c5f1
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
@@ -0,0 +1,48 @@
+--- a/clang/lib/Basic/Targets/PPC.h
++++ b/clang/lib/Basic/Targets/PPC.h
+@@ -415,11 +415,10 @@ public:
+       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
+     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
+       DataLayout = "e-m:e-i64:64-n32:64";
+-      ABI = "elfv2";
+     } else {
+       DataLayout = "E-m:e-i64:64-n32:64";
+-      ABI = "elfv1";
+     }
++    ABI = "elfv2";
+ 
+     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
+       LongDoubleWidth = LongDoubleAlign = 64;
+--- a/clang/lib/CodeGen/TargetInfo.cpp
++++ b/clang/lib/CodeGen/TargetInfo.cpp
+@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
+       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
+ 
+     if (Triple.isOSBinFormatELF()) {
+-      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
+-      if (getTarget().getABI() == "elfv2")
+-        Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      if (getTarget().getABI() == "elfv1")
++        Kind = PPC64_SVR4_ABIInfo::ELFv1;
+       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
+ 
+       return SetCGInfo(
+--- a/clang/lib/Driver/ToolChains/Clang.cpp
++++ b/clang/lib/Driver/ToolChains/Clang.cpp
+@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
+   const llvm::Triple &T = getToolChain().getTriple();
+   if (T.isOSBinFormatELF()) {
+     switch (getToolChain().getArch()) {
+-    case llvm::Triple::ppc64: {
+-      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
+-          T.isOSOpenBSD() || T.isMusl())
+-        ABIName = "elfv2";
+-      else
+-        ABIName = "elfv1";
+-      break;
+-    }
++    case llvm::Triple::ppc64:
+     case llvm::Triple::ppc64le:
+       ABIName = "elfv2";
+       break;
diff --git a/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch b/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
new file mode 100644
index 000000000000..4135bfd4486a
--- /dev/null
+++ b/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
@@ -0,0 +1,35 @@
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
+@@ -74,6 +74,10 @@
+ #include <sys/utsname.h>
+ #endif
+
++#if SANITIZER_LINUX && defined(__powerpc__)
++#include <asm/ptrace.h>
++#endif
++
+ #if SANITIZER_LINUX && !SANITIZER_ANDROID
+ #include <sys/personality.h>
+ #endif
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
+@@ -92,7 +92,7 @@
+ # include <utime.h>
+ # include <sys/ptrace.h>
+ #    if defined(__mips64) || defined(__aarch64__) || defined(__arm__) || \
+-        defined(__hexagon__) || SANITIZER_RISCV64
++        defined(__hexagon__) || defined(__powerpc__) || SANITIZER_RISCV64
+ #      include <asm/ptrace.h>
+ #      ifdef __arm__
+ typedef struct user_fpregs elf_fpregset_t;
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
+@@ -31,7 +31,7 @@
+ #include <sys/types.h> // for pid_t
+ #include <sys/uio.h> // for iovec
+ #include <elf.h> // for NT_PRSTATUS
+-#if (defined(__aarch64__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
++#if (defined(__aarch64__) || defined(__powerpc__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
+ // GLIBC 2.20+ sys/user does not include asm/ptrace.h
+ # include <asm/ptrace.h>
+ #endif
diff --git a/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch b/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
new file mode 100644
index 000000000000..d0b61c80c897
--- /dev/null
+++ b/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
@@ -0,0 +1,62 @@
+--- a/compiler-rt/lib/xray/xray_powerpc64.inc
++++ b/compiler-rt/lib/xray/xray_powerpc64.inc
+@@ -12,7 +12,13 @@
+ 
+ #include <cstdint>
+ #include <mutex>
++#ifdef __GLIBC__
+ #include <sys/platform/ppc.h>
++#else
++#include <cctype>
++#include <cstring>
++#include <cstdlib>
++#endif
+ 
+ #include "xray_defs.h"
+ 
+@@ -20,13 +26,45 @@ namespace __xray {
+ 
+ ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
+   CPU = 0;
++#ifdef __GLIBC__
+   return __ppc_get_timebase();
++#else
++  return __builtin_ppc_get_timebase();
++#endif
+ }
+ 
+ inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
+   static std::mutex M;
+   std::lock_guard<std::mutex> Guard(M);
++#ifdef __GLIBC__
+   return __ppc_get_timebase_freq();
++#else
++  /* FIXME: a less dirty implementation? */
++  static uint64_t base;
++  if (!base) {
++    FILE *f = fopen("/proc/cpuinfo", "rb");
++    if (f) {
++      ssize_t nr;
++      /* virtually always big enough to hold the line */
++      char buf[512];
++      while (fgets(buf, sizeof(buf), f)) {
++        char *ret = strstr(buf, "timebase");
++        if (!ret) {
++          continue;
++        }
++        ret += sizeof("timebase") - 1;
++        ret = strchr(ret, ':');
++        if (!ret) {
++          continue;
++        }
++        base = strtoul(ret + 1, nullptr, 10);
++        break;
++      }
++      fclose(f);
++    }
++  }
++  return base;
++#endif
+ }
+ 
+ inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
diff --git a/srcpkgs/llvm14/patches/libcxx-musl.patch b/srcpkgs/llvm14/patches/libcxx-musl.patch
new file mode 100644
index 000000000000..bbd31ffc2cb1
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-musl.patch
@@ -0,0 +1,26 @@
+--- a/libcxx/include/locale
++++ b/libcxx/include/locale
+@@ -742,7 +742,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
+         typename remove_reference<decltype(errno)>::type __save_errno = errno;
+         errno = 0;
+         char *__p2;
++#if defined(__linux__) && !defined(__GLIBC__)
++        long long __ll = strtoll(__a, &__p2, __base);
++#else
+         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
++#endif
+         typename remove_reference<decltype(errno)>::type __current_errno = errno;
+         if (__current_errno == 0)
+             errno = __save_errno;
+@@ -782,7 +786,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
+         typename remove_reference<decltype(errno)>::type __save_errno = errno;
+         errno = 0;
+         char *__p2;
++#if defined(__linux__) && !defined(__GLIBC__)
++        unsigned long long __ll = strtoull(__a, &__p2, __base);
++#else
+         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
++#endif
+         typename remove_reference<decltype(errno)>::type __current_errno = errno;
+         if (__current_errno == 0)
+             errno = __save_errno;
diff --git a/srcpkgs/llvm14/patches/libcxx-ppc.patch b/srcpkgs/llvm14/patches/libcxx-ppc.patch
new file mode 100644
index 000000000000..7a92f8004e1c
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-ppc.patch
@@ -0,0 +1,22 @@
+This ensures `is_iec559` is defined correctly under all long double ABIs,
+including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__`
+is not defined on gcc.
+
+--- a/libcxx/include/limits
++++ b/libcxx/include/limits
+@@ -426,8 +426,14 @@ protected:
+     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
+     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
+ 
+-#if (defined(__ppc__) || defined(__ppc64__))
++#if defined(__powerpc__) || defined(__powerpc64__)
++#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__)
++    /* IEEE 754 quadruple or double precision */
++    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
++#else
++    /* 128-bit IBM double-double */
+     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
++#endif
+ #else
+     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
+ #endif
diff --git a/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch b/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
new file mode 100644
index 000000000000..70292beb2fcd
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
@@ -0,0 +1,11 @@
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -769,6 +769,8 @@ function(cxx_link_system_libraries target)
+     target_link_libraries(${target} PRIVATE atomic)
+   endif()
+ 
++#ssp  target_link_libraries(${target} PRIVATE ssp_nonshared)
++
+   if (MINGW)
+     target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
+   endif()
diff --git a/srcpkgs/llvm14/patches/libcxxabi-dl.patch b/srcpkgs/llvm14/patches/libcxxabi-dl.patch
new file mode 100644
index 000000000000..3a15f9db8c98
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxxabi-dl.patch
@@ -0,0 +1,25 @@
+Also link to -ldl to prevent undefined references.
+
+--- a/libcxxabi/src/CMakeLists.txt
++++ b/libcxxabi/src/CMakeLists.txt
+@@ -73,6 +73,7 @@
+   endif()
+ 
+   add_library_flags_if(LIBCXXABI_HAS_C_LIB c)
++  add_library_flags_if(LIBCXXABI_HAS_C_LIB dl)
+ endif()
+ 
+ if (LIBCXXABI_USE_LLVM_UNWINDER)
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -745,6 +745,10 @@
+     target_link_libraries(${target} PRIVATE m)
+   endif()
+ 
++  if (LIBCXX_HAS_C_LIB)
++    target_link_libraries(${target} PRIVATE dl)
++  endif()
++
+   if (LIBCXX_HAS_RT_LIB)
+     target_link_libraries(${target} PRIVATE rt)
+   endif()
diff --git a/srcpkgs/llvm14/patches/lldb-musl.patch b/srcpkgs/llvm14/patches/lldb-musl.patch
new file mode 100644
index 000000000000..601c0d138523
--- /dev/null
+++ b/srcpkgs/llvm14/patches/lldb-musl.patch
@@ -0,0 +1,31 @@
+--- a/lldb/source/Plugins/Process/Linux/Procfs.h
++++ b/lldb/source/Plugins/Process/Linux/Procfs.h
+@@ -10,21 +10,12 @@
+ // sys/procfs.h on Android/Linux for all supported architectures.
+ 
+ #include <sys/ptrace.h>
++#include <asm/ptrace.h>
+ 
+-#ifdef __ANDROID__
+-#if defined(__arm64__) || defined(__aarch64__)
+-typedef unsigned long elf_greg_t;
+-typedef elf_greg_t
+-    elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
+-typedef struct user_fpsimd_state elf_fpregset_t;
+-#ifndef NT_FPREGSET
+-#define NT_FPREGSET NT_PRFPREG
+-#endif // NT_FPREGSET
+-#elif defined(__mips__)
+-#ifndef NT_FPREGSET
+-#define NT_FPREGSET NT_PRFPREG
+-#endif // NT_FPREGSET
+-#endif
+-#else // __ANDROID__
++#if !defined(__GLIBC__) && defined(__powerpc__)
++#define pt_regs musl_pt_regs
++#include <sys/procfs.h>
++#undef pt_regs
++#else
+ #include <sys/procfs.h>
+-#endif // __ANDROID__
++#endif
diff --git a/srcpkgs/llvm14/patches/llvm-001-musl.patch b/srcpkgs/llvm14/patches/llvm-001-musl.patch
new file mode 100644
index 000000000000..f2a3f8d62813
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-001-musl.patch
@@ -0,0 +1,57 @@
+From faca3fbd15d0c3108493c3c54cd93138e049ac43 Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe@gmail.com>
+Date: Tue, 8 Sep 2015 22:03:02 +0200
+Subject: [PATCH 3/3] musl
+
+---
+ include/llvm/Analysis/TargetLibraryInfo.h | 9 +++++++++
+ lib/Support/DynamicLibrary.cpp            | 2 +-
+ lib/Support/Unix/Signals.inc              | 6 +++---
+ utils/unittest/googletest/src/gtest.cc    | 1 +
+ 5 files changed, 17 insertions(+), 6 deletions(-)
+
+diff --git a/include/llvm/Analysis/TargetLibraryInfo.h b/include/llvm/Analysis/TargetLibraryInfo.h
+index 34a8a1e3..1214ece5 100644
+--- a/llvm/include/llvm/Analysis/TargetLibraryInfo.h
++++ b/llvm/include/llvm/Analysis/TargetLibraryInfo.h
+@@ -18,6 +18,15 @@
+ #include "llvm/IR/PassManager.h"
+ #include "llvm/Pass.h"
+ 
++#undef fopen64
++#undef fseeko64
++#undef fstat64
++#undef fstatvfs64
++#undef ftello64
++#undef lstat64
++#undef stat64
++#undef tmpfile64
++
+ namespace llvm {
+ template <typename T> class ArrayRef;
+ class Triple;
+diff --git a/lib/Support/Unix/DynamicLibrary.inc b/lib/Support/Unix/DynamicLibrary.inc
+index a2a37996..2f86c470 100644
+--- a/llvm/lib/Support/Unix/DynamicLibrary.inc
++++ b/llvm/lib/Support/Unix/DynamicLibrary.inc
+@@ -102,7 +102,7 @@ static void *DoSearch(const char* SymbolName) {
+ 
+ // This macro returns the address of a well-known, explicit symbol
+ #define EXPLICIT_SYMBOL(SYM) \
+-   if (!strcmp(SymbolName, #SYM)) return &SYM
++   if (!strcmp(SymbolName, #SYM)) return (void *)&SYM
+ 
+ // Under glibc we have a weird situation. The stderr/out/in symbols are both
+ // macros and global variables because of standards requirements. So, we
+diff --git a/utils/unittest/googletest/src/gtest.cc b/utils/unittest/googletest/src/gtest.cc
+index d882ab2e..f1fb12d0 100644
+--- a/llvm/utils/unittest/googletest/src/gtest.cc
++++ b/llvm/utils/unittest/googletest/src/gtest.cc
+@@ -128,6 +128,7 @@
+ 
+ #if GTEST_CAN_STREAM_RESULTS_
+ # include <arpa/inet.h>  // NOLINT
++# include <sys/socket.h>  // NOLINT
+ # include <netdb.h>  // NOLINT
+ # include <sys/socket.h>  // NOLINT
+ # include <sys/types.h>  // NOLINT
diff --git a/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch b/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
new file mode 100644
index 000000000000..0071d964bd37
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
@@ -0,0 +1,30 @@
+This patches LLVM to use ELFv2 on ppc64 unconditionally unless overridden. We
+need this because unlike most distros we use ELFv2 for both glibc and musl
+on big endian ppc64.
+
+diff --git a/lib/Target/PowerPC/PPCTargetMachine.cpp b/lib/Target/PowerPC/PPCTargetMachine.cpp
+index 0634833e..b7cbc2e7 100644
+--- a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
++++ b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
+@@ -222,9 +222,8 @@ static PPCTargetMachine::PPCABI computeTargetABI(const Triple &TT,
+ 
+   switch (TT.getArch()) {
+   case Triple::ppc64le:
+-    return PPCTargetMachine::PPC_ABI_ELFv2;
+   case Triple::ppc64:
+-    return PPCTargetMachine::PPC_ABI_ELFv1;
++    return PPCTargetMachine::PPC_ABI_ELFv2;
+   default:
+     return PPCTargetMachine::PPC_ABI_UNKNOWN;
+   }
+diff --git a/test/CodeGen/PowerPC/ppc64-elf-abi.ll b/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+index 8b1cf6b5..296a2afa 100644
+--- a/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
++++ b/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+@@ -1,4 +1,5 @@
+-; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv1
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-musl < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv1 < %s | FileCheck %s -check-prefix=CHECK-ELFv1
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv2 < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
diff --git a/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch b/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
new file mode 100644
index 000000000000..b5d15974375d
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
@@ -0,0 +1,11 @@
+--- a/llvm/lib/Target/PowerPC/PPCSubtarget.cpp
++++ b/llvm/lib/Target/PowerPC/PPCSubtarget.cpp
+@@ -165,7 +165,7 @@ void PPCSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) {
+ 
+   if ((TargetTriple.isOSFreeBSD() && TargetTriple.getOSMajorVersion() >= 13) ||
+       TargetTriple.isOSNetBSD() || TargetTriple.isOSOpenBSD() ||
+-      TargetTriple.isMusl())
++      isTargetLinux())
+     SecurePlt = true;
+ 
+   if (HasSPE && IsPPC64)
diff --git a/srcpkgs/llvm14/patches/llvm-004-override-opt.patch b/srcpkgs/llvm14/patches/llvm-004-override-opt.patch
new file mode 100644
index 000000000000..51d0e4b31b32
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-004-override-opt.patch
@@ -0,0 +1,18 @@
+This allows us to override the optimization level as not all platforms can
+deal with -O3.
+
+--- a/llvm/CMakeLists.txt
++++ b/llvm/CMakeLists.txt
+@@ -918,6 +918,12 @@ if( MINGW AND NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" )
+   llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "-O2")
+ endif()
+ 
++set(VOID_CXX_OPT_FLAGS "" CACHE STRING "Optimization level to use")
++
++if (NOT VOID_CXX_OPT_FLAGS STREQUAL "")
++    llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "${VOID_CXX_OPT_FLAGS}")
++endif()
++
+ # Put this before tblgen. Else we have a circular dependence.
+ add_subdirectory(lib/Demangle)
+ add_subdirectory(lib/Support)
diff --git a/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch b/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
new file mode 100644
index 000000000000..d332687b9d92
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
@@ -0,0 +1,36 @@
+From f3dbdd49c06bfafc1d6138094cf42889c14d38b6 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Sun, 3 Nov 2019 10:57:27 -0600
+Subject: [PATCH] [LLVM][PowerPC] Assume BigPIC if no PIC level is specified
+
+---
+ llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp  | 2 +-
+ llvm/lib/Target/PowerPC/PPCMCInstLower.cpp | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/Target/PowerPC/PPCAsmPrinter.cpp b/lib/Target/PowerPC/PPCAsmPrinter.cpp
+index cce21f32..87ca5f9b 100644
+--- a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
++++ b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
+@@ -520,7 +520,7 @@ void PPCAsmPrinter::EmitTlsCall(const MachineInstr *MI,
+ 
+   // Add 32768 offset to the symbol so we follow up the latest GOT/PLT ABI.
+   if (Kind == MCSymbolRefExpr::VK_PLT && Subtarget->isSecurePlt() &&
+-      M->getPICLevel() == PICLevel::BigPIC)
++      M->getPICLevel() != PICLevel::SmallPIC)
+     TlsRef = MCBinaryExpr::createAdd(
+         TlsRef, MCConstantExpr::create(32768, OutContext), OutContext);
+   const MachineOperand &MO = MI->getOperand(2);
+diff --git a/lib/Target/PowerPC/PPCMCInstLower.cpp b/lib/Target/PowerPC/PPCMCInstLower.cpp
+index 5cc180d7..a5b02565 100644
+--- a/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
++++ b/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
+@@ -117,7 +117,7 @@ static MCOperand GetSymbolRef(const MachineOperand &MO, const MCSymbol *Symbol,
+   const MCExpr *Expr = MCSymbolRefExpr::create(Symbol, RefKind, Ctx);
+   // If -msecure-plt -fPIC, add 32768 to symbol.
+   if (Subtarget->isSecurePlt() && TM.isPositionIndependent() &&
+-      M->getPICLevel() == PICLevel::BigPIC &&
++      M->getPICLevel() != PICLevel::SmallPIC &&
+       MO.getTargetFlags() == PPCII::MO_PLT)
+     Expr =
+         MCBinaryExpr::createAdd(Expr, MCConstantExpr::create(32768, Ctx), Ctx);
diff --git a/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch b/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
new file mode 100644
index 000000000000..a00abd216665
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
@@ -0,0 +1,25 @@
+Fix failures in AllocationTests/MappedMemoryTest.* on aarch64:
+
+    Failing Tests (8):
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.AllocAndRelease/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.DuplicateNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.EnabledWrite/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.MultipleAllocAndRelease/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.SuccessiveNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.UnalignedNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.ZeroNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.ZeroSizeNear/3
+
+Upstream-Issue: https://bugs.llvm.org/show_bug.cgi?id=14278#c10
+
+--- a/llvm/lib/Support/Unix/Memory.inc
++++ b/llvm/lib/Support/Unix/Memory.inc
+@@ -58,7 +58,7 @@ static int getPosixProtectionFlags(unsigned Flags) {
+     return PROT_READ | PROT_WRITE | PROT_EXEC;
+   case llvm::sys::Memory::MF_EXEC:
+ #if (defined(__FreeBSD__) || defined(__POWERPC__) || defined (__ppc__) || \
+-     defined(_POWER) || defined(_ARCH_PPC))
++     defined(_POWER) || defined(_ARCH_PPC) || (defined(__linux__) && defined(__aarch64__)))
+     // On PowerPC, having an executable page that has no read permission
+     // can have unintended consequences.  The function InvalidateInstruction-
+     // Cache uses instructions dcbf and icbi, both of which are treated by
diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
new file mode 100644
index 000000000000..3e7e6ab2c00b
--- /dev/null
+++ b/srcpkgs/llvm14/template
@@ -0,0 +1,424 @@
+# Template file for 'llvm14'
+pkgname=llvm14
+version=14.0.3
+revision=1
+wrksrc="llvm-project-${version}.src"
+build_wrksrc=llvm
+build_style=cmake
+configure_args="
+ -DCMAKE_BUILD_TYPE=Release -Wno-dev
+ -DENABLE_LINKER_BUILD_ID=YES
+ -DLLDB_USE_SYSTEM_SIX=YES
+ -DLIBCXX_CXX_ABI=libcxxabi
+ -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
+ -DLIBCXXABI_USE_LLVM_UNWINDER=YES
+ -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
+ -DLIBOMP_ENABLE_SHARED=YES
+ -DLIBOMP_INSTALL_ALIASES=NO
+ -DLLVM_INCLUDE_DOCS=YES
+ -DLLVM_BUILD_DOCS=YES
+ -DLLVM_ENABLE_SPHINX=YES
+ -DSPHINX_WARNINGS_AS_ERRORS=NO
+ -DLLVM_INSTALL_UTILS=YES
+ -DLLVM_BUILD_LLVM_DYLIB=YES
+ -DLLVM_LINK_LLVM_DYLIB=YES
+ -DLLVM_ENABLE_RTTI=YES
+ -DLLVM_ENABLE_FFI=YES
+ -DLLVM_BINUTILS_INCDIR=/usr/include"
+hostmakedepends="perl python3 zlib-devel libffi-devel swig python3-Sphinx
+ python3-recommonmark python3-sphinx-automodapi"
+makedepends="python3-devel zlib-devel elfutils-devel libffi-devel libedit-devel
+ libxml2-devel binutils-devel libatomic-devel"
+depends="libllvm14>=${version}_${revision}"
+short_desc="Low Level Virtual Machine"
+maintainer="q66 <daniel@octaforge.org>"
+license="Apache-2.0"
+homepage="https://www.llvm.org"
+distfiles="https://github.com/llvm/llvm-project/releases/download/llvmorg-${version}/llvm-project-${version}.src.tar.xz"
+checksum=44d3e7a784d5cf805e72853bb03f218bd1058d448c03ca883dabbebc99204e0c
+lib32disabled=yes
+python_version=3
+
+if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+	configure_args+=" -DLIBCXX_HAS_MUSL_LIBC=YES"
+	makedepends+=" libexecinfo-devel"
+	depends+=" libexecinfo-devel"
+fi
+
+# "operand out of range" assembler failures
+case "$XBPS_TARGET_MACHINE" in
+	ppc64*) ;;
+	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
+esac
+
+_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
+
+_lldb_enable=yes
+_libomp_enable=no
+
+case "$XBPS_TARGET_MACHINE" in
+	ppc64le*) ;;
+	ppc*|i686*) _lldb_enable=no ;;
+esac
+
+case "$XBPS_TARGET_MACHINE" in
+	x86_64*|aarch64*|ppc64*) _libomp_enable=yes;;
+esac
+
+subpackages="clang-tools-extra"
+
+# must go before clang
+if [ "$_libomp_enable" = "yes" ]; then
+	_enabled_projects+=";openmp"
+	subpackages+=" libomp libomp-devel"
+	# because of cmake nonsense referencing libomptarget.so.*
+	depends+=" libomp>=${version}_${revision}"
+fi
+
+subpackages+=" clang clang-analyzer libclang libclang-cpp
+ llvm-libunwind llvm-libunwind-devel libcxx libcxx-devel
+ libcxxabi libcxxabi-devel libllvm14"
+
+if [ "$_lldb_enable" = "yes" ]; then
+	# XXX fails to cross compile due to python
+	_enabled_projects+=";lldb"
+	subpackages+=" lldb lldb-devel"
+fi
+
+subpackages+=" lld lld-devel"
+
+configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+
+post_patch() {
+	if [ "$_lldb_enable" = "yes" ]; then
+		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+			vsed -i 's|__ptrace_request|int|g' \
+				${wrksrc}/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
+		fi
+		# disable docs for lldb as they fail to generate
+		vsed -i '/add_subdirectory(docs)/d' \
+			${wrksrc}/lldb/CMakeLists.txt
+	fi
+
+	# update config.guess for better platform detection
+	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
+		${wrksrc}/llvm/cmake
+
+	# fix linker failures on some archs
+	vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
+		${wrksrc}/libcxxabi/cmake/config-ix.cmake
+	vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
+		${wrksrc}/libcxxabi/cmake/config-ix.cmake
+
+	# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*) ;;
+		ppc*-musl|i686-musl|mips*-musl)
+			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
+				${wrksrc}/libunwind/src/CMakeLists.txt
+			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
+				${wrksrc}/libcxxabi/src/CMakeLists.txt
+			vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
+			;;
+	esac
+
+	case "$XBPS_TARGET_MACHINE" in
+		x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
+			vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
+				${wrksrc}/compiler-rt/CMakeLists.txt
+			;;
+		arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
+			vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
+				${wrksrc}/compiler-rt/cmake/config-ix.cmake
+			;;
+	esac
+}
+
+pre_configure() {
+	local triplet
+
+	# Vastly reduce size of debugging symbols:
+	CFLAGS=${CFLAGS/ -g/ -g1}
+	CXXFLAGS=${CXXFLAGS/ -g/ -g1}
+
+	# since gcc9, the build likes to blow up for ppc32 apparently because
+	# of clang being too large for a 24-bit relative call to the PLT, so
+	# optimize for size instead
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*) ;;
+		mips*-musl|ppc*) configure_args+=" -DVOID_CXX_OPT_FLAGS=-Os" ;;
+	esac
+
+	if [ "$CROSS_BUILD" ]; then
+		msg_normal "Building host tblgen\n"
+		mkdir -p build/HOST
+		cd build/HOST
+		CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
+			CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
+			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
+			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
+		make ${makejobs} -C utils/TableGen
+		make ${makejobs} -C tools/clang/utils/TableGen
+		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
+		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
+		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
+		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
+		cd ../..
+	fi
+
+	case "$XBPS_TARGET_MACHINE" in
+		i686*) _arch="X86";;
+		x86_64*) _arch="X86";;
+		armv5*) _arch="Armv5te";;
+		armv6*) _arch="Armv6";;
+		armv7*) _arch="Armv7";;
+		aarch64*) _arch="AArch64";;
+		mips*) _arch="Mips";;
+		ppc*) _arch="PowerPC";;
+		riscv64*) _arch="RISCV64";;
+	esac
+
+	triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
+
+	configure_args+=" -DLLVM_TARGET_ARCH=${_arch}"
+	configure_args+=" -DLLVM_HOST_TRIPLE=${triplet}"
+	configure_args+=" -DLLVM_DEFAULT_TARGET_TRIPLE=${triplet}"
+}
+
+do_install() {
+	cd build
+	cmake -DCMAKE_INSTALL_PREFIX=${DESTDIR}/usr -P cmake_install.cmake
+
+	# Required for multilib.
+	if [ "$XBPS_TARGET_MACHINE" = "x86_64" ]; then
+		for _header in llvm-config; do
+			mv ${DESTDIR}/usr/include/llvm/Config/${_header}{,-64}.h
+			vinstall ${FILESDIR}/llvm-Config-${_header}.h 644 \
+				usr/include/llvm/Config ${_header}.h
+		done
+	fi
+
+	# Remove llvm-config-host in cross builds.
+	if [ "$CROSS_BUILD" ]; then
+		rm -f ${DESTDIR}/usr/bin/llvm-config-host
+	fi
+
+	# Install libcxxabi headers
+	vinstall ${wrksrc}/libcxxabi/include/__cxxabi_config.h 644 usr/include
+	vinstall ${wrksrc}/libcxxabi/include/cxxabi.h 644 usr/include
+
+	# Install libunwind headers
+	vinstall ${wrksrc}/libunwind/include/__libunwind_config.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/libunwind.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/unwind.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/mach-o/compact_unwind_encoding.h \
+		644 usr/include/mach-o
+}
+
+clang-analyzer_package() {
+	pycompile_dirs="usr/share/scan-view"
+	depends="clang-${version}_${revision} python3 perl"
+	short_desc+=" - A source code analysis framework"
+	homepage="https://clang-analyzer.llvm.org/"
+	pkg_install() {
+		vmove usr/share/man/man1/scan-build.1
+		vmove "/usr/bin/scan-*"
+		vmove "/usr/share/scan-*"
+		vmove "/usr/libexec/*analyzer"
+	}
+}
+
+clang-tools-extra_package() {
+	lib32disabled=yes
+	depends="clang-${version}_${revision} python3"
+	short_desc+=" - Extra Clang tools"
+	homepage="https://clang.llvm.org/extra/"
+	pkg_install() {
+		vmove usr/include/clang-tidy
+		vmove usr/bin/clang-apply-replacements
+		vmove usr/bin/clang-query
+		vmove usr/bin/clang-rename
+		vmove usr/bin/clang-tidy
+		vmove usr/bin/diagtool
+		vmove usr/bin/find-all-symbols
+		vmove usr/bin/hmaptool
+		vmove usr/bin/modularize
+		vmove usr/bin/pp-trace
+		vmove usr/bin/sancov
+		vmove "usr/lib/libclangApplyReplacements*"
+		vmove "usr/lib/libclangQuery*"
+		vmove "usr/lib/libclangTidy*"
+		vmove "usr/share/clang/*tidy*"
+		vmove usr/share/doc/clang-tools
+		vmove usr/share/man/man1/extraclangtools.1
+		vmove usr/share/man/man1/diagtool.1
+	}
+}
+
+clang_package() {
+	lib32disabled=yes
+	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
+	 libclang-${version}_${revision}"
+	short_desc+=" - C language family frontend"
+	homepage="https://clang.llvm.org/"
+	pkg_install() {
+		vmove usr/include/clang
+		vmove usr/include/clang-c
+		vmove "usr/bin/*clang*"
+		vmove usr/bin/c-index-test
+		vmove usr/lib/clang
+		vmove usr/lib/cmake/clang
+		vmove "usr/lib/libclang*.a"
+		vmove "usr/lib/libclang*.so"
+		vmove usr/share/clang
+		vmove usr/share/doc/clang
+		vmove usr/share/man/man1/clang.1
+	}
+}
+
+libclang_package() {
+	short_desc+=" - C frontend runtime library"
+	pkg_install() {
+		vmove "usr/lib/libclang.so.*"
+	}
+}
+
+libclang-cpp_package() {
+	short_desc+=" - C frontend runtime library (C++ interface)"
+	pkg_install() {
+		vmove "usr/lib/libclang-cpp.so.*"
+	}
+}
+
+lld_package() {
+	lib32disabled=yes
+	short_desc+=" - linker"
+	homepage="https://lld.llvm.org"
+	pkg_install() {
+		vmove usr/bin/lld*
+		vmove usr/bin/wasm-ld
+		vmove usr/bin/ld.lld*
+		vmove usr/bin/ld64.lld*
+		vmove usr/share/doc/lld
+	}
+}
+
+lld-devel_package() {
+	lib32disabled=yes
+	short_desc+=" - linker - development files"
+	homepage="https://lld.llvm.org"
+	depends="lld>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include/lld
+		vmove usr/lib/cmake/lld
+		vmove "usr/lib/liblld*a"
+	}
+}
+
+lldb_package() {
+	lib32disabled=yes
+	depends+=" python3-six"
+	short_desc+=" - LLDB debugger"
+	homepage="https://lldb.llvm.org/"
+	pkg_install() {
+		vmove usr/bin/*lldb*
+		vmove usr/lib/liblldb*so.*
+		vmove /usr/lib/python*
+	}
+}
+
+lldb-devel_package() {
+	lib32disabled=yes
+	depends="lldb>=${version}_${revision}"
+	short_desc+=" - LLDB debugger - development files"
+	pkg_install() {
+		vmove usr/include/lldb
+		vmove "usr/lib/liblldb*.so"
+	}
+}
+
+llvm-libunwind_package() {
+	short_desc+=" - libunwind"
+	pkg_install() {
+		vmove "usr/lib/libunwind.so.*"
+	}
+}
+
+llvm-libunwind-devel_package() {
+	short_desc+=" - libunwind - development files"
+	depends="llvm-libunwind>=${version}_${revision}"
+	conflicts="libunwind-devel>=0"
+	pkg_install() {
+		vmove usr/lib/libunwind.so
+		vmove usr/lib/libunwind.a
+		vmove "usr/include/*unwind*"
+		vmove usr/include/mach-o
+		vmove usr/share/doc/libunwind
+	}
+}
+
+libcxxabi_package() {
+	short_desc+=" - low level support for libc++"
+	pkg_install() {
+		vmove "usr/lib/libc++abi.so.*"
+	}
+}
+
+libcxxabi-devel_package() {
+	short_desc+=" - low level support for libc++ - development files"
+	depends="libcxxabi>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/lib/libc++abi.so
+		vmove usr/lib/libc++abi.a
+		vmove "usr/include/*cxxabi*"
+	}
+}
+
+libcxx_package() {
+	short_desc+=" - C++ standard library"
+	pkg_install() {
+		vmove "usr/lib/libc++.so.*"
+	}
+}
+
+libcxx-devel_package() {
+	short_desc+=" - C++ standard library - development files"
+	depends="libcxx>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/lib/libc++.so
+		vmove usr/lib/libc++.a
+		vmove usr/lib/libc++experimental.a
+		vmove usr/include/c++
+		vmove usr/share/doc/libcxx
+	}
+}
+
+libomp_package() {
+	short_desc+=" - Clang OpenMP support library"
+	pkg_install() {
+		vmove usr/lib/libomp.so
+		vmove "usr/lib/libomptarget.rtl.*.so"
+		vmove usr/lib/libarcher.so
+		vmove "usr/lib/libomp*.so.*"
+	}
+}
+
+libomp-devel_package() {
+	short_desc+=" - Clang OpenMP support library - development files"
+	depends="libomp>=${version}_${revision}"
+	pkg_install() {
+		vmove "usr/lib/libomp*.so"
+		vmove "usr/lib/libarcher*"
+		vmove "usr/include/omp*.h"
+		vmove "usr/lib/clang/${version}/include/omp*.h"
+		vmove usr/share/man/man1/llvmopenmp.1
+		vmove usr/share/doc/openmp
+	}
+}
+
+libllvm14_package() {
+	short_desc+=" - runtime library"
+	pkg_install() {
+		vmove "usr/lib/libLLVM-*.so*"
+	}
+}
diff --git a/srcpkgs/llvm14/update b/srcpkgs/llvm14/update
new file mode 100644
index 000000000000..e95cf26b3586
--- /dev/null
+++ b/srcpkgs/llvm14/update
@@ -0,0 +1,3 @@
+site="https://github.com/llvm/llvm-project/releases"
+pattern="llvmorg-\K(\d+.){2}\d+(-rc\d+)?"
+ignore="*-rc*"

From 8438d62e818f41e2c2663bb6ed0e30d730118cad Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:16:07 +0200
Subject: [PATCH 02/29] llvm: update to 14.0.3.

---
 srcpkgs/llvm/template | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/llvm/template b/srcpkgs/llvm/template
index a92db6f94f9f..d226c61c734e 100644
--- a/srcpkgs/llvm/template
+++ b/srcpkgs/llvm/template
@@ -1,10 +1,10 @@
 # Template file for 'llvm'
 pkgname=llvm
-version=12.0.0
+version=14.0.3
 revision=1
 build_style=meta
-depends="llvm12"
-replaces="llvm11>=0 llvm10>=0 llvm9>=0 llvm8>=0 llvm7>=0 llvm6.0>=0 llvm3.9>=0"
+depends="llvm14"
+replaces="llvm13>=0 llvm12>=0 llvm11>=0 llvm10>=0 llvm9>=0 llvm8>=0 llvm7>=0 llvm6.0>=0 llvm3.9>=0"
 short_desc="LLVM meta package"
 maintainer="Enno Boland <gottox@voidlinux.org>"
 license="Public Domain"

From 92edaa1759b7b52e98fd6a3adf5a761334849304 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:36:32 +0200
Subject: [PATCH 03/29] llvm12: drop non-llvm components

---
 ...clang-001-fix-unwind-chain-inclusion.patch |  44 ---
 .../patches/clang-002-add-musl-triples.patch  | 110 -------
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 -
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ---
 .../compiler-rt-aarch64-ucontext.patch        |  11 -
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 --
 .../llvm12/patches/compiler-rt-size_t.patch   |  10 -
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 ----
 srcpkgs/llvm12/patches/libcxx-musl.patch      |  26 --
 srcpkgs/llvm12/patches/libcxx-ppc.patch       |  22 --
 .../llvm12/patches/libcxx-ssp-nonshared.patch |  11 -
 srcpkgs/llvm12/patches/libcxxabi-dl.patch     |  25 --
 srcpkgs/llvm12/patches/libunwind-ppc32.patch  |  63 ----
 srcpkgs/llvm12/patches/lldb-musl.patch        |  31 --
 .../llvm12/patches/ppc32-compiler-rt.patch    |  21 --
 srcpkgs/llvm12/template                       | 301 +-----------------
 16 files changed, 1 insertion(+), 832 deletions(-)
 delete mode 100644 srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-size_t.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-ppc.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxxabi-dl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libunwind-ppc32.patch
 delete mode 100644 srcpkgs/llvm12/patches/lldb-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/ppc32-compiler-rt.patch

diff --git a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
deleted file mode 100644
index e4eaa7783e7a..000000000000
--- a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 352974169f0d2b5da3d5321f588f5e3b5941330e Mon Sep 17 00:00:00 2001
-From: Andrea Brancaleoni <miwaxe@gmail.com>
-Date: Tue, 8 Sep 2015 22:14:57 +0200
-Subject: [PATCH 2/7] fix unwind chain inclusion
-
----
- lib/Headers/unwind.h | 9 +++++----
- 1 file changed, 5 insertions(+), 4 deletions(-)
-
-diff --git a/lib/Headers/unwind.h b/lib/Headers/unwind.h
-index 303d792..44e10cc 100644
---- a/clang/lib/Headers/unwind.h
-+++ b/clang/lib/Headers/unwind.h
-@@ -9,9 +9,6 @@
- 
- /* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/
- 
--#ifndef __CLANG_UNWIND_H
--#define __CLANG_UNWIND_H
--
- #if defined(__APPLE__) && __has_include_next(<unwind.h>)
- /* Darwin (from 11.x on) provide an unwind.h. If that's available,
-  * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE,
-@@ -39,6 +36,9 @@
- # endif
- #else
- 
-+#ifndef __CLANG_UNWIND_H
-+#define __CLANG_UNWIND_H
-+
- #include <stdint.h>
- 
- #ifdef __cplusplus
-@@ -322,6 +322,7 @@ _Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *);
- }
- #endif
- 
-+#endif /* __CLANG_UNWIND_H */
-+
- #endif
- 
--#endif /* __CLANG_UNWIND_H */
--- 
-2.5.1
diff --git a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
deleted file mode 100644
index 25688d40dbc2..000000000000
--- a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
+++ /dev/null
@@ -1,110 +0,0 @@
---- a/clang/lib/Driver/ToolChains/Gnu.cpp
-+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
-@@ -2086,7 +2086,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
-                                              "armv7hl-redhat-linux-gnueabi",
-                                              "armv6hl-suse-linux-gnueabi",
--                                             "armv7hl-suse-linux-gnueabi"};
-+                                             "armv7hl-suse-linux-gnueabi",
-+                                             "armv7l-linux-gnueabihf"};
-   static const char *const ARMebLibDirs[] = {"/lib"};
-   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
-                                              "armeb-linux-androideabi"};
-@@ -2153,8 +2154,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
-   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
-   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
--                                             "powerpcle-unknown-linux-gnu",
--                                             "powerpcle-linux-musl"};
-+                                             "powerpcle-unknown-linux-gnu"};
- 
-   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
-   static const char *const PPC64Triples[] = {
-@@ -2235,6 +2235,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-     return;
-   }
- 
-+  if (TargetTriple.isMusl()) {
-+    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
-+    static const char *const ARMHFMuslTriples[] = {
-+        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
-+    };
-+    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
-+    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
-+    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
-+    static const char *const MIPSMuslTriples[] = {
-+        "mips-linux-musl", "mipsel-linux-musl",
-+        "mipsel-linux-muslhf", "mips-linux-muslhf"
-+    };
-+    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
-+    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
-+    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
-+    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
-+
-+    switch (TargetTriple.getArch()) {
-+    case llvm::Triple::aarch64:
-+      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
-+      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
-+      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
-+      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
-+      break;
-+    case llvm::Triple::arm:
-+      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
-+      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
-+        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
-+      } else {
-+        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
-+      }
-+      break;
-+    case llvm::Triple::x86_64:
-+      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-+      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
-+      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-+      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
-+      break;
-+    case llvm::Triple::x86:
-+      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-+      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
-+      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-+      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
-+      break;
-+    case llvm::Triple::mips:
-+      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
-+      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
-+      break;
-+    case llvm::Triple::ppc:
-+      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
-+      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
-+      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
-+      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
-+      break;
-+    case llvm::Triple::ppcle:
-+      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
-+      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
-+      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
-+      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
-+      break;
-+    case llvm::Triple::ppc64:
-+      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
-+      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
-+      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
-+      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
-+      break;
-+    case llvm::Triple::ppc64le:
-+      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
-+      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
-+      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
-+      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
-+      break;
-+    default:
-+      break;
-+    }
-+    TripleAliases.push_back(TargetTriple.str());
-+    if (TargetTriple.str() != BiarchTriple.str())
-+      BiarchTripleAliases.push_back(BiarchTriple.str());
-+    return;
-+  }
-+
-   // Android targets should not use GNU/Linux tools or libraries.
-   if (TargetTriple.isAndroid()) {
-     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
deleted file mode 100644
index 4ad6412d1e6c..000000000000
--- a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/clang/lib/Driver/ToolChains/Linux.cpp
-+++ b/clang/lib/Driver/ToolChains/Linux.cpp
-@@ -504,10 +504,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
-     Loader = "ld.so.1";
-     break;
-   case llvm::Triple::ppc64:
--    LibDir = "lib64";
--    Loader =
--        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
--    break;
-   case llvm::Triple::ppc64le:
-     LibDir = "lib64";
-     Loader =
diff --git a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
deleted file mode 100644
index 21fc8003c5f1..000000000000
--- a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
+++ /dev/null
@@ -1,48 +0,0 @@
---- a/clang/lib/Basic/Targets/PPC.h
-+++ b/clang/lib/Basic/Targets/PPC.h
-@@ -415,11 +415,10 @@ public:
-       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
-     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
-       DataLayout = "e-m:e-i64:64-n32:64";
--      ABI = "elfv2";
-     } else {
-       DataLayout = "E-m:e-i64:64-n32:64";
--      ABI = "elfv1";
-     }
-+    ABI = "elfv2";
- 
-     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
-       LongDoubleWidth = LongDoubleAlign = 64;
---- a/clang/lib/CodeGen/TargetInfo.cpp
-+++ b/clang/lib/CodeGen/TargetInfo.cpp
-@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
-       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
- 
-     if (Triple.isOSBinFormatELF()) {
--      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
--      if (getTarget().getABI() == "elfv2")
--        Kind = PPC64_SVR4_ABIInfo::ELFv2;
-+      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
-+      if (getTarget().getABI() == "elfv1")
-+        Kind = PPC64_SVR4_ABIInfo::ELFv1;
-       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
- 
-       return SetCGInfo(
---- a/clang/lib/Driver/ToolChains/Clang.cpp
-+++ b/clang/lib/Driver/ToolChains/Clang.cpp
-@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
-   const llvm::Triple &T = getToolChain().getTriple();
-   if (T.isOSBinFormatELF()) {
-     switch (getToolChain().getArch()) {
--    case llvm::Triple::ppc64: {
--      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
--          T.isOSOpenBSD() || T.isMusl())
--        ABIName = "elfv2";
--      else
--        ABIName = "elfv1";
--      break;
--    }
-+    case llvm::Triple::ppc64:
-     case llvm::Triple::ppc64le:
-       ABIName = "elfv2";
-       break;
diff --git a/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch b/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
deleted file mode 100644
index 893c059d7b8d..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp.orig
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-@@ -1799,7 +1799,7 @@
- 
- static bool Aarch64GetESR(ucontext_t *ucontext, u64 *esr) {
-   static const u32 kEsrMagic = 0x45535201;
--  u8 *aux = ucontext->uc_mcontext.__reserved;
-+  u8 *aux = reinterpret_cast<u8 *>(ucontext->uc_mcontext.__reserved);
-   while (true) {
-     _aarch64_ctx *ctx = (_aarch64_ctx *)aux;
-     if (ctx->size == 0) break;
diff --git a/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch b/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
deleted file mode 100644
index 35f16d24f340..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
+++ /dev/null
@@ -1,35 +0,0 @@
---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-@@ -74,6 +74,10 @@
- #include <sys/utsname.h>
- #endif
- 
-+#if SANITIZER_LINUX && defined(__powerpc__)
-+#include <asm/ptrace.h>
-+#endif
-+
- #if SANITIZER_LINUX && !SANITIZER_ANDROID
- #include <sys/personality.h>
- #endif
---- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
-@@ -92,7 +92,7 @@
- # include <utime.h>
- # include <sys/ptrace.h>
- #if defined(__mips64) || defined(__aarch64__) || defined(__arm__) || \
--    SANITIZER_RISCV64
-+    defined(__powerpc__) || SANITIZER_RISCV64
- #  include <asm/ptrace.h>
- #  ifdef __arm__
- typedef struct user_fpregs elf_fpregset_t;
---- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
-@@ -31,7 +31,7 @@
- #include <sys/types.h> // for pid_t
- #include <sys/uio.h> // for iovec
- #include <elf.h> // for NT_PRSTATUS
--#if (defined(__aarch64__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
-+#if (defined(__aarch64__) || defined(__powerpc__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
- // GLIBC 2.20+ sys/user does not include asm/ptrace.h
- # include <asm/ptrace.h>
- #endif
diff --git a/srcpkgs/llvm12/patches/compiler-rt-size_t.patch b/srcpkgs/llvm12/patches/compiler-rt-size_t.patch
deleted file mode 100644
index 2c63063a5e9e..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-size_t.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/compiler-rt/lib/fuzzer/FuzzerInterceptors.cpp.orig
-+++ b/compiler-rt/lib/fuzzer/FuzzerInterceptors.cpp
-@@ -25,6 +25,7 @@
-   }
- 
- #include <cassert>
-+#include <cstddef>
- #include <cstdint>
- #include <dlfcn.h> // for dlsym()
- 
diff --git a/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch b/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
deleted file mode 100644
index d0b61c80c897..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
+++ /dev/null
@@ -1,62 +0,0 @@
---- a/compiler-rt/lib/xray/xray_powerpc64.inc
-+++ b/compiler-rt/lib/xray/xray_powerpc64.inc
-@@ -12,7 +12,13 @@
- 
- #include <cstdint>
- #include <mutex>
-+#ifdef __GLIBC__
- #include <sys/platform/ppc.h>
-+#else
-+#include <cctype>
-+#include <cstring>
-+#include <cstdlib>
-+#endif
- 
- #include "xray_defs.h"
- 
-@@ -20,13 +26,45 @@ namespace __xray {
- 
- ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
-   CPU = 0;
-+#ifdef __GLIBC__
-   return __ppc_get_timebase();
-+#else
-+  return __builtin_ppc_get_timebase();
-+#endif
- }
- 
- inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
-   static std::mutex M;
-   std::lock_guard<std::mutex> Guard(M);
-+#ifdef __GLIBC__
-   return __ppc_get_timebase_freq();
-+#else
-+  /* FIXME: a less dirty implementation? */
-+  static uint64_t base;
-+  if (!base) {
-+    FILE *f = fopen("/proc/cpuinfo", "rb");
-+    if (f) {
-+      ssize_t nr;
-+      /* virtually always big enough to hold the line */
-+      char buf[512];
-+      while (fgets(buf, sizeof(buf), f)) {
-+        char *ret = strstr(buf, "timebase");
-+        if (!ret) {
-+          continue;
-+        }
-+        ret += sizeof("timebase") - 1;
-+        ret = strchr(ret, ':');
-+        if (!ret) {
-+          continue;
-+        }
-+        base = strtoul(ret + 1, nullptr, 10);
-+        break;
-+      }
-+      fclose(f);
-+    }
-+  }
-+  return base;
-+#endif
- }
- 
- inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
diff --git a/srcpkgs/llvm12/patches/libcxx-musl.patch b/srcpkgs/llvm12/patches/libcxx-musl.patch
deleted file mode 100644
index bbd31ffc2cb1..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-musl.patch
+++ /dev/null
@@ -1,26 +0,0 @@
---- a/libcxx/include/locale
-+++ b/libcxx/include/locale
-@@ -742,7 +742,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
-         typename remove_reference<decltype(errno)>::type __save_errno = errno;
-         errno = 0;
-         char *__p2;
-+#if defined(__linux__) && !defined(__GLIBC__)
-+        long long __ll = strtoll(__a, &__p2, __base);
-+#else
-         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
-+#endif
-         typename remove_reference<decltype(errno)>::type __current_errno = errno;
-         if (__current_errno == 0)
-             errno = __save_errno;
-@@ -782,7 +786,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
-         typename remove_reference<decltype(errno)>::type __save_errno = errno;
-         errno = 0;
-         char *__p2;
-+#if defined(__linux__) && !defined(__GLIBC__)
-+        unsigned long long __ll = strtoull(__a, &__p2, __base);
-+#else
-         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
-+#endif
-         typename remove_reference<decltype(errno)>::type __current_errno = errno;
-         if (__current_errno == 0)
-             errno = __save_errno;
diff --git a/srcpkgs/llvm12/patches/libcxx-ppc.patch b/srcpkgs/llvm12/patches/libcxx-ppc.patch
deleted file mode 100644
index 7a92f8004e1c..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-ppc.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-This ensures `is_iec559` is defined correctly under all long double ABIs,
-including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__`
-is not defined on gcc.
-
---- a/libcxx/include/limits
-+++ b/libcxx/include/limits
-@@ -426,8 +426,14 @@ protected:
-     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
-     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
- 
--#if (defined(__ppc__) || defined(__ppc64__))
-+#if defined(__powerpc__) || defined(__powerpc64__)
-+#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__)
-+    /* IEEE 754 quadruple or double precision */
-+    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
-+#else
-+    /* 128-bit IBM double-double */
-     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
-+#endif
- #else
-     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
- #endif
diff --git a/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch b/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
deleted file mode 100644
index 70292beb2fcd..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/libcxx/CMakeLists.txt
-+++ b/libcxx/CMakeLists.txt
-@@ -769,6 +769,8 @@ function(cxx_link_system_libraries target)
-     target_link_libraries(${target} PRIVATE atomic)
-   endif()
- 
-+#ssp  target_link_libraries(${target} PRIVATE ssp_nonshared)
-+
-   if (MINGW)
-     target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
-   endif()
diff --git a/srcpkgs/llvm12/patches/libcxxabi-dl.patch b/srcpkgs/llvm12/patches/libcxxabi-dl.patch
deleted file mode 100644
index 3a15f9db8c98..000000000000
--- a/srcpkgs/llvm12/patches/libcxxabi-dl.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-Also link to -ldl to prevent undefined references.
-
---- a/libcxxabi/src/CMakeLists.txt
-+++ b/libcxxabi/src/CMakeLists.txt
-@@ -73,6 +73,7 @@
-   endif()
- 
-   add_library_flags_if(LIBCXXABI_HAS_C_LIB c)
-+  add_library_flags_if(LIBCXXABI_HAS_C_LIB dl)
- endif()
- 
- if (LIBCXXABI_USE_LLVM_UNWINDER)
---- a/libcxx/CMakeLists.txt
-+++ b/libcxx/CMakeLists.txt
-@@ -745,6 +745,10 @@
-     target_link_libraries(${target} PRIVATE m)
-   endif()
- 
-+  if (LIBCXX_HAS_C_LIB)
-+    target_link_libraries(${target} PRIVATE dl)
-+  endif()
-+
-   if (LIBCXX_HAS_RT_LIB)
-     target_link_libraries(${target} PRIVATE rt)
-   endif()
diff --git a/srcpkgs/llvm12/patches/libunwind-ppc32.patch b/srcpkgs/llvm12/patches/libunwind-ppc32.patch
deleted file mode 100644
index 74aa7576ecf9..000000000000
--- a/srcpkgs/llvm12/patches/libunwind-ppc32.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-This fixes build at least with gcc9 which does not define `__ppc__`.
-
---- a/libunwind/include/__libunwind_config.h
-+++ b/libunwind/include/__libunwind_config.h
-@@ -49,7 +49,7 @@
- #  define _LIBUNWIND_CONTEXT_SIZE 167
- #  define _LIBUNWIND_CURSOR_SIZE 179
- #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64
--# elif defined(__ppc__)
-+# elif defined(__powerpc__)
- #  define _LIBUNWIND_TARGET_PPC 1
- #  define _LIBUNWIND_CONTEXT_SIZE 117
- #  define _LIBUNWIND_CURSOR_SIZE 124
---- a/libunwind/src/UnwindRegistersRestore.S
-+++ b/libunwind/src/UnwindRegistersRestore.S
-@@ -392,7 +392,7 @@ Lnovec:
-   PPC64_LR(3)
-   bctr
- 
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- 
- DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind13Registers_ppc6jumptoEv)
- //
---- a/libunwind/src/UnwindRegistersSave.S
-+++ b/libunwind/src/UnwindRegistersSave.S
-@@ -554,7 +554,7 @@ DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext)
-   blr
- 
- 
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- 
- //
- // extern int unw_getcontext(unw_context_t* thread_state)
---- a/libunwind/src/config.h
-+++ b/libunwind/src/config.h
-@@ -95,12 +95,12 @@
- #define _LIBUNWIND_BUILD_SJLJ_APIS
- #endif
- 
--#if defined(__i386__) || defined(__x86_64__) || defined(__ppc__) || defined(__ppc64__) || defined(__powerpc64__)
-+#if defined(__i386__) || defined(__x86_64__) || defined(__powerpc__) || defined(__powerpc64__)
- #define _LIBUNWIND_SUPPORT_FRAME_APIS
- #endif
- 
- #if defined(__i386__) || defined(__x86_64__) ||                                \
--    defined(__ppc__) || defined(__ppc64__) || defined(__powerpc64__) ||        \
-+    defined(__powerpc__) || defined(__powerpc64__) ||                          \
-     (!defined(__APPLE__) && defined(__arm__)) ||                               \
-     (defined(__arm64__) || defined(__aarch64__)) ||                            \
-     defined(__mips__)
---- a/libunwind/src/libunwind.cpp
-+++ b/libunwind/src/libunwind.cpp
-@@ -42,7 +42,7 @@ _LIBUNWIND_HIDDEN int __unw_init_local(unw_cursor_t *cursor,
- # define REGISTER_KIND Registers_x86_64
- #elif defined(__powerpc64__)
- # define REGISTER_KIND Registers_ppc64
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- # define REGISTER_KIND Registers_ppc
- #elif defined(__aarch64__)
- # define REGISTER_KIND Registers_arm64
diff --git a/srcpkgs/llvm12/patches/lldb-musl.patch b/srcpkgs/llvm12/patches/lldb-musl.patch
deleted file mode 100644
index 601c0d138523..000000000000
--- a/srcpkgs/llvm12/patches/lldb-musl.patch
+++ /dev/null
@@ -1,31 +0,0 @@
---- a/lldb/source/Plugins/Process/Linux/Procfs.h
-+++ b/lldb/source/Plugins/Process/Linux/Procfs.h
-@@ -10,21 +10,12 @@
- // sys/procfs.h on Android/Linux for all supported architectures.
- 
- #include <sys/ptrace.h>
-+#include <asm/ptrace.h>
- 
--#ifdef __ANDROID__
--#if defined(__arm64__) || defined(__aarch64__)
--typedef unsigned long elf_greg_t;
--typedef elf_greg_t
--    elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
--typedef struct user_fpsimd_state elf_fpregset_t;
--#ifndef NT_FPREGSET
--#define NT_FPREGSET NT_PRFPREG
--#endif // NT_FPREGSET
--#elif defined(__mips__)
--#ifndef NT_FPREGSET
--#define NT_FPREGSET NT_PRFPREG
--#endif // NT_FPREGSET
--#endif
--#else // __ANDROID__
-+#if !defined(__GLIBC__) && defined(__powerpc__)
-+#define pt_regs musl_pt_regs
-+#include <sys/procfs.h>
-+#undef pt_regs
-+#else
- #include <sys/procfs.h>
--#endif // __ANDROID__
-+#endif
diff --git a/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch b/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch
deleted file mode 100644
index 8e0a9a779d1b..000000000000
--- a/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-commit ba4ede595ff9599232f5dd2b4384c243137b53fc
-Author: Daniel Kolesa <daniel@octaforge.org>
-Date:   Tue Jun 22 23:40:54 2021 +0200
-
-    enable compiler-rt support for ppc32
-
-diff --git a/compiler-rt/cmake/base-config-ix.cmake b/compiler-rt/cmake/base-config-ix.cmake
-index 1edab43..5c0c8a2 100644
---- a/compiler-rt/cmake/base-config-ix.cmake
-+++ b/compiler-rt/cmake/base-config-ix.cmake
-@@ -182,9 +182,7 @@ macro(test_targets)
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc64le")
-       test_target_arch(powerpc64le "" "-m64")
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc")
--      if(CMAKE_SYSTEM_NAME MATCHES "AIX")
--        test_target_arch(powerpc "" "-m32")
--      endif()
-+      test_target_arch(powerpc "" "-m32")
-       test_target_arch(powerpc64 "" "-m64")
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "s390x")
-       test_target_arch(s390x "" "")
diff --git a/srcpkgs/llvm12/template b/srcpkgs/llvm12/template
index 7ce18028e4a3..7b361bbbf5bc 100644
--- a/srcpkgs/llvm12/template
+++ b/srcpkgs/llvm12/template
@@ -1,25 +1,17 @@
 # Template file for 'llvm12'
 pkgname=llvm12
 version=12.0.1
-revision=2
+revision=3
 wrksrc="llvm-project-${version}.src"
 build_wrksrc=llvm
 build_style=cmake
 configure_args="
  -DCMAKE_BUILD_TYPE=Release -Wno-dev
  -DENABLE_LINKER_BUILD_ID=YES
- -DLLDB_USE_SYSTEM_SIX=YES
- -DLIBCXX_CXX_ABI=libcxxabi
- -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
- -DLIBCXXABI_USE_LLVM_UNWINDER=YES
- -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
- -DLIBOMP_ENABLE_SHARED=YES
- -DLIBOMP_INSTALL_ALIASES=NO
  -DLLVM_INCLUDE_DOCS=YES
  -DLLVM_BUILD_DOCS=YES
  -DLLVM_ENABLE_SPHINX=YES
  -DSPHINX_WARNINGS_AS_ERRORS=NO
- -DLLVM_INSTALL_UTILS=YES
  -DLLVM_BUILD_LLVM_DYLIB=YES
  -DLLVM_LINK_LLVM_DYLIB=YES
  -DLLVM_ENABLE_RTTI=YES
@@ -51,87 +43,10 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
-_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
-
-_lldb_enable=yes
-_libomp_enable=no
-
-case "$XBPS_TARGET_MACHINE" in
-	ppc64le*) ;;
-	ppc*|i686*) _lldb_enable=no ;;
-esac
-
-case "$XBPS_TARGET_MACHINE" in
-	x86_64*|aarch64*|ppc64*) _libomp_enable=yes;;
-esac
-
-subpackages="clang-tools-extra"
-
-# must go before clang
-if [ "$_libomp_enable" = "yes" ]; then
-	_enabled_projects+=";openmp"
-	subpackages+=" libomp libomp-devel"
-	# because of cmake nonsense referencing libomptarget.so.*
-	depends+=" libomp>=${version}_${revision}"
-fi
-
-subpackages+=" clang clang-analyzer libclang libclang-cpp
- llvm-libunwind llvm-libunwind-devel libcxx libcxx-devel
- libcxxabi libcxxabi-devel libllvm12"
-
-if [ "$_lldb_enable" = "yes" ]; then
-	# XXX fails to cross compile due to python
-	_enabled_projects+=";lldb"
-	subpackages+=" lldb lldb-devel"
-fi
-
-subpackages+=" lld lld-devel"
-
-configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
-
 post_patch() {
-	if [ "$_lldb_enable" = "yes" ]; then
-		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
-			vsed -i 's|__ptrace_request|int|g' \
-				${wrksrc}/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
-		fi
-		# disable docs for lldb as they fail to generate
-		vsed -i '/add_subdirectory(docs)/d' \
-			${wrksrc}/lldb/CMakeLists.txt
-	fi
-
 	# update config.guess for better platform detection
 	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
 		${wrksrc}/llvm/cmake
-
-	# fix linker failures on some archs
-	vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
-		${wrksrc}/libcxxabi/cmake/config-ix.cmake
-	vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
-		${wrksrc}/libcxxabi/cmake/config-ix.cmake
-
-	# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
-	case "$XBPS_TARGET_MACHINE" in
-		ppc64*) ;;
-		ppc*-musl|i686-musl|mips*-musl)
-			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
-				${wrksrc}/libunwind/src/CMakeLists.txt
-			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
-				${wrksrc}/libcxxabi/src/CMakeLists.txt
-			vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
-			;;
-	esac
-
-	case "$XBPS_TARGET_MACHINE" in
-		x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
-			vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
-				${wrksrc}/compiler-rt/CMakeLists.txt
-			;;
-		arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
-			vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
-				${wrksrc}/compiler-rt/cmake/config-ix.cmake
-			;;
-	esac
 }
 
 pre_configure() {
@@ -158,10 +73,8 @@ pre_configure() {
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
 			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
 		make ${makejobs} -C utils/TableGen
-		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
 		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
-		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
 		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
 		cd ../..
 	fi
@@ -202,218 +115,6 @@ do_install() {
 	if [ "$CROSS_BUILD" ]; then
 		rm -f ${DESTDIR}/usr/bin/llvm-config-host
 	fi
-
-	# Install libcxxabi headers
-	vinstall ${wrksrc}/libcxxabi/include/__cxxabi_config.h 644 usr/include
-	vinstall ${wrksrc}/libcxxabi/include/cxxabi.h 644 usr/include
-
-	# Install libunwind headers
-	vinstall ${wrksrc}/libunwind/include/__libunwind_config.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/libunwind.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/unwind.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/mach-o/compact_unwind_encoding.h \
-		644 usr/include/mach-o
-}
-
-clang-analyzer_package() {
-	pycompile_dirs="usr/share/scan-view"
-	depends="clang-${version}_${revision} python3 perl"
-	short_desc+=" - A source code analysis framework"
-	homepage="https://clang-analyzer.llvm.org/"
-	pkg_install() {
-		vmove usr/share/man/man1/scan-build.1
-		vmove "/usr/bin/scan-*"
-		vmove "/usr/share/scan-*"
-		vmove "/usr/libexec/*analyzer"
-	}
-}
-
-clang-tools-extra_package() {
-	lib32disabled=yes
-	depends="clang-${version}_${revision} python3"
-	short_desc+=" - Extra Clang tools"
-	homepage="https://clang.llvm.org/extra/"
-	pkg_install() {
-		vmove usr/include/clang-tidy
-		vmove usr/bin/clang-apply-replacements
-		vmove usr/bin/clang-query
-		vmove usr/bin/clang-rename
-		vmove usr/bin/clang-tidy
-		vmove usr/bin/diagtool
-		vmove usr/bin/find-all-symbols
-		vmove usr/bin/hmaptool
-		vmove usr/bin/modularize
-		vmove usr/bin/pp-trace
-		vmove usr/bin/sancov
-		vmove "usr/lib/libclangApplyReplacements*"
-		vmove "usr/lib/libclangQuery*"
-		vmove "usr/lib/libclangTidy*"
-		vmove "usr/share/clang/*tidy*"
-		vmove usr/share/doc/clang-tools
-		vmove usr/share/man/man1/extraclangtools.1
-		vmove usr/share/man/man1/diagtool.1
-	}
-}
-
-clang_package() {
-	lib32disabled=yes
-	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
-	 libclang-${version}_${revision}"
-	short_desc+=" - C language family frontend"
-	homepage="https://clang.llvm.org/"
-	pkg_install() {
-		vmove usr/include/clang
-		vmove usr/include/clang-c
-		vmove "usr/bin/*clang*"
-		vmove usr/bin/c-index-test
-		vmove usr/lib/clang
-		vmove usr/lib/cmake/clang
-		vmove "usr/lib/libclang*.a"
-		vmove "usr/lib/libclang*.so"
-		vmove usr/share/clang
-		vmove usr/share/doc/clang
-		vmove usr/share/man/man1/clang.1
-	}
-}
-
-libclang_package() {
-	short_desc+=" - C frontend runtime library"
-	pkg_install() {
-		vmove "usr/lib/libclang.so.*"
-	}
-}
-
-libclang-cpp_package() {
-	short_desc+=" - C frontend runtime library (C++ interface)"
-	pkg_install() {
-		vmove "usr/lib/libclang-cpp.so.*"
-	}
-}
-
-lld_package() {
-	lib32disabled=yes
-	short_desc+=" - linker"
-	homepage="https://lld.llvm.org"
-	pkg_install() {
-		vmove usr/bin/lld*
-		vmove usr/bin/wasm-ld
-		vmove usr/bin/ld.lld*
-		vmove usr/bin/ld64.lld*
-		vmove usr/share/doc/lld
-	}
-}
-
-lld-devel_package() {
-	lib32disabled=yes
-	short_desc+=" - linker - development files"
-	homepage="https://lld.llvm.org"
-	depends="lld>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/include/lld
-		vmove usr/lib/cmake/lld
-		vmove "usr/lib/liblld*a"
-	}
-}
-
-lldb_package() {
-	lib32disabled=yes
-	depends+=" python3-six"
-	short_desc+=" - LLDB debugger"
-	homepage="https://lldb.llvm.org/"
-	pkg_install() {
-		vmove usr/bin/*lldb*
-		vmove usr/lib/liblldb*so.*
-		vmove /usr/lib/python*
-	}
-}
-
-lldb-devel_package() {
-	lib32disabled=yes
-	depends="lldb>=${version}_${revision}"
-	short_desc+=" - LLDB debugger - development files"
-	pkg_install() {
-		vmove usr/include/lldb
-		vmove "usr/lib/liblldb*.so"
-	}
-}
-
-llvm-libunwind_package() {
-	short_desc+=" - libunwind"
-	pkg_install() {
-		vmove "usr/lib/libunwind.so.*"
-	}
-}
-
-llvm-libunwind-devel_package() {
-	short_desc+=" - libunwind - development files"
-	depends="llvm-libunwind>=${version}_${revision}"
-	conflicts="libunwind-devel>=0"
-	pkg_install() {
-		vmove usr/lib/libunwind.so
-		vmove usr/lib/libunwind.a
-		vmove "usr/include/*unwind*"
-		vmove usr/include/mach-o
-		vmove usr/share/doc/libunwind
-	}
-}
-
-libcxxabi_package() {
-	short_desc+=" - low level support for libc++"
-	pkg_install() {
-		vmove "usr/lib/libc++abi.so.*"
-	}
-}
-
-libcxxabi-devel_package() {
-	short_desc+=" - low level support for libc++ - development files"
-	depends="libcxxabi>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/lib/libc++abi.so
-		vmove usr/lib/libc++abi.a
-		vmove "usr/include/*cxxabi*"
-	}
-}
-
-libcxx_package() {
-	short_desc+=" - C++ standard library"
-	pkg_install() {
-		vmove "usr/lib/libc++.so.*"
-	}
-}
-
-libcxx-devel_package() {
-	short_desc+=" - C++ standard library - development files"
-	depends="libcxx>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/lib/libc++.so
-		vmove usr/lib/libc++.a
-		vmove usr/lib/libc++experimental.a
-		vmove usr/include/c++
-		vmove usr/share/doc/libcxx
-	}
-}
-
-libomp_package() {
-	short_desc+=" - Clang OpenMP support library"
-	pkg_install() {
-		vmove usr/lib/libomp.so
-		vmove "usr/lib/libomptarget.rtl.*.so"
-		vmove usr/lib/libarcher.so
-		vmove "usr/lib/libomp*.so.*"
-	}
-}
-
-libomp-devel_package() {
-	short_desc+=" - Clang OpenMP support library - development files"
-	depends="libomp>=${version}_${revision}"
-	pkg_install() {
-		vmove "usr/lib/libomp*.so"
-		vmove "usr/lib/libarcher*"
-		vmove "usr/include/omp*.h"
-		vmove "usr/lib/clang/${version}/include/omp*.h"
-		vmove usr/share/man/man1/llvmopenmp.1
-		vmove usr/share/doc/openmp
-	}
 }
 
 libllvm12_package() {

From dd0a815073454885bd6e389186b3464ba9a421a9 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 14:00:28 +0200
Subject: [PATCH 04/29] New packages: clang12, libclang12, libclang12-cpp,
 lld12, lld12-devel.

---
 common/shlibs                                 |   2 +
 srcpkgs/clang12                               |   1 +
 srcpkgs/libclang12                            |   1 +
 srcpkgs/libclang12-cpp                        |   1 +
 srcpkgs/lld12                                 |   1 +
 srcpkgs/lld12-devel                           |   1 +
 ...clang-001-fix-unwind-chain-inclusion.patch |  44 +++++++
 .../patches/clang-002-add-musl-triples.patch  | 110 ++++++++++++++++++
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 +++
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ++++++++
 srcpkgs/llvm12/template                       |  71 +++++++++++
 11 files changed, 293 insertions(+)
 create mode 120000 srcpkgs/clang12
 create mode 120000 srcpkgs/libclang12
 create mode 120000 srcpkgs/libclang12-cpp
 create mode 120000 srcpkgs/lld12
 create mode 120000 srcpkgs/lld12-devel
 create mode 100644 srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch

diff --git a/common/shlibs b/common/shlibs
index 81acc39defb4..86f4c9060d3b 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -975,6 +975,8 @@ libuchardet.so.0 uchardet-0.0.6_1
 libgtksourceviewmm-3.0.so.0 gtksourceviewmm-3.2.0_1
 libyajl.so.2 yajl-2.0.1_1
 libconfuse.so.2 confuse-3.2.1_1
+libclang.so.12 libclang12-12.0.0_1
+libclang-cpp.so.12 libclang12-cpp-12.0.0_1
 liblldb.so.14 lldb-14.0.3_1
 libclang.so.14 libclang-14.0.3_1
 libclang-cpp.so.14 libclang-cpp-14.0.3_1
diff --git a/srcpkgs/clang12 b/srcpkgs/clang12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/clang12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/libclang12 b/srcpkgs/libclang12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/libclang12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/libclang12-cpp b/srcpkgs/libclang12-cpp
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/libclang12-cpp
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/lld12 b/srcpkgs/lld12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/lld12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/lld12-devel b/srcpkgs/lld12-devel
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/lld12-devel
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
new file mode 100644
index 000000000000..e4eaa7783e7a
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
@@ -0,0 +1,44 @@
+From 352974169f0d2b5da3d5321f588f5e3b5941330e Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe@gmail.com>
+Date: Tue, 8 Sep 2015 22:14:57 +0200
+Subject: [PATCH 2/7] fix unwind chain inclusion
+
+---
+ lib/Headers/unwind.h | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/lib/Headers/unwind.h b/lib/Headers/unwind.h
+index 303d792..44e10cc 100644
+--- a/clang/lib/Headers/unwind.h
++++ b/clang/lib/Headers/unwind.h
+@@ -9,9 +9,6 @@
+ 
+ /* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/
+ 
+-#ifndef __CLANG_UNWIND_H
+-#define __CLANG_UNWIND_H
+-
+ #if defined(__APPLE__) && __has_include_next(<unwind.h>)
+ /* Darwin (from 11.x on) provide an unwind.h. If that's available,
+  * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE,
+@@ -39,6 +36,9 @@
+ # endif
+ #else
+ 
++#ifndef __CLANG_UNWIND_H
++#define __CLANG_UNWIND_H
++
+ #include <stdint.h>
+ 
+ #ifdef __cplusplus
+@@ -322,6 +322,7 @@ _Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *);
+ }
+ #endif
+ 
++#endif /* __CLANG_UNWIND_H */
++
+ #endif
+ 
+-#endif /* __CLANG_UNWIND_H */
+-- 
+2.5.1
diff --git a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
new file mode 100644
index 000000000000..25688d40dbc2
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
@@ -0,0 +1,110 @@
+--- a/clang/lib/Driver/ToolChains/Gnu.cpp
++++ b/clang/lib/Driver/ToolChains/Gnu.cpp
+@@ -2086,7 +2086,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
+                                              "armv7hl-redhat-linux-gnueabi",
+                                              "armv6hl-suse-linux-gnueabi",
+-                                             "armv7hl-suse-linux-gnueabi"};
++                                             "armv7hl-suse-linux-gnueabi",
++                                             "armv7l-linux-gnueabihf"};
+   static const char *const ARMebLibDirs[] = {"/lib"};
+   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
+                                              "armeb-linux-androideabi"};
+@@ -2153,8 +2154,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
+   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
+   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
+-                                             "powerpcle-unknown-linux-gnu",
+-                                             "powerpcle-linux-musl"};
++                                             "powerpcle-unknown-linux-gnu"};
+ 
+   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
+   static const char *const PPC64Triples[] = {
+@@ -2235,6 +2235,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+     return;
+   }
+ 
++  if (TargetTriple.isMusl()) {
++    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
++    static const char *const ARMHFMuslTriples[] = {
++        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
++    };
++    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
++    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
++    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
++    static const char *const MIPSMuslTriples[] = {
++        "mips-linux-musl", "mipsel-linux-musl",
++        "mipsel-linux-muslhf", "mips-linux-muslhf"
++    };
++    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
++    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
++    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
++    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
++
++    switch (TargetTriple.getArch()) {
++    case llvm::Triple::aarch64:
++      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      break;
++    case llvm::Triple::arm:
++      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
++      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
++        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
++      } else {
++        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
++      }
++      break;
++    case llvm::Triple::x86_64:
++      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      break;
++    case llvm::Triple::x86:
++      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      break;
++    case llvm::Triple::mips:
++      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
++      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
++      break;
++    case llvm::Triple::ppc:
++      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      break;
++    case llvm::Triple::ppcle:
++      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      break;
++    case llvm::Triple::ppc64:
++      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      break;
++    case llvm::Triple::ppc64le:
++      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      break;
++    default:
++      break;
++    }
++    TripleAliases.push_back(TargetTriple.str());
++    if (TargetTriple.str() != BiarchTriple.str())
++      BiarchTripleAliases.push_back(BiarchTriple.str());
++    return;
++  }
++
+   // Android targets should not use GNU/Linux tools or libraries.
+   if (TargetTriple.isAndroid()) {
+     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
new file mode 100644
index 000000000000..4ad6412d1e6c
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
@@ -0,0 +1,13 @@
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -504,10 +504,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+     Loader = "ld.so.1";
+     break;
+   case llvm::Triple::ppc64:
+-    LibDir = "lib64";
+-    Loader =
+-        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
+-    break;
+   case llvm::Triple::ppc64le:
+     LibDir = "lib64";
+     Loader =
diff --git a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
new file mode 100644
index 000000000000..21fc8003c5f1
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
@@ -0,0 +1,48 @@
+--- a/clang/lib/Basic/Targets/PPC.h
++++ b/clang/lib/Basic/Targets/PPC.h
+@@ -415,11 +415,10 @@ public:
+       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
+     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
+       DataLayout = "e-m:e-i64:64-n32:64";
+-      ABI = "elfv2";
+     } else {
+       DataLayout = "E-m:e-i64:64-n32:64";
+-      ABI = "elfv1";
+     }
++    ABI = "elfv2";
+ 
+     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
+       LongDoubleWidth = LongDoubleAlign = 64;
+--- a/clang/lib/CodeGen/TargetInfo.cpp
++++ b/clang/lib/CodeGen/TargetInfo.cpp
+@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
+       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
+ 
+     if (Triple.isOSBinFormatELF()) {
+-      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
+-      if (getTarget().getABI() == "elfv2")
+-        Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      if (getTarget().getABI() == "elfv1")
++        Kind = PPC64_SVR4_ABIInfo::ELFv1;
+       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
+ 
+       return SetCGInfo(
+--- a/clang/lib/Driver/ToolChains/Clang.cpp
++++ b/clang/lib/Driver/ToolChains/Clang.cpp
+@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
+   const llvm::Triple &T = getToolChain().getTriple();
+   if (T.isOSBinFormatELF()) {
+     switch (getToolChain().getArch()) {
+-    case llvm::Triple::ppc64: {
+-      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
+-          T.isOSOpenBSD() || T.isMusl())
+-        ABIName = "elfv2";
+-      else
+-        ABIName = "elfv1";
+-      break;
+-    }
++    case llvm::Triple::ppc64:
+     case llvm::Triple::ppc64le:
+       ABIName = "elfv2";
+       break;
diff --git a/srcpkgs/llvm12/template b/srcpkgs/llvm12/template
index 7b361bbbf5bc..274b57183654 100644
--- a/srcpkgs/llvm12/template
+++ b/srcpkgs/llvm12/template
@@ -43,6 +43,12 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
+_enabled_projects="clang;lld"
+
+subpackages+=" clang12 libclang12 libclang12-cpp libllvm12 lld12 lld12-devel"
+
+configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+
 post_patch() {
 	# update config.guess for better platform detection
 	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
@@ -73,8 +79,10 @@ pre_configure() {
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
 			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
 		make ${makejobs} -C utils/TableGen
+		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
 		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
+		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
 		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
 		cd ../..
 	fi
@@ -117,6 +125,69 @@ do_install() {
 	fi
 }
 
+clang12_package() {
+	conflicts="clang"
+	lib32disabled=yes
+	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
+	 libclang12-${version}_${revision}"
+	short_desc+=" - C language family frontend"
+	homepage="https://clang.llvm.org/"
+	pkg_install() {
+		vmove usr/include/clang
+		vmove usr/include/clang-c
+		vmove "usr/bin/*clang*"
+		vmove usr/bin/c-index-test
+		vmove usr/lib/clang
+		vmove usr/lib/cmake/clang
+		vmove "usr/lib/libclang*.a"
+		vmove "usr/lib/libclang*.so"
+		vmove usr/share/clang
+		vmove usr/share/doc/clang
+		vmove usr/share/man/man1/clang.1
+	}
+}
+
+libclang12_package() {
+	short_desc+=" - C frontend runtime library"
+	pkg_install() {
+		vmove "usr/lib/libclang.so.*"
+	}
+}
+
+libclang12-cpp_package() {
+	short_desc+=" - C frontend runtime library (C++ interface)"
+	pkg_install() {
+		vmove "usr/lib/libclang-cpp.so.*"
+	}
+}
+
+lld12_package() {
+	conflicts="lld"
+	lib32disabled=yes
+	short_desc+=" - linker"
+	homepage="https://lld.llvm.org"
+	pkg_install() {
+		vmove usr/bin/lld*
+		vmove usr/bin/wasm-ld
+		vmove usr/bin/ld.lld*
+		vmove usr/bin/ld64.lld*
+		vmove usr/share/doc/lld
+	}
+}
+
+lld12-devel_package() {
+	conflicts="lld-devel"
+	lib32disabled=yes
+	short_desc+=" - linker - development files"
+	homepage="https://lld.llvm.org"
+	depends="lld12>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include/lld
+		vmove usr/lib/cmake/lld
+		vmove "usr/lib/liblld*a"
+	}
+}
+
 libllvm12_package() {
 	short_desc+=" - runtime library"
 	pkg_install() {

From 78d156cc0e8cbf8d6628dc316523878417e952be Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 05/29] chromium: update for llvm14

---
 srcpkgs/chromium/template | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/srcpkgs/chromium/template b/srcpkgs/chromium/template
index 0dce8772fdb8..8b604a349229 100644
--- a/srcpkgs/chromium/template
+++ b/srcpkgs/chromium/template
@@ -2,7 +2,7 @@
 pkgname=chromium
 # See https://chromiumdash.appspot.com/releases?platform=Linux for the latest version
 version=101.0.4951.41
-revision=1
+revision=2
 archs="i686* x86_64* aarch64* armv7l* ppc64le*"
 short_desc="Google's attempt at creating a safer, faster, and more stable browser"
 maintainer="Duncaen <duncaen@voidlinux.org>"
@@ -20,7 +20,7 @@ desc_option_debug="Build with debug symbols"
 desc_option_js_optimize="Optimize the JS used for Chromium's UI"
 desc_option_pipewire="Enable support for screen sharing for WebRTC via PipeWire"
 
-hostmakedepends="$(vopt_if clang "clang lld llvm12") python python3 pkgconf perl gperf bison ninja nodejs hwids
+hostmakedepends="$(vopt_if clang "clang lld llvm14") python python3 pkgconf perl gperf bison ninja nodejs hwids
  libatomic-devel libevent-devel libglib-devel $(vopt_if js_optimize openjdk) wayland-devel libepoxy-devel"
 makedepends="libpng-devel gtk+-devel gtk+3-devel nss-devel pciutils-devel
  libXi-devel libgcrypt-devel libgnome-keyring-devel cups-devel elfutils-devel
@@ -266,12 +266,6 @@ do_configure() {
 		'disable_fieldtrial_testing_config=true'
 
 		'is_official_build=true'
-
-		# segfaults with llvm-12.0.1
-		'is_cfi=false'
-		'use_thin_lto=false'
-		'use_cfi_icall=false'
-		'chrome_pgo_phase=0'
 	)
 
 	if [ "$CROSS_BUILD" ]; then

From bc3cf98e2b9f6019b8ca00c820a3b358b091d1a9 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 06/29] ghdl: update for llvm14

---
 srcpkgs/ghdl/patches/{llvm12.patch => llvm.patch} | 2 ++
 srcpkgs/ghdl/template                             | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)
 rename srcpkgs/ghdl/patches/{llvm12.patch => llvm.patch} (82%)

diff --git a/srcpkgs/ghdl/patches/llvm12.patch b/srcpkgs/ghdl/patches/llvm.patch
similarity index 82%
rename from srcpkgs/ghdl/patches/llvm12.patch
rename to srcpkgs/ghdl/patches/llvm.patch
index 8d2f76bfda06..9201816ae053 100644
--- a/srcpkgs/ghdl/patches/llvm12.patch
+++ b/srcpkgs/ghdl/patches/llvm.patch
@@ -7,6 +7,8 @@ index c1c1a6d..dad7c38 100755
         check_version 10.0 $llvm_version ||
         check_version 11.0 $llvm_version ||
 +       check_version 12.0 $llvm_version ||
++       check_version 13.0 $llvm_version ||
++       check_version 14.0 $llvm_version ||
         false; then
      echo "Debugging is enabled with llvm $llvm_version"
    else
diff --git a/srcpkgs/ghdl/template b/srcpkgs/ghdl/template
index e756d8c3cd87..9ca1169b22bd 100644
--- a/srcpkgs/ghdl/template
+++ b/srcpkgs/ghdl/template
@@ -7,7 +7,7 @@
 pkgname=ghdl
 reverts="20181129_1"
 version=1.0.0
-revision=1
+revision=2
 build_style=configure
 configure_args="--prefix=/usr --srcdir=.. --incdir=lib/ghdl/include"
 makedepends="zlib-devel"

From 8744d7d79b7b6f2bdf5e89453a5f8584fdb99df8 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 07/29] qt5: rebuild for llvm14

---
 srcpkgs/qt5/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index ee788fad2019..25f15583a42d 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -3,7 +3,7 @@ pkgname=qt5
 version=5.15.3+20220222
 # commit fcca82ca40a5d8a02a4ddd90846d070f2c58cfad
 # base repo: https://invent.kde.org/qt/qt/qt5
-revision=3
+revision=4
 build_style=meta
 hostmakedepends="cmake clang flex perl glib-devel pkg-config
  python re2c ruby which"

From fdc1b9b45f51d61cb9e93148eb181103a6188f85 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 08/29] tilix: rebuild for llvm14

---
 srcpkgs/tilix/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/tilix/template b/srcpkgs/tilix/template
index d8f014bc78c5..ac1bf7dd3bdd 100644
--- a/srcpkgs/tilix/template
+++ b/srcpkgs/tilix/template
@@ -1,7 +1,7 @@
 # Template file for 'tilix'
 pkgname=tilix
 version=1.9.4
-revision=3
+revision=4
 build_style=meson
 configure_args="-Db_lto=false"
 hostmakedepends="automake gettext-devel gdk-pixbuf glib-devel ldc po4a pkg-config

From 5a1cbff7e2cb513167841e803e7f1f4d905842b4 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 09/29] shiboken2: rebuild for llvm14

---
 srcpkgs/shiboken2/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/shiboken2/template b/srcpkgs/shiboken2/template
index b56613229c13..ab9d2c4cb8f9 100644
--- a/srcpkgs/shiboken2/template
+++ b/srcpkgs/shiboken2/template
@@ -1,7 +1,7 @@
 # Template file for 'shiboken2'
 pkgname=shiboken2
 version=5.15.2
-revision=4
+revision=5
 _pkgname="pyside-setup-opensource-src-${version}"
 wrksrc="${_pkgname/%5.14.2.1/5.14.2}"
 build_wrksrc="sources/shiboken2"

From c448e99709e362dd785b7348faec90e85e0ea8ab Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 10/29] gnome-builder: rebuild for llvm14

---
 srcpkgs/gnome-builder/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/gnome-builder/template b/srcpkgs/gnome-builder/template
index 93559b21774f..5a5a51893ae8 100644
--- a/srcpkgs/gnome-builder/template
+++ b/srcpkgs/gnome-builder/template
@@ -1,7 +1,7 @@
 # Template file for 'gnome-builder'
 pkgname=gnome-builder
 version=41.3
-revision=1
+revision=2
 build_style=meson
 build_helper=qemu
 configure_args="-Dhelp=true -Dnetwork_tests=false"

From c580f7815d7a81d7c4bd56bd27ebcd22b82635d6 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 11/29] bcc: rebuild for llvm14

---
 srcpkgs/bcc/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/bcc/template b/srcpkgs/bcc/template
index 54509b63d5a7..2cfa0a2977d0 100644
--- a/srcpkgs/bcc/template
+++ b/srcpkgs/bcc/template
@@ -1,7 +1,7 @@
 # Template file for 'bcc'
 pkgname=bcc
 version=0.24.0
-revision=1
+revision=2
 wrksrc="bcc"
 build_style=cmake
 configure_args="-DREVISION=${version} -DENABLE_LLVM_SHARED=1"

From 46690d5c043d37c6b3209ce8098e1a7cd85ab123 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 12/29] mesa: rebuild for llvm14

---
 srcpkgs/mesa/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/mesa/template b/srcpkgs/mesa/template
index c90500de7416..8f08262fb135 100644
--- a/srcpkgs/mesa/template
+++ b/srcpkgs/mesa/template
@@ -1,7 +1,7 @@
 # Template file for 'mesa'
 pkgname=mesa
 version=21.3.7
-revision=1
+revision=2
 build_style=meson
 configure_args="-Dglvnd=true -Dshared-glapi=enabled -Dgbm=enabled -Degl=enabled
  -Dosmesa=true -Dgles1=enabled -Dgles2=enabled -Dglx=dri -Ddri3=enabled

From 127a0bb67ac383aecbbe9025649c63cc2ae4a743 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 13/29] juCi++: rebuild for llvm14

---
 srcpkgs/juCi++/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/juCi++/template b/srcpkgs/juCi++/template
index 1a7604b44a00..5103324dec20 100644
--- a/srcpkgs/juCi++/template
+++ b/srcpkgs/juCi++/template
@@ -1,7 +1,7 @@
 # Template file for 'juCi++'
 pkgname=juCi++
 version=1.6.2
-revision=2
+revision=3
 _libclangmm_commit="b342f4dd6de4fe509a692a4b4fcfc7e24aae9590"
 _tiny_commit="c9c8bf810ddad8cd17882b9a9ee628a690e779f5"
 wrksrc="jucipp-v${version}"

From 394ee70e8242cfee71f4afee3dc30ef81f0e7cff Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 14/29] kdevelop: rebuild for llvm14

---
 srcpkgs/kdevelop/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/kdevelop/template b/srcpkgs/kdevelop/template
index 010185849d80..abf08c313071 100644
--- a/srcpkgs/kdevelop/template
+++ b/srcpkgs/kdevelop/template
@@ -1,7 +1,7 @@
 # Template file for 'kdevelop'
 pkgname=kdevelop
 version=21.12.3
-revision=1
+revision=2
 build_style=cmake
 configure_args="-DBUILD_TESTING=OFF"
 hostmakedepends="extra-cmake-modules qt5-qmake qt5-host-tools qt5-tools

From b8e909079e1f1f70b87876da73ad6b1718f2a24d Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 15/29] codelite: rebuild for llvm14

---
 srcpkgs/codelite/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/codelite/template b/srcpkgs/codelite/template
index 3a993a2c0cfb..24e2c879dd45 100644
--- a/srcpkgs/codelite/template
+++ b/srcpkgs/codelite/template
@@ -1,7 +1,7 @@
 # Template file for 'codelite'
 pkgname=codelite
 version=15.0.6
-revision=1
+revision=2
 build_style=cmake
 build_helper=cmake-wxWidgets-gtk3
 configure_args="-DWITH_PCH=0 -DWITH_WX_CONFIG=wx-config-gtk3

From 72aad906e80a17ccc97398f1324176e9d0cf3857 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 16/29] ccls: rebuild for llvm14

---
 srcpkgs/ccls/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/ccls/template b/srcpkgs/ccls/template
index fbb7c6847bc1..40aba3b55bfe 100644
--- a/srcpkgs/ccls/template
+++ b/srcpkgs/ccls/template
@@ -1,7 +1,7 @@
 # Template file for 'ccls'
 pkgname=ccls
 version=0.20210330
-revision=2
+revision=3
 build_style=cmake
 hostmakedepends="clang-tools-extra"
 makedepends="llvm ncurses-devel rapidjson zlib-devel clang-tools-extra"

From 313b9dcaed208ddc1198390cdf5d0f60e01c00c1 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 17/29] clazy: rebuild for llvm14

---
 srcpkgs/clazy/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/clazy/template b/srcpkgs/clazy/template
index 11f3bab55aef..f81de08ab836 100644
--- a/srcpkgs/clazy/template
+++ b/srcpkgs/clazy/template
@@ -1,7 +1,7 @@
 # Template file for 'clazy'
 pkgname=clazy
 version=1.11
-revision=1
+revision=2
 build_style=cmake
 build_helper=qemu
 hostmakedepends="llvm"

From 4550c56aeda7a1fb90cc0c8f1b584a2d1c2ea400 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 18/29] bpftrace: rebuild for llvm14

---
 srcpkgs/bpftrace/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/bpftrace/template b/srcpkgs/bpftrace/template
index 28ab3c626399..eb2480d2230e 100644
--- a/srcpkgs/bpftrace/template
+++ b/srcpkgs/bpftrace/template
@@ -1,7 +1,7 @@
 # Template file for 'bpftrace'
 pkgname=bpftrace
 version=0.14.1
-revision=1
+revision=2
 archs="x86_64* aarch64* ppc64*"
 build_style=cmake
 configure_args="-DBUILD_TESTING=OFF"  # needs root to run

From bd26ab8eff3ab9fc7c1450122507057bda8429fb Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 19/29] rtags: rebuild for llvm14

---
 srcpkgs/rtags/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/rtags/template b/srcpkgs/rtags/template
index b496a1b0e721..9b161e690d76 100644
--- a/srcpkgs/rtags/template
+++ b/srcpkgs/rtags/template
@@ -1,7 +1,7 @@
 # Template file for 'rtags'
 pkgname=rtags
 version=2.38
-revision=5
+revision=6
 build_style=cmake
 # Don't run tests in do_install, please.
 configure_args="-DSKIP_CTEST=TRUE"

From 85c1d5ed55c9cfec26fb359efdf77773f30bc64c Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:07:19 +0200
Subject: [PATCH 20/29] beignet: remove package

---
 srcpkgs/beignet/patches/cl_uint.patch         |  22 -
 ...419a0008e38ef2d9d255d9e9c74e9fba084b.patch | 134 ---
 srcpkgs/beignet/patches/llvm06.patch          |  33 -
 srcpkgs/beignet/patches/llvm08.patch          |  56 --
 srcpkgs/beignet/patches/llvm09.patch          | 111 ---
 srcpkgs/beignet/patches/llvm10.patch          | 347 -------
 srcpkgs/beignet/patches/llvm11.patch          | 937 ------------------
 srcpkgs/beignet/patches/llvm12.patch          | 115 ---
 srcpkgs/beignet/patches/musl.patch            |  11 -
 srcpkgs/beignet/template                      |  22 -
 srcpkgs/beignet/update                        |   1 -
 srcpkgs/removed-packages/template             |   3 +-
 12 files changed, 2 insertions(+), 1790 deletions(-)
 delete mode 100644 srcpkgs/beignet/patches/cl_uint.patch
 delete mode 100644 srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm06.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm08.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm09.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm10.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm11.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm12.patch
 delete mode 100644 srcpkgs/beignet/patches/musl.patch
 delete mode 100644 srcpkgs/beignet/template
 delete mode 100644 srcpkgs/beignet/update

diff --git a/srcpkgs/beignet/patches/cl_uint.patch b/srcpkgs/beignet/patches/cl_uint.patch
deleted file mode 100644
index 86ba00f04e95..000000000000
--- a/srcpkgs/beignet/patches/cl_uint.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/src/cl_api_kernel.c	2017-09-22 10:05:22.000000000 +0200
-+++ b/src/cl_api_kernel.c	2020-03-24 18:27:40.186485887 +0100
-@@ -151,7 +151,7 @@
-         fixed_local_sz[0] = 16;
-         fixed_local_sz[1] = 1;
-       } else {
--        uint j, maxDimSize = 64 /* from 64? */, maxGroupSize = 256; //MAX_WORK_GROUP_SIZE may too large
-+        cl_uint j, maxDimSize = 64 /* from 64? */, maxGroupSize = 256; //MAX_WORK_GROUP_SIZE may too large
-         size_t realGroupSize = 1;
-         for (i = 0; i < work_dim; i++) {
-           for (j = maxDimSize; j > 1; j--) {
---- a/src/cl_enqueue.c	2017-09-22 10:05:22.000000000 +0200
-+++ b/src/cl_enqueue.c	2020-03-24 18:30:12.031479833 +0100
-@@ -494,7 +494,7 @@
- cl_int cl_enqueue_svm_free(enqueue_data *data, cl_int status) {
-   int i;
-   void **pointers = data->pointers;
--  uint num_svm_ptrs = data->size;
-+  cl_uint num_svm_ptrs = data->size;
-   cl_int err = CL_SUCCESS;
- 
-   if (status != CL_COMPLETE)
diff --git a/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch b/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
deleted file mode 100644
index 8de9e6e2f093..000000000000
--- a/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
+++ /dev/null
@@ -1,134 +0,0 @@
-From e1b2419a0008e38ef2d9d255d9e9c74e9fba084b Mon Sep 17 00:00:00 2001
-From: "Rebecca N. Palmer" <rebecca_palmer@zoho.com>
-Date: Sat, 21 Jul 2018 20:05:54 +0100
-Subject: Add preliminary LLVM 7 support
-
-This is preliminary because LLVM 7 has not been released yet:
-it was tested with the snapshot from Debian experimental (svn336894).
-
-1.Change linking order, as clangCodeGen now links to clangFrontend
-2.Pass references not pointers to WriteBitcodeToFile and CloneModule
-3.Add the headers that LoopSimplifyID, LCSSAID and
-some create*Pass have moved to
-4.Define our DEBUG whether or not we just undefined LLVM's
-(theirs is now LLVM_DEBUG, but we never actually use it)
-
-Signed-off-by: Rebecca N. Palmer <rebecca_palmer@zoho.com>
-Reviewed-by: Yang Rong <rong.r.yang@intel.com>
----
- CMake/FindLLVM.cmake                     | 2 +-
- backend/src/backend/gen_program.cpp      | 8 ++++++++
- backend/src/backend/program.cpp          | 4 ++++
- backend/src/llvm/ExpandLargeIntegers.cpp | 2 +-
- backend/src/llvm/llvm_bitcode_link.cpp   | 4 ++++
- backend/src/llvm/llvm_includes.hpp       | 4 ++++
- 6 files changed, 22 insertions(+), 2 deletions(-)
-
-diff --git a/CMake/FindLLVM.cmake b/CMake/FindLLVM.cmake
-index 5457f24..f882589 100644
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -113,10 +113,10 @@ macro(add_one_lib name)
- endmacro()
- 
- #Assume clang lib path same as llvm lib path
-+add_one_lib("clangCodeGen")
- add_one_lib("clangFrontend")
- add_one_lib("clangSerialization")
- add_one_lib("clangDriver")
--add_one_lib("clangCodeGen")
- add_one_lib("clangSema")
- add_one_lib("clangStaticAnalyzerFrontend")
- add_one_lib("clangStaticAnalyzerCheckers")
-diff --git a/backend/src/backend/gen_program.cpp b/backend/src/backend/gen_program.cpp
-index 274c99c..4159234 100644
---- a/backend/src/backend/gen_program.cpp
-+++ b/backend/src/backend/gen_program.cpp
-@@ -454,7 +454,11 @@ namespace gbe {
- #ifdef GBE_COMPILER_AVAILABLE
-       std::string str;
-       llvm::raw_string_ostream OS(str);
-+#if LLVM_VERSION_MAJOR >= 7
-+      llvm::WriteBitcodeToFile(*((llvm::Module*)prog->module), OS);
-+#else
-       llvm::WriteBitcodeToFile((llvm::Module*)prog->module, OS);
-+#endif
-       std::string& bin_str = OS.str();
-       int llsz = bin_str.size();
-       *binary = (char *)malloc(sizeof(char) * (llsz+1) );
-@@ -545,7 +549,11 @@ namespace gbe {
-                                     &modRef);
-         src = llvm::unwrap(modRef);
-       }
-+#if LLVM_VERSION_MAJOR >= 7
-+      llvm::Module* clone = llvm::CloneModule(*src).release();
-+#else
-       llvm::Module* clone = llvm::CloneModule(src).release();
-+#endif
-       if (LLVMLinkModules2(wrap(dst), wrap(clone))) {
- #elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-       if (LLVMLinkModules(wrap(dst), wrap(src), LLVMLinkerPreserveSource_Removed, &errMsg)) {
-diff --git a/backend/src/backend/program.cpp b/backend/src/backend/program.cpp
-index c37c595..b36f7b4 100644
---- a/backend/src/backend/program.cpp
-+++ b/backend/src/backend/program.cpp
-@@ -794,7 +794,11 @@ namespace gbe {
-       llvm::raw_fd_ostream ostream (dumpSPIRBinaryName.c_str(),
-                                     err, llvm::sys::fs::F_None);
-       if (!err)
-+#if LLVM_VERSION_MAJOR<7
-         llvm::WriteBitcodeToFile(*out_module, ostream);
-+#else
-+        llvm::WriteBitcodeToFile(**out_module, ostream);
-+#endif
-     }
- #endif
-     return true;
-diff --git a/backend/src/llvm/ExpandLargeIntegers.cpp b/backend/src/llvm/ExpandLargeIntegers.cpp
-index 8515dc1..4aec44e 100644
---- a/backend/src/llvm/ExpandLargeIntegers.cpp
-+++ b/backend/src/llvm/ExpandLargeIntegers.cpp
-@@ -99,8 +99,8 @@ using namespace llvm;
- 
- #ifdef DEBUG
-   #undef DEBUG
--  #define DEBUG(...)
- #endif
-+#define DEBUG(...)
- // Break instructions up into no larger than 64-bit chunks.
- static const unsigned kChunkBits = 64;
- static const unsigned kChunkBytes = kChunkBits / CHAR_BIT;
-diff --git a/backend/src/llvm/llvm_bitcode_link.cpp b/backend/src/llvm/llvm_bitcode_link.cpp
-index ef56e4c..4c3e20e 100644
---- a/backend/src/llvm/llvm_bitcode_link.cpp
-+++ b/backend/src/llvm/llvm_bitcode_link.cpp
-@@ -340,7 +340,11 @@ namespace gbe
-     /* We use beignet's bitcode as dst because it will have a lot of
-        lazy functions which will not be loaded. */
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 39
-+#if LLVM_VERSION_MAJOR >= 7
-+    llvm::Module * linked_module = llvm::CloneModule(*(llvm::Module*)mod).release();
-+#else
-     llvm::Module * linked_module = llvm::CloneModule((llvm::Module*)mod).release();
-+#endif
-     if(LLVMLinkModules2(wrap(clonedLib), wrap(linked_module))) {
- #else
-     char* errorMsg;
-diff --git a/backend/src/llvm/llvm_includes.hpp b/backend/src/llvm/llvm_includes.hpp
-index 184553a..ffccf02 100644
---- a/backend/src/llvm/llvm_includes.hpp
-+++ b/backend/src/llvm/llvm_includes.hpp
-@@ -89,6 +89,10 @@
- #include "llvm/CodeGen/IntrinsicLowering.h"
- 
- #include "llvm/Transforms/Scalar.h"
-+#if LLVM_VERSION_MAJOR >= 7
-+#include "llvm/Transforms/Utils.h"
-+#include "llvm/Transforms/InstCombine/InstCombine.h"
-+#endif
- #include "llvm/MC/MCAsmInfo.h"
- #include "llvm/MC/MCContext.h"
- #include "llvm/MC/MCInstrInfo.h"
--- 
-cgit v1.1
-
diff --git a/srcpkgs/beignet/patches/llvm06.patch b/srcpkgs/beignet/patches/llvm06.patch
deleted file mode 100644
index 3389e66c82df..000000000000
--- a/srcpkgs/beignet/patches/llvm06.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-Source: Arch Linux
-Upstream: unknown
-Reason: fixes llvm6 compilation
-
---- a/backend/src/llvm/llvm_to_gen.cpp	2017-10-24 09:04:48.000000000 +0300
-+++ b/backend/src/llvm/llvm_to_gen.cpp	2018-03-16 16:08:54.669963824 +0200
-@@ -322,7 +322,11 @@ namespace gbe
-     DataLayout DL(&mod);
-     
-     gbeDiagnosticContext dc;
-+#if LLVM_VERSION_MAJOR >= 6
-+    mod.getContext().setDiagnosticHandlerCallBack(&gbeDiagnosticHandler,&dc);
-+#else
-     mod.getContext().setDiagnosticHandler(&gbeDiagnosticHandler,&dc);
-+#endif
- 
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-     mod.setDataLayout(DL);
---- a/backend/src/llvm/llvm_unroll.cpp	2017-10-24 09:04:48.000000000 +0300
-+++ b/backend/src/llvm/llvm_unroll.cpp	2018-03-16 16:09:47.736403557 +0200
-@@ -205,7 +205,9 @@ namespace gbe {
-           if (parentTripCount != 0 && currTripCount * parentTripCount > 32) {
-             //Don't change the unrollID if doesn't force unroll.
-             //setUnrollID(parentL, false);
--#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-+#if LLVM_VERSION_MAJOR >= 6
-+            loopInfo.erase(parentL);
-+#elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-             loopInfo.markAsRemoved(parentL);
- #else
-             LPM.deleteLoopFromQueue(parentL);
-Only in Beignet-1.3.2-Source: build
-
diff --git a/srcpkgs/beignet/patches/llvm08.patch b/srcpkgs/beignet/patches/llvm08.patch
deleted file mode 100644
index a0c5e7a7c4f7..000000000000
--- a/srcpkgs/beignet/patches/llvm08.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 75c152599a7c1739e6dadcdb9b377acf7e44d9cf Mon Sep 17 00:00:00 2001
-From: Jan Beich <jbeich@FreeBSD.org>
-Date: Wed, 30 Jan 2019 12:42:34 +0000
-Subject: [PATCH] lang/beignet: unbreak with llvm80
-
-Regressed by https://github.com/llvm/llvm-project/commit/721d95713a9e
-
-unable to load /usr/local/lib/beignet//libgbeinterp.so which is part of the driver, please check!
-ld-elf.so.1: /usr/local/lib/beignet//libgbeinterp.so: Undefined symbol "_ZN4llvm24DisableABIBreakingChecksE"
-
-Regressed by https://github.com/llvm/llvm-project/commit/4a2d58e16acc
-
-backend/src/llvm/llvm_gen_backend.cpp:3076:5: error:
-      unknown type name 'TerminatorInst'
-    TerminatorInst *term = bb->getTerminator();
-    ^
-backend/src/llvm/llvm_gen_backend.cpp:3083:5: error:
-      unknown type name 'TerminatorInst'
-    TerminatorInst *term = bb->getTerminator();
-    ^
-
---- a/backend/src/CMakeLists.txt	2017-09-22 08:05:22 UTC
-+++ b/backend/src/CMakeLists.txt
-@@ -168,6 +168,7 @@ add_dependencies(gbe beignet_bitcode)
- endif (NOT (USE_STANDALONE_GBE_COMPILER STREQUAL "true"))
- 
- add_library(gbeinterp SHARED gbe_bin_interpreter.cpp)
-+target_link_libraries(gbeinterp ${LLVM_MODULE_LIBS})
- 
- if (LLVM_VERSION_NODOT VERSION_EQUAL 34)
-   find_library(TERMINFO NAMES tinfo ncurses)
---- a/backend/src/llvm/llvm_gen_backend.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -3073,14 +3073,22 @@ namespace gbe
- 
- 
-   static unsigned getChildNo(BasicBlock *bb) {
-+#if LLVM_VERSION_MAJOR < 8
-     TerminatorInst *term = bb->getTerminator();
-+#else
-+    Instruction *term = bb->getTerminator();
-+#endif
-     return term->getNumSuccessors();
-   }
- 
-   // return NULL if index out-range of children number
-   static BasicBlock *getChildPossible(BasicBlock *bb, unsigned index) {
- 
-+#if LLVM_VERSION_MAJOR < 8
-     TerminatorInst *term = bb->getTerminator();
-+#else
-+    Instruction *term = bb->getTerminator();
-+#endif
-     unsigned childNo = term->getNumSuccessors();
-     BasicBlock *child = NULL;
-     if(index < childNo) {
diff --git a/srcpkgs/beignet/patches/llvm09.patch b/srcpkgs/beignet/patches/llvm09.patch
deleted file mode 100644
index acaeceabb6dd..000000000000
--- a/srcpkgs/beignet/patches/llvm09.patch
+++ /dev/null
@@ -1,111 +0,0 @@
-Source: FreeBSD + q66
-
-Mostly FreeBSD other than FindLLVM.cmake changes.
-Linking against clang-cpp does not work for us.
-
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -140,6 +140,7 @@ add_one_lib("clangStaticAnalyzerCore")
- add_one_lib("clangAnalysis")
- add_one_lib("clangEdit")
- add_one_lib("clangAST")
-+add_one_lib("clangASTMatchers")
- add_one_lib("clangParse")
- add_one_lib("clangSema")
- add_one_lib("clangLex")
---- a/backend/src/llvm/llvm_intrinsic_lowering.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_intrinsic_lowering.cpp
-@@ -77,7 +77,11 @@ namespace gbe {
-         std::vector<Type *> ParamTys;
-         for (Value** I = ArgBegin; I != ArgEnd; ++I)
-           ParamTys.push_back((*I)->getType());
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+        FunctionCallee FCache = M->getOrInsertFunction(NewFn,
-+#else
-         Constant* FCache = M->getOrInsertFunction(NewFn,
-+#endif
-                                         FunctionType::get(RetTy, ParamTys, false));
- 
-         IRBuilder<> Builder(CI->getParent(), BasicBlock::iterator(CI));
---- a/backend/src/llvm/llvm_sampler_fix.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp
-@@ -82,7 +82,11 @@ namespace gbe {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-           Module *M = I->getParent()->getParent()->getParent();
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+          FunctionCallee samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#endif
- #else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType(), nullptr);
- #endif
-@@ -124,7 +128,11 @@ namespace gbe {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-           Module *M = I->getParent()->getParent()->getParent();
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+          FunctionCallee samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#endif
- #else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType(), nullptr);
- #endif
---- a/backend/src/llvm/llvm_profiling.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_profiling.cpp
-@@ -163,10 +163,18 @@ namespace gbe
-       // __gen_ocl_store_timestamp(int nth, int type);
-       Value *Args[2] = {ConstantInt::get(intTy, pointNum++), ConstantInt::get(intTy, profilingType)};
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+      builder->CreateCall(module->getOrInsertFunction(
-+#else
-       builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-+#endif
-               "__gen_ocl_calc_timestamp", Type::getVoidTy(module->getContext()),
-               IntegerType::getInt32Ty(module->getContext()),
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+              IntegerType::getInt32Ty(module->getContext())),
-+#else
-               IntegerType::getInt32Ty(module->getContext()))),
-+#endif
-               ArrayRef<Value*>(Args));
- #else
-       builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-@@ -185,10 +193,18 @@ namespace gbe
-     Value *Args2[2] = {profilingBuf, ConstantInt::get(intTy, profilingType)};
- 
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+    builder->CreateCall(module->getOrInsertFunction(
-+#else
-     builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-+#endif
-             "__gen_ocl_store_profiling", Type::getVoidTy(module->getContext()),
-             ptrTy,
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+            IntegerType::getInt32Ty(module->getContext())),
-+#else
-             IntegerType::getInt32Ty(module->getContext()))),
-+#endif
-             ArrayRef<Value*>(Args2));
- #else
-     builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
---- a/backend/src/llvm/llvm_device_enqueue.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_device_enqueue.cpp
-@@ -398,8 +398,13 @@ namespace gbe {
-               std::vector<Type *> ParamTys;
-               for (Value** iter = args.begin(); iter != args.end(); ++iter)
-                 ParamTys.push_back((*iter)->getType());
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+              CallInst* newCI = builder.CreateCall(mod->getOrInsertFunction(
-+                              "__gen_enqueue_kernel_slm", FunctionType::get(intTy, ParamTys, false)), args);
-+#else
-               CallInst* newCI = builder.CreateCall(cast<llvm::Function>(mod->getOrInsertFunction(
-                               "__gen_enqueue_kernel_slm", FunctionType::get(intTy, ParamTys, false))), args);
-+#endif
-               CI->replaceAllUsesWith(newCI);
-               deadInsnSet.insert(CI);
-             }
diff --git a/srcpkgs/beignet/patches/llvm10.patch b/srcpkgs/beignet/patches/llvm10.patch
deleted file mode 100644
index 8aafe48a240d..000000000000
--- a/srcpkgs/beignet/patches/llvm10.patch
+++ /dev/null
@@ -1,347 +0,0 @@
-diff --git CMake/FindLLVM.cmake CMake/FindLLVM.cmake
-index 0a59e47..6e90923 100644
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -104,28 +104,16 @@ string(REGEX REPLACE " *\n" "" LLVM_SYSTEM_LIBS ${LLVM_SYSTEM_LIBS_ORIG})
- endif (LLVM_SYSTEM_LIBS_ORIG)
- endif (LLVM_VERSION_NODOT VERSION_GREATER 34)
- 
-+#something harmless because whitespace at start is an error
-+set(CLANG_LIBRARIES "-ldl")
- macro(add_one_lib name)
-   FIND_LIBRARY(CLANG_LIB
-     NAMES ${name}
-     PATHS ${LLVM_LIBRARY_DIR} NO_DEFAULT_PATH)
--  set(CLANG_LIBRARIES ${CLANG_LIBRARIES} ${CLANG_LIB})
-+  set(CLANG_LIBRARIES "${CLANG_LIBRARIES} ${CLANG_LIB}")
-+  message(STATUS "clanglibs name ${name} this ${CLANG_LIB} all ${CLANG_LIBRARIES} ")
- 	unset(CLANG_LIB CACHE)
- endmacro()
- 
- #Assume clang lib path same as llvm lib path
--add_one_lib("clangCodeGen")
--add_one_lib("clangFrontend")
--add_one_lib("clangSerialization")
--add_one_lib("clangDriver")
--add_one_lib("clangSema")
--add_one_lib("clangStaticAnalyzerFrontend")
--add_one_lib("clangStaticAnalyzerCheckers")
--add_one_lib("clangStaticAnalyzerCore")
--add_one_lib("clangAnalysis")
--add_one_lib("clangEdit")
--add_one_lib("clangAST")
--add_one_lib("clangASTMatchers")
--add_one_lib("clangParse")
--add_one_lib("clangSema")
--add_one_lib("clangLex")
--add_one_lib("clangBasic")
-+add_one_lib("clang-cpp")
-diff --git CMakeLists.txt CMakeLists.txt
-index c11acbb..08f427d 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -79,7 +79,7 @@ elseif (COMPILER STREQUAL "CLANG")
- elseif (COMPILER STREQUAL "ICC")
-   set (CMAKE_C_CXX_FLAGS "${CMAKE_C_CXX_FLAGS}  -wd2928 -Wall -fPIC -fstrict-aliasing -fp-model fast -msse4.1 -Wl,-E")
- endif ()
--set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
-+set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof")
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
- set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
- set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
-diff --git backend/src/backend/program.cpp backend/src/backend/program.cpp
-index b36f7b4..e666031 100644
---- a/backend/src/backend/program.cpp
-+++ b/backend/src/backend/program.cpp
-@@ -694,9 +694,9 @@ namespace gbe {
- #endif
-                 );
- 
-+    llvm::cl::ResetAllOptionOccurrences();
-     clang::CompilerInvocation::CreateFromArgs(*CI,
--                                              &args[0],
--                                              &args[0] + args.size(),
-+                                              clang::ArrayRef<const char*>(args),
-                                               Diags);
-     // Create the compiler instance
-     clang::CompilerInstance Clang;
-@@ -1242,8 +1242,7 @@ EXTEND_QUOTE:
-       // Create the compiler invocation
-       std::unique_ptr<clang::CompilerInvocation> CI(new clang::CompilerInvocation);
-       return clang::CompilerInvocation::CreateFromArgs(*CI,
--                                                       &args[0],
--                                                       &args[0] + args.size(),
-+                                                       clang::ArrayRef<const char*>(args),
-                                                        Diags);
-     }
- #endif
-diff --git backend/src/llvm/llvm_gen_backend.cpp backend/src/llvm/llvm_gen_backend.cpp
-index c6fc30d..82441d8 100644
---- a/backend/src/llvm/llvm_gen_backend.cpp
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -575,10 +575,12 @@ namespace gbe
-         has_errors(false),
-         legacyMode(true)
-     {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-       initializeLoopInfoWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeLoopInfoPass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-       pass = PASS_EMIT_REGISTERS;
-     }
-diff --git backend/src/llvm/llvm_gen_backend.hpp backend/src/llvm/llvm_gen_backend.hpp
-index b4715b1..8e74f7a 100644
---- a/backend/src/llvm/llvm_gen_backend.hpp
-+++ b/backend/src/llvm/llvm_gen_backend.hpp
-@@ -130,10 +130,10 @@ namespace gbe
-   llvm::FunctionPass *createGenPass(ir::Unit &unit);
- 
-   /*! Remove the GEP instructions */
--  llvm::BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit);
-+  llvm::FunctionPass *createRemoveGEPPass(const ir::Unit &unit);
- 
-   /*! Merge load/store if possible */
--  llvm::BasicBlockPass *createLoadStoreOptimizationPass();
-+  llvm::FunctionPass *createLoadStoreOptimizationPass();
- 
-   /*! Scalarize all vector op instructions */
-   llvm::FunctionPass* createScalarizePass();
-@@ -141,7 +141,7 @@ namespace gbe
-   llvm::ModulePass* createBarrierNodupPass(bool);
- 
-   /*! Convert the Intrinsic call to gen function */
--  llvm::BasicBlockPass *createIntrinsicLoweringPass();
-+  llvm::FunctionPass *createIntrinsicLoweringPass();
- 
-   /*! Passer the printf function call. */
-   llvm::FunctionPass* createPrintfParserPass(ir::Unit &unit);
-diff --git backend/src/llvm/llvm_intrinsic_lowering.cpp backend/src/llvm/llvm_intrinsic_lowering.cpp
-index 94f0ce6..b5539e9 100644
---- a/backend/src/llvm/llvm_intrinsic_lowering.cpp
-+++ b/backend/src/llvm/llvm_intrinsic_lowering.cpp
-@@ -29,12 +29,12 @@
- using namespace llvm;
- 
- namespace gbe {
--    class InstrinsicLowering : public BasicBlockPass
-+    class InstrinsicLowering : public FunctionPass
-     {
-     public:
-       static char ID;
-       InstrinsicLowering() :
--        BasicBlockPass(ID) {}
-+        FunctionPass(ID) {}
- 
-       void getAnalysisUsage(AnalysisUsage &AU) const {
- 
-@@ -93,9 +93,9 @@ namespace gbe {
-         CI->eraseFromParent();
-         return NewCI;
-       }
--      virtual bool runOnBasicBlock(BasicBlock &BB)
-+      virtual bool runOnFunction(Function &F)
-       {
--        bool changedBlock = false;
-+        for (BasicBlock &BB : F) {
-         Module *M = BB.getParent()->getParent();
- 
-         DataLayout TD(M);
-@@ -159,13 +159,14 @@ namespace gbe {
-             }
-           }
-         }
--        return changedBlock;
-+        }
-+        return true;
-       }
-     };
- 
-     char InstrinsicLowering::ID = 0;
- 
--    BasicBlockPass *createIntrinsicLoweringPass() {
-+    FunctionPass *createIntrinsicLoweringPass() {
-       return new InstrinsicLowering();
-     }
- } // end namespace
-diff --git backend/src/llvm/llvm_loadstore_optimization.cpp backend/src/llvm/llvm_loadstore_optimization.cpp
-index 5aa38be..e314302 100644
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
-@@ -26,13 +26,13 @@
- 
- using namespace llvm;
- namespace gbe {
--  class GenLoadStoreOptimization : public BasicBlockPass {
-+  class GenLoadStoreOptimization : public FunctionPass {
- 
-   public:
-     static char ID;
-     ScalarEvolution *SE;
-     const DataLayout *TD;
--    GenLoadStoreOptimization() : BasicBlockPass(ID) {}
-+    GenLoadStoreOptimization() : FunctionPass(ID) {}
- 
-     void getAnalysisUsage(AnalysisUsage &AU) const {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-@@ -45,7 +45,9 @@ namespace gbe {
-       AU.setPreservesCFG();
-     }
- 
--    virtual bool runOnBasicBlock(BasicBlock &BB) {
-+    virtual bool runOnFunction(Function &F) {
-+        bool changedAnyBlock = false;
-+        for (BasicBlock &BB : F) {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-       SE = &getAnalysis<ScalarEvolutionWrapperPass>().getSE();
- #else
-@@ -59,7 +61,9 @@ namespace gbe {
-       #else
-         TD = getAnalysisIfAvailable<DataLayout>();
-       #endif
--      return optimizeLoadStore(BB);
-+           changedAnyBlock = optimizeLoadStore(BB) | changedAnyBlock;
-+        }
-+        return changedAnyBlock;
-     }
-     Type    *getValueType(Value *insn);
-     Value   *getPointerOperand(Value *I);
-@@ -148,7 +152,7 @@ namespace gbe {
-       values.push_back(merged[i]);
-     }
-     LoadInst *ld = cast<LoadInst>(merged[0]);
--    unsigned align = ld->getAlignment();
-+    MaybeAlign align = ld->getAlign();
-     unsigned addrSpace = ld->getPointerAddressSpace();
-     // insert before first load
-     Builder.SetInsertPoint(ld);
-@@ -231,7 +235,7 @@ namespace gbe {
- 
-     unsigned addrSpace = st->getPointerAddressSpace();
- 
--    unsigned align = st->getAlignment();
-+    MaybeAlign align = st->getAlign();
-     // insert before the last store
-     Builder.SetInsertPoint(merged[size-1]);
- 
-@@ -325,7 +329,7 @@ namespace gbe {
-     return changed;
-   }
- 
--  BasicBlockPass *createLoadStoreOptimizationPass() {
-+  FunctionPass *createLoadStoreOptimizationPass() {
-     return new GenLoadStoreOptimization();
-   }
- };
-diff --git backend/src/llvm/llvm_passes.cpp backend/src/llvm/llvm_passes.cpp
-index 10752a3..b8f2282 100644
---- a/backend/src/llvm/llvm_passes.cpp
-+++ b/backend/src/llvm/llvm_passes.cpp
-@@ -37,7 +37,7 @@
- #include "sys/map.hpp"
- 
- using namespace llvm;
--
-+template class cfg::Update<BasicBlock *>;
- namespace gbe
- {
-   bool isKernelFunction(const llvm::Function &F) {
-@@ -219,13 +219,13 @@ namespace gbe
-     return offset;
-   }
- 
--  class GenRemoveGEPPasss : public BasicBlockPass
-+  class GenRemoveGEPPasss : public FunctionPass
-   {
- 
-    public:
-     static char ID;
-     GenRemoveGEPPasss(const ir::Unit &unit) :
--      BasicBlockPass(ID),
-+      FunctionPass(ID),
-       unit(unit) {}
-     const ir::Unit &unit;
-     void getAnalysisUsage(AnalysisUsage &AU) const {
-@@ -242,16 +242,18 @@ namespace gbe
- 
-     bool simplifyGEPInstructions(GetElementPtrInst* GEPInst);
- 
--    virtual bool runOnBasicBlock(BasicBlock &BB)
-+    virtual bool runOnFunction(Function &F)
-     {
--      bool changedBlock = false;
-+      bool changedAnyBlock = false;
-+        for (BasicBlock &BB : F) {
-       iplist<Instruction>::iterator I = BB.getInstList().begin();
-       for (auto nextI = I, E = --BB.getInstList().end(); I != E; I = nextI) {
-         iplist<Instruction>::iterator I = nextI++;
-         if(GetElementPtrInst* gep = dyn_cast<GetElementPtrInst>(&*I))
--          changedBlock = (simplifyGEPInstructions(gep) || changedBlock);
-+          changedAnyBlock = (simplifyGEPInstructions(gep) | changedAnyBlock);
-       }
--      return changedBlock;
-+        }
-+      return changedAnyBlock;
-     }
-   };
- 
-@@ -367,7 +369,7 @@ namespace gbe
-     return true;
-   }
- 
--  BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit) {
-+  FunctionPass *createRemoveGEPPass(const ir::Unit &unit) {
-     return new GenRemoveGEPPasss(unit);
-   }
- } /* namespace gbe */
-diff --git backend/src/llvm/llvm_sampler_fix.cpp backend/src/llvm/llvm_sampler_fix.cpp
-index 2a097c8..863be6d 100644
---- a/backend/src/llvm/llvm_sampler_fix.cpp
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp
-@@ -33,10 +33,12 @@ namespace gbe {
-   class SamplerFix : public FunctionPass {
-   public:
-     SamplerFix() : FunctionPass(ID) {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
-       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-     }
- 
-diff --git backend/src/llvm/llvm_scalarize.cpp backend/src/llvm/llvm_scalarize.cpp
-index e9a2a66..e9d2ee4 100644
---- a/backend/src/llvm/llvm_scalarize.cpp
-+++ b/backend/src/llvm/llvm_scalarize.cpp
-@@ -96,10 +96,12 @@ namespace gbe {
- 
-     Scalarize() : FunctionPass(ID)
-     {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
-       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-     }
- 
-diff --git utests/CMakeLists.txt utests/CMakeLists.txt
-index 300d87a..64179c7 100644
---- a/utests/CMakeLists.txt
-+++ b/utests/CMakeLists.txt
-@@ -26,8 +26,8 @@ if (NOT NOT_BUILD_STAND_ALONE_UTEST)
-   # Threads
-   Find_Package(Threads)
- 
--  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
--  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
-+  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof -ffloat-store -fno-strict-aliasing")
-+  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS} -ffloat-store -fno-strict-aliasing") #compiler_{degrees,radians,function_argument2} use equality comparison of floats, compiler_long_bitcast uses aliasing
-   set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
-   set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
-   set (CMAKE_CXX_FLAGS_MINSIZEREL     "-Os -DNDEBUG -DGBE_DEBUG=0")
diff --git a/srcpkgs/beignet/patches/llvm11.patch b/srcpkgs/beignet/patches/llvm11.patch
deleted file mode 100644
index 2c3a4278943c..000000000000
--- a/srcpkgs/beignet/patches/llvm11.patch
+++ /dev/null
@@ -1,937 +0,0 @@
-Source: Snektron
-
-There were a few changes required for LLVM 11:
-* llvm::StringRef requires .str(), implicit conversion was removed
-* llvm::CallSite was removed, but the required methods are available on llvm::CallInst
-* VectorTyID was split into FixedVectorTyID and ScalableVectorTyID, FixedVectorTyID was used
-* CallInst::getCalledValue() was renamed to CallInst::getCalledOperand()
-* Implicit conversion from MaybeAlign to Align was removed, so MaybeAlign::valueOrOne was used instead.
-
---- a/backend/src/llvm/StripAttributes.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/StripAttributes.cpp	2020-11-09 19:04:19.641897141 +0100
-@@ -107,9 +107,8 @@
-        BB != E; ++BB) {
-     for (BasicBlock::iterator Inst = BB->begin(), E = BB->end();
-          Inst != E; ++Inst) {
--      CallSite Call(&*Inst);
--      if (Call)
--        Call.setCallingConv(CallingConv::C);
-+      if (CallInst* callInst = dyn_cast<CallInst>(&*Inst))
-+        callInst->setCallingConv(CallingConv::C);
-     }
-   }
-
---- a/backend/src/llvm/llvm_bitcode_link.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_bitcode_link.cpp	2020-11-09 17:04:09.633753428 +0100
-@@ -98,7 +98,7 @@
-         if (callFunc && callFunc->getIntrinsicID() != 0)
-           continue;
-
--        std::string fnName = call->getCalledValue()->stripPointerCasts()->getName();
-+        std::string fnName = call->getCalledOperand()->stripPointerCasts()->getName().str();
-
-         if (!MFS.insert(fnName).second) {
-           continue;
---- a/backend/src/llvm/llvm_device_enqueue.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_device_enqueue.cpp	2020-11-09 19:01:49.201915008 +0100
-@@ -45,7 +45,7 @@
-       return NULL;
-
-     /* This is a fake, to check the function bitcast is for block or not */
--    std::string fnName = Fn->getName();
-+    std::string fnName = Fn->getName().str();
-     if(fnName.find("_invoke") == std::string::npos)
-       return NULL;
-
-@@ -119,18 +119,18 @@
-       ParamTys.push_back(ty);
-     }
-     FunctionType* NewFT = FunctionType::get(Fn->getReturnType(), ParamTys, false);
--    Function* NewFn = Function::Create(NewFT, Function::ExternalLinkage, Fn->getName());
-+    Function* NewFn = Function::Create(NewFT, Function::ExternalLinkage, Fn->getName().str());
-     SmallVector<ReturnInst*, 8> Returns;
-
-     Function::arg_iterator NewFnArgIt = NewFn->arg_begin();
-     for (Function::arg_iterator I = Fn->arg_begin(), E = Fn->arg_end(); I != E; ++I) {
--      std::string ArgName = I->getName();
-+      std::string ArgName = I->getName().str();
-       NewFnArgIt->setName(ArgName);
-       VMap[&*I] = &(*NewFnArgIt++);
-     }
-     CloneFunctionInto(NewFn, Fn, VMap, /*ModuleLevelChanges=*/true, Returns);
-
--    Fn->setName("__d" + Fn->getName());
-+    Fn->setName("__d" + Fn->getName().str());
-     mod->getFunctionList().push_back(NewFn);
-     //mod->getOrInsertFunction(NewFn->getName(), NewFn->getFunctionType(),
-     //                         NewFn->getAttributes());
-@@ -147,7 +147,7 @@
-       argTypeNames.push_back(llvm::MDString::get(Context, "char*"));
-       argBaseTypeNames.push_back(llvm::MDString::get(Context, "char*"));
-       argTypeQuals.push_back(llvm::MDString::get(Context, ""));
--      argNames.push_back(llvm::MDString::get(Context, I->getName()));
-+      argNames.push_back(llvm::MDString::get(Context, I->getName().str()));
-     }
-
-     //If run to here, llvm version always > 3.9, add the version check just for build.
-@@ -198,7 +198,7 @@
-            * invoke pointer to store the index in the unit's block functions index.*/
-           Function *Fn = dyn_cast<Function>(bt->getOperand(0));
-
--          std::string fnName = Fn->getName();
-+          std::string fnName = Fn->getName().str();
-           int index = -1;
-           for(size_t i=0; i<unit.blockFuncs.size(); i++) {
-             if(unit.blockFuncs[i] == fnName) {
-@@ -241,7 +241,7 @@
-             //unnamed call function, parse the use to find the define of called function
-             SmallVector<Value*, 16> args(CI->op_begin(), CI->op_end()-1);
-
--            Value *v = CI->getCalledValue();
-+            Value *v = CI->getCalledOperand();
-             BitCastInst* bt = dyn_cast<BitCastInst>(v);
-             if(bt == NULL)
-               continue;
-@@ -316,7 +316,7 @@
-                   ConstantExpr *expr = dyn_cast<ConstantExpr>(c->getOperand(3));
-                   BitCastInst *bt = dyn_cast<BitCastInst>(expr->getAsInstruction());
-                   Function* f = dyn_cast<Function>(bt->getOperand(0));
--                  blocks[v] = f->getName();
-+                  blocks[v] = f->getName().str();
-                 }
-               }
-
-@@ -332,7 +332,7 @@
-           } else {
-             //handle enqueue_kernel function call
-             Function *fn = CI->getCalledFunction();
--            if (fn->getName().find("enqueue_kernel") == std::string::npos)
-+            if (fn->getName().str().find("enqueue_kernel") == std::string::npos)
-               continue;
-
-             //block parameter's index, 3 or 6
-@@ -361,7 +361,7 @@
-                   ConstantExpr *expr = dyn_cast<ConstantExpr>(c->getOperand(3));
-                   BitCastInst *bt = dyn_cast<BitCastInst>(expr->getAsInstruction());
-                   Function* f = dyn_cast<Function>(bt->getOperand(0));
--                  blocks[v] = f->getName();
-+                  blocks[v] = f->getName().str();
-                 }
-               }
-             } else if(isa<AllocaInst>(block)) {
---- a/backend/src/llvm/llvm_gen_backend.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_gen_backend.cpp	2020-11-09 18:33:50.919114327 +0100
-@@ -376,7 +376,7 @@
-           GBE_ASSERT(index == 0);
-           return this->_newScalar(value, key, type, index, uniform);
-           break;
--        case Type::VectorTyID:
-+        case Type::FixedVectorTyID:
-         {
-           auto vectorType = cast<VectorType>(type);
-           auto elementType = vectorType->getElementType();
-@@ -743,20 +743,20 @@
- #undef DECL_VISIT_FN
-
-     // Emit rounding instructions from gen native function
--    void emitRoundingCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode);
-+    void emitRoundingCallInst(CallInst &I, ir::Opcode opcode);
-     // Emit unary instructions from gen native function
--    void emitUnaryCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode, ir::Type = ir::TYPE_FLOAT);
-+    void emitUnaryCallInst(CallInst &I, ir::Opcode opcode, ir::Type = ir::TYPE_FLOAT);
-     // Emit unary instructions from gen native function
--    void emitAtomicInst(CallInst &I, CallSite &CS, ir::AtomicOps opcode);
-+    void emitAtomicInst(CallInst &I, ir::AtomicOps opcode);
-     // Emit workgroup instructions
--    void emitWorkGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode);
-+    void emitWorkGroupInst(CallInst &I, ir::WorkGroupOps opcode);
-     // Emit subgroup instructions
--    void emitSubGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode);
-+    void emitSubGroupInst(CallInst &I, ir::WorkGroupOps opcode);
-     // Emit subgroup instructions
--    void emitBlockReadWriteMemInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
--    void emitBlockReadWriteImageInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-+    void emitBlockReadWriteMemInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-+    void emitBlockReadWriteImageInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-
--    uint8_t appendSampler(CallSite::arg_iterator AI);
-+    uint8_t appendSampler(User::op_iterator AI);
-     uint8_t getImageID(CallInst &I);
-
-     // These instructions are not supported at all
-@@ -1320,13 +1320,13 @@
- #endif
-
-       if(typeNameNode) {
--        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
-+        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-       }
-       if(typeBaseNameNode) {
--        llvmInfo.typeBaseName= (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString();
-+        llvmInfo.typeBaseName= (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString().str();
-       }
--      llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
--      llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString();
-+      llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-+      llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString().str();
-       bool isImage = llvmInfo.isImageType();
-       bool isPipe = llvmInfo.isPipeType();
-       if (I->getType()->isPointerTy() || isImage || isPipe) {
-@@ -1531,7 +1531,7 @@
-             EltTy = getEltType(EltTy, TypeIndex);
-         }
-
--        ir::Constant cc = unit.getConstantSet().getConstant(pointer->getName());
-+        ir::Constant cc = unit.getConstantSet().getConstant(pointer->getName().str());
-         unsigned int defOffset = cc.getOffset();
-         relocs.push_back(ir::RelocEntry(offset, defOffset + constantOffset));
-
-@@ -1546,7 +1546,7 @@
-       return;
-     }
-     if (isa<GlobalVariable>(c)) {
--      ir::Constant cc = unit.getConstantSet().getConstant(c->getName());
-+      ir::Constant cc = unit.getConstantSet().getConstant(c->getName().str());
-       unsigned int defOffset = cc.getOffset();
-
-       relocs.push_back(ir::RelocEntry(offset, defOffset));
-@@ -1609,7 +1609,7 @@
-           }
-           break;
-         }
--      case Type::TypeID::VectorTyID:
-+      case Type::TypeID::FixedVectorTyID:
-         {
-           const ConstantDataSequential *cds = dyn_cast<ConstantDataSequential>(c);
-           const VectorType *vecTy = cast<VectorType>(type);
-@@ -1936,7 +1936,7 @@
-       case Type::PointerTyID:
-         regTranslator.newScalar(value, key, 0, uniform);
-         break;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         auto vectorType = cast<VectorType>(type);
-         const uint32_t elemNum = vectorType->getNumElements();
-@@ -2395,7 +2395,7 @@
- #endif
-         }
-         if(typeNameNode) {
--          llvmInfo.typeName = (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
-+          llvmInfo.typeName = (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-           //LLVM 3.9 image's type name include access qual, don't match OpenCL spec, erase them.
-           std::vector<std::string> filters = {"__read_only ", "__write_only "};
-           for (uint32_t i = 0; i < filters.size(); i++) {
-@@ -2406,16 +2406,16 @@
-           }
-         }
-         if(typeBaseNameNode){
--          llvmInfo.typeBaseName = (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString();
-+          llvmInfo.typeBaseName = (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString().str();
-         }
-         if(accessQualNode) {
--          llvmInfo.accessQual = (cast<MDString>(accessQualNode->getOperand(opID)))->getString();
-+          llvmInfo.accessQual = (cast<MDString>(accessQualNode->getOperand(opID)))->getString().str();
-         }
-         if(typeQualNode) {
--          llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString();
-+          llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString().str();
-         }
-         if(argNameNode){
--          llvmInfo.argName = (cast<MDString>(argNameNode->getOperand(opID)))->getString();
-+          llvmInfo.argName = (cast<MDString>(argNameNode->getOperand(opID)))->getString().str();
-         }
-
-         // function arguments are uniform values.
-@@ -3010,7 +3010,7 @@
-         } else {
-           this->newRegister(const_cast<GlobalVariable*>(&v));
-           ir::Register reg = regTranslator.getScalar(const_cast<GlobalVariable*>(&v), 0);
--          ir::Constant &con = unit.getConstantSet().getConstant(v.getName());
-+          ir::Constant &con = unit.getConstantSet().getConstant(v.getName().str());
-           if (!legacyMode) {
-             ir::Register regload = ctx.reg(getFamily(getType(ctx, v.getType())));
-             ctx.LOADI(getType(ctx, v.getType()), regload, ctx.newIntegerImmediate(con.getOffset(), getType(ctx, v.getType())));
-@@ -3212,7 +3212,7 @@
-         GBE_ASSERTM(false, "Unsupported calling convention");
-     }
-
--    ctx.startFunction(F.getName());
-+    ctx.startFunction(F.getName().str());
-
-     ir::Function &fn = ctx.getFunction();
-     this->regTranslator.clear();
-@@ -3810,9 +3810,9 @@
-
-   void GenWriter::regAllocateCallInst(CallInst &I) {
-     Value *dst = &I;
--    Value *Callee = I.getCalledValue();
-+    Value *Callee = I.getCalledOperand();
-     GBE_ASSERT(ctx.getFunction().getProfile() == ir::PROFILE_OCL);
--    GBE_ASSERT(isa<InlineAsm>(I.getCalledValue()) == false);
-+    GBE_ASSERT(isa<InlineAsm>(I.getCalledOperand()) == false);
-     if(I.getNumArgOperands()) GBE_ASSERT(I.hasStructRetAttr() == false);
-
-     // We only support a small number of intrinsics right now
-@@ -3870,7 +3870,7 @@
-       }
-     }
-     // Get the name of the called function and handle it
--    const std::string fnName = Callee->stripPointerCasts()->getName();
-+    const std::string fnName = Callee->stripPointerCasts()->getName().str();
-     auto genIntrinsicID = intrinsicMap.find(fnName);
-     switch (genIntrinsicID) {
-       case GEN_OCL_GET_GROUP_ID0:
-@@ -4166,7 +4166,7 @@
-     };
-   }
-
--  void GenWriter::emitRoundingCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode) {
-+  void GenWriter::emitRoundingCallInst(CallInst &I, ir::Opcode opcode) {
-     if (I.getType()->isHalfTy()) {
-       const ir::Register src = this->getRegister(I.getOperand(0));
-       const ir::Register srcFloat = ctx.reg(ir::FAMILY_DWORD);
-@@ -4177,14 +4177,14 @@
-       ctx.F32TO16(ir::TYPE_U16, ir::TYPE_FLOAT, dst, dstFloat);
-     } else {
-       GBE_ASSERT(I.getType()->isFloatTy());
--      this->emitUnaryCallInst(I,CS,opcode);
-+      this->emitUnaryCallInst(I,opcode);
-     }
-   }
-
--  void GenWriter::emitUnaryCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
-+  void GenWriter::emitUnaryCallInst(CallInst &I, ir::Opcode opcode, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--    CallSite::arg_iterator AE = CS.arg_end();
-+    User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-     GBE_ASSERT(AI != AE);
-     const ir::Register src = this->getRegister(*AI);
-@@ -4293,9 +4293,9 @@
-     this->emitAtomicInstHelper(opcode, type, dst, llvmPtr, payloadTuple);
-   }
-
--  void GenWriter::emitAtomicInst(CallInst &I, CallSite &CS, ir::AtomicOps opcode) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitAtomicInst(CallInst &I, ir::AtomicOps opcode) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-     Value *llvmPtr = *AI;
-     ir::AddressSpace addrSpace = addressSpaceLLVMToGen(llvmPtr->getType()->getPointerAddressSpace());
-@@ -4348,7 +4348,7 @@
-     }
-   }
-
--  void GenWriter::emitWorkGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode) {
-+  void GenWriter::emitWorkGroupInst(CallInst &I, ir::WorkGroupOps opcode) {
-     ir::Function &f = ctx.getFunction();
-
-     if (f.getwgBroadcastSLM() < 0 && opcode == ir::WORKGROUP_OP_BROADCAST) {
-@@ -4378,8 +4378,8 @@
-       GBE_ASSERT(f.gettidMapSLM() >= 0);
-     }
-
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     if (opcode == ir::WORKGROUP_OP_ALL || opcode == ir::WORKGROUP_OP_ANY) {
-@@ -4391,14 +4391,14 @@
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], 3);
-       ctx.WORKGROUP(opcode, (uint32_t)f.gettidMapSLM(), getRegister(&I), srcTuple, 3, ir::TYPE_S32);
-     } else if (opcode == ir::WORKGROUP_OP_BROADCAST) {
--      int argNum = CS.arg_size();
-+      int argNum = I.arg_size();
-       std::vector<ir::Register> src(argNum);
-       for (int i = 0; i < argNum; i++) {
-         src[i] = this->getRegister(*(AI++));
-       }
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], argNum);
-       ctx.WORKGROUP(ir::WORKGROUP_OP_BROADCAST, (uint32_t)f.getwgBroadcastSLM(), getRegister(&I), srcTuple, argNum,
--          getType(ctx, (*CS.arg_begin())->getType()));
-+          getType(ctx, (*I.arg_begin())->getType()));
-     } else {
-       ConstantInt *sign = dyn_cast<ConstantInt>(AI);
-       GBE_ASSERT(sign);
-@@ -4423,9 +4423,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitSubGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitSubGroupInst(CallInst &I, ir::WorkGroupOps opcode) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     if (opcode == ir::WORKGROUP_OP_ALL || opcode == ir::WORKGROUP_OP_ANY) {
-@@ -4435,7 +4435,7 @@
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], 1);
-       ctx.SUBGROUP(opcode, getRegister(&I), srcTuple, 1, ir::TYPE_S32);
-     } else if (opcode == ir::WORKGROUP_OP_BROADCAST) {
--      int argNum = CS.arg_size();
-+      int argNum = I.arg_size();
-       GBE_ASSERT(argNum == 2);
-       std::vector<ir::Register> src(argNum);
-       for (int i = 0; i < argNum; i++) {
-@@ -4443,7 +4443,7 @@
-       }
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], argNum);
-       ctx.SUBGROUP(ir::WORKGROUP_OP_BROADCAST, getRegister(&I), srcTuple, argNum,
--          getType(ctx, (*CS.arg_begin())->getType()));
-+          getType(ctx, (*I.arg_begin())->getType()));
-     } else {
-       ConstantInt *sign = dyn_cast<ConstantInt>(AI);
-       GBE_ASSERT(sign);
-@@ -4466,9 +4466,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitBlockReadWriteMemInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitBlockReadWriteMemInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     Value *llvmPtr = *(AI++);
-@@ -4522,9 +4522,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitBlockReadWriteImageInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitBlockReadWriteImageInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     const uint8_t imageID = getImageID(I);
-@@ -4557,7 +4557,7 @@
-
-   /* append a new sampler. should be called before any reference to
-    * a sampler_t value. */
--  uint8_t GenWriter::appendSampler(CallSite::arg_iterator AI) {
-+  uint8_t GenWriter::appendSampler(User::op_iterator AI) {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-     CallInst *TC = dyn_cast<CallInst>(*AI);
-     Constant *CPV = TC ? dyn_cast<Constant>(TC->getOperand(0)) : NULL;
-@@ -4595,10 +4595,9 @@
-         const ir::Function &fn = ctx.getFunction();
-
-         // Get the function arguments
--        CallSite CS(&I);
--        CallSite::arg_iterator AI = CS.arg_begin();
-+        User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--        CallSite::arg_iterator AE = CS.arg_end();
-+        User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-         switch (F->getIntrinsicID()) {
-           case Intrinsic::stacksave:
-@@ -4764,17 +4763,17 @@
-             ctx.MAD(srcType, dst, src0, src1, src2);
-           }
-           break;
--          case Intrinsic::sqrt: this->emitUnaryCallInst(I,CS,ir::OP_SQR); break;
--          case Intrinsic::ceil: this->emitRoundingCallInst(I,CS,ir::OP_RNDU); break;
--          case Intrinsic::trunc: this->emitRoundingCallInst(I,CS,ir::OP_RNDZ); break;
--          case Intrinsic::rint: this->emitRoundingCallInst(I,CS,ir::OP_RNDE); break;
--          case Intrinsic::floor: this->emitRoundingCallInst(I,CS,ir::OP_RNDD); break;
--          case Intrinsic::sin: this->emitUnaryCallInst(I,CS,ir::OP_SIN); break;
--          case Intrinsic::cos: this->emitUnaryCallInst(I,CS,ir::OP_COS); break;
--          case Intrinsic::log2: this->emitUnaryCallInst(I,CS,ir::OP_LOG); break;
--          case Intrinsic::exp2: this->emitUnaryCallInst(I,CS,ir::OP_EXP); break;
-+          case Intrinsic::sqrt: this->emitUnaryCallInst(I,ir::OP_SQR); break;
-+          case Intrinsic::ceil: this->emitRoundingCallInst(I,ir::OP_RNDU); break;
-+          case Intrinsic::trunc: this->emitRoundingCallInst(I,ir::OP_RNDZ); break;
-+          case Intrinsic::rint: this->emitRoundingCallInst(I,ir::OP_RNDE); break;
-+          case Intrinsic::floor: this->emitRoundingCallInst(I,ir::OP_RNDD); break;
-+          case Intrinsic::sin: this->emitUnaryCallInst(I,ir::OP_SIN); break;
-+          case Intrinsic::cos: this->emitUnaryCallInst(I,ir::OP_COS); break;
-+          case Intrinsic::log2: this->emitUnaryCallInst(I,ir::OP_LOG); break;
-+          case Intrinsic::exp2: this->emitUnaryCallInst(I,ir::OP_EXP); break;
-           case Intrinsic::bswap:
--            this->emitUnaryCallInst(I,CS,ir::OP_BSWAP, getUnsignedType(ctx, I.getType())); break;
-+            this->emitUnaryCallInst(I,ir::OP_BSWAP, getUnsignedType(ctx, I.getType())); break;
-           case Intrinsic::pow:
-           {
-             const ir::Register src0 = this->getRegister(*AI); ++AI;
-@@ -4794,21 +4793,20 @@
-         }
-       } else {
-         // Get the name of the called function and handle it
--        Value *Callee = I.getCalledValue();
--        const std::string fnName = Callee->stripPointerCasts()->getName();
-+        Value *Callee = I.getCalledOperand();
-+        const std::string fnName = Callee->stripPointerCasts()->getName().str();
-         auto genIntrinsicID = intrinsicMap.find(fnName);
-
-         // Get the function arguments
--        CallSite CS(&I);
--        CallSite::arg_iterator AI = CS.arg_begin();
-+        User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--        CallSite::arg_iterator AE = CS.arg_end();
-+        User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-
-         switch (genIntrinsicID) {
--          case GEN_OCL_FBH: this->emitUnaryCallInst(I,CS,ir::OP_FBH, ir::TYPE_U32); break;
--          case GEN_OCL_FBL: this->emitUnaryCallInst(I,CS,ir::OP_FBL, ir::TYPE_U32); break;
--          case GEN_OCL_CBIT: this->emitUnaryCallInst(I,CS,ir::OP_CBIT, getUnsignedType(ctx, (*AI)->getType())); break;
-+          case GEN_OCL_FBH: this->emitUnaryCallInst(I,ir::OP_FBH, ir::TYPE_U32); break;
-+          case GEN_OCL_FBL: this->emitUnaryCallInst(I,ir::OP_FBL, ir::TYPE_U32); break;
-+          case GEN_OCL_CBIT: this->emitUnaryCallInst(I,ir::OP_CBIT, getUnsignedType(ctx, (*AI)->getType())); break;
-           case GEN_OCL_ABS:
-           {
-             const ir::Register src = this->getRegister(*AI);
-@@ -4915,8 +4913,8 @@
-             ctx.REGION(dst, src, x.getIntegerValue());
-             break;
-           }
--          case GEN_OCL_RSQ: this->emitUnaryCallInst(I,CS,ir::OP_RSQ); break;
--          case GEN_OCL_RCP: this->emitUnaryCallInst(I,CS,ir::OP_RCP); break;
-+          case GEN_OCL_RSQ: this->emitUnaryCallInst(I,ir::OP_RSQ); break;
-+          case GEN_OCL_RCP: this->emitUnaryCallInst(I,ir::OP_RCP); break;
-           case GEN_OCL_FORCE_SIMD8: ctx.setSimdWidth(8); break;
-           case GEN_OCL_FORCE_SIMD16: ctx.setSimdWidth(16); break;
-           case GEN_OCL_LBARRIER: ctx.SYNC(ir::syncLocalBarrier); break;
-@@ -4947,31 +4945,31 @@
-             break;
-           }
-           case GEN_OCL_ATOMIC_ADD0:
--          case GEN_OCL_ATOMIC_ADD1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_ADD); break;
-+          case GEN_OCL_ATOMIC_ADD1: this->emitAtomicInst(I,ir::ATOMIC_OP_ADD); break;
-           case GEN_OCL_ATOMIC_SUB0:
--          case GEN_OCL_ATOMIC_SUB1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_SUB); break;
-+          case GEN_OCL_ATOMIC_SUB1: this->emitAtomicInst(I,ir::ATOMIC_OP_SUB); break;
-           case GEN_OCL_ATOMIC_AND0:
--          case GEN_OCL_ATOMIC_AND1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_AND); break;
-+          case GEN_OCL_ATOMIC_AND1: this->emitAtomicInst(I,ir::ATOMIC_OP_AND); break;
-           case GEN_OCL_ATOMIC_OR0:
--          case GEN_OCL_ATOMIC_OR1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_OR); break;
-+          case GEN_OCL_ATOMIC_OR1: this->emitAtomicInst(I,ir::ATOMIC_OP_OR); break;
-           case GEN_OCL_ATOMIC_XOR0:
--          case GEN_OCL_ATOMIC_XOR1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_XOR); break;
-+          case GEN_OCL_ATOMIC_XOR1: this->emitAtomicInst(I,ir::ATOMIC_OP_XOR); break;
-           case GEN_OCL_ATOMIC_XCHG0:
--          case GEN_OCL_ATOMIC_XCHG1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_XCHG); break;
-+          case GEN_OCL_ATOMIC_XCHG1: this->emitAtomicInst(I,ir::ATOMIC_OP_XCHG); break;
-           case GEN_OCL_ATOMIC_INC0:
--          case GEN_OCL_ATOMIC_INC1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_INC); break;
-+          case GEN_OCL_ATOMIC_INC1: this->emitAtomicInst(I,ir::ATOMIC_OP_INC); break;
-           case GEN_OCL_ATOMIC_DEC0:
--          case GEN_OCL_ATOMIC_DEC1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_DEC); break;
-+          case GEN_OCL_ATOMIC_DEC1: this->emitAtomicInst(I,ir::ATOMIC_OP_DEC); break;
-           case GEN_OCL_ATOMIC_UMIN0:
--          case GEN_OCL_ATOMIC_UMIN1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_UMIN); break;
-+          case GEN_OCL_ATOMIC_UMIN1: this->emitAtomicInst(I,ir::ATOMIC_OP_UMIN); break;
-           case GEN_OCL_ATOMIC_UMAX0:
--          case GEN_OCL_ATOMIC_UMAX1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_UMAX); break;
-+          case GEN_OCL_ATOMIC_UMAX1: this->emitAtomicInst(I,ir::ATOMIC_OP_UMAX); break;
-           case GEN_OCL_ATOMIC_IMIN0:
--          case GEN_OCL_ATOMIC_IMIN1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_IMIN); break;
-+          case GEN_OCL_ATOMIC_IMIN1: this->emitAtomicInst(I,ir::ATOMIC_OP_IMIN); break;
-           case GEN_OCL_ATOMIC_IMAX0:
--          case GEN_OCL_ATOMIC_IMAX1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_IMAX); break;
-+          case GEN_OCL_ATOMIC_IMAX1: this->emitAtomicInst(I,ir::ATOMIC_OP_IMAX); break;
-           case GEN_OCL_ATOMIC_CMPXCHG0:
--          case GEN_OCL_ATOMIC_CMPXCHG1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_CMPXCHG); break;
-+          case GEN_OCL_ATOMIC_CMPXCHG1: this->emitAtomicInst(I,ir::ATOMIC_OP_CMPXCHG); break;
-           case GEN_OCL_GET_IMAGE_WIDTH:
-           case GEN_OCL_GET_IMAGE_HEIGHT:
-           case GEN_OCL_GET_IMAGE_DEPTH:
-@@ -5429,48 +5427,48 @@
-             ctx.WAIT();
-             break;
-           }
--          case GEN_OCL_WORK_GROUP_ALL: this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_ALL); break;
--          case GEN_OCL_WORK_GROUP_ANY: this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_ANY); break;
-+          case GEN_OCL_WORK_GROUP_ALL: this->emitWorkGroupInst(I, ir::WORKGROUP_OP_ALL); break;
-+          case GEN_OCL_WORK_GROUP_ANY: this->emitWorkGroupInst(I, ir::WORKGROUP_OP_ANY); break;
-           case GEN_OCL_WORK_GROUP_BROADCAST:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_BROADCAST); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_BROADCAST); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_ADD); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_MAX); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_MIN); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-           case GEN_OCL_SUB_GROUP_BROADCAST:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_BROADCAST); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_BROADCAST); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_ADD); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_MAX); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_MIN); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-           case GEN_OCL_LRP:
-           {
-             const ir::Register dst  = this->getRegister(&I);
-@@ -5484,69 +5482,69 @@
-             break;
-           }
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, false, 1); break;
-+            this->emitBlockReadWriteMemInst(I, false, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, false, 2); break;
-+            this->emitBlockReadWriteMemInst(I, false, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, false, 4); break;
-+            this->emitBlockReadWriteMemInst(I, false, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, false, 8); break;
-+            this->emitBlockReadWriteMemInst(I, false, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, true, 1); break;
-+            this->emitBlockReadWriteMemInst(I, true, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, true, 2); break;
-+            this->emitBlockReadWriteMemInst(I, true, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, true, 4); break;
-+            this->emitBlockReadWriteMemInst(I, true, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, true, 8); break;
-+            this->emitBlockReadWriteMemInst(I, true, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, false, 1); break;
-+            this->emitBlockReadWriteImageInst(I, false, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, false, 2); break;
-+            this->emitBlockReadWriteImageInst(I, false, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, false, 4); break;
-+            this->emitBlockReadWriteImageInst(I, false, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, false, 8); break;
-+            this->emitBlockReadWriteImageInst(I, false, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, true, 1); break;
-+            this->emitBlockReadWriteImageInst(I, true, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, true, 2); break;
-+            this->emitBlockReadWriteImageInst(I, true, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, true, 4); break;
-+            this->emitBlockReadWriteImageInst(I, true, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, true, 8); break;
-+            this->emitBlockReadWriteImageInst(I, true, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, false, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, false, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, false, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, false, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, true, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, true, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, true, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, true, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, false, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, false, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, false, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, false, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, true, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, true, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, true, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, true, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 8, ir::TYPE_U16); break;
-           case GEN_OCL_GET_PIPE:
-           case GEN_OCL_MAKE_RID:
-           case GEN_OCL_GET_RID:
---- a/backend/src/llvm/llvm_includes.hpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_includes.hpp	2020-11-09 19:00:09.955926795 +0100
-@@ -103,7 +103,6 @@
-
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
- #include "llvm/IR/Mangler.h"
--#include "llvm/IR/CallSite.h"
- #include "llvm/IR/CFG.h"
- #include "llvm/IR/InstVisitor.h"
- #include "llvm/IR/IRPrintingPasses.h"
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-11-09 19:10:37.141852308 +0100
-@@ -160,7 +160,7 @@
-     Value *vecPtr = Builder.CreateBitCast(ld->getPointerOperand(),
-                                         PointerType::get(vecTy, addrSpace));
-     LoadInst *vecValue = Builder.CreateLoad(vecPtr);
--    vecValue->setAlignment(align);
-+    vecValue->setAlignment(align.valueOrOne());
-
-     for (unsigned i = 0; i < size; ++i) {
-       Value *S = Builder.CreateExtractElement(vecValue, Builder.getInt32(i));
-@@ -251,7 +251,7 @@
-       return;
-     Value *newPtr = Builder.CreateBitCast(stPointer, PointerType::get(vecTy, addrSpace));
-     StoreInst *newST = Builder.CreateStore(parent, newPtr);
--    newST->setAlignment(align);
-+    newST->setAlignment(align.valueOrOne());
-   }
-
-   // Find the safe iterator we can point to. If reorder happens, we need to
---- a/backend/src/llvm/llvm_passes.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_passes.cpp	2020-11-09 18:48:55.997006837 +0100
-@@ -95,7 +95,7 @@
-   {
-     switch (Ty->getTypeID()) {
-       case Type::VoidTyID: NOT_SUPPORTED;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         const VectorType* VecTy = cast<VectorType>(Ty);
-         uint32_t elemNum = VecTy->getNumElements();
-@@ -138,7 +138,7 @@
-       case Type::HalfTyID:    return 16;
-       case Type::FloatTyID:   return 32;
-       case Type::DoubleTyID:  return 64;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         const VectorType* VecTy = cast<VectorType>(Ty);
-         uint32_t numElem = VecTy->getNumElements();
-@@ -184,10 +184,12 @@
-     Type *elementType = NULL;
-     if (PointerType* ptrType = dyn_cast<PointerType>(eltTy))
-       elementType = ptrType->getElementType();
--    else if(SequentialType * seqType = dyn_cast<SequentialType>(eltTy))
--      elementType = seqType->getElementType();
--    else if(CompositeType * compTy= dyn_cast<CompositeType>(eltTy))
--      elementType = compTy->getTypeAtIndex(index);
-+    else if (ArrayType * arrType = dyn_cast<ArrayType>(eltTy))
-+      elementType = arrType->getElementType();
-+    else if(VectorType * vecType = dyn_cast<VectorType>(eltTy))
-+      elementType = vecType->getElementType();
-+    else if(StructType * structType = dyn_cast<StructType>(eltTy))
-+      elementType = structType->getTypeAtIndex(index);
-     GBE_ASSERT(elementType);
-     return elementType;
-   }
---- a/backend/src/llvm/llvm_printf_parser.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_printf_parser.cpp	2020-11-09 18:57:52.618943105 +0100
-@@ -323,8 +323,7 @@
-
-   bool PrintfParser::parseOnePrintfInstruction(CallInst * call)
-   {
--    CallSite CS(call);
--    CallSite::arg_iterator CI_FMT = CS.arg_begin();
-+    User::op_iterator CI_FMT = call->arg_begin();
-     int param_num = 0;
-
-     llvm::Constant* arg0 = dyn_cast<llvm::ConstantExpr>(*CI_FMT);
-@@ -341,7 +340,7 @@
-       return false;
-     }
-
--    std::string fmt = fmt_arg->getAsCString();
-+    std::string fmt = fmt_arg->getAsCString().str();
-     if (fmt.size() == 0)
-       return false;
-
-@@ -437,8 +436,8 @@
-         if ( callFunc->getIntrinsicID() != 0)
-           continue;
-
--        Value *Callee = call->getCalledValue();
--        const std::string fnName = Callee->getName();
-+        Value *Callee = call->getCalledOperand();
-+        const std::string fnName = Callee->getName().str();
-
-         if (fnName != "__gen_ocl_printf_stub" && fnName != "__gen_ocl_puts_stub")
-           continue;
-@@ -582,7 +581,7 @@
-             if (!fmt_arg || !fmt_arg->isCString()) {
-               return false;
-             }
--            slot.state.str = fmt_arg->getAsCString();
-+            slot.state.str = fmt_arg->getAsCString().str();
-             return true;
-           }
-           case PRINTF_CONVERSION_P: {
-@@ -595,10 +594,10 @@
-
-         break;
-
--      case Type::VectorTyID: {
--        Type* vect_type = arg->getType();
--        Type* elt_type = vect_type->getVectorElementType();
--        int vec_num = vect_type->getVectorNumElements();
-+      case Type::FixedVectorTyID: {
-+        VectorType* vect_type = dyn_cast<VectorType>(arg->getType());
-+        Type* elt_type = vect_type->getElementType();
-+        int vec_num = vect_type->getNumElements();
-         bool sign = false;
-
-         if (vec_num != slot.state.vector_n) {
---- a/backend/src/llvm/llvm_profiling.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_profiling.cpp	2020-11-09 18:59:50.120929150 +0100
-@@ -35,7 +35,6 @@
- #include "llvm/IR/IRBuilder.h"
-
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
--#include "llvm/IR/CallSite.h"
- #include "llvm/IR/CFG.h"
- #else
- #include "llvm/Support/CallSite.h"
---- a/backend/src/llvm/llvm_sampler_fix.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp	2020-11-09 17:01:09.407774832 +0100
-@@ -45,8 +45,8 @@
-     bool visitCallInst(CallInst *I) {
-       if(!I)
-         return false;
--      Value *Callee = I->getCalledValue();
--      const std::string fnName = Callee->getName();
-+      Value *Callee = I->getCalledOperand();
-+      const std::string fnName = Callee->getName().str();
-       bool changed = false;
-       Type *boolTy = IntegerType::get(I->getContext(), 1);
-       Type *i32Ty = IntegerType::get(I->getContext(), 32);
-@@ -59,7 +59,7 @@
-         Value *needFixVal;
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-         CallInst *init = dyn_cast<CallInst>(I->getOperand(0));
--        if (init && init->getCalledValue()->getName().compare("__translate_sampler_initializer"))
-+        if (init && init->getCalledOperand()->getName().compare("__translate_sampler_initializer"))
-         {
-           const ConstantInt *ci = dyn_cast<ConstantInt>(init->getOperand(0));
-           uint32_t samplerInt = ci->getZExtValue();
-@@ -113,7 +113,7 @@
-         Value *needFixVal;
-  #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-         CallInst *init = dyn_cast<CallInst>(I->getOperand(0));
--        if (init && init->getCalledValue()->getName().compare("__translate_sampler_initializer"))
-+        if (init && init->getCalledOperand()->getName().compare("__translate_sampler_initializer"))
-         {
-           const ConstantInt *ci = dyn_cast<ConstantInt>(init->getOperand(0));
-           uint32_t samplerInt = ci->getZExtValue();
---- a/backend/src/llvm/llvm_scalarize.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_scalarize.cpp	2020-11-09 18:51:16.888990104 +0100
-@@ -178,7 +178,7 @@
-       if(!type)
-         return type;
-       switch(type->getTypeID()) {
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       case Type::ArrayTyID:
-         return GetBasicType(type->getContainedType(0));
-       default:
-@@ -188,7 +188,7 @@
-     }
-
-     int GetComponentCount(const Type* type)  {
--      if (type && type->getTypeID() == Type::VectorTyID)
-+      if (type && type->getTypeID() == Type::FixedVectorTyID)
-         return llvm::dyn_cast<VectorType>(type)->getNumElements();
-       else
-         return 1;
-@@ -652,13 +652,12 @@
-           break;
-         }
-       } else {
--        Value *Callee = call->getCalledValue();
--        const std::string fnName = Callee->getName();
-+        Value *Callee = call->getCalledOperand();
-+        const std::string fnName = Callee->getName().str();
-         auto genIntrinsicID = intrinsicMap.find(fnName);
-
-         // Get the function arguments
--        CallSite CS(call);
--        CallSite::arg_iterator CI = CS.arg_begin() + 1;
-+        User::op_iterator CI = call->arg_begin() + 1;
-
-         switch (genIntrinsicID) {
-           case GEN_OCL_NOT_FOUND:
-@@ -729,7 +728,7 @@
-             extractFromVector(call);
-             break;
-           case GEN_OCL_PRINTF:
--            for (; CI != CS.arg_end(); ++CI)
-+            for (; CI != call->arg_end(); ++CI)
-               if ((*CI)->getType()->isVectorTy())
-                 *CI = InsertToVector(call, *CI);
-             break;
diff --git a/srcpkgs/beignet/patches/llvm12.patch b/srcpkgs/beignet/patches/llvm12.patch
deleted file mode 100644
index 6f8ab005c148..000000000000
--- a/srcpkgs/beignet/patches/llvm12.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-diff --git backend/src/llvm/ExpandLargeIntegers.cpp backend/src/llvm/ExpandLargeIntegers.cpp
-index 8515dc13..27080380 100644
---- a/backend/src/llvm/ExpandLargeIntegers.cpp
-+++ b/backend/src/llvm/ExpandLargeIntegers.cpp
-@@ -328,7 +328,7 @@ static Value *buildVectorOrScalar(ConversionState &State, IRBuilder<> &IRB, Smal
-     // splited, that's why these temporary values should be erased.
-     bool KeepInsert = isLegalBitSize(ElemTy->getPrimitiveSizeInBits() * ElemNo);
-     for (unsigned i = 0; i < ElemNo; ++i) {
--      Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo));
-+      Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo, false));
-       Value *idx = ConstantInt::get(IntTy, i);
-       vec = IRB.CreateInsertElement(tmp, Elements[i], idx);
-       if (!KeepInsert && !isa<Constant>(vec)) {
-@@ -373,7 +373,7 @@ static void unifyElementType(IRBuilder<> &IRB, SmallVector<Value *, 16> &Src, Sm
-       assert((Size % MinWidth) == 0);
- 
-       if (Size > MinWidth) {
--        VectorType *VecTy = VectorType::get(ElemTy, Size/MinWidth);
-+        VectorType *VecTy = VectorType::get(ElemTy, Size/MinWidth, false);
-         Value *Casted = IRB.CreateBitCast(Src[i], VecTy);
-         for (unsigned j = 0; j < Size/MinWidth; j++)
-           Dst.push_back(IRB.CreateExtractElement(Casted, ConstantInt::get(IntTy, j)));
-@@ -462,7 +462,7 @@ static void convertInstruction(Instruction *Inst, ConversionState &State,
-       unsigned ElemNo = Unified.size();
-       Type *ElemTy = Unified[0]->getType();
-       for (unsigned i = 0; i < ElemNo; ++i) {
--        Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo));
-+        Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo, false));
-         Value *idx = ConstantInt::get(IntTy, i);
-         vec = IRB.CreateInsertElement(tmp, Unified[i], idx);
-       }
-diff --git backend/src/llvm/llvm_gen_backend.cpp backend/src/llvm/llvm_gen_backend.cpp
-index c93d89cc..64d5b0e5 100644
---- a/backend/src/llvm/llvm_gen_backend.cpp
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -304,7 +304,7 @@ namespace gbe
-       TYPESIZEVEC(long,8)
-       TYPESIZEVEC(unsigned long,8)
-       else{
--        StructType *StrTy = M->getTypeByName("struct."+name);
-+        StructType *StrTy = StructType::getTypeByName(M->getContext(), "struct."+name);
-         if(StrTy)
-           return getTypeByteSize(unit,StrTy);
-       }
-diff --git backend/src/llvm/llvm_loadstore_optimization.cpp backend/src/llvm/llvm_loadstore_optimization.cpp
-index 5aa38bef..6b5c1bad 100644
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
-@@ -152,7 +152,7 @@ namespace gbe {
-     unsigned addrSpace = ld->getPointerAddressSpace();
-     // insert before first load
-     Builder.SetInsertPoint(ld);
--    VectorType *vecTy = VectorType::get(ld->getType(), size);
-+    VectorType *vecTy = VectorType::get(ld->getType(), size, false);
-     Value *vecPtr = Builder.CreateBitCast(ld->getPointerOperand(),
-                                         PointerType::get(vecTy, addrSpace));
-     LoadInst *vecValue = Builder.CreateLoad(vecPtr);
-@@ -236,7 +236,7 @@ namespace gbe {
-     Builder.SetInsertPoint(merged[size-1]);
- 
-     Type *dataTy = st->getValueOperand()->getType();
--    VectorType *vecTy = VectorType::get(dataTy, size);
-+    VectorType *vecTy = VectorType::get(dataTy, size, false);
-     Value * parent = UndefValue::get(vecTy);
-     for(unsigned i = 0; i < size; i++) {
-       parent = Builder.CreateInsertElement(parent, values[i], ConstantInt::get(IntegerType::get(st->getContext(), 32), i));
-diff --git backend/src/llvm/llvm_printf_parser.cpp backend/src/llvm/llvm_printf_parser.cpp
-index 6bb7c52a..af459cd2 100644
---- a/backend/src/llvm/llvm_printf_parser.cpp
-+++ b/backend/src/llvm/llvm_printf_parser.cpp
-@@ -630,7 +630,7 @@ error:
-             if (elt_type != elt_dst_type) {
-               Value *II = NULL;
-               for (int i = 0; i < vec_num; i++) {
--                Value *vec = II ? II : UndefValue::get(VectorType::get(elt_dst_type, vec_num));
-+                Value *vec = II ? II : UndefValue::get(VectorType::get(elt_dst_type, vec_num, false));
-                 Value *cv = ConstantInt::get(Type::getInt32Ty(elt_type->getContext()), i);
-                 Value *org = builder->CreateExtractElement(arg, cv);
-                 Value *cvt = builder->CreateIntCast(org, elt_dst_type, sign);
-@@ -658,7 +658,7 @@ error:
-             if (elt_type->getTypeID() != Type::FloatTyID) {
-               Value *II = NULL;
-               for (int i = 0; i < vec_num; i++) {
--                Value *vec = II ? II : UndefValue::get(VectorType::get(Type::getFloatTy(elt_type->getContext()), vec_num));
-+                Value *vec = II ? II : UndefValue::get(VectorType::get(Type::getFloatTy(elt_type->getContext()), vec_num, false));
-                 Value *cv = ConstantInt::get(Type::getInt32Ty(elt_type->getContext()), i);
-                 Value *org = builder->CreateExtractElement(arg, cv);
-                 Value* cvt  = builder->CreateFPCast(org, Type::getFloatTy(module->getContext()));
-diff --git backend/src/llvm/llvm_to_gen.cpp backend/src/llvm/llvm_to_gen.cpp
-index 7f7deffe..9e8ccc67 100644
---- a/backend/src/llvm/llvm_to_gen.cpp
-+++ b/backend/src/llvm/llvm_to_gen.cpp
-@@ -358,7 +358,7 @@ namespace gbe
-     passes.add(createScalarReplAggregatesPass(64, true, -1, -1, 64));
- #endif
-     passes.add(createLoadStoreOptimizationPass());
--    passes.add(createConstantPropagationPass());
-+    //passes.add(createConstantPropagationPass());
-     passes.add(createPromoteMemoryToRegisterPass());
-     if(optLevel > 0)
-       passes.add(createGVNPass());                 // Remove redundancies
-@@ -367,11 +367,11 @@ namespace gbe
-     passes.add(createScalarizePass());             // Expand all vector ops
-     passes.add(createExpandLargeIntegersPass());   // legalize large integer operation
-     passes.add(createInstructionCombiningPass());  // legalize will generate some silly instructions
--    passes.add(createConstantPropagationPass());   // propagate constant after scalarize/legalize
-+    //passes.add(createConstantPropagationPass());   // propagate constant after scalarize/legalize
-     passes.add(createExpandConstantExprPass());    // constant prop may generate ConstantExpr
-     passes.add(createPromoteIntegersPass());       // align integer size to power of two
-     passes.add(createRemoveGEPPass(unit));         // Constant prop may generate gep
--    passes.add(createDeadInstEliminationPass());   // Remove simplified instructions
-+    //passes.add(createDeadInstEliminationPass());   // Remove simplified instructions
-     passes.add(createCFGSimplificationPass());     // Merge & remove BBs
-     passes.add(createLowerSwitchPass());           // simplify cfg will generate switch-case instruction
-     if (profiling) {
diff --git a/srcpkgs/beignet/patches/musl.patch b/srcpkgs/beignet/patches/musl.patch
deleted file mode 100644
index cefafbb65588..000000000000
--- a/srcpkgs/beignet/patches/musl.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/backend/src/backend/gen/gen_mesa_disasm.c
-+++ b/backend/src/backend/gen/gen_mesa_disasm.c
-@@ -1137,7 +1137,7 @@ static uint32_t __conv_half_to_float(uint16_t h)
-       // Adjust mantissa so it's normalized (and keep
-       // track of exponent adjustment)
-       int e = -1;
--      uint m = i.mantissa;
-+      unsigned int m = i.mantissa;
-       do {
-         e++;
-         m <<= 1;
diff --git a/srcpkgs/beignet/template b/srcpkgs/beignet/template
deleted file mode 100644
index dce6bbb7ae24..000000000000
--- a/srcpkgs/beignet/template
+++ /dev/null
@@ -1,22 +0,0 @@
-# Template file for 'beignet'
-pkgname=beignet
-version=1.3.2
-revision=10
-archs="i686* x86_64*"
-wrksrc="Beignet-${version}-Source"
-build_style=cmake
-hostmakedepends="clang llvm pkg-config"
-makedepends="MesaLib-devel libedit-devel libffi-devel ocl-icd-devel zlib-devel
- libXfixes-devel"
-depends="ocl-icd"
-short_desc="Beignet GPGPU System for Intel GPUs"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://www.freedesktop.org/wiki/Software/Beignet/"
-distfiles="https://01.org/sites/default/files/${pkgname}-${version}-source.tar.gz"
-checksum=c555edba149de23243965a703f39f79fa06f15bcff5a3762b5544b0925010b43
-
-post_install() {
-	# remove CL headers, we do use opencl-headers instead.
-	rm -r ${DESTDIR}/usr/include
-}
diff --git a/srcpkgs/beignet/update b/srcpkgs/beignet/update
deleted file mode 100644
index ca41e0afe60c..000000000000
--- a/srcpkgs/beignet/update
+++ /dev/null
@@ -1 +0,0 @@
-site="https://01.org/beignet/downloads"
diff --git a/srcpkgs/removed-packages/template b/srcpkgs/removed-packages/template
index 0923c53cfc05..d59bd20f820c 100644
--- a/srcpkgs/removed-packages/template
+++ b/srcpkgs/removed-packages/template
@@ -1,7 +1,7 @@
 # Template file for 'removed-packages'
 pkgname=removed-packages
 version=0.1
-revision=69
+revision=70
 build_style=meta
 short_desc="Uninstalls packages removed from repository"
 maintainer="Piotr Wójcik <chocimier@tlen.pl>"
@@ -25,6 +25,7 @@ replaces="
  atom<=1.44.0_1
  avogadro-devel<=1.2.0_8
  avogadro<=1.2.0_8
+ beignet<=1.3.2_10
  bokken<=1.8_3
  bomi<=0.9.11_17
  burp-client<=1.4.40_13

From 97338ef68219b7d590bd10edc23bf882e6d2d9cb Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 21/29] ldc: rebuild for llvm14

---
 srcpkgs/ldc/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/ldc/template b/srcpkgs/ldc/template
index a27280dde3b8..e21bc6555e38 100644
--- a/srcpkgs/ldc/template
+++ b/srcpkgs/ldc/template
@@ -1,7 +1,7 @@
 # Template file for 'ldc'
 pkgname=ldc
 version=1.28.0
-revision=1
+revision=2
 wrksrc="ldc-${version}-src"
 build_style=cmake
 configure_args="

From 542f5c5ee5d187c465a6490af05c1133fe701723 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 22:31:25 +0200
Subject: [PATCH 22/29] ldc: update to 1.29.0.

---
 srcpkgs/ldc/template | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/srcpkgs/ldc/template b/srcpkgs/ldc/template
index e21bc6555e38..1d72a8805eb6 100644
--- a/srcpkgs/ldc/template
+++ b/srcpkgs/ldc/template
@@ -1,7 +1,7 @@
 # Template file for 'ldc'
 pkgname=ldc
-version=1.28.0
-revision=2
+version=1.29.0
+revision=1
 wrksrc="ldc-${version}-src"
 build_style=cmake
 configure_args="
@@ -11,7 +11,7 @@ configure_args="
  -DBASH_COMPLETION_COMPLETIONSDIR=/usr/share/bash-completion
  -DC_SYSTEM_LIBS='unwind;m;pthread;rt;dl'"
 conf_files="/etc/ldc2.conf"
-hostmakedepends="dmd llvm12 perl pkg-config"
+hostmakedepends="dmd llvm14 perl pkg-config"
 makedepends="libcurl-devel libffi-devel ncurses-devel zlib-devel
  llvm-libunwind-devel"
 depends="ldc-runtime llvm-libunwind-devel"
@@ -22,7 +22,7 @@ license="BSD-3-Clause, BSL-1.0"
 homepage="https://wiki.dlang.org/LDC"
 changelog="https://raw.githubusercontent.com/ldc-developers/ldc/master/CHANGELOG.md"
 distfiles="https://github.com/ldc-developers/ldc/releases/download/v${version}/ldc-${version}-src.tar.gz"
-checksum=17fee8bb535bcb8cda0a45947526555c46c045f302a7349cc8711b254e54cf09
+checksum=d0c066eb965467625d9c5e75c00c583451b9ffa363601f9e37275ca8a8aea140
 nopie=yes
 nocross="dmd compilation fails on cross"
 # tests timeout on musl; also require unpackaged python3-lit

From aedbfa1967184744cf68b38bb9b61cc8c6df6c5c Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 23/29] include-what-you-use: update to 0.18.

---
 srcpkgs/include-what-you-use/template | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/include-what-you-use/template b/srcpkgs/include-what-you-use/template
index b13bb7ee56af..297669f60459 100644
--- a/srcpkgs/include-what-you-use/template
+++ b/srcpkgs/include-what-you-use/template
@@ -1,6 +1,6 @@
 # Template file for 'include-what-you-use'
 pkgname=include-what-you-use
-version=0.16
+version=0.18
 revision=1
 wrksrc="${pkgname}"
 build_style=cmake
@@ -12,7 +12,7 @@ maintainer="Leah Neukirchen <leah@vuxu.org>"
 license="NCSA"
 homepage="https://include-what-you-use.org/"
 distfiles="https://include-what-you-use.org/downloads/${pkgname}-${version}.src.tar.gz"
-checksum=8d6fc9b255343bc1e5ec459e39512df1d51c60e03562985e0076036119ff5a1c
+checksum=9102fc8419294757df86a89ce6ec305f8d90a818d1f2598a139d15eb1894b8f3
 python_version=3
 
 post_install() {

From 7bb7e0998594c0853e98c3bfe8857c1deb7f9e45 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:18:24 +0200
Subject: [PATCH 24/29] SPIRV-LLVM-Translator: update to 14.0.0.

---
 common/shlibs                          |  1 +
 srcpkgs/SPIRV-LLVM-Translator/template | 11 ++++++-----
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/common/shlibs b/common/shlibs
index 86f4c9060d3b..df3eb79f921c 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -983,6 +983,7 @@ libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
 libLLVM-14.so libllvm14-14.0.3_1
+libLLVMSPIRVLib.so.14 SPIRV-LLVM-Translator-14.0.0_1
 libisofs.so.6 libisofs-0.6.24_1
 libmpack.so.0 libmpack-1.0.5_1
 libGeoIP.so.1 libgeoip-1.4.8_1
diff --git a/srcpkgs/SPIRV-LLVM-Translator/template b/srcpkgs/SPIRV-LLVM-Translator/template
index 2504cabed367..2277d062d992 100644
--- a/srcpkgs/SPIRV-LLVM-Translator/template
+++ b/srcpkgs/SPIRV-LLVM-Translator/template
@@ -1,19 +1,20 @@
 # Template file for 'SPIRV-LLVM-Translator'
 pkgname=SPIRV-LLVM-Translator
-version=12.0.0
+version=14.0.0
 revision=1
 build_style=cmake
 make_build_args="llvm-spirv"
-configure_args="-Wno-dev -DLLVM_LINK_LLVM_DYLIB=ON -DCMAKE_SKIP_RPATH=ON
- -DLLVM_SPIRV_INCLUDE_TESTS=OFF -DBUILD_SHARED_LIBS=ON"
+configure_args="-DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release
+ -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_SKIP_RPATH=ON -DLLVM_INCLUDE_TESTS=OFF
+ -DLLVM_LINK_LLVM_DYLIB=ON -DLLVM_EXTERNAL_LIT=/usr/bin/lit -Wno-dev -DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=/usr/include/spirv/ "
 hostmakedepends="clang clang-tools-extra llvm"
-makedepends="llvm"
+makedepends="llvm SPIRV-Headers"
 short_desc="API and commands for processing SPIR-V modules"
 maintainer="Orphaned <orphan@voidlinux.org>"
 license="NCSA"
 homepage="https://github.com/KhronosGroup/SPIRV-LLVM-Translator"
 distfiles="https://github.com/KhronosGroup/${pkgname}/archive/refs/tags/v${version}.tar.gz"
-checksum=6e4fad04203f25fcde4c308c53e9f59bd05a390978992db3212d4b63aff62108
+checksum=1afc52bb4e39aeb9b5b69324a201c81bd986364f347b559995eff6fd6f013318
 make_check=no
 
 post_install() {

From cddfa00dd1ed830105ca6d8480e086782f74b795 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:17:29 +0200
Subject: [PATCH 25/29] SPIRV-Headers: update to 1.3.211.0.

---
 srcpkgs/SPIRV-Headers/template | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/SPIRV-Headers/template b/srcpkgs/SPIRV-Headers/template
index 5dcf457c04c7..ce8288174e48 100644
--- a/srcpkgs/SPIRV-Headers/template
+++ b/srcpkgs/SPIRV-Headers/template
@@ -1,11 +1,13 @@
 # Template file for 'SPIRV-Headers'
 pkgname=SPIRV-Headers
-version=1.5.4.raytracing.fixed
+version=1.3.211.0
 revision=1
+reverts="1.5.4.raytracing.fixed"
+wrksrc=${pkgname}-sdk-${version}
 build_style=cmake
 short_desc="Machine-readable files for the SPIR-V Registry"
 maintainer="Orphaned <orphan@voidlinux.org>"
 license="GPL-3.0-or-later"
 homepage="https://github.com/KhronosGroup/SPIRV-Headers"
-distfiles="https://github.com/KhronosGroup/SPIRV-Headers/archive/${version}.tar.gz"
-checksum=df2ad2520be4d95a479fa248921065885bbf435a658349a7fc164ad7b26b68c6
+distfiles="https://github.com/KhronosGroup/SPIRV-Headers/archive/sdk-${version}.tar.gz"
+checksum=30a78e61bd812c75e09fdc7a319af206b1044536326bc3e85fea818376a12568

From f65e289140bd47a492e88429be7f5bfc7d252135 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:35:43 +0200
Subject: [PATCH 26/29] ispc: update to 1.17.0.

---
 .../ispc/patches/cmake-build-type-none.patch  |   18 -
 srcpkgs/ispc/patches/llvm12-001.patch         |   57 -
 srcpkgs/ispc/patches/llvm12-002.patch         |  923 --------
 srcpkgs/ispc/patches/llvm12-003.patch         | 1504 ------------
 srcpkgs/ispc/patches/llvm12-004.patch         |   34 -
 srcpkgs/ispc/patches/llvm12-005.patch         |  372 ---
 srcpkgs/ispc/patches/llvm12-006.patch         |  126 -
 srcpkgs/ispc/patches/llvm12-007.patch         |  160 --
 srcpkgs/ispc/patches/llvm12-008.patch         |  149 --
 srcpkgs/ispc/patches/llvm12-009.patch         | 2109 -----------------
 srcpkgs/ispc/template                         |    6 +-
 11 files changed, 3 insertions(+), 5455 deletions(-)
 delete mode 100644 srcpkgs/ispc/patches/cmake-build-type-none.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-001.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-002.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-003.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-004.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-005.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-006.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-007.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-008.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-009.patch

diff --git a/srcpkgs/ispc/patches/cmake-build-type-none.patch b/srcpkgs/ispc/patches/cmake-build-type-none.patch
deleted file mode 100644
index 411e353c7314..000000000000
--- a/srcpkgs/ispc/patches/cmake-build-type-none.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Index: ispc-1.15.0/CMakeLists.txt
-===================================================================
---- ispc-1.15.0.orig/CMakeLists.txt
-+++ ispc-1.15.0/CMakeLists.txt
-@@ -157,13 +157,6 @@ set(OUTPUT_RELEASE Release/bin)
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin )
- 
- if(CMAKE_BUILD_TYPE)
--    # Validate build type
--    set(CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo")
--
--    string(FIND "${CONFIGURATION_TYPES}" "${CMAKE_BUILD_TYPE}" MATCHED_CONFIG)
--    if (${MATCHED_CONFIG} EQUAL -1)
--         message(FATAL_ERROR "CMAKE_BUILD_TYPE (${CMAKE_BUILD_TYPE}) allows only the following values: ${CONFIGURATION_TYPES}")
--    endif()
- else(NOT CMAKE_BUILD_TYPE)
-     set(CMAKE_BUILD_TYPE "Release")
-     message(STATUS "Build type not specified: Use Release by default.")
diff --git a/srcpkgs/ispc/patches/llvm12-001.patch b/srcpkgs/ispc/patches/llvm12-001.patch
deleted file mode 100644
index 5f2d3f5a409e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-001.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 1c0f89dccb774f216c7f6e76a99ee907a1e641cb Mon Sep 17 00:00:00 2001
-From: Dmitry Babokin <dmitry.y.babokin@intel.com>
-Date: Tue, 22 Dec 2020 17:03:59 -0800
-Subject: [PATCH] Fix to work with LLVM trunk after llvm/llvm-project@41c3b2713
-
----
- src/ctx.cpp | 18 ++++++++++++------
- 1 file changed, 12 insertions(+), 6 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 6fbb8b9cf..977e9d222 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1473,11 +1473,15 @@ void FunctionEmitContext::AddDebugPos(llvm::Value *value, const SourcePos *pos,
-     llvm::Instruction *inst = llvm::dyn_cast<llvm::Instruction>(value);
-     if (inst != NULL && m->diBuilder) {
-         SourcePos p = pos ? *pos : currentPos;
--        if (p.first_line != 0)
-+        if (p.first_line != 0) {
-             // If first_line == 0, then we're in the middle of setting up
-             // the standard library or the like; don't add debug positions
-             // for those functions
--            inst->setDebugLoc(llvm::DebugLoc::get(p.first_line, p.first_column, scope ? scope : GetDIScope()));
-+            scope = scope ? scope : GetDIScope();
-+            llvm::DebugLoc diLoc =
-+                llvm::DILocation::get(scope->getContext(), p.first_line, p.first_column, scope, nullptr, false);
-+            inst->setDebugLoc(diLoc);
-+        }
-     }
- }
- 
-@@ -1518,9 +1522,10 @@ void FunctionEmitContext::EmitVariableDebugInfo(Symbol *sym) {
-     llvm::DILocalVariable *var = m->diBuilder->createAutoVariable(
-         scope, sym->name, sym->pos.GetDIFile(), sym->pos.first_line, diType, true /* preserve through opts */);
- 
-+    llvm::DebugLoc diLoc =
-+        llvm::DILocation::get(scope->getContext(), sym->pos.first_line, sym->pos.first_column, scope, nullptr, false);
-     llvm::Instruction *declareInst =
--        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(),
--                                    llvm::DebugLoc::get(sym->pos.first_line, sym->pos.first_column, scope), bblock);
-+        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(), diLoc, bblock);
-     AddDebugPos(declareInst, &sym->pos, scope);
- }
- 
-@@ -1535,9 +1540,10 @@ void FunctionEmitContext::EmitFunctionParameterDebugInfo(Symbol *sym, int argNum
-         m->diBuilder->createParameterVariable(scope, sym->name, argNum + 1, sym->pos.GetDIFile(), sym->pos.first_line,
-                                               diType, true /* preserve through opts */, flags);
- 
-+    llvm::DebugLoc diLoc =
-+        llvm::DILocation::get(scope->getContext(), sym->pos.first_line, sym->pos.first_column, scope, nullptr, false);
-     llvm::Instruction *declareInst =
--        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(),
--                                    llvm::DebugLoc::get(sym->pos.first_line, sym->pos.first_column, scope), bblock);
-+        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(), diLoc, bblock);
-     AddDebugPos(declareInst, &sym->pos, scope);
- }
- 
diff --git a/srcpkgs/ispc/patches/llvm12-002.patch b/srcpkgs/ispc/patches/llvm12-002.patch
deleted file mode 100644
index 0903f30da10d..000000000000
--- a/srcpkgs/ispc/patches/llvm12-002.patch
+++ /dev/null
@@ -1,923 +0,0 @@
-From 0597a79d084c014780136da906afe21d15e982cb Mon Sep 17 00:00:00 2001
-From: DeepakRajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Tue, 5 Jan 2021 13:53:30 -0800
-Subject: [PATCH] Remove LLVM 8.0 and LLVM 9.0. (#1966)
-
----
- .appveyor.yml                        |  3 --
- .travis.yml                          |  7 ---
- CMakeLists.txt                       | 12 ++----
- src/ast.cpp                          |  4 --
- src/ctx.cpp                          | 30 -------------
- src/gen/GlobalsLocalization.cpp      |  4 --
- src/ispc.cpp                         | 20 ---------
- src/ispc.h                           |  3 +-
- src/ispc_version.h                   |  4 +-
- src/main.cpp                         | 13 ------
- src/module.cpp                       | 27 ------------
- src/module.h                         |  2 -
- src/opt.cpp                          | 64 ++--------------------------
- src/type.cpp                         | 10 ++---
- tests/lit-tests/1771.ispc            |  1 -
- tests/lit-tests/1844.ispc            |  3 --
- tests/lit-tests/1926.ispc            |  2 -
- tests/lit-tests/cpus_x86.ispc        |  2 +
- tests/lit-tests/cpus_x86_llvm10.ispc | 11 -----
- tests/lit-tests/lit.cfg              |  5 ---
- 20 files changed, 14 insertions(+), 213 deletions(-)
- delete mode 100644 tests/lit-tests/cpus_x86_llvm10.ispc
-
-diff --git a/.appveyor.yml b/.appveyor.yml
-index 451a7b3e0..7945cca2a 100644
---- a/.appveyor.yml
-+++ b/.appveyor.yml
-@@ -41,8 +41,6 @@ environment:
-       LLVM_VERSION: latest
-     - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
-       LLVM_VERSION: 10.0
--    - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
--      LLVM_VERSION: 9.0
- 
- for:
- -
-@@ -62,7 +60,6 @@ for:
-         if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2019" ( (set generator="Visual Studio 16") & (set vsversion=2019))
-         set LLVM_TAR=llvm-11.0.0-win.vs2019-Release+Asserts-x86.arm.wasm.7z
-         if "%LLVM_VERSION%"=="10.0" (set LLVM_TAR=llvm-10.0.1-win.vs2019-Release+Asserts-x86.arm.wasm.zip)
--        if "%LLVM_VERSION%"=="9.0" (set LLVM_TAR=llvm-9.0.1-win.vs2017-Release+Asserts-x86.arm.wasm.zip)
-   install:
-     - ps: choco install --no-progress winflexbison3 wget 7zip
-     - cmd: |-
-diff --git a/.travis.yml b/.travis.yml
-index 2e96017a6..3a6b85264 100644
---- a/.travis.yml
-+++ b/.travis.yml
-@@ -108,13 +108,6 @@ jobs:
-         - LLVM_TAR=llvm-10.0.1-ubuntu16.04-Release+Asserts-x86.arm.wasm.tar.xz
-         - LLVM_REPO=https://github.com/dbabokin/llvm-project
-         - ISPC_HOME=$TRAVIS_BUILD_DIR
--    # LLVM 9.0 + Ubuntu 16.04: build, lit tests, examples (build + run), benchmarks (build + trial run)
--    - <<: *my_tag
--      env:
--        - LLVM_VERSION=9.0 OS=Ubuntu16.04
--        - LLVM_TAR=llvm-9.0.1-ubuntu16.04-Release+Asserts-x86.arm.wasm.tar.xz
--        - LLVM_REPO=https://github.com/dbabokin/llvm-project
--        - ISPC_HOME=$TRAVIS_BUILD_DIR
-     # WASM enabled build
-     # LLVM 11.0 + Ubuntu 16.04: build, lit tests, examples (build), benchmarks (build + trial run)
-     - <<: *my_tag
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 5fa863fcf..a6b3ed251 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -241,10 +241,8 @@ if (X86_ENABLED)
-         avx2-i8x32 avx2-i16x16
-         avx2-i32x4 avx2-i32x8 avx2-i32x16 avx2-i64x4
-         avx512knl-i32x16
--        avx512skx-i32x16 avx512skx-i32x8)
--    if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "10.0.0")
--        list(APPEND ISPC_TARGETS avx512skx-i8x64 avx512skx-i16x32)
--    endif()
-+        avx512skx-i32x16 avx512skx-i32x8
-+        avx512skx-i8x64 avx512skx-i16x32)
- endif()
- if (ARM_ENABLED)
-     list(APPEND ISPC_TARGETS neon-i8x16 neon-i16x8 neon-i32x4 neon-i32x8)
-@@ -259,11 +257,7 @@ if (WASM_ENABLED)
- endif()
- 
- set(CLANG_LIBRARY_LIST clangFrontend clangDriver clangSerialization clangParse clangSema clangAnalysis clangAST clangBasic clangEdit clangLex)
--set(LLVM_COMPONENTS engine ipo bitreader bitwriter instrumentation linker option)
--
--if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "10.0.0")
--    list(APPEND LLVM_COMPONENTS frontendopenmp)
--endif()
-+set(LLVM_COMPONENTS engine ipo bitreader bitwriter instrumentation linker option frontendopenmp)
- 
- if (X86_ENABLED)
-     list(APPEND LLVM_COMPONENTS x86)
-diff --git a/src/ast.cpp b/src/ast.cpp
-index 20f75a29c..5a43c4854 100644
---- a/src/ast.cpp
-+++ b/src/ast.cpp
-@@ -44,9 +44,7 @@
- #include "sym.h"
- #include "util.h"
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/TimeProfiler.h>
--#endif
- ///////////////////////////////////////////////////////////////////////////
- // ASTNode
- 
-@@ -62,9 +60,7 @@ void AST::AddFunction(Symbol *sym, Stmt *code) {
- }
- 
- void AST::GenerateIR() {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope TimeScope("GenerateIR");
--#endif
-     for (unsigned int i = 0; i < functions.size(); ++i)
-         functions[i]->GenerateIR();
- }
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 977e9d222..42c4ea09d 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -309,21 +309,13 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym, llvm::F
-             char buf[256];
-             snprintf(buf, sizeof(buf), "__off_all_on_mask_%s", g->target->GetISAString());
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_8_0
--            llvm::Constant *offFunc = m->module->getOrInsertFunction(buf, LLVMTypes::VoidType);
--#else // LLVM 9.0+
-             llvm::FunctionCallee offFuncCallee = m->module->getOrInsertFunction(buf, LLVMTypes::VoidType);
-             llvm::Constant *offFunc = llvm::cast<llvm::Constant>(offFuncCallee.getCallee());
--#endif
-             AssertPos(currentPos, llvm::isa<llvm::Function>(offFunc));
-             llvm::BasicBlock *offBB = llvm::BasicBlock::Create(*g->ctx, "entry", (llvm::Function *)offFunc, 0);
-             llvm::StoreInst *inst = new llvm::StoreInst(LLVMMaskAllOff, globalAllOnMaskPtr, offBB);
-             if (g->opt.forceAlignedMemory) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-                 inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-             }
-             llvm::ReturnInst::Create(*g->ctx, offBB);
-         }
-@@ -2288,11 +2280,7 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
- #endif
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-     }
- 
-     AddDebugPos(inst);
-@@ -2431,11 +2419,7 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-                 // vs the proper alignment in practice.)
-                 int align = 1;
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                inst->setAlignment(align);
--#else // LLVM 10.0+
-                 inst->setAlignment(llvm::MaybeAlign(align).valueOrOne());
--#endif
-             }
- 
-             AddDebugPos(inst);
-@@ -2649,11 +2633,7 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-         align = g->target->getNativeVectorAlignment();
- 
-     if (align != 0) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(align);
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(align).valueOrOne());
--#endif
-     }
-     // Don't add debugging info to alloca instructions
-     return inst;
-@@ -2926,11 +2906,7 @@ void FunctionEmitContext::StoreInst(llvm::Value *value, llvm::Value *ptr, const
-     llvm::StoreInst *inst = new llvm::StoreInst(value, ptr, bblock);
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-     }
- 
- #ifdef ISPC_GENX_ENABLED
-@@ -3025,16 +3001,10 @@ void FunctionEmitContext::MemcpyInst(llvm::Value *dest, llvm::Value *src, llvm::
-     }
-     if (align == NULL)
-         align = LLVMInt32(1);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_8_0
--    llvm::Constant *mcFunc =
--        m->module->getOrInsertFunction("llvm.memcpy.p0i8.p0i8.i64", LLVMTypes::VoidType, LLVMTypes::VoidPointerType,
--                                       LLVMTypes::VoidPointerType, LLVMTypes::Int64Type, LLVMTypes::BoolType);
--#else // LLVM 9.0+
-     llvm::FunctionCallee mcFuncCallee =
-         m->module->getOrInsertFunction("llvm.memcpy.p0i8.p0i8.i64", LLVMTypes::VoidType, LLVMTypes::VoidPointerType,
-                                        LLVMTypes::VoidPointerType, LLVMTypes::Int64Type, LLVMTypes::BoolType);
-     llvm::Constant *mcFunc = llvm::cast<llvm::Constant>(mcFuncCallee.getCallee());
--#endif
-     AssertPos(currentPos, mcFunc != NULL);
-     AssertPos(currentPos, llvm::isa<llvm::Function>(mcFunc));
- 
-diff --git a/src/gen/GlobalsLocalization.cpp b/src/gen/GlobalsLocalization.cpp
-index 193a66289..a176e9462 100644
---- a/src/gen/GlobalsLocalization.cpp
-+++ b/src/gen/GlobalsLocalization.cpp
-@@ -470,11 +470,7 @@ void GlobalsLocalization::LocalizeGlobals(LocalizationInfo &LI) {
-         Instruction &FirstI = *Fn->getEntryBlock().begin();
-         Type *ElemTy = GV->getType()->getElementType();
-         AllocaInst *Alloca = new AllocaInst(ElemTy, 0, GV->getName() + ".local", &FirstI);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        Alloca->setAlignment(GV->getAlignment());
--#else // LLVM 10.0+
-         Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()));
--#endif
-         if (!isa<UndefValue>(GV->getInitializer()))
-             new StoreInst(GV->getInitializer(), Alloca, &FirstI);
- 
-diff --git a/src/ispc.cpp b/src/ispc.cpp
-index e2d0f206e..fac5233f7 100644
---- a/src/ispc.cpp
-+++ b/src/ispc.cpp
-@@ -272,9 +272,7 @@ typedef enum {
-     CPU_Silvermont,
- 
-     CPU_ICX,
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     CPU_TGL,
--#endif
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-     CPU_ADL,
-     CPU_SPR,
-@@ -365,10 +363,8 @@ class AllCPUs {
- 
-         names[CPU_ICX].push_back("icelake-server");
-         names[CPU_ICX].push_back("icx");
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         names[CPU_TGL].push_back("tigerlake");
-         names[CPU_TGL].push_back("tgl");
--#endif
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-         names[CPU_ADL].push_back("alderlake");
-         names[CPU_ADL].push_back("adl");
-@@ -411,11 +407,9 @@ class AllCPUs {
-         compat[CPU_ADL] = Set(CPU_ADL, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont,
-                               CPU_SandyBridge, CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_None);
- #endif
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         compat[CPU_TGL] =
-             Set(CPU_TGL, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont, CPU_SandyBridge,
-                 CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_SKX, CPU_ICL, CPU_ICX, CPU_None);
--#endif
-         compat[CPU_ICX] = Set(CPU_ICX, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont,
-                               CPU_SandyBridge, CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_SKX, CPU_ICL, CPU_None);
- 
-@@ -556,9 +550,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-         case CPU_SPR:
- #endif
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         case CPU_TGL:
--#endif
-         case CPU_ICX:
-         case CPU_ICL:
-         case CPU_SKX:
-@@ -916,7 +908,6 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         }
-         break;
-     case ISPCTarget::avx512skx_i8x64:
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0 // LLVM 10.0+
-         // This target is enabled only for LLVM 10.0 and later
-         // because LLVM requires a number of fixes, which are
-         // committed to LLVM 11.0 and can be applied to 10.0, but not
-@@ -937,12 +928,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         this->m_hasVecPrefetch = false;
-         CPUfromISA = CPU_SKX;
-         break;
--#else
--        unsupported_target = true;
--        break;
--#endif
-     case ISPCTarget::avx512skx_i16x32:
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0 // LLVM 10.0+
-         // This target is enabled only for LLVM 10.0 and later
-         // because LLVM requires a number of fixes, which are
-         // committed to LLVM 11.0 and can be applied to 10.0, but not
-@@ -963,10 +949,6 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         this->m_hasVecPrefetch = false;
-         CPUfromISA = CPU_SKX;
-         break;
--#else
--        unsupported_target = true;
--        break;
--#endif
- #ifdef ISPC_ARM_ENABLED
-     case ISPCTarget::neon_i8x16:
-         this->m_isa = Target::NEON;
-@@ -1662,11 +1644,9 @@ Globals::Globals() {
-     isMultiTargetCompilation = false;
-     errorLimit = -1;
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     enableTimeTrace = false;
-     // set default granularity to 500.
-     timeTraceGranularity = 500;
--#endif
-     target = NULL;
-     ctx = new llvm::LLVMContext;
- 
-diff --git a/src/ispc.h b/src/ispc.h
-index e25d8830e..de357a21c 100644
---- a/src/ispc.h
-+++ b/src/ispc.h
-@@ -695,13 +695,12 @@ struct Globals {
- 
-     /* Number of errors to show in ISPC. */
-     int errorLimit;
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-+
-     /* When true, enable compile time tracing. */
-     bool enableTimeTrace;
- 
-     /* When compile time tracing is enabled, set time granularity. */
-     int timeTraceGranularity;
--#endif
- };
- 
- enum {
-diff --git a/src/ispc_version.h b/src/ispc_version.h
-index d781347fd..434b2d678 100644
---- a/src/ispc_version.h
-+++ b/src/ispc_version.h
-@@ -44,13 +44,11 @@
- 
- #define ISPC_LLVM_VERSION (LLVM_VERSION_MAJOR * 10000 + LLVM_VERSION_MINOR * 100)
- 
--#define ISPC_LLVM_8_0 80000
--#define ISPC_LLVM_9_0 90000
- #define ISPC_LLVM_10_0 100000
- #define ISPC_LLVM_11_0 110000
- #define ISPC_LLVM_12_0 120000
- 
--#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_8_0
-+#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_10_0
- #define LATEST_SUPPORTED_LLVM ISPC_LLVM_12_0
- 
- #ifdef __ispc__xstr
-diff --git a/src/main.cpp b/src/main.cpp
-index 8f64330cc..5c920eabc 100644
---- a/src/main.cpp
-+++ b/src/main.cpp
-@@ -55,9 +55,7 @@
- #include <llvm/Support/Signals.h>
- #include <llvm/Support/TargetRegistry.h>
- #include <llvm/Support/TargetSelect.h>
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/ToolOutputFile.h>
--#endif
- 
- #ifdef ISPC_HOST_IS_WINDOWS
- #define strcasecmp stricmp
-@@ -181,11 +179,9 @@ static void lPrintVersion() {
-     snprintf(targetHelp, sizeof(targetHelp), "[--target-os=<os>]\t\t\tSelect target OS.  <os>={%s}",
-              g->target_registry->getSupportedOSes().c_str());
-     PrintWithWordBreaks(targetHelp, 24, TerminalWidth(), stdout);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     printf("    [--time-trace]\t\t\tTurn on time profiler. Generates JSON file based on output filename.\n");
-     printf("    [--time-trace-granularity=<value>\tMinimum time granularity (in microseconds) traced by time "
-            "profiler.\n");
--#endif
-     printf("    [--version]\t\t\t\tPrint ispc version\n");
- #ifdef ISPC_GENX_ENABLED
-     printf("    [--vc-options=<\"-option1 -option2...\">]\t\t\t\tPass additional options to Vector Compiler backend\n");
-@@ -462,7 +458,6 @@ static void setCallingConv(VectorCallStatus vectorCall, Arch arch) {
-     }
- }
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- static void writeCompileTimeFile(const char *outFileName) {
-     llvm::SmallString<128> jsonFileName(outFileName);
-     jsonFileName.append(".json");
-@@ -479,7 +474,6 @@ static void writeCompileTimeFile(const char *outFileName) {
-     of->keep();
-     return;
- }
--#endif
- 
- static std::set<int> ParsingPhases(char *stages, ArgErrors &errorHandler) {
-     constexpr int parsing_limit = 100;
-@@ -791,12 +785,10 @@ int main(int Argc, char *Argv[]) {
-             }
-         } else if (!strncmp(argv[i], "--force-alignment=", 18)) {
-             g->forceAlignment = atoi(argv[i] + 18);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         } else if (!strcmp(argv[i], "--time-trace")) {
-             g->enableTimeTrace = true;
-         } else if (!strncmp(argv[i], "--time-trace-granularity=", 25)) {
-             g->timeTraceGranularity = atoi(argv[i] + 25);
--#endif
-         } else if (!strcmp(argv[i], "--woff") || !strcmp(argv[i], "-woff")) {
-             g->disableWarnings = true;
-             g->emitPerfWarnings = false;
-@@ -1059,7 +1051,6 @@ int main(int Argc, char *Argv[]) {
- 
-     // This needs to happen after the TargetOS is decided.
-     setCallingConv(vectorCall, arch);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     if (g->enableTimeTrace) {
-         llvm::timeTraceProfilerInitialize(g->timeTraceGranularity, "ispc");
-     }
-@@ -1077,9 +1068,5 @@ int main(int Argc, char *Argv[]) {
-         }
-         llvm::timeTraceProfilerCleanup();
-     }
--#else
--    int ret = Module::CompileAndOutput(file, arch, cpu, targets, flags, ot, outFileName, headerFileName, depsFileName,
--                                       depsTargetName, hostStubFileName, devStubFileName);
--#endif
-     return ret;
- }
-diff --git a/src/module.cpp b/src/module.cpp
-index fe7452df1..a85fec77a 100644
---- a/src/module.cpp
-+++ b/src/module.cpp
-@@ -170,9 +170,7 @@ Module::Module(const char *fn) {
-     module->setDataLayout(g->target->getDataLayout()->getStringRepresentation());
- 
-     if (g->generateDebuggingSymbols) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Create Debug Data");
--#endif
-         // To enable debug information on Windows, we have to let llvm know, that
-         // debug information should be emitted in CodeView format.
-         if (g->target_os == TargetOS::windows) {
-@@ -226,10 +224,8 @@ extern YY_BUFFER_STATE yy_create_buffer(FILE *, int);
- extern void yy_delete_buffer(YY_BUFFER_STATE);
- 
- int Module::CompileFile() {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope CompileFileTimeScope(
-         "CompileFile", llvm::StringRef(filename + ("_" + std::string(g->target->GetISAString()))));
--#endif
-     extern void ParserInit();
-     ParserInit();
- 
-@@ -238,18 +234,14 @@ int Module::CompileFile() {
-     // variable 'm' to be initialized and available (which it isn't until
-     // the Module constructor returns...)
-     {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("DefineStdlib");
--#endif
-         DefineStdlib(symbolTable, g->ctx, module, g->includeStdlib);
-     }
- 
-     bool runPreprocessor = g->runCPP;
- 
-     if (runPreprocessor) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Frontend parser");
--#endif
-         if (!IsStdin(filename)) {
-             // Try to open the file first, since otherwise we crash in the
-             // preprocessor if the file doesn't exist.
-@@ -268,9 +260,7 @@ int Module::CompileFile() {
-         yyparse();
-         yy_delete_buffer(strbuf);
-     } else {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Frontend parser");
--#endif
-         // No preprocessor, just open up the file if it's not stdin..
-         FILE *f = NULL;
-         if (IsStdin(filename)) {
-@@ -297,9 +287,7 @@ int Module::CompileFile() {
- 
-     if (diBuilder)
-         diBuilder->finalize();
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope TimeScope("Optimize");
--#endif
-     if (errorCount == 0)
-         Optimize(module, g->opt.level);
- 
-@@ -1243,15 +1231,8 @@ bool Module::writeObjectFileOrAssembly(llvm::TargetMachine *targetMachine, llvm:
-                                        const char *outFileName) {
-     // Figure out if we're generating object file or assembly output, and
-     // set binary output for object files
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    Assert(!g->target->isGenXTarget());
--    llvm::TargetMachine::CodeGenFileType fileType =
--        (outputType == Object) ? llvm::TargetMachine::CGFT_ObjectFile : llvm::TargetMachine::CGFT_AssemblyFile;
--    bool binary = (fileType == llvm::TargetMachine::CGFT_ObjectFile);
--#else // LLVM 10.0+
-     llvm::CodeGenFileType fileType = (outputType == Object) ? llvm::CGFT_ObjectFile : llvm::CGFT_AssemblyFile;
-     bool binary = (fileType == llvm::CGFT_ObjectFile);
--#endif
- 
-     llvm::sys::fs::OpenFlags flags = binary ? llvm::sys::fs::F_None : llvm::sys::fs::F_Text;
- 
-@@ -2219,11 +2200,7 @@ void Module::execPreprocessor(const char *infilename, llvm::raw_string_ostream *
-     inst.setTarget(target);
-     inst.createSourceManager(inst.getFileManager());
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    clang::FrontendInputFile inputFile(infilename, clang::InputKind::Unknown);
--#else // LLVM 10.0+
-     clang::FrontendInputFile inputFile(infilename, clang::InputKind());
--#endif
- 
-     inst.InitializeSourceManager(inputFile);
- 
-@@ -2722,9 +2699,7 @@ int Module::CompileAndOutput(const char *srcFile, Arch arch, const char *cpu, st
- 
-         m = new Module(srcFile);
-         if (m->CompileFile() == 0) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-             llvm::TimeTraceScope TimeScope("Backend");
--#endif
- #ifdef ISPC_GENX_ENABLED
-             if (outputType == Asm || outputType == Object) {
-                 if (g->target->isGenXTarget()) {
-@@ -2855,9 +2830,7 @@ int Module::CompileAndOutput(const char *srcFile, Arch arch, const char *cpu, st
- 
-             m = new Module(srcFile);
-             int compileFileError = m->CompileFile();
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-             llvm::TimeTraceScope TimeScope("Backend");
--#endif
-             if (compileFileError == 0) {
-                 // Create the dispatch module, unless already created;
-                 // in the latter case, just do the checking
-diff --git a/src/module.h b/src/module.h
-index 61d3cfea0..603124d50 100644
---- a/src/module.h
-+++ b/src/module.h
-@@ -43,9 +43,7 @@
- 
- #include <llvm/IR/DebugInfo.h>
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/TimeProfiler.h>
--#endif
- 
- #ifdef ISPC_GENX_ENABLED
- #include "ocl_igc_interface/igc_ocl_device_ctx.h"
-diff --git a/src/opt.cpp b/src/opt.cpp
-index a655a8344..5b1ac7b63 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -66,6 +66,7 @@
- #include <llvm/IR/Instructions.h>
- #include <llvm/IR/IntrinsicInst.h>
- #include <llvm/IR/Intrinsics.h>
-+#include <llvm/IR/IntrinsicsX86.h>
- #include <llvm/IR/LegacyPassManager.h>
- #include <llvm/IR/Module.h>
- #include <llvm/IR/PatternMatch.h>
-@@ -85,9 +86,6 @@
- #include <llvm/Transforms/Scalar/InstSimplifyPass.h>
- #include <llvm/Transforms/Utils.h>
- #include <llvm/Transforms/Utils/BasicBlockUtils.h>
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
--#include <llvm/IR/IntrinsicsX86.h>
--#endif
- 
- #ifdef ISPC_HOST_IS_LINUX
- #include <alloca.h>
-@@ -1003,10 +1001,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
-                 name = LLVMGetName(callInst->getArgOperand(0), "_load");
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                llvm::Instruction *loadInst =
--                    new llvm::LoadInst(castPtr, name, false /* not volatile */, align, (llvm::Instruction *)NULL);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-                 llvm::Instruction *loadInst = new llvm::LoadInst(castPtr, name, false /* not volatile */,
-                                                                  llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
- #else
-@@ -1043,13 +1038,8 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedStore32 ? 4 : 8;
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                llvm::StoreInst *storeInst = new llvm::StoreInst(rvalue, castPtr, (llvm::Instruction *)NULL);
--                storeInst->setAlignment(align);
--#else
-                 llvm::StoreInst *storeInst = new llvm::StoreInst(rvalue, castPtr, (llvm::Instruction *)NULL,
-                                                                  llvm::MaybeAlign(align).valueOrOne());
--#endif
-                 lCopyMetadata(storeInst, callInst);
-                 llvm::ReplaceInstWithInst(callInst, storeInst);
- 
-@@ -1066,9 +1056,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool IntrinsicsOpt::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("IntrinsicsOpt::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -1239,9 +1227,7 @@ bool InstructionSimplifyPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool InstructionSimplifyPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("InstructionSimplifyPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -2974,16 +2960,10 @@ static bool lImproveMaskedStore(llvm::CallInst *callInst) {
- 
-             lvalue = new llvm::BitCastInst(lvalue, ptrType, "lvalue_to_ptr_type", callInst);
-             lCopyMetadata(lvalue, callInst);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--            store =
--                new llvm::StoreInst(rvalue, lvalue, false /* not volatile */,
--                                    g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align);
--#else
-             store = new llvm::StoreInst(
-                 rvalue, lvalue, false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-                     .valueOrOne());
--#endif
-         }
-         if (store != NULL) {
-             lCopyMetadata(store, callInst);
-@@ -3059,11 +3039,7 @@ static bool lImproveMaskedLoad(llvm::CallInst *callInst, llvm::BasicBlock::itera
-         {
-             llvm::Type *ptrType = llvm::PointerType::get(callInst->getType(), 0);
-             ptr = new llvm::BitCastInst(ptr, ptrType, "ptr_cast_for_load", callInst);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--            load = new llvm::LoadInst(ptr, callInst->getName(), false /* not volatile */,
--                                      g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align,
--                                      (llvm::Instruction *)NULL);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-             load = new llvm::LoadInst(
-                 ptr, callInst->getName(), false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-@@ -3129,9 +3105,7 @@ bool ImproveMemoryOpsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ImproveMemoryOpsPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ImproveMemoryOpsPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -3424,9 +3398,7 @@ llvm::Value *lGEPAndLoad(llvm::Value *basePtr, int64_t offset, int align, llvm::
-                          llvm::Type *type) {
-     llvm::Value *ptr = lGEPInst(basePtr, LLVMInt64(offset), "new_base", insertBefore);
-     ptr = new llvm::BitCastInst(ptr, llvm::PointerType::get(type, 0), "ptr_cast", insertBefore);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, align, insertBefore);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-     return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, llvm::MaybeAlign(align), insertBefore);
- #else // LLVM 11.0+
-     return new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-@@ -4135,9 +4107,7 @@ bool GatherCoalescePass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool GatherCoalescePass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("GatherCoalescePass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -4467,9 +4437,7 @@ bool ReplacePseudoMemoryOpsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplacePseudoMemoryOpsPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplacePseudoMemoryOpsPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -4573,9 +4541,7 @@ bool IsCompileTimeConstantPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool IsCompileTimeConstantPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("IsCompileTimeConstantPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5201,9 +5167,7 @@ bool PeepholePass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool PeepholePass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("PeepholePass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5299,9 +5263,7 @@ bool ReplaceStdlibShiftPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceStdlibShiftPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceStdlibShiftPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5399,9 +5361,7 @@ llvm::Instruction *FixBooleanSelectPass::fixSelect(llvm::SelectInst *sel, llvm::
- }
- 
- bool FixBooleanSelectPass::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("FixBooleanSelectPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
- 
-     return modifiedAny;
-@@ -5964,9 +5924,7 @@ bool GenXGatherCoalescing::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool GenXGatherCoalescing::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("GenXGatherCoalescing::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6113,9 +6071,7 @@ bool PromoteToPrivateMemoryPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool PromoteToPrivateMemoryPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("PromoteToPrivateMemoryPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6181,9 +6137,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceLLVMIntrinsics::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceLLVMIntrinsics::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6278,9 +6232,7 @@ bool ReplaceUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceUnsupportedInsts::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceUnsupportedInsts::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6369,9 +6321,7 @@ bool CheckUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool CheckUnsupportedInsts::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("CheckUnsupportedInsts::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6440,9 +6390,7 @@ bool MangleOpenCLBuiltins::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool MangleOpenCLBuiltins::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("MangleOpenCLBuiltins::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6828,9 +6776,7 @@ bool FixAddressSpace::runOnFunction(llvm::Function &F) {
-     // Transformations are correct when the function is not internal.
-     // This is due to address space calculation algorithm.
-     // TODO: problems can be met in case of Stack Calls
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("FixAddressSpace::runOnFunction", F.getName());
--#endif
-     if (F.getLinkage() == llvm::GlobalValue::LinkageTypes::InternalLinkage)
-         return false;
- 
-@@ -6854,9 +6800,7 @@ class DemotePHIs : public llvm::FunctionPass {
- char DemotePHIs::ID = 0;
- 
- bool DemotePHIs::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("DemotePHIs::runOnFunction", F.getName());
--#endif
-     if (F.isDeclaration() || skipFunction(F))
-         return false;
-     std::vector<llvm::Instruction *> WorkList;
-diff --git a/src/type.cpp b/src/type.cpp
-index 688a4e874..fa0cb04db 100644
---- a/src/type.cpp
-+++ b/src/type.cpp
-@@ -1822,14 +1822,10 @@ llvm::DIType *StructType::GetDIType(llvm::DIScope *scope) const {
-     llvm::DIFile *diFile = pos.GetDIFile();
-     llvm::DINamespace *diSpace = pos.GetDINamespace();
-     return m->diBuilder->createStructType(diSpace, GetString(), diFile,
--                                          pos.first_line,          // Line number
--                                          layout->getSizeInBits(), // Size in bits
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                                          layout->getAlignment() * 8, // Alignment in bits
--#else                                                                 // LLVM 10.0+
-+                                          pos.first_line,                     // Line number
-+                                          layout->getSizeInBits(),            // Size in bits
-                                           layout->getAlignment().value() * 8, // Alignment in bits
--#endif
--                                          llvm::DINode::FlagZero, // Flags
-+                                          llvm::DINode::FlagZero,             // Flags
-                                           NULL, elements);
- }
- 
-diff --git a/tests/lit-tests/1771.ispc b/tests/lit-tests/1771.ispc
-index 98064d84d..4feb73dd7 100644
---- a/tests/lit-tests/1771.ispc
-+++ b/tests/lit-tests/1771.ispc
-@@ -5,7 +5,6 @@
- // RUN: %{ispc} %s --target=sse4-i16x8 --emit-asm -o - | FileCheck %s -check-prefix=CHECKSSE4_I16X8
- // RUN: %{ispc} %s --target=sse4-i8x16 --emit-asm -o - | FileCheck %s -check-prefix=CHECKSSE4_I8X16
- 
--// REQUIRES: LLVM_10_0+
- // REQUIRES: X86_ENABLED
- 
- // CHECKAVX2_I32X8: {{[a-z]*xor[a-z]*}}  %xmm0, %xmm0, %xmm0
-diff --git a/tests/lit-tests/1844.ispc b/tests/lit-tests/1844.ispc
-index 793a8866c..189edf4c3 100644
---- a/tests/lit-tests/1844.ispc
-+++ b/tests/lit-tests/1844.ispc
-@@ -6,9 +6,6 @@
- 
- // REQUIRES: X86_ENABLED
- 
--// It doesn't work for anything earlier than 10.0, but it will not be fixed, so don't run.
--// REQUIRES: LLVM_10_0+
--
- extern uniform unsigned int64 var_6;
- extern uniform unsigned int16 var_11;
- extern uniform bool arr_201 [1] [15] [20];
-diff --git a/tests/lit-tests/1926.ispc b/tests/lit-tests/1926.ispc
-index 70f7cc3c2..7921c91a6 100644
---- a/tests/lit-tests/1926.ispc
-+++ b/tests/lit-tests/1926.ispc
-@@ -2,8 +2,6 @@
- // RUN: cat %T/1926.o.json \
- // RUN:   | FileCheck %s
- 
--// REQUIRES: LLVM_10_0+
--
- // CHECK: "traceEvents"
- // CHECK: "detail"
- export uniform int foo(uniform int a[], uniform int count) {
-diff --git a/tests/lit-tests/cpus_x86.ispc b/tests/lit-tests/cpus_x86.ispc
-index 516efdd4c..4d60186f6 100644
---- a/tests/lit-tests/cpus_x86.ispc
-+++ b/tests/lit-tests/cpus_x86.ispc
-@@ -24,6 +24,8 @@
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icl
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icelake-server
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icx
-+//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tigerlake
-+//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tgl
- 
- // REQUIRES: X86_ENABLED
- 
-diff --git a/tests/lit-tests/cpus_x86_llvm10.ispc b/tests/lit-tests/cpus_x86_llvm10.ispc
-deleted file mode 100644
-index ef00000e5..000000000
---- a/tests/lit-tests/cpus_x86_llvm10.ispc
-+++ /dev/null
-@@ -1,11 +0,0 @@
--// The test checks that cpu definitions (including all synonyms) are successfully consumed by compiler.
--
--//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tigerlake
--//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tgl
--
--// REQUIRES: X86_ENABLED
--// REQUIRES: LLVM_10_0+
--
--uniform int i;
--
--void foo() {}
-diff --git a/tests/lit-tests/lit.cfg b/tests/lit-tests/lit.cfg
-index 17016579d..045e69437 100644
---- a/tests/lit-tests/lit.cfg
-+++ b/tests/lit-tests/lit.cfg
-@@ -30,11 +30,6 @@ print("Config:")
- 
- # LLVM version
- llvm_version = LooseVersion(ispc_llvm_version_number)
--if llvm_version >= LooseVersion("10.0.0"):
--    print("LLVM_10_0+: YES")
--    config.available_features.add("LLVM_10_0+")
--else:
--    print("LLVM_10_0+: NO")
- 
- if llvm_version >= LooseVersion("12.0.0"):
-     print("LLVM_12_0+: YES")
diff --git a/srcpkgs/ispc/patches/llvm12-003.patch b/srcpkgs/ispc/patches/llvm12-003.patch
deleted file mode 100644
index 0423afc9e3f9..000000000000
--- a/srcpkgs/ispc/patches/llvm12-003.patch
+++ /dev/null
@@ -1,1504 +0,0 @@
-From 1851d18b213dbad169937076176b2d5509733c76 Mon Sep 17 00:00:00 2001
-From: Deepak Rajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Tue, 12 Jan 2021 22:15:12 -0800
-Subject: [PATCH] fixes #1821 - Removing LLVMGetName() and switching to
- LLVM::Twine.
-
----
- src/ctx.cpp      | 304 ++++++++++++++++++++++-------------------------
- src/ctx.h        |  72 +++++------
- src/expr.cpp     |  36 +++---
- src/llvmutil.cpp |  17 ---
- src/llvmutil.h   |   5 -
- src/opt.cpp      | 103 +++++++++-------
- 6 files changed, 255 insertions(+), 282 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 42c4ea09d..ded524b71 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1020,8 +1020,8 @@ void FunctionEmitContext::EmitCaseLabel(int value, bool checkMask, SourcePos pos
-     llvm::BasicBlock *bbCaseImpl = NULL;
-     if (emitGenXHardwareMask()) {
-         // Create basic block with actual case implementation
--        std::string bbName = bbCase->getName().str() + "_impl";
--        bbCaseImpl = CreateBasicBlock(bbName.c_str(), bbCase);
-+        llvm::Twine bbName = llvm::Twine(bbCase->getName()) + "_impl";
-+        bbCaseImpl = CreateBasicBlock(bbName, bbCase);
-     }
- #endif
- 
-@@ -1185,7 +1185,7 @@ bool FunctionEmitContext::initLabelBBlocks(ASTNode *node, void *data) {
-     if (ctx->labelMap.find(ls->name) != ctx->labelMap.end())
-         Error(ls->pos, "Multiple labels named \"%s\" in function.", ls->name.c_str());
-     else {
--        llvm::BasicBlock *bb = ctx->CreateBasicBlock(ls->name.c_str());
-+        llvm::BasicBlock *bb = ctx->CreateBasicBlock(ls->name);
-         ctx->labelMap[ls->name] = bb;
-     }
-     return true;
-@@ -1299,7 +1299,7 @@ llvm::Value *FunctionEmitContext::Any(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_any"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_any");
- }
- 
- llvm::Value *FunctionEmitContext::All(llvm::Value *mask) {
-@@ -1315,7 +1315,7 @@ llvm::Value *FunctionEmitContext::All(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_all"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_all");
- }
- 
- llvm::Value *FunctionEmitContext::None(llvm::Value *mask) {
-@@ -1331,7 +1331,7 @@ llvm::Value *FunctionEmitContext::None(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_none"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_none");
- }
- 
- llvm::Value *FunctionEmitContext::LaneMask(llvm::Value *v) {
-@@ -1349,7 +1349,7 @@ llvm::Value *FunctionEmitContext::LaneMask(llvm::Value *v) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, v, LLVMGetName(v, "_movmsk"));
-+    return CallInst(fmm, NULL, v, llvm::Twine(v->getName()) + "_movmsk");
- }
- 
- llvm::Value *FunctionEmitContext::MasksAllEqual(llvm::Value *v1, llvm::Value *v2) {
-@@ -1364,11 +1364,12 @@ llvm::Value *FunctionEmitContext::MasksAllEqual(llvm::Value *v1, llvm::Value *v2
- #else
-     if (g->target->getArch() == Arch::wasm32) {
-         llvm::Function *fmm = m->module->getFunction("__wasm_cmp_msk_eq");
--        return CallInst(fmm, NULL, {v1, v2}, LLVMGetName("wasm_cmp_msk_eq", v1, v2));
-+        return CallInst(fmm, NULL, {v1, v2}, ((llvm::Twine("wasm_cmp_msk_eq_") + v1->getName()) + "_") + v2->getName());
-     }
-     llvm::Value *mm1 = LaneMask(v1);
-     llvm::Value *mm2 = LaneMask(v2);
--    return CmpInst(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_EQ, mm1, mm2, LLVMGetName("equal", v1, v2));
-+    return CmpInst(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_EQ, mm1, mm2,
-+                   ((llvm::Twine("equal_") + v1->getName()) + "_") + v2->getName());
- #endif
- }
- 
-@@ -1392,7 +1393,7 @@ llvm::Value *FunctionEmitContext::GetStringPtr(const std::string &str) {
-     return new llvm::BitCastInst(lstrPtr, LLVMTypes::VoidPointerType, "str_void_ptr", bblock);
- }
- 
--llvm::BasicBlock *FunctionEmitContext::CreateBasicBlock(const char *name, llvm::BasicBlock *insertAfter) {
-+llvm::BasicBlock *FunctionEmitContext::CreateBasicBlock(const llvm::Twine &name, llvm::BasicBlock *insertAfter) {
-     llvm::BasicBlock *newBB = llvm::BasicBlock::Create(*g->ctx, name, llvmFunction);
-     if (insertAfter)
-         newBB->moveAfter(insertAfter);
-@@ -1416,14 +1417,15 @@ llvm::Value *FunctionEmitContext::I1VecToBoolVec(llvm::Value *b) {
- 
-         for (unsigned int i = 0; i < at->getNumElements(); ++i) {
-             llvm::Value *elt = ExtractInst(b, i);
--            llvm::Value *sext = SwitchBoolSize(elt, LLVMTypes::BoolVectorStorageType, LLVMGetName(elt, "_to_boolvec"));
-+            llvm::Value *sext =
-+                SwitchBoolSize(elt, LLVMTypes::BoolVectorStorageType, llvm::Twine(elt->getName()) + "_to_boolvec");
-             ret = InsertInst(ret, sext, i);
-         }
-         return ret;
-     } else {
-         // For non-array types, convert to 'LLVMTypes::BoolVectorType' if
-         // necessary.
--        return SwitchBoolSize(b, LLVMTypes::BoolVectorType, LLVMGetName(b, "_to_boolvec"));
-+        return SwitchBoolSize(b, LLVMTypes::BoolVectorType, llvm::Twine(b->getName()) + "_to_boolvec");
-     }
- }
- 
-@@ -1563,7 +1565,7 @@ static int lArrayVectorWidth(llvm::Type *t) {
- }
- 
- llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps inst, llvm::Value *v0, llvm::Value *v1,
--                                                 const char *name) {
-+                                                 const llvm::Twine &name) {
-     if (v0 == NULL || v1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1573,7 +1575,7 @@ llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps in
-     llvm::Type *type = v0->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *bop = llvm::BinaryOperator::Create(inst, v0, v1, name ? name : "", bblock);
-+        llvm::Instruction *bop = llvm::BinaryOperator::Create(inst, v0, v1, name, bblock);
-         AddDebugPos(bop);
-         return bop;
-     } else {
-@@ -1591,7 +1593,7 @@ llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps in
-     }
- }
- 
--llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const char *name) {
-+llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const llvm::Twine &name) {
-     if (v == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1603,14 +1605,14 @@ llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const char *name)
-     llvm::Type *type = v->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *binst = llvm::BinaryOperator::CreateNot(v, name ? name : "not", bblock);
-+        llvm::Instruction *binst = llvm::BinaryOperator::CreateNot(v, name.isTriviallyEmpty() ? "not" : name, bblock);
-         AddDebugPos(binst);
-         return binst;
-     } else {
-         llvm::Value *ret = llvm::UndefValue::get(type);
-         for (int i = 0; i < arraySize; ++i) {
-             llvm::Value *a = ExtractInst(v, i);
--            llvm::Value *op = llvm::BinaryOperator::CreateNot(a, name ? name : "not", bblock);
-+            llvm::Value *op = llvm::BinaryOperator::CreateNot(a, name.isTriviallyEmpty() ? "not" : name, bblock);
-             AddDebugPos(op);
-             ret = InsertInst(ret, op, i);
-         }
-@@ -1638,7 +1640,7 @@ static llvm::Type *lGetMatchingBoolVectorType(llvm::Type *type) {
- }
- 
- llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm::CmpInst::Predicate pred,
--                                          llvm::Value *v0, llvm::Value *v1, const char *name) {
-+                                          llvm::Value *v0, llvm::Value *v1, const llvm::Twine &name) {
-     if (v0 == NULL || v1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1648,7 +1650,8 @@ llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm
-     llvm::Type *type = v0->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *ci = llvm::CmpInst::Create(inst, pred, v0, v1, name ? name : "cmp", bblock);
-+        llvm::Instruction *ci =
-+            llvm::CmpInst::Create(inst, pred, v0, v1, name.isTriviallyEmpty() ? "cmp" : name, bblock);
-         AddDebugPos(ci);
-         return ci;
-     } else {
-@@ -1657,14 +1660,14 @@ llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm
-         for (int i = 0; i < arraySize; ++i) {
-             llvm::Value *a = ExtractInst(v0, i);
-             llvm::Value *b = ExtractInst(v1, i);
--            llvm::Value *op = CmpInst(inst, pred, a, b, name);
-+            llvm::Value *op = CmpInst(inst, pred, a, b, name.isTriviallyEmpty() ? "cmp" : name);
-             ret = InsertInst(ret, op, i);
-         }
-         return ret;
-     }
- }
- 
--llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const char *name) {
-+llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1704,21 +1707,19 @@ llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const char *n
-     return ret;
- }
- 
--llvm::Value *FunctionEmitContext::BitCastInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Value *FunctionEmitContext::BitCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_bitcast");
--
--    llvm::Instruction *inst = new llvm::BitCastInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::BitCastInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_bitcast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const char *name) {
-+llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1728,23 +1729,19 @@ llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const char *n
-         // no-op for varying pointers; they're already vectors of ints
-         return value;
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_ptr2int");
-     llvm::Type *type = LLVMTypes::PointerIntType;
--    llvm::Instruction *inst = new llvm::PtrToIntInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::PtrToIntInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_ptr2int");
--
-     llvm::Type *fromType = value->getType();
-     if (llvm::isa<llvm::VectorType>(fromType)) {
-         // varying pointer
-@@ -1752,27 +1749,26 @@ llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *t
-             // already the right type--done
-             return value;
-         else if (fromType->getScalarSizeInBits() > toType->getScalarSizeInBits())
--            return TruncInst(value, toType, name);
-+            return TruncInst(value, toType,
-+                             name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name);
-         else {
-             AssertPos(currentPos, fromType->getScalarSizeInBits() < toType->getScalarSizeInBits());
--            return ZExtInst(value, toType, name);
-+            return ZExtInst(value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name);
-         }
-     }
- 
--    llvm::Instruction *inst = new llvm::PtrToIntInst(value, toType, name, bblock);
-+    llvm::Instruction *inst = new llvm::PtrToIntInst(
-+        value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_int2ptr");
--
-     llvm::Type *fromType = value->getType();
-     if (llvm::isa<llvm::VectorType>(fromType)) {
-         // varying pointer
-@@ -1780,95 +1776,87 @@ llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *t
-             // done
-             return value;
-         else if (fromType->getScalarSizeInBits() > toType->getScalarSizeInBits())
--            return TruncInst(value, toType, name);
-+            return TruncInst(value, toType,
-+                             name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name);
-         else {
-             AssertPos(currentPos, fromType->getScalarSizeInBits() < toType->getScalarSizeInBits());
--            return ZExtInst(value, toType, name);
-+            return ZExtInst(value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name);
-         }
-     }
- 
--    llvm::Instruction *inst = new llvm::IntToPtrInst(value, toType, name, bblock);
-+    llvm::Instruction *inst = new llvm::IntToPtrInst(
-+        value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::TruncInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::TruncInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_trunc");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::TruncInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::TruncInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_trunc" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
- llvm::Instruction *FunctionEmitContext::CastInst(llvm::Instruction::CastOps op, llvm::Value *value, llvm::Type *type,
--                                                 const char *name) {
-+                                                 const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_cast");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = llvm::CastInst::Create(op, value, type, name, bblock);
-+    llvm::Instruction *inst = llvm::CastInst::Create(
-+        op, value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_cast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::FPCastInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::FPCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_cast");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = llvm::CastInst::CreateFPCast(value, type, name, bblock);
-+    llvm::Instruction *inst = llvm::CastInst::CreateFPCast(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_cast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::SExtInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::SExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_sext");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::SExtInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::SExtInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_sext" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::ZExtInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::ZExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_zext");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::ZExtInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::ZExtInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_zext" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
-@@ -1913,14 +1901,15 @@ llvm::Value *FunctionEmitContext::applyVaryingGEP(llvm::Value *basePtr, llvm::Va
-         scale = SmearUniform(scale);
-         Assert(index != NULL);
-         // offset = index * scale
--        offset = BinaryOperator(llvm::Instruction::Mul, scale, index, LLVMGetName("mul", scale, index));
-+        offset = BinaryOperator(llvm::Instruction::Mul, scale, index,
-+                                ((llvm::Twine("mul_") + scale->getName()) + "_") + index->getName());
-     }
- 
-     // For 64-bit targets, if we've been doing our offset calculations in
-     // 32 bits, we still have to convert to a 64-bit value before we
-     // actually add the offset to the pointer.
-     if (g->target->is32Bit() == false && g->opt.force32BitAddressing == true)
--        offset = SExtInst(offset, LLVMTypes::Int64VectorType, LLVMGetName(offset, "_to_64"));
-+        offset = SExtInst(offset, LLVMTypes::Int64VectorType, llvm::Twine(offset->getName()) + "_to_64");
- 
-     // Smear out the pointer to be varying; either the base pointer or the
-     // index must be varying for this method to be called.
-@@ -1929,7 +1918,7 @@ llvm::Value *FunctionEmitContext::applyVaryingGEP(llvm::Value *basePtr, llvm::Va
-     llvm::Value *varyingPtr = baseIsUniform ? SmearUniform(basePtr) : basePtr;
- 
-     // newPtr = ptr + offset
--    return BinaryOperator(llvm::Instruction::Add, varyingPtr, offset, LLVMGetName(basePtr, "_offset"));
-+    return BinaryOperator(llvm::Instruction::Add, varyingPtr, offset, llvm::Twine(basePtr->getName()) + "_offset");
- }
- 
- void FunctionEmitContext::MatchIntegerTypes(llvm::Value **v0, llvm::Value **v1) {
-@@ -2006,13 +1995,13 @@ llvm::Value *FunctionEmitContext::MakeSlicePointer(llvm::Value *ptr, llvm::Value
-     llvm::StructType *st = llvm::StructType::get(*g->ctx, eltTypes);
- 
-     llvm::Value *ret = llvm::UndefValue::get(st);
--    ret = InsertInst(ret, ptr, 0, LLVMGetName(ret, "_slice_ptr"));
--    ret = InsertInst(ret, offset, 1, LLVMGetName(ret, "_slice_offset"));
-+    ret = InsertInst(ret, ptr, 0, llvm::Twine(ret->getName()) + "_slice_ptr");
-+    ret = InsertInst(ret, offset, 1, llvm::Twine(ret->getName()) + "_slice_offset");
-     return ret;
- }
- 
- llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index, const Type *ptrRefType,
--                                                    const char *name) {
-+                                                    const llvm::Twine &name) {
-     if (basePtr == NULL || index == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2065,8 +2054,8 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
-         // uniform, so just emit the regular LLVM GEP instruction
-         llvm::Value *ind[1] = {index};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&ind[0], &ind[1]);
--        llvm::Instruction *inst =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "gep", bblock);
-+        llvm::Instruction *inst = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                                  name.isTriviallyEmpty() ? "gep" : name, bblock);
-         AddDebugPos(inst);
-         return inst;
-     } else
-@@ -2074,7 +2063,7 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
- }
- 
- llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0, llvm::Value *index1,
--                                                    const Type *ptrRefType, const char *name) {
-+                                                    const Type *ptrRefType, const llvm::Twine &name) {
-     if (basePtr == NULL || index0 == NULL || index1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2114,8 +2103,8 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
-         // uniform, so just emit the regular LLVM GEP instruction
-         llvm::Value *indices[2] = {index0, index1};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&indices[0], &indices[2]);
--        llvm::Instruction *inst =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "gep", bblock);
-+        llvm::Instruction *inst = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                                  name.isTriviallyEmpty() ? "gep" : name, bblock);
-         AddDebugPos(inst);
-         return inst;
-     } else {
-@@ -2138,7 +2127,7 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
- }
- 
- llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int elementNum, const Type *ptrRefType,
--                                                   const char *name, const PointerType **resultPtrType) {
-+                                                   const llvm::Twine &name, const PointerType **resultPtrType) {
-     if (resultPtrType != NULL)
-         AssertPos(currentPos, ptrRefType != NULL);
- 
-@@ -2195,8 +2184,8 @@ llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int
-         // If the pointer is uniform, we can use the regular LLVM GEP.
-         llvm::Value *offsets[2] = {LLVMInt32(0), LLVMInt32(elementNum)};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&offsets[0], &offsets[2]);
--        resultPtr =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "struct_offset", bblock);
-+        resultPtr = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                    name.isTriviallyEmpty() ? "struct_offset" : name, bblock);
-     } else {
-         // Otherwise do the math to find the offset and add it to the given
-         // varying pointers
-@@ -2237,7 +2226,7 @@ llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int
-         return resultPtr;
- }
- 
--llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if ((value == NULL) || (toType == NULL)) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2248,20 +2237,18 @@ llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type
-     llvm::Value *newBool = value;
-     if (g->target->getDataLayout()->getTypeSizeInBits(fromType) >
-         g->target->getDataLayout()->getTypeSizeInBits(toType)) {
--        if (name == NULL)
--            name = LLVMGetName(value, "_switchBool");
--        newBool = TruncInst(value, toType, name);
-+        newBool =
-+            TruncInst(value, toType, name.isTriviallyEmpty() ? (llvm::Twine(value->getName()) + "_switchBool") : name);
-     } else if (g->target->getDataLayout()->getTypeSizeInBits(fromType) <
-                g->target->getDataLayout()->getTypeSizeInBits(toType)) {
--        if (name == NULL)
--            name = LLVMGetName(value, "_switchBool");
--        newBool = SExtInst(value, toType, name);
-+        newBool =
-+            SExtInst(value, toType, name.isTriviallyEmpty() ? (llvm::Twine(value->getName()) + "_switchBool") : name);
-     }
- 
-     return newBool;
- }
- 
--llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, const char *name) {
-+llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, const llvm::Twine &name) {
-     if (ptr == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2270,13 +2257,13 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
-     llvm::PointerType *pt = llvm::dyn_cast<llvm::PointerType>(ptr->getType());
-     AssertPos(currentPos, pt != NULL);
- 
--    if (name == NULL)
--        name = LLVMGetName(ptr, "_load");
--
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    llvm::LoadInst *inst = new llvm::LoadInst(pt->getPointerElementType(), ptr, name, bblock);
-+    llvm::LoadInst *inst =
-+        new llvm::LoadInst(pt->getPointerElementType(), ptr,
-+                           name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name, bblock);
- #else
--    llvm::LoadInst *inst = new llvm::LoadInst(ptr, name, bblock);
-+    llvm::LoadInst *inst =
-+        new llvm::LoadInst(ptr, name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name, bblock);
- #endif
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
-@@ -2307,8 +2294,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
- static llvm::Value *lFinalSliceOffset(FunctionEmitContext *ctx, llvm::Value *ptr, const PointerType **ptrType) {
-     Assert(CastType<PointerType>(*ptrType) != NULL);
- 
--    llvm::Value *slicePtr = ctx->ExtractInst(ptr, 0, LLVMGetName(ptr, "_ptr"));
--    llvm::Value *sliceOffset = ctx->ExtractInst(ptr, 1, LLVMGetName(ptr, "_offset"));
-+    llvm::Value *slicePtr = ctx->ExtractInst(ptr, 0, llvm::Twine(ptr->getName()) + "_ptr");
-+    llvm::Value *sliceOffset = ctx->ExtractInst(ptr, 1, llvm::Twine(ptr->getName()) + "_offset");
- 
-     // slicePtr should be a pointer to an soa-width wide array of the
-     // final atomic/enum/pointer type
-@@ -2327,14 +2314,14 @@ static llvm::Value *lFinalSliceOffset(FunctionEmitContext *ctx, llvm::Value *ptr
-         slicePtr = ctx->BitCastInst(slicePtr, (*ptrType)->LLVMType(g->ctx));
- 
-     // And finally index based on the slice offset
--    return ctx->GetElementPtrInst(slicePtr, sliceOffset, *ptrType, LLVMGetName(slicePtr, "_final_gep"));
-+    return ctx->GetElementPtrInst(slicePtr, sliceOffset, *ptrType, llvm::Twine(slicePtr->getName()) + "_final_gep");
- }
- 
- /** Utility routine that loads from a uniform pointer to soa<> data,
-     returning a regular uniform (non-SOA result).
-  */
- llvm::Value *FunctionEmitContext::loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType,
--                                                     const char *name) {
-+                                                     const llvm::Twine &name) {
-     const Type *unifType = ptrType->GetBaseType()->GetAsUniformType();
- 
-     const CollectionType *ct = CastType<CollectionType>(ptrType->GetBaseType());
-@@ -2363,7 +2350,7 @@ llvm::Value *FunctionEmitContext::loadUniformFromSOA(llvm::Value *ptr, llvm::Val
- }
- 
- llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrRefType,
--                                           const char *name, bool one_elem) {
-+                                           const llvm::Twine &name, bool one_elem) {
-     if (ptr == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2371,9 +2358,6 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
- 
-     AssertPos(currentPos, ptrRefType != NULL && mask != NULL);
- 
--    if (name == NULL)
--        name = LLVMGetName(ptr, "_load");
--
-     const PointerType *ptrType;
-     const Type *elType;
-     if (CastType<ReferenceType>(ptrRefType) != NULL) {
-@@ -2393,7 +2377,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
- 
-     if (ptrType->IsUniformType()) {
-         if (ptrType->IsSlice()) {
--            return loadUniformFromSOA(ptr, mask, ptrType, name);
-+            return loadUniformFromSOA(ptr, mask, ptrType,
-+                                      name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name);
-         } else {
-             // FIXME: same issue as above load inst regarding alignment...
-             //
-@@ -2405,11 +2390,15 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-             const AtomicType *atomicType = CastType<AtomicType>(ptrType->GetBaseType());
- 
- #if ISPC_LLVM_VERSION <= ISPC_LLVM_10_0
--            llvm::LoadInst *inst = new llvm::LoadInst(ptr, name, false /* not volatile */, bblock);
-+            llvm::LoadInst *inst =
-+                new llvm::LoadInst(ptr, name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name,
-+                                   false /* not volatile */, bblock);
- #else // LLVM 11.0+
-             llvm::PointerType *ptr_type = llvm::dyn_cast<llvm::PointerType>(ptr->getType());
-             llvm::LoadInst *inst =
--                new llvm::LoadInst(ptr_type->getPointerElementType(), ptr, name, false /* not volatile */, bblock);
-+                new llvm::LoadInst(ptr_type->getPointerElementType(), ptr,
-+                                   name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name,
-+                                   false /* not volatile */, bblock);
- #endif
- 
-             if (atomicType != NULL && atomicType->IsVaryingType()) {
-@@ -2433,7 +2422,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-     } else {
-         // Otherwise we should have a varying ptr and it's time for a
-         // gather.
--        llvm::Value *gather_result = gather(ptr, ptrType, GetFullMask(), name);
-+        llvm::Value *gather_result = gather(ptr, ptrType, GetFullMask(),
-+                                            name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name);
-         if (!one_elem)
-             return gather_result;
- 
-@@ -2453,19 +2443,19 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-         // We can actually call either one, since both are i32s as far as
-         // LLVM's type system is concerned...
-         llvm::Function *fmm = mm[0]->function;
--        llvm::Value *int_mask = CallInst(fmm, NULL, mask, LLVMGetName(mask, "_movmsk"));
-+        llvm::Value *int_mask = CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_movmsk");
-         std::vector<Symbol *> lz;
-         m->symbolTable->LookupFunction("__count_trailing_zeros_i64", &lz);
-         llvm::Function *flz = lz[0]->function;
--        llvm::Value *elem_idx = CallInst(flz, NULL, int_mask, LLVMGetName(mask, "_clz"));
--        llvm::Value *elem = llvm::ExtractElementInst::Create(gather_result, elem_idx,
--                                                             LLVMGetName(gather_result, "_umasked_elem"), bblock);
-+        llvm::Value *elem_idx = CallInst(flz, NULL, int_mask, llvm::Twine(mask->getName()) + "_clz");
-+        llvm::Value *elem = llvm::ExtractElementInst::Create(
-+            gather_result, elem_idx, llvm::Twine(gather_result->getName()) + "_umasked_elem", bblock);
-         return elem;
-     }
- }
- 
- llvm::Value *FunctionEmitContext::gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask,
--                                         const char *name) {
-+                                         const llvm::Twine &name) {
-     // We should have a varying pointer if we get here...
-     AssertPos(currentPos, ptrType->IsVaryingType());
- 
-@@ -2602,7 +2592,8 @@ void FunctionEmitContext::addGSMetadata(llvm::Value *v, SourcePos pos) {
-     inst->setMetadata("last_column", md);
- }
- 
--llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *name, int align, bool atEntryBlock) {
-+llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const llvm::Twine &name, int align,
-+                                             bool atEntryBlock) {
-     if (llvmType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2615,12 +2606,12 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-         llvm::Instruction *retInst = allocaBlock->getTerminator();
-         AssertPos(currentPos, retInst);
-         unsigned AS = llvmFunction->getParent()->getDataLayout().getAllocaAddrSpace();
--        inst = new llvm::AllocaInst(llvmType, AS, name ? name : "", retInst);
-+        inst = new llvm::AllocaInst(llvmType, AS, name, retInst);
-     } else {
-         // Unless the caller overrode the default and wants it in the
-         // current basic block
-         unsigned AS = llvmFunction->getParent()->getDataLayout().getAllocaAddrSpace();
--        inst = new llvm::AllocaInst(llvmType, AS, name ? name : "", bblock);
-+        inst = new llvm::AllocaInst(llvmType, AS, name, bblock);
-     }
- 
-     // If no alignment was specified but we have an array of a uniform
-@@ -2639,7 +2630,8 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::AllocaInst(const Type *ptrType, const char *name, int align, bool atEntryBlock) {
-+llvm::Value *FunctionEmitContext::AllocaInst(const Type *ptrType, const llvm::Twine &name, int align,
-+                                             bool atEntryBlock) {
-     if (ptrType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3075,66 +3067,59 @@ llvm::Instruction *FunctionEmitContext::BranchInst(llvm::BasicBlock *trueBlock,
-     return b;
- }
- 
--llvm::Value *FunctionEmitContext::ExtractInst(llvm::Value *v, int elt, const char *name) {
-+llvm::Value *FunctionEmitContext::ExtractInst(llvm::Value *v, int elt, const llvm::Twine &name) {
-     if (v == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_extract_%d", elt);
--        name = LLVMGetName(v, buf);
--    }
-     llvm::Instruction *ei = NULL;
-     if (llvm::isa<llvm::VectorType>(v->getType()))
--        ei = llvm::ExtractElementInst::Create(v, LLVMInt32(elt), name, bblock);
-+        ei = llvm::ExtractElementInst::Create(
-+            v, LLVMInt32(elt),
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_extract_") + llvm::Twine(elt)) : name, bblock);
-     else
--        ei = llvm::ExtractValueInst::Create(v, elt, name, bblock);
-+        ei = llvm::ExtractValueInst::Create(
-+            v, elt, name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_extract_") + llvm::Twine(elt)) : name,
-+            bblock);
-     AddDebugPos(ei);
-     return ei;
- }
- 
--llvm::Value *FunctionEmitContext::InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const char *name) {
-+llvm::Value *FunctionEmitContext::InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const llvm::Twine &name) {
-     if (v == NULL || eltVal == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_insert_%d", elt);
--        name = LLVMGetName(v, buf);
--    }
--
-     llvm::Instruction *ii = NULL;
-     if (llvm::isa<llvm::VectorType>(v->getType()))
--        ii = llvm::InsertElementInst::Create(v, eltVal, LLVMInt32(elt), name, bblock);
-+        ii = llvm::InsertElementInst::Create(
-+            v, eltVal, LLVMInt32(elt),
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_insert_") + llvm::Twine(elt)) : name, bblock);
-     else
--        ii = llvm::InsertValueInst::Create(v, eltVal, elt, name, bblock);
-+        ii = llvm::InsertValueInst::Create(
-+            v, eltVal, elt,
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_insert_") + llvm::Twine(elt)) : name, bblock);
-     AddDebugPos(ii);
-     return ii;
- }
- 
--llvm::Value *FunctionEmitContext::ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const char *name) {
-+llvm::Value *FunctionEmitContext::ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask,
-+                                              const llvm::Twine &name) {
-     if (v1 == NULL || v2 == NULL || mask == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_shuffle");
--        name = LLVMGetName(v1, buf);
--    }
--
--    llvm::Instruction *ii = new llvm::ShuffleVectorInst(v1, v2, mask, name, bblock);
-+    llvm::Instruction *ii = new llvm::ShuffleVectorInst(
-+        v1, v2, mask, name.isTriviallyEmpty() ? (llvm::Twine(v1->getName()) + "_shuffle") : name, bblock);
- 
-     AddDebugPos(ii);
-     return ii;
- }
- 
--llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vecType, const char *name) {
-+llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vecType, const llvm::Twine &name) {
-     if (v == NULL || vecType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3148,12 +3133,6 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     Assert(ty && ty->getVectorElementType() == v->getType());
- #endif
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_broadcast");
--        name = LLVMGetName(v, buf);
--    }
--
-     // Generate the following sequence:
-     //   %name_init.i = insertelement <4 x i32> undef, i32 %val, i32 0
-     //   %name.i = shufflevector <4 x i32> %name_init.i, <4 x i32> undef,
-@@ -3163,7 +3142,7 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     llvm::Value *undef2 = llvm::UndefValue::get(vecType);
- 
-     // InsertElement
--    llvm::Twine tw = llvm::Twine(name) + llvm::Twine("_init");
-+    llvm::Twine tw = name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + llvm::Twine("_init");
-     llvm::Value *insert = InsertInst(undef1, v, 0, tw.str().c_str());
- 
-     // ShuffleVector
-@@ -3179,28 +3158,27 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-         llvm::ConstantVector::getSplat(llvm::ElementCount::get(static_cast<unsigned int>(ty->getNumElements()), false),
-                                        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
- #endif
--    llvm::Value *ret = ShuffleInst(insert, undef2, zeroVec, name);
-+    llvm::Value *ret = ShuffleInst(insert, undef2, zeroVec,
-+                                   name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name);
- 
-     return ret;
- }
- 
--llvm::PHINode *FunctionEmitContext::PhiNode(llvm::Type *type, int count, const char *name) {
--    llvm::PHINode *pn = llvm::PHINode::Create(type, count, name ? name : "phi", bblock);
-+llvm::PHINode *FunctionEmitContext::PhiNode(llvm::Type *type, int count, const llvm::Twine &name) {
-+    llvm::PHINode *pn = llvm::PHINode::Create(type, count, name.isTriviallyEmpty() ? "phi" : name, bblock);
-     AddDebugPos(pn);
-     return pn;
- }
- 
- llvm::Instruction *FunctionEmitContext::SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1,
--                                                   const char *name) {
-+                                                   const llvm::Twine &name) {
-     if (test == NULL || val0 == NULL || val1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(test, "_select");
--
--    llvm::Instruction *inst = llvm::SelectInst::Create(test, val0, val1, name, bblock);
-+    llvm::Instruction *inst = llvm::SelectInst::Create(
-+        test, val0, val1, name.isTriviallyEmpty() ? (llvm::Twine(test->getName()) + "_select") : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
-@@ -3226,7 +3204,7 @@ static unsigned int lCalleeArgCount(llvm::Value *callee, const FunctionType *fun
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType,
--                                           const std::vector<llvm::Value *> &args, const char *name) {
-+                                           const std::vector<llvm::Value *> &args, const llvm::Twine &name) {
-     if (func == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3258,9 +3236,9 @@ llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-         llvm::PointerType *func_ptr_type = llvm::dyn_cast<llvm::PointerType>(func->getType());
-         llvm::FunctionType *func_type = llvm::dyn_cast<llvm::FunctionType>(func_ptr_type->getPointerElementType());
--        llvm::CallInst *callinst = llvm::CallInst::Create(func_type, func, argVals, name ? name : "", bblock);
-+        llvm::CallInst *callinst = llvm::CallInst::Create(func_type, func, argVals, name, bblock);
- #else
--        llvm::CallInst *callinst = llvm::CallInst::Create(func, argVals, name ? name : "", bblock);
-+        llvm::CallInst *callinst = llvm::CallInst::Create(func, argVals, name, bblock);
- #endif
- 
-         // We could be dealing with a function pointer in which case this will not be a 'llvm::Function'.
-@@ -3464,14 +3442,14 @@ llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg,
--                                           const char *name) {
-+                                           const llvm::Twine &name) {
-     std::vector<llvm::Value *> args;
-     args.push_back(arg);
-     return CallInst(func, funcType, args, name);
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg0,
--                                           llvm::Value *arg1, const char *name) {
-+                                           llvm::Value *arg1, const llvm::Twine &name) {
-     std::vector<llvm::Value *> args;
-     args.push_back(arg0);
-     args.push_back(arg1);
-diff --git a/src/ctx.h b/src/ctx.h
-index 6e5ad74ba..48b3bb826 100644
---- a/src/ctx.h
-+++ b/src/ctx.h
-@@ -302,7 +302,7 @@ class FunctionEmitContext {
-     llvm::Value *GetStringPtr(const std::string &str);
- 
-     /** Create a new basic block with given name */
--    llvm::BasicBlock *CreateBasicBlock(const char *name, llvm::BasicBlock *insertAfter = NULL);
-+    llvm::BasicBlock *CreateBasicBlock(const llvm::Twine &name, llvm::BasicBlock *insertAfter = NULL);
- 
-     /** Given a vector with element type i1, return a vector of type
-         LLVMTypes::BoolVectorType.  This method handles the conversion for
-@@ -380,33 +380,33 @@ class FunctionEmitContext {
-         this also handles applying the given operation to the vector
-         elements. */
-     llvm::Value *BinaryOperator(llvm::Instruction::BinaryOps inst, llvm::Value *v0, llvm::Value *v1,
--                                const char *name = NULL);
-+                                const llvm::Twine &name = "");
- 
-     /** Emit the "not" operator.  Like BinaryOperator(), this also handles
-         a VectorType-based operand. */
--    llvm::Value *NotOperator(llvm::Value *v, const char *name = NULL);
-+    llvm::Value *NotOperator(llvm::Value *v, const llvm::Twine &name = "");
- 
-     /** Emit a comparison instruction.  If the operands are VectorTypes,
-         then a value for the corresponding boolean VectorType is
-         returned. */
-     llvm::Value *CmpInst(llvm::Instruction::OtherOps inst, llvm::CmpInst::Predicate pred, llvm::Value *v0,
--                         llvm::Value *v1, const char *name = NULL);
-+                         llvm::Value *v1, const llvm::Twine &name = "");
- 
-     /** Given a scalar value, return a vector of the same type (or an
-         array, for pointer types). */
--    llvm::Value *SmearUniform(llvm::Value *value, const char *name = NULL);
-+    llvm::Value *SmearUniform(llvm::Value *value, const llvm::Twine &name = "");
- 
--    llvm::Value *BitCastInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Value *PtrToIntInst(llvm::Value *value, const char *name = NULL);
--    llvm::Value *PtrToIntInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Value *IntToPtrInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+    llvm::Value *BitCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Value *PtrToIntInst(llvm::Value *value, const llvm::Twine &name = "");
-+    llvm::Value *PtrToIntInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Value *IntToPtrInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
- 
--    llvm::Instruction *TruncInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+    llvm::Instruction *TruncInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-     llvm::Instruction *CastInst(llvm::Instruction::CastOps op, llvm::Value *value, llvm::Type *type,
--                                const char *name = NULL);
--    llvm::Instruction *FPCastInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Instruction *SExtInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Instruction *ZExtInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+                                const llvm::Twine &name = "");
-+    llvm::Instruction *FPCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Instruction *SExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Instruction *ZExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
- 
-     /** Given two integer-typed values (but possibly one vector and the
-         other not, and or of possibly-different bit-widths), update their
-@@ -426,9 +426,9 @@ class FunctionEmitContext {
-         pointers.  The underlying type of the base pointer must be provided
-         via the ptrType parameter */
-     llvm::Value *GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index, const Type *ptrType,
--                                   const char *name = NULL);
-+                                   const llvm::Twine &name = "");
-     llvm::Value *GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0, llvm::Value *index1, const Type *ptrType,
--                                   const char *name = NULL);
-+                                   const llvm::Twine &name = "");
- 
-     /** This method returns a new pointer that represents offsetting the
-         given base pointer to point at the given element number of the
-@@ -436,26 +436,26 @@ class FunctionEmitContext {
-         pointer must be a pointer to a structure type.  The ptrType gives
-         the type of the pointer, though it may be NULL if the base pointer
-         is uniform. */
--    llvm::Value *AddElementOffset(llvm::Value *basePtr, int elementNum, const Type *ptrType, const char *name = NULL,
--                                  const PointerType **resultPtrType = NULL);
-+    llvm::Value *AddElementOffset(llvm::Value *basePtr, int elementNum, const Type *ptrType,
-+                                  const llvm::Twine &name = "", const PointerType **resultPtrType = NULL);
- 
-     /** Bool is stored as i8 and <WIDTH x i8> but represented in IR as i1 and
-      * <WIDTH x MASK>. This is a helper function to match bool size at storage
-      * interface. */
--    llvm::Value *SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const char *name = NULL);
-+    llvm::Value *SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name = "");
-     /** Load from the memory location(s) given by lvalue, using the given
-         mask.  The lvalue may be varying, in which case this corresponds to
-         a gather from the multiple memory locations given by the array of
-         pointer values given by the lvalue.  If the lvalue is not varying,
-         then both the mask pointer and the type pointer may be NULL. */
--    llvm::Value *LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrType, const char *name = NULL,
-+    llvm::Value *LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrType, const llvm::Twine &name = "",
-                           bool one_elem = false);
- 
-     /* Load from memory location(s) given.
-      * 'type' needs to be provided when storage type is different from IR type. For example,
-      * 'unform bool' is 'i1' in IR but stored as 'i8'.
-      * Otherwise leave this as NULL. */
--    llvm::Value *LoadInst(llvm::Value *ptr, const Type *type = NULL, const char *name = NULL);
-+    llvm::Value *LoadInst(llvm::Value *ptr, const Type *type = NULL, const llvm::Twine &name = "");
- 
-     /** Emits an alloca instruction to allocate stack storage for the given
-         type.  If a non-zero alignment is specified, the object is also
-@@ -463,7 +463,8 @@ class FunctionEmitContext {
-         instruction is added at the start of the function in the entry
-         basic block; if it should be added to the current basic block, then
-         the atEntryBlock parameter should be false. */
--    llvm::Value *AllocaInst(llvm::Type *llvmType, const char *name = NULL, int align = 0, bool atEntryBlock = true);
-+    llvm::Value *AllocaInst(llvm::Type *llvmType, const llvm::Twine &name = "", int align = 0,
-+                            bool atEntryBlock = true);
- 
-     /** Emits an alloca instruction to allocate stack storage for the given
-         type.  If a non-zero alignment is specified, the object is also
-@@ -474,7 +475,7 @@ class FunctionEmitContext {
-         This implementation is preferred when possible. It is needed when
-         storage type is different from IR type. For example,
-         'unform bool' is 'i1' in IR but stored as 'i8'. */
--    llvm::Value *AllocaInst(const Type *ptrType, const char *name = NULL, int align = 0, bool atEntryBlock = true);
-+    llvm::Value *AllocaInst(const Type *ptrType, const llvm::Twine &name = "", int align = 0, bool atEntryBlock = true);
- 
-     /** Standard store instruction; for this variant, the lvalue must be a
-         single pointer, not a varying lvalue.
-@@ -502,39 +503,41 @@ class FunctionEmitContext {
-     /** This convenience method maps to an llvm::ExtractElementInst if the
-         given value is a llvm::VectorType, and to an llvm::ExtractValueInst
-         otherwise. */
--    llvm::Value *ExtractInst(llvm::Value *v, int elt, const char *name = NULL);
-+    llvm::Value *ExtractInst(llvm::Value *v, int elt, const llvm::Twine &name = "");
- 
-     /** This convenience method maps to an llvm::InsertElementInst if the
-         given value is a llvm::VectorType, and to an llvm::InsertValueInst
-         otherwise. */
--    llvm::Value *InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const char *name = NULL);
-+    llvm::Value *InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const llvm::Twine &name = "");
- 
-     /** This convenience method maps to an llvm::ShuffleVectorInst. */
--    llvm::Value *ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const char *name = NULL);
-+    llvm::Value *ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const llvm::Twine &name = "");
- 
-     /** This convenience method to generate broadcast pattern. It takes a value
-         and a vector type. Type of the value must match element type of the
-         vector. */
--    llvm::Value *BroadcastValue(llvm::Value *v, llvm::Type *vecType, const char *name = NULL);
-+    llvm::Value *BroadcastValue(llvm::Value *v, llvm::Type *vecType, const llvm::Twine &name = "");
- 
--    llvm::PHINode *PhiNode(llvm::Type *type, int count, const char *name = NULL);
--    llvm::Instruction *SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1, const char *name = NULL);
-+    llvm::PHINode *PhiNode(llvm::Type *type, int count, const llvm::Twine &name = "");
-+    llvm::Instruction *SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1,
-+                                  const llvm::Twine &name = "");
- 
-     /** Emits IR to do a function call with the given arguments.  If the
-         function type is a varying function pointer type, its full type
-         must be provided in funcType.  funcType can be NULL if func is a
-         uniform function pointer. */
-     llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, const std::vector<llvm::Value *> &args,
--                          const char *name = NULL);
-+                          const llvm::Twine &name = "");
- 
-     /** This is a convenience method that issues a call instruction to a
-         function that takes just a single argument. */
--    llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg, const char *name = NULL);
-+    llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg,
-+                          const llvm::Twine &name = "");
- 
-     /** This is a convenience method that issues a call instruction to a
-         function that takes two arguments. */
-     llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg0, llvm::Value *arg1,
--                          const char *name = NULL);
-+                          const llvm::Twine &name = "");
- 
-     /** Launch an asynchronous task to run the given function, passing it
-         he given argument values. */
-@@ -756,9 +759,10 @@ class FunctionEmitContext {
-     void maskedStore(llvm::Value *value, llvm::Value *ptr, const Type *ptrType, llvm::Value *mask);
-     void storeUniformToSOA(llvm::Value *value, llvm::Value *ptr, llvm::Value *mask, const Type *valueType,
-                            const PointerType *ptrType);
--    llvm::Value *loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType, const char *name);
-+    llvm::Value *loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType,
-+                                    const llvm::Twine &name = "");
- 
--    llvm::Value *gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask, const char *name);
-+    llvm::Value *gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask, const llvm::Twine &name = "");
- 
-     llvm::Value *addVaryingOffsetsIfNeeded(llvm::Value *ptr, const Type *ptrType);
- };
-diff --git a/src/expr.cpp b/src/expr.cpp
-index 80cc3020a..6d38d1889 100644
---- a/src/expr.cpp
-+++ b/src/expr.cpp
-@@ -1021,11 +1021,11 @@ static llvm::Value *lEmitNegate(Expr *arg, SourcePos pos, FunctionEmitContext *c
-     ctx->SetDebugPos(pos);
-     if (type->IsFloatType()) {
-         llvm::Value *zero = llvm::ConstantFP::getZeroValueForNegation(type->LLVMType(g->ctx));
--        return ctx->BinaryOperator(llvm::Instruction::FSub, zero, argVal, LLVMGetName(argVal, "_negate"));
-+        return ctx->BinaryOperator(llvm::Instruction::FSub, zero, argVal, llvm::Twine(argVal->getName()) + "_negate");
-     } else {
-         llvm::Value *zero = lLLVMConstantValue(type, g->ctx, 0.);
-         AssertPos(pos, type->IsIntType());
--        return ctx->BinaryOperator(llvm::Instruction::Sub, zero, argVal, LLVMGetName(argVal, "_negate"));
-+        return ctx->BinaryOperator(llvm::Instruction::Sub, zero, argVal, llvm::Twine(argVal->getName()) + "_negate");
-     }
- }
- 
-@@ -1047,11 +1047,11 @@ llvm::Value *UnaryExpr::GetValue(FunctionEmitContext *ctx) const {
-         return lEmitNegate(expr, pos, ctx);
-     case LogicalNot: {
-         llvm::Value *argVal = expr->GetValue(ctx);
--        return ctx->NotOperator(argVal, LLVMGetName(argVal, "_logicalnot"));
-+        return ctx->NotOperator(argVal, llvm::Twine(argVal->getName()) + "_logicalnot");
-     }
-     case BitNot: {
-         llvm::Value *argVal = expr->GetValue(ctx);
--        return ctx->NotOperator(argVal, LLVMGetName(argVal, "_bitnot"));
-+        return ctx->NotOperator(argVal, llvm::Twine(argVal->getName()) + "_bitnot");
-     }
-     default:
-         FATAL("logic error");
-@@ -1518,7 +1518,8 @@ static llvm::Value *lEmitBinaryArith(BinaryExpr::Op op, llvm::Value *value0, llv
-             return NULL;
-         }
- 
--        return ctx->BinaryOperator(inst, value0, value1, LLVMGetName(opName, value0, value1));
-+        return ctx->BinaryOperator(inst, value0, value1,
-+                                   (((llvm::Twine(opName) + "_") + value0->getName()) + "_") + value1->getName());
-     }
- }
- 
-@@ -1563,7 +1564,7 @@ static llvm::Value *lEmitBinaryCmp(BinaryExpr::Op op, llvm::Value *e0Val, llvm::
-     }
- 
-     llvm::Value *cmp = ctx->CmpInst(isFloatOp ? llvm::Instruction::FCmp : llvm::Instruction::ICmp, pred, e0Val, e1Val,
--                                    LLVMGetName(opName, e0Val, e1Val));
-+                                    (((llvm::Twine(opName) + "_") + e0Val->getName()) + "_") + e1Val->getName());
-     // This is a little ugly: CmpInst returns i1 values, but we use vectors
-     // of i32s for varying bool values; type convert the result here if
-     // needed.
-@@ -4177,7 +4178,7 @@ static llvm::Value *lConvertToSlicePointer(FunctionEmitContext *ctx, llvm::Value
-     // offsets
-     llvm::Value *result = llvm::Constant::getNullValue(sliceStructType);
-     // And replace the pointer in the struct with the given pointer
--    return ctx->InsertInst(result, ptr, 0, LLVMGetName(ptr, "_slice"));
-+    return ctx->InsertInst(result, ptr, 0, llvm::Twine(ptr->getName()) + "_slice");
- }
- 
- /** If the given array index is a compile time constant, check to see if it
-@@ -4258,8 +4259,8 @@ llvm::Value *IndexExpr::GetLValue(FunctionEmitContext *ctx) const {
-         // Convert to a slice pointer if we're indexing into SOA data
-         basePtrValue = lConvertPtrToSliceIfNeeded(ctx, basePtrValue, &baseExprType);
- 
--        llvm::Value *ptr =
--            ctx->GetElementPtrInst(basePtrValue, indexValue, baseExprType, LLVMGetName(basePtrValue, "_offset"));
-+        llvm::Value *ptr = ctx->GetElementPtrInst(basePtrValue, indexValue, baseExprType,
-+                                                  llvm::Twine(basePtrValue->getName()) + "_offset");
-         return lAddVaryingOffsetsIfNeeded(ctx, ptr, GetLValueType());
-     }
- 
-@@ -4290,8 +4291,8 @@ llvm::Value *IndexExpr::GetLValue(FunctionEmitContext *ctx) const {
-     ctx->SetDebugPos(pos);
- 
-     // And do the actual indexing calculation..
--    llvm::Value *ptr =
--        ctx->GetElementPtrInst(basePtr, LLVMInt32(0), indexValue, basePtrType, LLVMGetName(basePtr, "_offset"));
-+    llvm::Value *ptr = ctx->GetElementPtrInst(basePtr, LLVMInt32(0), indexValue, basePtrType,
-+                                              llvm::Twine(basePtr->getName()) + "_offset");
-     return lAddVaryingOffsetsIfNeeded(ctx, ptr, GetLValueType());
- }
- 
-@@ -4788,15 +4789,14 @@ llvm::Value *VectorMemberExpr::GetValue(FunctionEmitContext *ctx) const {
-         for (size_t i = 0; i < identifier.size(); ++i) {
-             char idStr[2] = {identifier[i], '\0'};
-             llvm::Value *elementPtr =
--                ctx->AddElementOffset(basePtr, indices[i], basePtrType, LLVMGetName(basePtr, idStr));
-+                ctx->AddElementOffset(basePtr, indices[i], basePtrType, llvm::Twine(basePtr->getName()) + idStr);
-             llvm::Value *elementValue = ctx->LoadInst(elementPtr, elementMask, elementPtrType);
- 
--            const char *resultName = LLVMGetName(resultPtr, idStr);
--            llvm::Value *ptmp = ctx->AddElementOffset(resultPtr, i, NULL, resultName);
-+            llvm::Value *ptmp = ctx->AddElementOffset(resultPtr, i, NULL, llvm::Twine(resultPtr->getName()) + idStr);
-             ctx->StoreInst(elementValue, ptmp, elementPtrType, expr->GetType()->IsUniformType());
-         }
- 
--        return ctx->LoadInst(resultPtr, memberType, LLVMGetName(basePtr, "_swizzle"));
-+        return ctx->LoadInst(resultPtr, memberType, llvm::Twine(basePtr->getName()) + "_swizzle");
-     }
- }
- 
-@@ -4932,7 +4932,7 @@ llvm::Value *MemberExpr::GetValue(FunctionEmitContext *ctx) const {
- 
-     ctx->SetDebugPos(pos);
-     std::string suffix = std::string("_") + identifier;
--    return ctx->LoadInst(lvalue, mask, lvalueType, LLVMGetName(lvalue, suffix.c_str()));
-+    return ctx->LoadInst(lvalue, mask, lvalueType, llvm::Twine(lvalue->getName()) + suffix);
- }
- 
- const Type *MemberExpr::GetType() const { return NULL; }
-@@ -6502,7 +6502,7 @@ static llvm::Value *lTypeConvAtomic(FunctionEmitContext *ctx, llvm::Value *exprV
-                 // does for everyone else...
-                 Assert(cast);
-                 cast = ctx->SwitchBoolSize(cast, LLVMTypes::BoolVectorType->getElementType(),
--                                           LLVMGetName(cast, "to_i_bool"));
-+                                           llvm::Twine(cast->getName()) + "to_i_bool");
-             }
-         } else {
-             // fromType->IsVaryingType())
-@@ -8246,7 +8246,7 @@ llvm::Value *NewExpr::GetValue(FunctionEmitContext *ctx) const {
-         // pointer of the return type and to run the code for initializers,
-         // if present.
-         llvm::Type *ptrType = retType->LLVMType(g->ctx);
--        ptrValue = ctx->BitCastInst(ptrValue, ptrType, LLVMGetName(ptrValue, "_cast_ptr"));
-+        ptrValue = ctx->BitCastInst(ptrValue, ptrType, llvm::Twine(ptrValue->getName()) + "_cast_ptr");
- 
-         if (initExpr != NULL)
-             InitSymbol(ptrValue, allocType, initExpr, ctx, pos);
-diff --git a/src/llvmutil.cpp b/src/llvmutil.cpp
-index 970175dbf..d0becb9f5 100644
---- a/src/llvmutil.cpp
-+++ b/src/llvmutil.cpp
-@@ -1605,23 +1605,6 @@ llvm::Value *LLVMShuffleVectors(llvm::Value *v1, llvm::Value *v2, int32_t shuf[]
-     return new llvm::ShuffleVectorInst(v1, v2, vec, "shuffle", insertBefore);
- }
- 
--const char *LLVMGetName(llvm::Value *v, const char *s) {
--    if (v == NULL)
--        return s;
--    std::string ret = std::string(v->getName());
--    ret += s;
--    return strdup(ret.c_str());
--}
--
--const char *LLVMGetName(const char *op, llvm::Value *v1, llvm::Value *v2) {
--    std::string r = op;
--    r += "_";
--    r += v1->getName().str();
--    r += "_";
--    r += v2->getName().str();
--    return strdup(r.c_str());
--}
--
- #ifdef ISPC_GENX_ENABLED
- bool lIsSVMLoad(llvm::Instruction *inst) {
-     Assert(inst);
-diff --git a/src/llvmutil.h b/src/llvmutil.h
-index 42cce4d83..07d089bb4 100644
---- a/src/llvmutil.h
-+++ b/src/llvmutil.h
-@@ -328,11 +328,6 @@ extern llvm::Value *LLVMConcatVectors(llvm::Value *v1, llvm::Value *v2, llvm::In
- extern llvm::Value *LLVMShuffleVectors(llvm::Value *v1, llvm::Value *v2, int32_t shuf[], int shufSize,
-                                        llvm::Instruction *insertBefore);
- 
--/** Utility routines to concat strings with the names of existing values to
--    create meaningful new names for instruction values.
--*/
--extern const char *LLVMGetName(llvm::Value *v, const char *);
--extern const char *LLVMGetName(const char *op, llvm::Value *v1, llvm::Value *v2);
- #ifdef ISPC_GENX_ENABLED
- enum AddressSpace { Local, Global, External };
- 
-diff --git a/src/opt.cpp b/src/opt.cpp
-index 5b1ac7b63..9d6cae058 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -257,7 +257,7 @@ static bool lGetSourcePosFromMetadata(const llvm::Instruction *inst, SourcePos *
-     return true;
- }
- 
--static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, const char *name,
-+static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[2] = {arg0, arg1};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[2]);
-@@ -265,21 +265,22 @@ static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llv
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    const char *name, llvm::Instruction *insertBefore = NULL) {
-+                                    const llvm::Twine &name, llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[3] = {arg0, arg1, arg2};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[3]);
-     return llvm::CallInst::Create(func, newArgArray, name, insertBefore);
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, const char *name, llvm::Instruction *insertBefore = NULL) {
-+                                    llvm::Value *arg3, const llvm::Twine &name,
-+                                    llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[4] = {arg0, arg1, arg2, arg3};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[4]);
-     return llvm::CallInst::Create(func, newArgArray, name, insertBefore);
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, llvm::Value *arg4, const char *name,
-+                                    llvm::Value *arg3, llvm::Value *arg4, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[5] = {arg0, arg1, arg2, arg3, arg4};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[5]);
-@@ -287,7 +288,7 @@ static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llv
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, llvm::Value *arg4, llvm::Value *arg5, const char *name,
-+                                    llvm::Value *arg3, llvm::Value *arg4, llvm::Value *arg5, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[6] = {arg0, arg1, arg2, arg3, arg4, arg5};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[6]);
-@@ -991,23 +992,24 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 llvm::Type *returnType = callInst->getType();
-                 Assert(llvm::isa<llvm::VectorType>(returnType));
-                 // cast the i8 * to the appropriate type
--                const char *name = LLVMGetName(callInst->getArgOperand(0), "_cast");
--                llvm::Value *castPtr = new llvm::BitCastInst(callInst->getArgOperand(0),
--                                                             llvm::PointerType::get(returnType, 0), name, callInst);
-+                llvm::Value *castPtr =
-+                    new llvm::BitCastInst(callInst->getArgOperand(0), llvm::PointerType::get(returnType, 0),
-+                                          llvm::Twine(callInst->getArgOperand(0)->getName()) + "_cast", callInst);
-                 lCopyMetadata(castPtr, callInst);
-                 int align;
-                 if (g->opt.forceAlignedMemory)
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
--                name = LLVMGetName(callInst->getArgOperand(0), "_load");
- #if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
--                llvm::Instruction *loadInst = new llvm::LoadInst(castPtr, name, false /* not volatile */,
--                                                                 llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
-+                llvm::Instruction *loadInst =
-+                    new llvm::LoadInst(castPtr, llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load",
-+                                       false /* not volatile */, llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
- #else
-                 llvm::Instruction *loadInst = new llvm::LoadInst(
--                    llvm::dyn_cast<llvm::PointerType>(castPtr->getType())->getPointerElementType(), castPtr, name,
--                    false /* not volatile */, llvm::MaybeAlign(align).valueOrOne(), (llvm::Instruction *)NULL);
-+                    llvm::dyn_cast<llvm::PointerType>(castPtr->getType())->getPointerElementType(), castPtr,
-+                    llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load", false /* not volatile */,
-+                    llvm::MaybeAlign(align).valueOrOne(), (llvm::Instruction *)NULL);
- #endif
-                 lCopyMetadata(loadInst, callInst);
-                 llvm::ReplaceInstWithInst(callInst, loadInst);
-@@ -1028,9 +1030,9 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 // all lanes storing, so replace with a regular store
-                 llvm::Value *rvalue = callInst->getArgOperand(2);
-                 llvm::Type *storeType = rvalue->getType();
--                const char *name = LLVMGetName(callInst->getArgOperand(0), "_ptrcast");
--                llvm::Value *castPtr = new llvm::BitCastInst(callInst->getArgOperand(0),
--                                                             llvm::PointerType::get(storeType, 0), name, callInst);
-+                llvm::Value *castPtr =
-+                    new llvm::BitCastInst(callInst->getArgOperand(0), llvm::PointerType::get(storeType, 0),
-+                                          llvm::Twine(callInst->getArgOperand(0)->getName()) + "_ptrcast", callInst);
-                 lCopyMetadata(castPtr, callInst);
- 
-                 int align;
-@@ -1339,8 +1341,8 @@ static llvm::Value *lGetBasePointer(llvm::Value *v, llvm::Instruction *insertBef
-         if (t == NULL) {
-             return NULL;
-         } else {
--            return llvm::CastInst::Create(ci->getOpcode(), t, ci->getType()->getScalarType(), LLVMGetName(t, "_cast"),
--                                          insertBefore);
-+            return llvm::CastInst::Create(ci->getOpcode(), t, ci->getType()->getScalarType(),
-+                                          llvm::Twine(t->getName()) + "_cast", insertBefore);
-         }
-     }
- 
-@@ -1583,13 +1585,13 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-         if (co == NULL)
-             *constOffset = NULL;
-         else
--            *constOffset =
--                llvm::CastInst::Create(cast->getOpcode(), co, cast->getType(), LLVMGetName(co, "_cast"), insertBefore);
-+            *constOffset = llvm::CastInst::Create(cast->getOpcode(), co, cast->getType(),
-+                                                  llvm::Twine(co->getName()) + "_cast", insertBefore);
-         if (vo == NULL)
-             *variableOffset = NULL;
-         else
--            *variableOffset =
--                llvm::CastInst::Create(cast->getOpcode(), vo, cast->getType(), LLVMGetName(vo, "_cast"), insertBefore);
-+            *variableOffset = llvm::CastInst::Create(cast->getOpcode(), vo, cast->getType(),
-+                                                     llvm::Twine(vo->getName()) + "_cast", insertBefore);
-         return;
-     }
- 
-@@ -1608,16 +1610,18 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-             else if (c1 == NULL || llvm::isa<llvm::ConstantAggregateZero>(c1))
-                 *constOffset = c0;
-             else
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, c0, c1, LLVMGetName("add", c0, c1),
--                                                            insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, c0, c1, ((llvm::Twine("add_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
- 
-             if (v0 == NULL || llvm::isa<llvm::ConstantAggregateZero>(v0))
-                 *variableOffset = v1;
-             else if (v1 == NULL || llvm::isa<llvm::ConstantAggregateZero>(v1))
-                 *variableOffset = v0;
-             else
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, v0, v1,
--                                                               LLVMGetName("add", v0, v1), insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, v0, v1, ((llvm::Twine("add_") + v0->getName()) + "_") + v1->getName(),
-+                    insertBefore);
-             return;
-         } else if (bop->getOpcode() == llvm::Instruction::Shl) {
-             lExtractConstantOffset(op0, &c0, &v0, insertBefore);
-@@ -1633,10 +1637,12 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-                 *constOffset = vec;
-                 *variableOffset = NULL;
-             } else {
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Shl, c0, c1, LLVMGetName("shl", c0, c1),
--                                                            insertBefore);
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Shl, v0, c1,
--                                                               LLVMGetName("shl", v0, c1), insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Shl, c0, c1, ((llvm::Twine("shl_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Shl, v0, c1, ((llvm::Twine("shl_") + v0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-             }
-             return;
-         } else if (bop->getOpcode() == llvm::Instruction::Mul) {
-@@ -1648,25 +1654,30 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-             // Note that the first term is a constant and the last three are
-             // variable.
-             if (c0 != NULL && c1 != NULL)
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, c1, LLVMGetName("mul", c0, c1),
--                                                            insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Mul, c0, c1, ((llvm::Twine("mul_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-             else
-                 *constOffset = NULL;
- 
-             llvm::Value *va = NULL, *vb = NULL, *vc = NULL;
-             if (v0 != NULL && c1 != NULL)
--                va = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, c1, LLVMGetName("mul", v0, c1),
-+                va = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, c1,
-+                                                  ((llvm::Twine("mul_") + v0->getName()) + "_") + c1->getName(),
-                                                   insertBefore);
-             if (c0 != NULL && v1 != NULL)
--                vb = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, v1, LLVMGetName("mul", c0, v1),
-+                vb = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, v1,
-+                                                  ((llvm::Twine("mul_") + c0->getName()) + "_") + v1->getName(),
-                                                   insertBefore);
-             if (v0 != NULL && v1 != NULL)
--                vc = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, v1, LLVMGetName("mul", v0, v1),
-+                vc = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, v1,
-+                                                  ((llvm::Twine("mul_") + v0->getName()) + "_") + v1->getName(),
-                                                   insertBefore);
- 
-             llvm::Value *vab = NULL;
-             if (va != NULL && vb != NULL)
--                vab = llvm::BinaryOperator::Create(llvm::Instruction::Add, va, vb, LLVMGetName("add", va, vb),
-+                vab = llvm::BinaryOperator::Create(llvm::Instruction::Add, va, vb,
-+                                                   ((llvm::Twine("add_") + va->getName()) + "_") + vb->getName(),
-                                                    insertBefore);
-             else if (va != NULL)
-                 vab = va;
-@@ -1674,8 +1685,9 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-                 vab = vb;
- 
-             if (vab != NULL && vc != NULL)
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, vab, vc,
--                                                               LLVMGetName("add", vab, vc), insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, vab, vc, ((llvm::Twine("add_") + vab->getName()) + "_") + vc->getName(),
-+                    insertBefore);
-             else if (vab != NULL)
-                 *variableOffset = vab;
-             else
-@@ -1943,7 +1955,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-             // all zeros (i.e. a ConstantAggregateZero, but just in case,
-             // do the more general check with lVectorIs32BitInts().
-             variableOffset = new llvm::TruncInst(variableOffset, LLVMTypes::Int32VectorType,
--                                                 LLVMGetName(variableOffset, "_trunc"), insertBefore);
-+                                                 llvm::Twine(variableOffset->getName()) + "_trunc", insertBefore);
-         else
-             return false;
-     }
-@@ -1952,7 +1964,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-         if (lVectorIs32BitInts(constOffset)) {
-             // Truncate them so we have a 32-bit vector type for them.
-             constOffset = new llvm::TruncInst(constOffset, LLVMTypes::Int32VectorType,
--                                              LLVMGetName(constOffset, "_trunc"), insertBefore);
-+                                              llvm::Twine(constOffset->getName()) + "_trunc", insertBefore);
-         } else {
-             // FIXME: otherwise we just assume that all constant offsets
-             // can actually always fit into 32-bits...  (This could be
-@@ -1963,7 +1975,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-             // llvm::ConstantFoldInstruction() doesn't seem to be doing
-             // enough for us in some cases if we call it from here.
-             constOffset = new llvm::TruncInst(constOffset, LLVMTypes::Int32VectorType,
--                                              LLVMGetName(constOffset, "_trunc"), insertBefore);
-+                                              llvm::Twine(constOffset->getName()) + "_trunc", insertBefore);
-         }
-     }
- 
-@@ -2012,8 +2024,8 @@ static bool lOffsets32BitSafe(llvm::Value **offsetPtr, llvm::Instruction *insert
- 
-         // Alternatively, offset could be a sequence of adds terminating
-         // in safe constant vectors or a SExt.
--        *offsetPtr =
--            new llvm::TruncInst(offset, LLVMTypes::Int32VectorType, LLVMGetName(offset, "_trunc"), insertBefore);
-+        *offsetPtr = new llvm::TruncInst(offset, LLVMTypes::Int32VectorType, llvm::Twine(offset->getName()) + "_trunc",
-+                                         insertBefore);
-         return true;
-     } else
-         return false;
-@@ -2229,7 +2241,8 @@ static bool lGSToGSBaseOffsets(llvm::CallInst *callInst) {
-     }
-     // Cast the base pointer to a void *, since that's what the
-     // __pseudo_*_base_offsets_* functions want.
--    basePtr = new llvm::IntToPtrInst(basePtr, LLVMTypes::VoidPointerType, LLVMGetName(basePtr, "_2void"), callInst);
-+    basePtr = new llvm::IntToPtrInst(basePtr, LLVMTypes::VoidPointerType, llvm::Twine(basePtr->getName()) + "_2void",
-+                                     callInst);
-     lCopyMetadata(basePtr, callInst);
-     llvm::Function *gatherScatterFunc = info->baseOffsetsFunc;
- 
-@@ -2803,7 +2816,7 @@ static bool lGSToLoadStore(llvm::CallInst *callInst) {
-                 lCopyMetadata(ptr, callInst);
-                 Debug(pos, "Transformed gather to unaligned vector load!");
-                 llvm::Instruction *newCall =
--                    lCallInst(gatherInfo->loadMaskedFunc, ptr, mask, LLVMGetName(ptr, "_masked_load"));
-+                    lCallInst(gatherInfo->loadMaskedFunc, ptr, mask, llvm::Twine(ptr->getName()) + "_masked_load");
-                 lCopyMetadata(newCall, callInst);
-                 llvm::ReplaceInstWithInst(callInst, newCall);
-                 return true;
diff --git a/srcpkgs/ispc/patches/llvm12-004.patch b/srcpkgs/ispc/patches/llvm12-004.patch
deleted file mode 100644
index 3a94d8443a5e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-004.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From c03a5142444476a1caa5c2ba7fa2d92d7793d6f1 Mon Sep 17 00:00:00 2001
-From: Deepak Rajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Mon, 25 Jan 2021 09:22:49 -0800
-Subject: [PATCH] Fixing build on llvm trunk.
-
----
- src/ctx.cpp | 7 +++----
- 1 file changed, 3 insertions(+), 4 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index ded524b71..b60e6fe84 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1020,8 +1020,7 @@ void FunctionEmitContext::EmitCaseLabel(int value, bool checkMask, SourcePos pos
-     llvm::BasicBlock *bbCaseImpl = NULL;
-     if (emitGenXHardwareMask()) {
-         // Create basic block with actual case implementation
--        llvm::Twine bbName = llvm::Twine(bbCase->getName()) + "_impl";
--        bbCaseImpl = CreateBasicBlock(bbName, bbCase);
-+        bbCaseImpl = CreateBasicBlock(llvm::Twine(bbCase->getName()) + "_impl", bbCase);
-     }
- #endif
- 
-@@ -3142,8 +3141,8 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     llvm::Value *undef2 = llvm::UndefValue::get(vecType);
- 
-     // InsertElement
--    llvm::Twine tw = name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + llvm::Twine("_init");
--    llvm::Value *insert = InsertInst(undef1, v, 0, tw.str().c_str());
-+    llvm::Value *insert =
-+        InsertInst(undef1, v, 0, name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + "_init");
- 
-     // ShuffleVector
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
diff --git a/srcpkgs/ispc/patches/llvm12-005.patch b/srcpkgs/ispc/patches/llvm12-005.patch
deleted file mode 100644
index e3e96b00abfa..000000000000
--- a/srcpkgs/ispc/patches/llvm12-005.patch
+++ /dev/null
@@ -1,372 +0,0 @@
-From c1d0a51bf8416d42144de9e2bdd59825eaeff1ac Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Fri, 8 Jan 2021 14:13:49 -0800
-Subject: [PATCH] LLVM 11 support for gen code
-
----
- src/ctx.cpp                     |  13 ++-
- src/gen/GlobalsLocalization.cpp |   9 +-
- src/opt.cpp                     | 143 ++++++++++++++++++++++++--------
- 3 files changed, 124 insertions(+), 41 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index b60e6fe84..2a72e6837 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1,5 +1,5 @@
- /*
--  Copyright (c) 2010-2020, Intel Corporation
-+  Copyright (c) 2010-2021, Intel Corporation
-   All rights reserved.
- 
-   Redistribution and use in source and binary forms, with or without
-@@ -3685,8 +3685,17 @@ llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::
-     AssertPos(currentPos, llvm::isa<llvm::VectorType>(value->getType()));
-     llvm::VectorType *vt = llvm::dyn_cast<llvm::VectorType>(value->getType());
-     if (defaults == NULL) {
--        defaults = llvm::ConstantVector::getSplat(value->getType()->getVectorNumElements(),
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+        defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-+                                                  llvm::Constant::getNullValue(vt->getElementType()));
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+        defaults = llvm::ConstantVector::getSplat({static_cast<unsigned int>(vt->getNumElements()), false},
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
-+#else
-+        defaults = llvm::ConstantVector::getSplat(
-+            llvm::ElementCount::get(static_cast<unsigned int>(vt->getNumElements()), false),
-+            llvm::Constant::getNullValue(vt->getElementType()));
-+#endif
-     }
- 
-     auto Fn = llvm::GenXIntrinsic::getGenXDeclaration(m->module, llvm::GenXIntrinsic::genx_simdcf_predicate,
-diff --git a/src/gen/GlobalsLocalization.cpp b/src/gen/GlobalsLocalization.cpp
-index a176e9462..41f3b00e2 100644
---- a/src/gen/GlobalsLocalization.cpp
-+++ b/src/gen/GlobalsLocalization.cpp
-@@ -1,5 +1,5 @@
- /*
--  Copyright (c) 2014, 2016-2020, Intel Corporation
-+  Copyright (c) 2014, 2016-2021, Intel Corporation
-   All rights reserved.
- 
-   Redistribution and use in source and binary forms, with or without
-@@ -53,8 +53,10 @@
- #include <llvm/GenXIntrinsics/GenXIntrOpts.h>
- #include <llvm/GenXIntrinsics/GenXIntrinsics.h>
- #include <llvm/GenXIntrinsics/GenXMetadata.h>
--#include <llvm/IR/CFG.h>
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
- #include <llvm/IR/CallSite.h>
-+#endif
-+#include <llvm/IR/CFG.h>
- #include <llvm/IR/DebugInfo.h>
- #include <llvm/IR/Dominators.h>
- #include <llvm/IR/Function.h>
-@@ -470,7 +472,8 @@ void GlobalsLocalization::LocalizeGlobals(LocalizationInfo &LI) {
-         Instruction &FirstI = *Fn->getEntryBlock().begin();
-         Type *ElemTy = GV->getType()->getElementType();
-         AllocaInst *Alloca = new AllocaInst(ElemTy, 0, GV->getName() + ".local", &FirstI);
--        Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()));
-+        Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()).valueOrOne());
-+
-         if (!isa<UndefValue>(GV->getInitializer()))
-             new StoreInst(GV->getInitializer(), Alloca, &FirstI);
- 
-diff --git a/src/opt.cpp b/src/opt.cpp
-index d58d77f73..1789b8476 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -2899,15 +2899,17 @@ static llvm::Function *lGenXMaskedInt8Inst(llvm::Instruction *inst, bool isStore
- static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::Instruction *inst) {
-     Assert(g->target->isGenXTarget());
-     Assert(llvm::isa<llvm::VectorType>(val->getType()));
--    Assert(llvm::isPowerOf2_32(val->getType()->getVectorNumElements()));
--    Assert(val->getType()->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-+
-+    llvm::VectorType *valVecType = llvm::dyn_cast<llvm::VectorType>(val->getType());
-+    Assert(llvm::isPowerOf2_32(valVecType->getNumElements()));
-+    Assert(valVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
- 
-     // The data write of svm store must have a size that is a power of two from 16 to 128
-     // bytes. However for int8 type and simd width = 8, the data write size is 8.
-     // So we use masked store function here instead of svm store which process int8 type
-     // correctly.
--    if (val->getType()->getPrimitiveSizeInBits() / 8 < 16) {
--        Assert(val->getType()->getScalarType() == LLVMTypes::Int8Type);
-+    if (valVecType->getPrimitiveSizeInBits() / 8 < 16) {
-+        Assert(valVecType->getScalarType() == LLVMTypes::Int8Type);
-         if (llvm::Function *maskedFunc = lGenXMaskedInt8Inst(inst, true))
-             return llvm::dyn_cast<llvm::CallInst>(lCallInst(maskedFunc, ptr, val, LLVMMaskAllOn, ""));
-         else {
-@@ -2923,15 +2925,17 @@ static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::
- 
- static llvm::CallInst *lGenXLoadInst(llvm::Value *ptr, llvm::Type *retType, llvm::Instruction *inst) {
-     Assert(llvm::isa<llvm::VectorType>(retType));
--    Assert(llvm::isPowerOf2_32(retType->getVectorNumElements()));
--    Assert(retType->getPrimitiveSizeInBits());
--    Assert(retType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-+
-+    llvm::VectorType *retVecType = llvm::dyn_cast<llvm::VectorType>(retType);
-+    Assert(llvm::isPowerOf2_32(retVecType->getNumElements()));
-+    Assert(retVecType->getPrimitiveSizeInBits());
-+    Assert(retVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-     // The data read of svm load must have a size that is a power of two from 16 to 128
-     // bytes. However for int8 type and simd width = 8, the data read size is 8.
-     // So we use masked load function here instead of svm load which process int8 type
-     // correctly.
--    if (retType->getPrimitiveSizeInBits() / 8 < 16) {
--        Assert(retType->getScalarType() == LLVMTypes::Int8Type);
-+    if (retVecType->getPrimitiveSizeInBits() / 8 < 16) {
-+        Assert(retVecType->getScalarType() == LLVMTypes::Int8Type);
-         if (llvm::Function *maskedFunc = lGenXMaskedInt8Inst(inst, false))
-             return llvm::dyn_cast<llvm::CallInst>(lCallInst(maskedFunc, ptr, LLVMMaskAllOn, ""));
-         else {
-@@ -5622,15 +5626,24 @@ static bool lVectorizeGEPs(llvm::Value *ptr, std::vector<PtrUse> &ptrUses, std::
-         llvm::PtrToIntInst *ptrToInt =
-             new llvm::PtrToIntInst(ptr, LLVMTypes::Int64Type, "vectorized_ptrtoint", insertBefore);
-         llvm::Instruction *addr = llvm::BinaryOperator::CreateAdd(ptrToInt, offset, "vectorized_address", insertBefore);
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        llvm::Type *retType = llvm::FixedVectorType::get(scalar_type, reqSize / t_size);
-+#else
-         llvm::Type *retType = llvm::VectorType::get(scalar_type, reqSize / t_size);
-+#endif
-         llvm::Function *fn = llvm::GenXIntrinsic::getGenXDeclaration(
-             m->module, llvm::GenXIntrinsic::genx_svm_block_ld_unaligned, {retType, addr->getType()});
-         llvm::Instruction *ld = llvm::CallInst::Create(fn, {addr}, "vectorized_ld", insertBefore);
- 
-         if (loadingPtr) {
-             // Cast int to ptr via inttoptr
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            ld = new llvm::IntToPtrInst(ld, llvm::FixedVectorType::get(originalType, reqSize / t_size),
-+                                        "vectorized_inttoptr", insertBefore);
-+#else
-             ld = new llvm::IntToPtrInst(ld, llvm::VectorType::get(originalType, reqSize / t_size),
-                                         "vectorized_inttoptr", insertBefore);
-+#endif
-         }
- 
-         // Scalar extracts for all loaded elements
-@@ -6160,19 +6173,34 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-         llvm::Instruction *inst = &*I;
-         if (llvm::CallInst *ci = llvm::dyn_cast<llvm::CallInst>(inst)) {
-             llvm::Function *func = ci->getCalledFunction();
--            if (func && func->getName() == "llvm.trap") {
-+            if (func && func->getName().equals("llvm.trap")) {
-                 llvm::Type *argTypes[] = {LLVMTypes::Int1VectorType, LLVMTypes::Int16VectorType};
-                 // Description of parameters for genx_raw_send_noresult can be found in target-genx.ll
-                 auto Fn = +llvm::GenXIntrinsic::getGenXDeclaration(
-                     m->module, llvm::GenXIntrinsic::genx_raw_send_noresult, argTypes);
-                 llvm::SmallVector<llvm::Value *, 8> Args;
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 0));
--                Args.push_back(llvm::ConstantVector::getSplat(g->target->getNativeVectorWidth(),
--                                                              llvm::ConstantInt::getTrue(*g->ctx)));
-+                Args.push_back(llvm::ConstantVector::getSplat(
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+                    g->target->getNativeVectorWidth(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+                    {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
-+#else // LLVM 12.0+
-+                    llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-+#endif
-+                    llvm::ConstantInt::getTrue(*g->ctx)));
-+
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 39));
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 33554448));
-                 llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
--                    g->target->getNativeVectorWidth(), llvm::Constant::getNullValue(llvm::Type::getInt16Ty(*g->ctx)));
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+                    g->target->getNativeVectorWidth(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+                    {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
-+#else // LLVM 12.0+
-+                    llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-+#endif
-+                    llvm::Constant::getNullValue(llvm::Type::getInt16Ty(*g->ctx)));
-                 Args.push_back(zeroMask);
- 
-                 llvm::Instruction *newInst = llvm::CallInst::Create(Fn, Args, ci->getName());
-@@ -6181,7 +6209,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     modifiedAny = true;
-                     goto restart;
-                 }
--            } else if (func && func->getName() == "llvm.assume") {
-+            } else if (func && func->getName().equals("llvm.assume")) {
-                 ci->eraseFromParent();
-                 modifiedAny = true;
-                 goto restart;
-@@ -6335,7 +6363,7 @@ bool CheckUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 continue;
-             for (int i = 0; i < unsupportedFuncs.size(); i++) {
-                 std::smatch match;
--                std::string funcName = func->getName();
-+                std::string funcName = func->getName().str();
-                 if (std::regex_match(funcName, match, unsupportedFuncs[i])) {
-                     // We found unsupported function. Generate error and stop compilation.
-                     SourcePos pos;
-@@ -6418,12 +6446,14 @@ bool MangleOpenCLBuiltins::runOnBasicBlock(llvm::BasicBlock &bb) {
-             if (func->getName().startswith("__spirv_ocl")) {
-                 std::string mangledName;
-                 llvm::Type *retType = func->getReturnType();
--                std::string funcName = func->getName();
-+                std::string funcName = func->getName().str();
-                 std::vector<llvm::Type *> ArgTy;
-                 // spirv OpenCL builtins are used for double types only
--                Assert(retType->isVectorTy() && retType->getVectorElementType()->isDoubleTy() ||
-+                Assert(retType->isVectorTy() &&
-+                           llvm::dyn_cast<llvm::VectorType>(retType)->getElementType()->isDoubleTy() ||
-                        retType->isSingleValueType() && retType->isDoubleTy());
--                if (retType->isVectorTy() && retType->getVectorElementType()->isDoubleTy()) {
-+                if (retType->isVectorTy() &&
-+                    llvm::dyn_cast<llvm::VectorType>(retType)->getElementType()->isDoubleTy()) {
-                     ArgTy.push_back(LLVMTypes::DoubleVectorType);
-                     // _DvWIDTH suffix is used in target file to differentiate scalar
-                     // and vector versions of intrinsics. Here we remove this
-@@ -6511,8 +6541,15 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- 
-     // Cast offsets to int64
-     Offsets = new llvm::ZExtInst(
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        Offsets,
-+        llvm::FixedVectorType::get(LLVMTypes::Int64Type,
-+                                   llvm::dyn_cast<llvm::VectorType>(Offsets->getType())->getNumElements()),
-+        "svm_offset_zext", InsertBefore);
-+#else
-         Offsets, llvm::VectorType::get(LLVMTypes::Int64Type, Offsets->getType()->getVectorNumElements()),
-         "svm_offset_zext", InsertBefore);
-+#endif
- 
-     if (!llvm::isa<llvm::ConstantPointerNull>(Ptr)) {
-         // Cast ptr to int64
-@@ -6520,13 +6557,31 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- 
-         // Vectorize ptr
-         llvm::Value *undefInsertValue =
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            llvm::UndefValue::get(llvm::FixedVectorType::get(
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+#else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
-+#endif
-         address = llvm::InsertElementInst::Create(undefInsertValue, address, LLVMInt32(0), "svm_ptr_iei", InsertBefore);
-         llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+            {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
-+#else
-+        llvm::ElementCount::get(
-+                                llvm::dyn_cast<llvm::FixedVectorType>(addressType->getNumElements(), false),
-+#endif
-             llvm::Constant::getNullValue(llvm::Type::getInt32Ty(InsertBefore->getContext())));
-+
-         llvm::Value *undefShuffleValue =
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            llvm::UndefValue::get(llvm::FixedVectorType::get(
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+#else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
-+#endif
-         address = new llvm::ShuffleVectorInst(address, undefShuffleValue, zeroVec, "svm_ptr_svi", InsertBefore);
- 
-         // Calculate address
-@@ -6553,9 +6608,12 @@ llvm::Instruction *FixAddressSpace::processVectorLoad(llvm::LoadInst *LI) {
-     if (retType->getScalarType()->isPointerTy()) {
-         isPtrLoad = true;
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        retType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(retType)->getNumElements());
-+#else
-         retType = llvm::VectorType::get(scalarType, retType->getVectorNumElements());
-+#endif
-     }
--
-     llvm::Instruction *res = lGenXLoadInst(ptr, retType, llvm::dyn_cast<llvm::Instruction>(LI));
-     Assert(res);
- 
-@@ -6580,11 +6638,16 @@ llvm::Instruction *FixAddressSpace::processSVMVectorLoad(llvm::Instruction *CI)
-     ptr = new llvm::IntToPtrInst(ptr, llvm::PointerType::get(retType, 0), CI->getName() + "_inttoptr", CI);
-     llvm::Instruction *loadInst = NULL;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    loadInst = new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), loadInst,
--                                  CI->getName(), (llvm::Instruction *)NULL);
-+    loadInst = new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-+                                  CI->getName(), false /* not volatile */,
-+                                  llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne(),
-+                                  (llvm::Instruction *)NULL);
- #else
--    loadInst = new llvm::LoadInst(ptr, CI->getName(), (llvm::Instruction *)NULL);
-+    loadInst = new llvm::LoadInst(ptr, CI->getName(), false,
-+                                  llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne(),
-+                                  (llvm::Instruction *)NULL);
- #endif
-+
-     Assert(loadInst);
-     return loadInst;
- }
-@@ -6606,7 +6669,11 @@ llvm::Instruction *FixAddressSpace::processVectorStore(llvm::StoreInst *SI) {
-     // Note: it doesn't look like a normal case for GenX target
-     if (valType->getScalarType()->isPointerTy()) {
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        valType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(valType)->getNumElements());
-+#else
-         valType = llvm::VectorType::get(scalarType, valType->getVectorNumElements());
-+#endif
-         val = new llvm::PtrToIntInst(val, valType, "svm_st_val_ptrtoint", SI);
-     }
- 
-@@ -6631,12 +6698,8 @@ llvm::Instruction *FixAddressSpace::processSVMVectorStore(llvm::Instruction *CI)
-     ptr = new llvm::IntToPtrInst(ptr, llvm::PointerType::get(valType, 0), CI->getName() + "_inttoptr", CI);
- 
-     llvm::Instruction *storeInst = NULL;
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    loadInst = new llvm::StoreInst(val, llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(),
--                                   storeInst, CI->getName(), (llvm::Instruction *)NULL);
--#else
--    storeInst = new llvm::StoreInst(val, ptr, (llvm::Instruction *)NULL);
--#endif
-+    storeInst = new llvm::StoreInst(val, ptr, (llvm::Instruction *)NULL,
-+                                    llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
-     Assert(storeInst);
-     return storeInst;
- }
-@@ -6645,15 +6708,18 @@ llvm::Instruction *FixAddressSpace::createInt8WrRegion(llvm::Value *Val, llvm::V
-     int width = g->target->getVectorWidth();
- 
-     llvm::Value *Args[8];
--
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Args[0] = llvm::UndefValue::get(llvm::FixedVectorType::get(LLVMTypes::Int8Type, width * 4)); // old value
-+#else
-     Args[0] = llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int8Type, width * 4)); // old value
--    Args[1] = Val;                                                                          // value to store
--    Args[2] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);                              // vstride
--    Args[3] = llvm::ConstantInt::get(LLVMTypes::Int32Type, width);                          // width
--    Args[4] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 4);                              // stride
--    Args[5] = llvm::ConstantInt::get(LLVMTypes::Int16Type, 0);                              // offsets
--    Args[6] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);                              // parent width (ignored)
--    Args[7] = Mask;                                                                         // mask
-+#endif
-+    Args[1] = Val;                                                 // value to store
-+    Args[2] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);     // vstride
-+    Args[3] = llvm::ConstantInt::get(LLVMTypes::Int32Type, width); // width
-+    Args[4] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 4);     // stride
-+    Args[5] = llvm::ConstantInt::get(LLVMTypes::Int16Type, 0);     // offsets
-+    Args[6] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);     // parent width (ignored)
-+    Args[7] = Mask;                                                // mask
- 
-     llvm::Type *Tys[4];
- 
-@@ -6708,7 +6774,12 @@ llvm::Instruction *FixAddressSpace::processGatherScatterPrivate(llvm::CallInst *
-         return NULL;
- 
-     llvm::Value *address = calculateGatherScatterAddress(ptr, offsets, CI);
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    llvm::Type *i8VecType = llvm::FixedVectorType::get(LLVMTypes::Int8Type, width * 4);
-+#else
-     llvm::Type *i8VecType = llvm::VectorType::get(LLVMTypes::Int8Type, width * 4);
-+#endif
-+
-     bool isInt8 = (value->getType()->getScalarType() == LLVMTypes::Int8Type);
- 
-     Assert(address && "Bad gather/scatter address!");
diff --git a/srcpkgs/ispc/patches/llvm12-006.patch b/srcpkgs/ispc/patches/llvm12-006.patch
deleted file mode 100644
index a829ea48391e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-006.patch
+++ /dev/null
@@ -1,126 +0,0 @@
-From bb3f493d1fbd45c79e1d9dee67a0430ba313eaad Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 19 Jan 2021 11:07:33 -0800
-Subject: [PATCH] Fixed ifdefs for LLVM_11
-
----
- src/ctx.cpp |  6 +++---
- src/opt.cpp | 18 +++++++++---------
- 2 files changed, 12 insertions(+), 12 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 2a72e6837..527a02f30 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1691,7 +1691,7 @@ llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const llvm::T
-     if (llvm::Constant *const_val = llvm::dyn_cast<llvm::Constant>(value)) {
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         ret = llvm::ConstantVector::getSplat(g->target->getVectorWidth(), const_val);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-         ret =
-             llvm::ConstantVector::getSplat({static_cast<unsigned int>(g->target->getVectorWidth()), false}, const_val);
- #else // LLVM 12.0+
-@@ -3148,7 +3148,7 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-     llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
-         vecType->getVectorNumElements(), llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-     llvm::Constant *zeroVec =
-         llvm::ConstantVector::getSplat({static_cast<unsigned int>(ty->getNumElements()), false},
-                                        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
-@@ -3688,7 +3688,7 @@ llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-         defaults = llvm::ConstantVector::getSplat({static_cast<unsigned int>(vt->getNumElements()), false},
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
- #else
-diff --git a/src/opt.cpp b/src/opt.cpp
-index 1789b8476..3ff191a0a 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -1045,7 +1045,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                 llvm::Instruction *loadInst =
-                     new llvm::LoadInst(castPtr, llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load",
-                                        false /* not volatile */, llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
-@@ -1472,7 +1472,7 @@ static llvm::Value *lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offse
-                     llvm::Value *zeroMask =
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                         llvm::ConstantVector::getSplat(cv->getType()->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                         llvm::ConstantVector::getSplat(
-                             {llvm::dyn_cast<llvm::VectorType>(cv->getType())->getNumElements(), false},
- #else // LLVM 12.0+
-@@ -1495,7 +1495,7 @@ static llvm::Value *lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offse
-                         llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                             bop_var_type->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                             {llvm::dyn_cast<llvm::VectorType>(bop_var_type)->getNumElements(), false},
- #else // LLVM 12.0+
-                             llvm::ElementCount::get(
-@@ -2803,7 +2803,7 @@ static bool lGSToLoadStore(llvm::CallInst *callInst) {
-             llvm::Value *zeroMask =
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                 llvm::ConstantVector::getSplat(callInst->getType()->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                 llvm::ConstantVector::getSplat(
-                     {llvm::dyn_cast<llvm::VectorType>(callInst->getType())->getNumElements(), false},
- 
-@@ -3100,7 +3100,7 @@ static bool lImproveMaskedLoad(llvm::CallInst *callInst, llvm::BasicBlock::itera
-         {
-             llvm::Type *ptrType = llvm::PointerType::get(callInst->getType(), 0);
-             ptr = new llvm::BitCastInst(ptr, ptrType, "ptr_cast_for_load", callInst);
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             load = new llvm::LoadInst(
-                 ptr, callInst->getName(), false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-@@ -3459,7 +3459,7 @@ llvm::Value *lGEPAndLoad(llvm::Value *basePtr, int64_t offset, int align, llvm::
-                          llvm::Type *type) {
-     llvm::Value *ptr = lGEPInst(basePtr, LLVMInt64(offset), "new_base", insertBefore);
-     ptr = new llvm::BitCastInst(ptr, llvm::PointerType::get(type, 0), "ptr_cast", insertBefore);
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-     return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, llvm::MaybeAlign(align), insertBefore);
- #else // LLVM 11.0+
-     return new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-@@ -6183,7 +6183,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 Args.push_back(llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                     g->target->getNativeVectorWidth(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                     {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
- #else // LLVM 12.0+
-                     llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-@@ -6195,7 +6195,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                     g->target->getNativeVectorWidth(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                     {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
- #else // LLVM 12.0+
-                     llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-@@ -6567,7 +6567,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
-         llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-             {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
- #else
-         llvm::ElementCount::get(
diff --git a/srcpkgs/ispc/patches/llvm12-007.patch b/srcpkgs/ispc/patches/llvm12-007.patch
deleted file mode 100644
index 1b975f896c7e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-007.patch
+++ /dev/null
@@ -1,160 +0,0 @@
-From 62f5a6c37bf26fc25a7cf81868052d3472874610 Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 23 Mar 2021 23:07:30 -0700
-Subject: [PATCH] Do not generate function mask when it is not required
-
----
- src/ctx.cpp                    | 39 ++++++++++++++-------
- tests/lit-tests/full_mask.ispc | 63 ++++++++++++++++++++++++++++++++++
- 2 files changed, 90 insertions(+), 12 deletions(-)
- create mode 100644 tests/lit-tests/full_mask.ispc
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 527a02f30..9e775fc5c 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -231,10 +231,18 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym, llvm::F
-     internalMaskPointer = AllocaInst(LLVMTypes::MaskType, "internal_mask_memory");
-     StoreInst(LLVMMaskAllOn, internalMaskPointer);
- 
--    functionMaskValue = LLVMMaskAllOn;
--
--    fullMaskPointer = AllocaInst(LLVMTypes::MaskType, "full_mask_memory");
--    StoreInst(LLVMMaskAllOn, fullMaskPointer);
-+    // If the function doesn't have __mask in parameters, there is no need to
-+    // have function mask
-+    if ((func->GetType()->isExported &&
-+         (lf->getFunctionType()->getNumParams() == func->GetType()->GetNumParameters())) ||
-+        (func->GetType()->isUnmasked) || (func->GetType()->isTask)) {
-+        functionMaskValue = NULL;
-+        fullMaskPointer = NULL;
-+    } else {
-+        functionMaskValue = LLVMMaskAllOn;
-+        fullMaskPointer = AllocaInst(LLVMTypes::MaskType, "full_mask_memory");
-+        StoreInst(LLVMMaskAllOn, fullMaskPointer);
-+    }
- 
-     blockEntryMask = NULL;
-     breakLanesPtr = continueLanesPtr = NULL;
-@@ -389,20 +397,26 @@ llvm::BasicBlock *FunctionEmitContext::GetCurrentBasicBlock() { return bblock; }
- 
- void FunctionEmitContext::SetCurrentBasicBlock(llvm::BasicBlock *bb) { bblock = bb; }
- 
--llvm::Value *FunctionEmitContext::GetFunctionMask() { return functionMaskValue; }
-+llvm::Value *FunctionEmitContext::GetFunctionMask() { return fullMaskPointer ? functionMaskValue : LLVMMaskAllOn; }
- 
- llvm::Value *FunctionEmitContext::GetInternalMask() { return LoadInst(internalMaskPointer, NULL, "load_mask"); }
- 
- llvm::Value *FunctionEmitContext::GetFullMask() {
--    return BinaryOperator(llvm::Instruction::And, GetInternalMask(), functionMaskValue, "internal_mask&function_mask");
-+    return fullMaskPointer ? BinaryOperator(llvm::Instruction::And, GetInternalMask(), functionMaskValue,
-+                                            "internal_mask&function_mask")
-+                           : GetInternalMask();
- }
- 
--llvm::Value *FunctionEmitContext::GetFullMaskPointer() { return fullMaskPointer; }
-+llvm::Value *FunctionEmitContext::GetFullMaskPointer() {
-+    return fullMaskPointer ? fullMaskPointer : internalMaskPointer;
-+}
- 
- void FunctionEmitContext::SetFunctionMask(llvm::Value *value) {
--    functionMaskValue = value;
--    if (bblock != NULL)
--        StoreInst(GetFullMask(), fullMaskPointer);
-+    if (fullMaskPointer != NULL) {
-+        functionMaskValue = value;
-+        if (bblock != NULL)
-+            StoreInst(GetFullMask(), fullMaskPointer);
-+    }
- }
- 
- void FunctionEmitContext::SetBlockEntryMask(llvm::Value *value) { blockEntryMask = value; }
-@@ -410,7 +424,8 @@ void FunctionEmitContext::SetBlockEntryMask(llvm::Value *value) { blockEntryMask
- void FunctionEmitContext::SetInternalMask(llvm::Value *value) {
-     StoreInst(value, internalMaskPointer);
-     // kludge so that __mask returns the right value in ispc code.
--    StoreInst(GetFullMask(), fullMaskPointer);
-+    if (fullMaskPointer)
-+        StoreInst(GetFullMask(), fullMaskPointer);
- }
- 
- void FunctionEmitContext::SetInternalMaskAnd(llvm::Value *oldMask, llvm::Value *test) {
-@@ -1265,7 +1280,7 @@ void FunctionEmitContext::CurrentLanesReturned(Expr *expr, bool doCoherenceCheck
-         // lanes have returned
-         if (doCoherenceCheck) {
-             // if newReturnedLanes == functionMaskValue, get out of here!
--            llvm::Value *cmp = MasksAllEqual(functionMaskValue, newReturnedLanes);
-+            llvm::Value *cmp = MasksAllEqual(GetFunctionMask(), newReturnedLanes);
-             llvm::BasicBlock *bDoReturn = CreateBasicBlock("do_return");
-             llvm::BasicBlock *bNoReturn = CreateBasicBlock("no_return");
-             BranchInst(bDoReturn, bNoReturn, cmp);
-diff --git a/tests/lit-tests/full_mask.ispc b/tests/lit-tests/full_mask.ispc
-new file mode 100644
-index 000000000..ac0b0bca3
---- /dev/null
-+++ b/tests/lit-tests/full_mask.ispc
-@@ -0,0 +1,63 @@
-+// RUN: %{ispc} %s -DISPC_EXPORT --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_EXPORT %s
-+
-+// RUN: %{ispc} %s -DISPC_UNMASKED --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_UNMASKED %s
-+
-+// RUN: %{ispc} %s -DISPC_NOQUALIF --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_NOQUALIF %s
-+
-+// RUN: %{ispc} %s -DISPC_TASK --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_TASK %s
-+
-+struct Parameters {
-+    float *vout;
-+    int param;
-+};
-+
-+#ifdef ISPC_EXPORT
-+// CHECK_ISPC_EXPORT: define void @simple_export___
-+// CHECK_ISPC_EXPORT: %full_mask_memory = alloca
-+// CHECK_ISPC_EXPORT: define void @simple_export(
-+// CHECK_ISPC_EXPORT-NOT: %full_mask_memory = alloca
-+export void simple_export(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_UNMASKED
-+// CHECK_ISPC_UNMASKED: define void @simple_unmasked
-+// CHECK_ISPC_UNMASKED-NOT: %full_mask_memory = alloca
-+unmasked void simple_unmasked(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_NOQUALIF
-+// CHECK_ISPC_NOQUALIF: define void @simple
-+// CHECK_ISPC_NOQUALIF: %full_mask_memory = alloca
-+void simple(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_TASK
-+
-+// CHECK_ISPC_TASK: define void @simple_task
-+// CHECK_ISPC_TASK-NOT: %full_mask_memory = alloca
-+// CHECK_ISPC_TASK: define void @simple_entry_point__
-+// CHECK_ISPC_TASK: %full_mask_memory = alloca
-+// CHECK_ISPC_TASK: define void @simple_entry_point(
-+// CHECK_ISPC_TASK-NOT: %full_mask_memory = alloca
-+task void simple_task(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+export void simple_entry_point(void *uniform parameters, uniform int dim0, uniform int dim1, uniform int dim2) {
-+    launch[dim0, dim1, dim2] simple_task(parameters);
-+}
-+#endif
-\ No newline at end of file
diff --git a/srcpkgs/ispc/patches/llvm12-008.patch b/srcpkgs/ispc/patches/llvm12-008.patch
deleted file mode 100644
index c8413d8b7887..000000000000
--- a/srcpkgs/ispc/patches/llvm12-008.patch
+++ /dev/null
@@ -1,149 +0,0 @@
-From afad14227d9204a3c8a626ca608f5b43c3218fe9 Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 4 May 2021 11:43:52 -0700
-Subject: [PATCH] Fixed ISPC gen build for LLVM12
-
----
- src/ctx.cpp |  4 ++++
- src/opt.cpp | 43 +++++++++++++++++++++++++++++--------------
- 2 files changed, 33 insertions(+), 14 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 0c7050591..f7dc06939 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -3738,7 +3738,11 @@ llvm::Value *FunctionEmitContext::GenXSimdCFAny(llvm::Value *value) {
- 
- llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::Value *defaults) {
-     AssertPos(currentPos, llvm::isa<llvm::VectorType>(value->getType()));
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    llvm::FixedVectorType *vt = llvm::dyn_cast<llvm::FixedVectorType>(value->getType());
-+#else
-     llvm::VectorType *vt = llvm::dyn_cast<llvm::VectorType>(value->getType());
-+#endif
-     if (defaults == NULL) {
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-diff --git a/src/opt.cpp b/src/opt.cpp
-index cea4afa23..4e33d6b1a 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -2916,9 +2916,13 @@ static llvm::Function *lGenXMaskedInt8Inst(llvm::Instruction *inst, bool isStore
- 
- static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::Instruction *inst) {
-     Assert(g->target->isGenXTarget());
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Assert(llvm::isa<llvm::FixedVectorType>(val->getType()));
-+    llvm::FixedVectorType *valVecType = llvm::dyn_cast<llvm::FixedVectorType>(val->getType());
-+#else
-     Assert(llvm::isa<llvm::VectorType>(val->getType()));
--
-     llvm::VectorType *valVecType = llvm::dyn_cast<llvm::VectorType>(val->getType());
-+#endif
-     Assert(llvm::isPowerOf2_32(valVecType->getNumElements()));
-     Assert(valVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
- 
-@@ -2942,9 +2946,13 @@ static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::
- }
- 
- static llvm::CallInst *lGenXLoadInst(llvm::Value *ptr, llvm::Type *retType, llvm::Instruction *inst) {
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Assert(llvm::isa<llvm::FixedVectorType>(retType));
-+    llvm::FixedVectorType *retVecType = llvm::dyn_cast<llvm::FixedVectorType>(retType);
-+#else
-     Assert(llvm::isa<llvm::VectorType>(retType));
--
-     llvm::VectorType *retVecType = llvm::dyn_cast<llvm::VectorType>(retType);
-+#endif
-     Assert(llvm::isPowerOf2_32(retVecType->getNumElements()));
-     Assert(retVecType->getPrimitiveSizeInBits());
-     Assert(retVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-@@ -5485,8 +5493,13 @@ static void lCreateBlockLDUse(llvm::Instruction *currInst, std::vector<llvm::Ext
-         } else if (auto gather = lGetPseudoGather(llvm::dyn_cast<llvm::Instruction>(ui->getUser()))) {
-             // Collect idxs from gather and fix users
-             llvm::Value *res = llvm::UndefValue::get(gather->getType());
--            for (unsigned i = 0, end = llvm::dyn_cast<llvm::VectorType>(res->getType())->getNumElements(); i < end;
--                 ++i) {
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            for (unsigned i = 0, end = llvm::dyn_cast<llvm::FixedVectorType>(res->getType())->getNumElements(); i < end;
-+                 ++i)
-+#else
-+            for (unsigned i = 0, end = llvm::dyn_cast<llvm::VectorType>(res->getType())->getNumElements(); i < end; ++i)
-+#endif
-+            {
-                 // Get element via IEI
-                 res = llvm::InsertElementInst::Create(res, EEIs[ptrUse.idxs[curr_idx++]],
-                                                       llvm::ConstantInt::get(LLVMTypes::Int32Type, i),
-@@ -5522,10 +5535,11 @@ static bool lVectorizeGEPs(llvm::Value *ptr, std::vector<PtrUse> &ptrUses, std::
- 
-     // Adjust values for vector load
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    if (auto vecTy = llvm::dyn_cast<llvm::FixedVectorType>(type)) {
-+    if (auto vecTy = llvm::dyn_cast<llvm::FixedVectorType>(type))
- #else
--    if (auto vecTy = llvm::dyn_cast<llvm::VectorType>(type)) {
-+    if (auto vecTy = llvm::dyn_cast<llvm::VectorType>(type))
- #endif
-+    {
-         // Get single element size
-         t_size /= vecTy->getNumElements();
-         // Get single element type
-@@ -6477,7 +6491,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-         Offsets,
-         llvm::FixedVectorType::get(LLVMTypes::Int64Type,
--                                   llvm::dyn_cast<llvm::VectorType>(Offsets->getType())->getNumElements()),
-+                                   llvm::dyn_cast<llvm::FixedVectorType>(Offsets->getType())->getNumElements()),
-         "svm_offset_zext", InsertBefore);
- #else
-         Offsets, llvm::VectorType::get(LLVMTypes::Int64Type, Offsets->getType()->getVectorNumElements()),
-@@ -6492,7 +6506,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
-         llvm::Value *undefInsertValue =
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-             llvm::UndefValue::get(llvm::FixedVectorType::get(
--                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements()));
- #else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
- #endif
-@@ -6501,17 +6515,16 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
- #elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
--            {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
-+            {llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements(), false},
- #else
--        llvm::ElementCount::get(
--                                llvm::dyn_cast<llvm::FixedVectorType>(addressType->getNumElements(), false),
-+            llvm::ElementCount::get(llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements(), false),
- #endif
-             llvm::Constant::getNullValue(llvm::Type::getInt32Ty(InsertBefore->getContext())));
- 
-         llvm::Value *undefShuffleValue =
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-             llvm::UndefValue::get(llvm::FixedVectorType::get(
--                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements()));
- #else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
- #endif
-@@ -6542,7 +6555,8 @@ llvm::Instruction *FixAddressSpace::processVectorLoad(llvm::LoadInst *LI) {
-         isPtrLoad = true;
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--        retType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(retType)->getNumElements());
-+        retType =
-+            llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::FixedVectorType>(retType)->getNumElements());
- #else
-         retType = llvm::VectorType::get(scalarType, retType->getVectorNumElements());
- #endif
-@@ -6604,7 +6618,8 @@ llvm::Instruction *FixAddressSpace::processVectorStore(llvm::StoreInst *SI) {
-     if (valType->getScalarType()->isPointerTy()) {
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--        valType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(valType)->getNumElements());
-+        valType =
-+            llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::FixedVectorType>(valType)->getNumElements());
- #else
-         valType = llvm::VectorType::get(scalarType, valType->getVectorNumElements());
- #endif
diff --git a/srcpkgs/ispc/patches/llvm12-009.patch b/srcpkgs/ispc/patches/llvm12-009.patch
deleted file mode 100644
index d3ea67828582..000000000000
--- a/srcpkgs/ispc/patches/llvm12-009.patch
+++ /dev/null
@@ -1,2109 +0,0 @@
-From 97b13c32132e2704a5e3e7b2eae49d854d087e3e Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 4 May 2021 11:31:55 -0700
-Subject: [PATCH] Updated builtins-cm* for switch to LLVM12
-
----
- builtins/builtins-cm-32.ll | 234 ++++++++++++++++++-------------------
- builtins/builtins-cm-64.ll | 232 ++++++++++++++++++------------------
- 2 files changed, 233 insertions(+), 233 deletions(-)
-
-diff --git a/builtins/builtins-cm-32.ll b/builtins/builtins-cm-32.ll
-index 32debf32e..481bbdc48 100644
---- a/builtins/builtins-cm-32.ll
-+++ b/builtins/builtins-cm-32.ll
-@@ -557,7 +557,7 @@ $_ZN13VaryingWriter12WriteVecElemIPvEEvv = comdat any
- @.str.10 = private unnamed_addr constant [5 x i8] c"%08X\00", align 1
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -618,7 +618,7 @@ define internal <1 x i8> @_ZN7details13__impl_divremILi1EEEu2CMvbT__cS1_S1_u2CMv
- declare <1 x i8> @llvm.genx.rdregioni.v1i8.v1i8.i16(<1 x i8>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -634,7 +634,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -680,7 +680,7 @@ define internal <2 x i8> @_ZN7details13__impl_divremILi2EEEu2CMvbT__cS1_S1_u2CMv
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -818,7 +818,7 @@ define internal <16 x i8> @_ZN7details13__impl_divremILi16EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -864,7 +864,7 @@ define internal <32 x i8> @_ZN7details13__impl_divremILi32EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -890,7 +890,7 @@ define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -904,7 +904,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -918,7 +918,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -932,7 +932,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -946,7 +946,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -960,7 +960,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -974,7 +974,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1058,7 +1058,7 @@ define internal <1 x i16> @_ZN7details13__impl_divremILi1EEEu2CMvbT__sS1_S1_u2CM
- declare <1 x i16> @llvm.genx.rdregioni.v1i16.v1i16.i16(<1 x i16>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1074,7 +1074,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1143,7 +1143,7 @@ define internal <2 x i16> @_ZN7details13__impl_divremILi2EEEu2CMvbT__sS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1350,7 +1350,7 @@ define internal <16 x i16> @_ZN7details13__impl_divremILi16EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1419,7 +1419,7 @@ define internal <32 x i16> @_ZN7details13__impl_divremILi32EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1445,7 +1445,7 @@ define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 si
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1459,7 +1459,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1473,7 +1473,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1487,7 +1487,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -1501,7 +1501,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -1515,7 +1515,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1529,7 +1529,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1730,7 +1730,7 @@ define internal <1 x i32> @_ZN7details13__impl_divremILi1EEEu2CMvbT__iS1_S1_u2CM
- declare <1 x i32> @llvm.genx.rdregioni.v1i32.v1i32.i16(<1 x i32>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1746,7 +1746,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -1932,7 +1932,7 @@ define internal <2 x i32> @_ZN7details13__impl_divremILi2EEEu2CMvbT__iS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2490,7 +2490,7 @@ define internal <16 x i32> @_ZN7details13__impl_divremILi16EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2676,7 +2676,7 @@ define internal <32 x i32> @_ZN7details13__impl_divremILi32EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2702,7 +2702,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2716,7 +2716,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -2730,7 +2730,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2744,7 +2744,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -2758,7 +2758,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -2772,7 +2772,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2786,7 +2786,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2844,7 +2844,7 @@ define internal <1 x i8> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2860,7 +2860,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -2906,7 +2906,7 @@ define internal <2 x i8> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3044,7 +3044,7 @@ define internal <16 x i8> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3090,7 +3090,7 @@ define internal <32 x i8> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3116,7 +3116,7 @@ define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3130,7 +3130,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -3144,7 +3144,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3158,7 +3158,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -3172,7 +3172,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -3186,7 +3186,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3200,7 +3200,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3278,7 +3278,7 @@ define internal <1 x i16> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3294,7 +3294,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3360,7 +3360,7 @@ define internal <2 x i16> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3558,7 +3558,7 @@ define internal <16 x i16> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3624,7 +3624,7 @@ define internal <32 x i16> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3650,7 +3650,7 @@ define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 ze
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3664,7 +3664,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3678,7 +3678,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3692,7 +3692,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -3706,7 +3706,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -3720,7 +3720,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3734,7 +3734,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3892,7 +3892,7 @@ define internal <1 x i32> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3908,7 +3908,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4054,7 +4054,7 @@ define internal <2 x i32> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4492,7 +4492,7 @@ define internal <16 x i32> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4638,7 +4638,7 @@ define internal <32 x i32> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4664,7 +4664,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4678,7 +4678,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4692,7 +4692,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4706,7 +4706,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -4720,7 +4720,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -4734,7 +4734,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4748,7 +4748,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-+define internal void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-   %8 = alloca i8*, align 4
-   %9 = alloca i8*, align 4
-   %10 = alloca i32, align 4
-@@ -4988,7 +4988,7 @@ define internal void @_ZN7details16_cm_print_formatILi128EEEv15cm_surfaceindexju
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i32) #26 !dbg !117 {
-+define internal void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i32) #26 !dbg !117 {
-   %10 = alloca i32, align 4
-   %11 = alloca i8*, align 4
-   %12 = alloca i32, align 4
-@@ -5069,7 +5069,7 @@ define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i3
-   %67 = load i64, i64* %13, align 8, !dbg !159, !tbaa !19
-   %68 = load <5 x i32>, <5 x i32>* %21, align 32, !dbg !160, !tbaa !7
-   call void @_ZN13VaryingWriterC2ERjRPKjiyu2CMvb5_i(%class.VaryingWriter* %23, i32* dereferenceable(4) %19, i32** dereferenceable(4) %14, i32 %66, i64 %67, <5 x i32> %68), !dbg !161
--  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval align 32 %22, %class.VaryingWriter* byval align 32 %23), !dbg !162
-+  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval(%class.UniformWriter) align 32 %22, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %23), !dbg !162
-   br label %70, !dbg !163
- 
- ; <label>:70:                                     ; preds = %60
-@@ -5187,7 +5187,7 @@ define internal <5 x i32> @_Z17get_auxiliary_strv() #28 comdat !dbg !178 {
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %class.VaryingWriter* byval align 32) #25 comdat !dbg !191 {
-+define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !191 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %class.VaryingWriter, align 32
-@@ -5196,7 +5196,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %8 = bitcast %class.UniformWriter* %5 to i8*, !dbg !196
-   %9 = bitcast %class.UniformWriter* %1 to i8*, !dbg !196
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %8, i8* align 32 %9, i32 64, i1 false), !dbg !196, !tbaa.struct !197
--  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval align 32 %5), !dbg !198
-+  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5), !dbg !198
-   br i1 %10, label %16, label %11, !dbg !199
- 
- ; <label>:11:                                     ; preds = %3
-@@ -5204,7 +5204,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %13 = bitcast %class.VaryingWriter* %6 to i8*, !dbg !201
-   %14 = bitcast %class.VaryingWriter* %2 to i8*, !dbg !201
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %13, i8* align 32 %14, i32 64, i1 false), !dbg !201, !tbaa.struct !197
--  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval align 32 %6), !dbg !202
-+  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %6), !dbg !202
-   br label %16, !dbg !199
- 
- ; <label>:16:                                     ; preds = %11, %3
-@@ -5279,7 +5279,7 @@ define internal void @_ZN13VaryingWriterC2ERjRPKjiyu2CMvb5_i(%class.VaryingWrite
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @__num_cores() #29 !dbg !236 {
-+define internal i32 @__num_cores() #29 !dbg !236 {
-   ret i32 -1, !dbg !237
- }
- 
-@@ -8860,7 +8860,7 @@ declare dso_local void @_ZN7details37__cm_intrinsic_impl_svm_scatter_writeIiLi1E
- declare void @llvm.genx.svm.scatter.v1i1.v1i64.v1i32(<1 x i1>, i32, <1 x i64>, <1 x i32>) #27
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval align 32) #25 comdat !dbg !1645 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32) #25 comdat !dbg !1645 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.UniformWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8869,7 +8869,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
-   %7 = bitcast %class.UniformWriter* %4 to i8*, !dbg !1647
-   %8 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1647
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %7, i8* align 32 %8, i32 64, i1 false), !dbg !1647, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %5), !dbg !1648
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval(%class.UniformWriter) align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %5), !dbg !1648
-   ret i1 %9, !dbg !1649
- }
- 
-@@ -8877,7 +8877,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
- declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture readonly, i32, i1) #32
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval align 32) #25 comdat !dbg !1650 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !1650 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.VaryingWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -8886,12 +8886,12 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWrite
-   %7 = bitcast %class.VaryingWriter* %4 to i8*, !dbg !1652
-   %8 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !1652
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %7, i8* align 32 %8, i32 64, i1 false), !dbg !1652, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %5), !dbg !1653
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %5), !dbg !1653
-   ret i1 %9, !dbg !1654
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1655 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1655 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8914,7 +8914,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %22 = bitcast %class.UniformWriter* %5 to i8*, !dbg !1657
-   %23 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1657
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %22, i8* align 32 %23, i32 64, i1 false), !dbg !1657, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %6), !dbg !1658
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %6), !dbg !1658
-   br i1 %24, label %60, label %25, !dbg !1659
- 
- ; <label>:25:                                     ; preds = %3
-@@ -8922,7 +8922,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %27 = bitcast %class.UniformWriter* %7 to i8*, !dbg !1661
-   %28 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1661
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %27, i8* align 32 %28, i32 64, i1 false), !dbg !1661, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %8), !dbg !1662
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval(%class.UniformWriter) align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %8), !dbg !1662
-   br i1 %29, label %60, label %30, !dbg !1663
- 
- ; <label>:30:                                     ; preds = %25
-@@ -8930,7 +8930,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %32 = bitcast %class.UniformWriter* %9 to i8*, !dbg !1665
-   %33 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1665
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %32, i8* align 32 %33, i32 64, i1 false), !dbg !1665, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %10), !dbg !1666
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval(%class.UniformWriter) align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %10), !dbg !1666
-   br i1 %34, label %60, label %35, !dbg !1667
- 
- ; <label>:35:                                     ; preds = %30
-@@ -8938,7 +8938,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %37 = bitcast %class.UniformWriter* %11 to i8*, !dbg !1669
-   %38 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1669
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %37, i8* align 32 %38, i32 64, i1 false), !dbg !1669, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %12), !dbg !1670
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval(%class.UniformWriter) align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %12), !dbg !1670
-   br i1 %39, label %60, label %40, !dbg !1671
- 
- ; <label>:40:                                     ; preds = %35
-@@ -8946,7 +8946,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %42 = bitcast %class.UniformWriter* %13 to i8*, !dbg !1673
-   %43 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1673
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %42, i8* align 32 %43, i32 64, i1 false), !dbg !1673, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %14), !dbg !1674
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval(%class.UniformWriter) align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %14), !dbg !1674
-   br i1 %44, label %60, label %45, !dbg !1675
- 
- ; <label>:45:                                     ; preds = %40
-@@ -8954,7 +8954,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %47 = bitcast %class.UniformWriter* %15 to i8*, !dbg !1677
-   %48 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1677
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %47, i8* align 32 %48, i32 64, i1 false), !dbg !1677, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %16), !dbg !1678
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval(%class.UniformWriter) align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %16), !dbg !1678
-   br i1 %49, label %60, label %50, !dbg !1679
- 
- ; <label>:50:                                     ; preds = %45
-@@ -8962,7 +8962,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %52 = bitcast %class.UniformWriter* %17 to i8*, !dbg !1681
-   %53 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1681
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %52, i8* align 32 %53, i32 64, i1 false), !dbg !1681, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %18), !dbg !1682
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval(%class.UniformWriter) align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %18), !dbg !1682
-   br i1 %54, label %60, label %55, !dbg !1683
- 
- ; <label>:55:                                     ; preds = %50
-@@ -8970,7 +8970,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %57 = bitcast %class.UniformWriter* %19 to i8*, !dbg !1685
-   %58 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1685
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %57, i8* align 32 %58, i32 64, i1 false), !dbg !1685, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %20), !dbg !1686
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval(%class.UniformWriter) align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %20), !dbg !1686
-   br label %60, !dbg !1683
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -8979,7 +8979,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1688 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1688 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9005,7 +9005,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1697 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1697 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9031,7 +9031,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1706 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1706 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9057,7 +9057,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1715 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1715 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9083,7 +9083,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1724 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1724 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9109,7 +9109,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1733 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1733 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9135,7 +9135,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1742 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1742 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9161,7 +9161,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1751 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1751 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9984,7 +9984,7 @@ define internal i32 @_ZN7details18_cm_print_type_oclIPvEENS_18SHADER_PRINTF_TYPE
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2055 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2055 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.VaryingWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -10007,7 +10007,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %22 = bitcast %class.VaryingWriter* %5 to i8*, !dbg !2057
-   %23 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2057
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %22, i8* align 32 %23, i32 64, i1 false), !dbg !2057, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %6), !dbg !2058
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %6), !dbg !2058
-   br i1 %24, label %60, label %25, !dbg !2059
- 
- ; <label>:25:                                     ; preds = %3
-@@ -10015,7 +10015,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %27 = bitcast %class.VaryingWriter* %7 to i8*, !dbg !2061
-   %28 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2061
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %27, i8* align 32 %28, i32 64, i1 false), !dbg !2061, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %8), !dbg !2062
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %8), !dbg !2062
-   br i1 %29, label %60, label %30, !dbg !2063
- 
- ; <label>:30:                                     ; preds = %25
-@@ -10023,7 +10023,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %32 = bitcast %class.VaryingWriter* %9 to i8*, !dbg !2065
-   %33 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2065
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %32, i8* align 32 %33, i32 64, i1 false), !dbg !2065, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %10), !dbg !2066
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %10), !dbg !2066
-   br i1 %34, label %60, label %35, !dbg !2067
- 
- ; <label>:35:                                     ; preds = %30
-@@ -10031,7 +10031,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %37 = bitcast %class.VaryingWriter* %11 to i8*, !dbg !2069
-   %38 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2069
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %37, i8* align 32 %38, i32 64, i1 false), !dbg !2069, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %12), !dbg !2070
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %12), !dbg !2070
-   br i1 %39, label %60, label %40, !dbg !2071
- 
- ; <label>:40:                                     ; preds = %35
-@@ -10039,7 +10039,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %42 = bitcast %class.VaryingWriter* %13 to i8*, !dbg !2073
-   %43 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2073
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %42, i8* align 32 %43, i32 64, i1 false), !dbg !2073, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %14), !dbg !2074
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %14), !dbg !2074
-   br i1 %44, label %60, label %45, !dbg !2075
- 
- ; <label>:45:                                     ; preds = %40
-@@ -10047,7 +10047,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %47 = bitcast %class.VaryingWriter* %15 to i8*, !dbg !2077
-   %48 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2077
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %47, i8* align 32 %48, i32 64, i1 false), !dbg !2077, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %16), !dbg !2078
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %16), !dbg !2078
-   br i1 %49, label %60, label %50, !dbg !2079
- 
- ; <label>:50:                                     ; preds = %45
-@@ -10055,7 +10055,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %52 = bitcast %class.VaryingWriter* %17 to i8*, !dbg !2081
-   %53 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2081
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %52, i8* align 32 %53, i32 64, i1 false), !dbg !2081, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %18), !dbg !2082
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %18), !dbg !2082
-   br i1 %54, label %60, label %55, !dbg !2083
- 
- ; <label>:55:                                     ; preds = %50
-@@ -10063,7 +10063,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %57 = bitcast %class.VaryingWriter* %19 to i8*, !dbg !2085
-   %58 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2085
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %57, i8* align 32 %58, i32 64, i1 false), !dbg !2085, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %20), !dbg !2086
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %20), !dbg !2086
-   br label %60, !dbg !2083
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -10072,7 +10072,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2088 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2088 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10098,7 +10098,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2097 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2097 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10124,7 +10124,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2106 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2106 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10150,7 +10150,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2115 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2115 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10176,7 +10176,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2124 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2124 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10202,7 +10202,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2133 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2133 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10228,7 +10228,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2142 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2142 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10254,7 +10254,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2151 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2151 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-diff --git a/builtins/builtins-cm-64.ll b/builtins/builtins-cm-64.ll
-index 39a2dd8be..375d01bed 100644
---- a/builtins/builtins-cm-64.ll
-+++ b/builtins/builtins-cm-64.ll
-@@ -557,7 +557,7 @@ $_ZN13VaryingWriter12WriteVecElemIPvEEvv = comdat any
- @.str.10 = private unnamed_addr constant [8 x i8] c"%016llX\00", align 1
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -618,7 +618,7 @@ define internal <1 x i8> @_ZN7details13__impl_divremILi1EEEu2CMvbT__cS1_S1_u2CMv
- declare <1 x i8> @llvm.genx.rdregioni.v1i8.v1i8.i16(<1 x i8>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -634,7 +634,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -680,7 +680,7 @@ define internal <2 x i8> @_ZN7details13__impl_divremILi2EEEu2CMvbT__cS1_S1_u2CMv
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -818,7 +818,7 @@ define internal <16 x i8> @_ZN7details13__impl_divremILi16EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -864,7 +864,7 @@ define internal <32 x i8> @_ZN7details13__impl_divremILi32EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -890,7 +890,7 @@ define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -904,7 +904,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -918,7 +918,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -932,7 +932,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -946,7 +946,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -960,7 +960,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -974,7 +974,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1058,7 +1058,7 @@ define internal <1 x i16> @_ZN7details13__impl_divremILi1EEEu2CMvbT__sS1_S1_u2CM
- declare <1 x i16> @llvm.genx.rdregioni.v1i16.v1i16.i16(<1 x i16>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1074,7 +1074,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1143,7 +1143,7 @@ define internal <2 x i16> @_ZN7details13__impl_divremILi2EEEu2CMvbT__sS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1350,7 +1350,7 @@ define internal <16 x i16> @_ZN7details13__impl_divremILi16EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1419,7 +1419,7 @@ define internal <32 x i16> @_ZN7details13__impl_divremILi32EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1445,7 +1445,7 @@ define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 si
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1459,7 +1459,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1473,7 +1473,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1487,7 +1487,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -1501,7 +1501,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -1515,7 +1515,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1529,7 +1529,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1730,7 +1730,7 @@ define internal <1 x i32> @_ZN7details13__impl_divremILi1EEEu2CMvbT__iS1_S1_u2CM
- declare <1 x i32> @llvm.genx.rdregioni.v1i32.v1i32.i16(<1 x i32>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1746,7 +1746,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -1932,7 +1932,7 @@ define internal <2 x i32> @_ZN7details13__impl_divremILi2EEEu2CMvbT__iS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2490,7 +2490,7 @@ define internal <16 x i32> @_ZN7details13__impl_divremILi16EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2676,7 +2676,7 @@ define internal <32 x i32> @_ZN7details13__impl_divremILi32EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2702,7 +2702,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2716,7 +2716,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -2730,7 +2730,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2744,7 +2744,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -2758,7 +2758,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -2772,7 +2772,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2786,7 +2786,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2844,7 +2844,7 @@ define internal <1 x i8> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2860,7 +2860,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -2906,7 +2906,7 @@ define internal <2 x i8> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3044,7 +3044,7 @@ define internal <16 x i8> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3090,7 +3090,7 @@ define internal <32 x i8> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3116,7 +3116,7 @@ define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3130,7 +3130,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -3144,7 +3144,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3158,7 +3158,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -3172,7 +3172,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -3186,7 +3186,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3200,7 +3200,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3278,7 +3278,7 @@ define internal <1 x i16> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3294,7 +3294,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3360,7 +3360,7 @@ define internal <2 x i16> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3558,7 +3558,7 @@ define internal <16 x i16> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3624,7 +3624,7 @@ define internal <32 x i16> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3650,7 +3650,7 @@ define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 ze
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3664,7 +3664,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3678,7 +3678,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3692,7 +3692,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -3706,7 +3706,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -3720,7 +3720,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3734,7 +3734,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3892,7 +3892,7 @@ define internal <1 x i32> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3908,7 +3908,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4054,7 +4054,7 @@ define internal <2 x i32> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4492,7 +4492,7 @@ define internal <16 x i32> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4638,7 +4638,7 @@ define internal <32 x i32> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4664,7 +4664,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4678,7 +4678,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4692,7 +4692,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4706,7 +4706,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -4720,7 +4720,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -4734,7 +4734,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4748,7 +4748,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-+define internal void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-   %8 = alloca i8*, align 8
-   %9 = alloca i8*, align 8
-   %10 = alloca i32, align 4
-@@ -5070,7 +5070,7 @@ define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i3
-   %67 = load i64, i64* %13, align 8, !dbg !159, !tbaa !19
-   %68 = load <5 x i32>, <5 x i32>* %21, align 32, !dbg !160, !tbaa !7
-   call void @_ZN13VaryingWriterC2ERyRPKjiyu2CMvb5_i(%class.VaryingWriter* %23, i64* dereferenceable(8) %19, i32** dereferenceable(8) %14, i32 %66, i64 %67, <5 x i32> %68), !dbg !161
--  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval align 32 %22, %class.VaryingWriter* byval align 32 %23), !dbg !162
-+  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval(%class.UniformWriter) align 32 %22, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %23), !dbg !162
-   br label %70, !dbg !163
- 
- ; <label>:70:                                     ; preds = %60
-@@ -5188,7 +5188,7 @@ define internal <5 x i32> @_Z17get_auxiliary_strv() #28 comdat !dbg !178 {
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %class.VaryingWriter* byval align 32) #25 comdat !dbg !191 {
-+define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !191 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %class.VaryingWriter, align 32
-@@ -5197,7 +5197,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %8 = bitcast %class.UniformWriter* %5 to i8*, !dbg !196
-   %9 = bitcast %class.UniformWriter* %1 to i8*, !dbg !196
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %8, i8* align 32 %9, i64 64, i1 false), !dbg !196, !tbaa.struct !197
--  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval align 32 %5), !dbg !198
-+  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5), !dbg !198
-   br i1 %10, label %16, label %11, !dbg !199
- 
- ; <label>:11:                                     ; preds = %3
-@@ -5205,7 +5205,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %13 = bitcast %class.VaryingWriter* %6 to i8*, !dbg !201
-   %14 = bitcast %class.VaryingWriter* %2 to i8*, !dbg !201
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %13, i8* align 32 %14, i64 64, i1 false), !dbg !201, !tbaa.struct !197
--  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval align 32 %6), !dbg !202
-+  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %6), !dbg !202
-   br label %16, !dbg !199
- 
- ; <label>:16:                                     ; preds = %11, %3
-@@ -5280,7 +5280,7 @@ define internal void @_ZN13VaryingWriterC2ERyRPKjiyu2CMvb5_i(%class.VaryingWrite
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @__num_cores() #29 !dbg !236 {
-+define internal i32 @__num_cores() #29 !dbg !236 {
-   ret i32 -1, !dbg !237
- }
- 
-@@ -8870,7 +8870,7 @@ declare dso_local void @_ZN7details37__cm_intrinsic_impl_svm_scatter_writeIiLi1E
- declare void @llvm.genx.svm.scatter.v1i1.v1i64.v1i32(<1 x i1>, i32, <1 x i64>, <1 x i32>) #27
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval align 32) #25 comdat !dbg !1645 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32) #25 comdat !dbg !1645 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.UniformWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8879,7 +8879,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
-   %7 = bitcast %class.UniformWriter* %4 to i8*, !dbg !1647
-   %8 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1647
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %7, i8* align 32 %8, i64 64, i1 false), !dbg !1647, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %5), !dbg !1648
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval(%class.UniformWriter) align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %5), !dbg !1648
-   ret i1 %9, !dbg !1649
- }
- 
-@@ -8887,7 +8887,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
- declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1) #32
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval align 32) #25 comdat !dbg !1650 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !1650 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.VaryingWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -8896,12 +8896,12 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWrite
-   %7 = bitcast %class.VaryingWriter* %4 to i8*, !dbg !1652
-   %8 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !1652
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %7, i8* align 32 %8, i64 64, i1 false), !dbg !1652, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %5), !dbg !1653
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %5), !dbg !1653
-   ret i1 %9, !dbg !1654
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1655 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1655 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8924,7 +8924,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %22 = bitcast %class.UniformWriter* %5 to i8*, !dbg !1657
-   %23 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1657
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %22, i8* align 32 %23, i64 64, i1 false), !dbg !1657, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %6), !dbg !1658
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %6), !dbg !1658
-   br i1 %24, label %60, label %25, !dbg !1659
- 
- ; <label>:25:                                     ; preds = %3
-@@ -8932,7 +8932,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %27 = bitcast %class.UniformWriter* %7 to i8*, !dbg !1661
-   %28 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1661
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %27, i8* align 32 %28, i64 64, i1 false), !dbg !1661, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %8), !dbg !1662
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval(%class.UniformWriter) align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %8), !dbg !1662
-   br i1 %29, label %60, label %30, !dbg !1663
- 
- ; <label>:30:                                     ; preds = %25
-@@ -8940,7 +8940,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %32 = bitcast %class.UniformWriter* %9 to i8*, !dbg !1665
-   %33 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1665
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %32, i8* align 32 %33, i64 64, i1 false), !dbg !1665, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %10), !dbg !1666
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval(%class.UniformWriter) align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %10), !dbg !1666
-   br i1 %34, label %60, label %35, !dbg !1667
- 
- ; <label>:35:                                     ; preds = %30
-@@ -8948,7 +8948,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %37 = bitcast %class.UniformWriter* %11 to i8*, !dbg !1669
-   %38 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1669
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %37, i8* align 32 %38, i64 64, i1 false), !dbg !1669, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %12), !dbg !1670
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval(%class.UniformWriter) align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %12), !dbg !1670
-   br i1 %39, label %60, label %40, !dbg !1671
- 
- ; <label>:40:                                     ; preds = %35
-@@ -8956,7 +8956,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %42 = bitcast %class.UniformWriter* %13 to i8*, !dbg !1673
-   %43 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1673
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %42, i8* align 32 %43, i64 64, i1 false), !dbg !1673, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %14), !dbg !1674
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval(%class.UniformWriter) align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %14), !dbg !1674
-   br i1 %44, label %60, label %45, !dbg !1675
- 
- ; <label>:45:                                     ; preds = %40
-@@ -8964,7 +8964,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %47 = bitcast %class.UniformWriter* %15 to i8*, !dbg !1677
-   %48 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1677
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %47, i8* align 32 %48, i64 64, i1 false), !dbg !1677, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %16), !dbg !1678
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval(%class.UniformWriter) align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %16), !dbg !1678
-   br i1 %49, label %60, label %50, !dbg !1679
- 
- ; <label>:50:                                     ; preds = %45
-@@ -8972,7 +8972,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %52 = bitcast %class.UniformWriter* %17 to i8*, !dbg !1681
-   %53 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1681
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %52, i8* align 32 %53, i64 64, i1 false), !dbg !1681, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %18), !dbg !1682
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval(%class.UniformWriter) align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %18), !dbg !1682
-   br i1 %54, label %60, label %55, !dbg !1683
- 
- ; <label>:55:                                     ; preds = %50
-@@ -8980,7 +8980,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %57 = bitcast %class.UniformWriter* %19 to i8*, !dbg !1685
-   %58 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1685
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %57, i8* align 32 %58, i64 64, i1 false), !dbg !1685, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %20), !dbg !1686
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval(%class.UniformWriter) align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %20), !dbg !1686
-   br label %60, !dbg !1683
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -8989,7 +8989,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1688 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1688 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9015,7 +9015,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1697 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1697 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9041,7 +9041,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1706 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1706 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9067,7 +9067,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1715 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1715 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9093,7 +9093,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1724 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1724 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9119,7 +9119,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1733 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1733 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9145,7 +9145,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1742 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1742 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9171,7 +9171,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1751 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1751 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10013,7 +10013,7 @@ define internal i32 @_ZN7details18_cm_print_type_oclIPvEENS_18SHADER_PRINTF_TYPE
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2061 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2061 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.VaryingWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -10036,7 +10036,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %22 = bitcast %class.VaryingWriter* %5 to i8*, !dbg !2063
-   %23 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2063
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %22, i8* align 32 %23, i64 64, i1 false), !dbg !2063, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %6), !dbg !2064
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %6), !dbg !2064
-   br i1 %24, label %60, label %25, !dbg !2065
- 
- ; <label>:25:                                     ; preds = %3
-@@ -10044,7 +10044,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %27 = bitcast %class.VaryingWriter* %7 to i8*, !dbg !2067
-   %28 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2067
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %27, i8* align 32 %28, i64 64, i1 false), !dbg !2067, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %8), !dbg !2068
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %8), !dbg !2068
-   br i1 %29, label %60, label %30, !dbg !2069
- 
- ; <label>:30:                                     ; preds = %25
-@@ -10052,7 +10052,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %32 = bitcast %class.VaryingWriter* %9 to i8*, !dbg !2071
-   %33 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2071
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %32, i8* align 32 %33, i64 64, i1 false), !dbg !2071, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %10), !dbg !2072
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %10), !dbg !2072
-   br i1 %34, label %60, label %35, !dbg !2073
- 
- ; <label>:35:                                     ; preds = %30
-@@ -10060,7 +10060,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %37 = bitcast %class.VaryingWriter* %11 to i8*, !dbg !2075
-   %38 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2075
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %37, i8* align 32 %38, i64 64, i1 false), !dbg !2075, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %12), !dbg !2076
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %12), !dbg !2076
-   br i1 %39, label %60, label %40, !dbg !2077
- 
- ; <label>:40:                                     ; preds = %35
-@@ -10068,7 +10068,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %42 = bitcast %class.VaryingWriter* %13 to i8*, !dbg !2079
-   %43 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2079
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %42, i8* align 32 %43, i64 64, i1 false), !dbg !2079, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %14), !dbg !2080
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %14), !dbg !2080
-   br i1 %44, label %60, label %45, !dbg !2081
- 
- ; <label>:45:                                     ; preds = %40
-@@ -10076,7 +10076,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %47 = bitcast %class.VaryingWriter* %15 to i8*, !dbg !2083
-   %48 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2083
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %47, i8* align 32 %48, i64 64, i1 false), !dbg !2083, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %16), !dbg !2084
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %16), !dbg !2084
-   br i1 %49, label %60, label %50, !dbg !2085
- 
- ; <label>:50:                                     ; preds = %45
-@@ -10084,7 +10084,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %52 = bitcast %class.VaryingWriter* %17 to i8*, !dbg !2087
-   %53 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2087
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %52, i8* align 32 %53, i64 64, i1 false), !dbg !2087, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %18), !dbg !2088
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %18), !dbg !2088
-   br i1 %54, label %60, label %55, !dbg !2089
- 
- ; <label>:55:                                     ; preds = %50
-@@ -10092,7 +10092,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %57 = bitcast %class.VaryingWriter* %19 to i8*, !dbg !2091
-   %58 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2091
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %57, i8* align 32 %58, i64 64, i1 false), !dbg !2091, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %20), !dbg !2092
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %20), !dbg !2092
-   br label %60, !dbg !2089
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -10101,7 +10101,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2094 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2094 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10127,7 +10127,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2103 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2103 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10153,7 +10153,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2112 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2112 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10179,7 +10179,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2121 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2121 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10205,7 +10205,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2130 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2130 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10231,7 +10231,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2139 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2139 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10257,7 +10257,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2148 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2148 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10283,7 +10283,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2157 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2157 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
diff --git a/srcpkgs/ispc/template b/srcpkgs/ispc/template
index 9c3acb42a9cf..3a85ff2605af 100644
--- a/srcpkgs/ispc/template
+++ b/srcpkgs/ispc/template
@@ -1,7 +1,7 @@
 # Template file for 'ispc'
 pkgname=ispc
-version=1.15.0
-revision=2
+version=1.17.0
+revision=1
 archs="x86_64*"
 build_style=cmake
 configure_args="-DISPC_NO_DUMPS=ON -DARM_ENABLED=OFF"
@@ -12,7 +12,7 @@ maintainer="Andrea Brancaleoni <abc@pompel.me>"
 license="BSD-3-Clause"
 homepage="https://ispc.github.io"
 distfiles="https://github.com/ispc/ispc/archive/v${version}.tar.gz"
-checksum=2658ff00dc045ac9fcefbf6bd26dffaf723b059a942a27df91bbb61bc503a285
+checksum=37fb1055d6c6b232e112d8d50145d726824ed4d8da93a7396315dceba6c76e62
 nocross=yes
 nopie=yes
 

From 10a88bd0ffd79badb198e4ab66db1f7edef2db44 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Tue, 3 May 2022 01:20:03 +0200
Subject: [PATCH 27/29] llvm14: switch to runtimes build.

https://reviews.llvm.org/rGac7031b2b2fa
https://reviews.llvm.org/D110338#3022952
---
 srcpkgs/llvm14/template | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
index 3e7e6ab2c00b..e731aa76130a 100644
--- a/srcpkgs/llvm14/template
+++ b/srcpkgs/llvm14/template
@@ -51,7 +51,8 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
-_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
+_enabled_projects="clang;clang-tools-extra;lld"
+_enabled_runtimes="compiler-rt;libcxx;libcxxabi;libunwind"
 
 _lldb_enable=yes
 _libomp_enable=no
@@ -67,9 +68,8 @@ esac
 
 subpackages="clang-tools-extra"
 
-# must go before clang
 if [ "$_libomp_enable" = "yes" ]; then
-	_enabled_projects+=";openmp"
+	_enabled_runtimes+=";openmp"
 	subpackages+=" libomp libomp-devel"
 	# because of cmake nonsense referencing libomptarget.so.*
 	depends+=" libomp>=${version}_${revision}"
@@ -88,6 +88,7 @@ fi
 subpackages+=" lld lld-devel"
 
 configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+configure_args+=" -DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}"
 
 post_patch() {
 	if [ "$_lldb_enable" = "yes" ]; then
@@ -156,7 +157,8 @@ pre_configure() {
 		CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
 			CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
-			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
+			-DLLVM_ENABLE_PROJECTS=${_enabled_projects} \
+			-DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}
 		make ${makejobs} -C utils/TableGen
 		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen

From 146e8973a3a031fe88de96c429d08996d24b41c7 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 14:07:14 +0200
Subject: [PATCH 28/29] zig: fix build.

---
 srcpkgs/zig/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/zig/template b/srcpkgs/zig/template
index 728c5a64e9df..c175de62c5f7 100644
--- a/srcpkgs/zig/template
+++ b/srcpkgs/zig/template
@@ -5,7 +5,7 @@ revision=2
 archs="x86_64* aarch64*"
 build_style=cmake
 make_cmd=make
-makedepends="clang llvm12 lld-devel"
+makedepends="clang12 llvm12 lld12-devel"
 short_desc="Programming language designed for robustness, optimality, and clarity"
 maintainer="Isaac Freund <mail@isaacfreund.com>"
 license="MIT"

From 89a6e4c69c1fa1ed0ad88604339993e33ee3419a Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 03:39:58 +0200
Subject: [PATCH 29/29] llvm14: fix build.

---
 common/shlibs                                 |  2 +-
 .../llvm14/files/llvm-Config-llvm-config.h    |  9 +++
 srcpkgs/llvm14/template                       | 65 ++++++++++++-------
 3 files changed, 53 insertions(+), 23 deletions(-)
 create mode 100644 srcpkgs/llvm14/files/llvm-Config-llvm-config.h

diff --git a/common/shlibs b/common/shlibs
index df3eb79f921c..81941c3e4db3 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -978,7 +978,7 @@ libconfuse.so.2 confuse-3.2.1_1
 libclang.so.12 libclang12-12.0.0_1
 libclang-cpp.so.12 libclang12-cpp-12.0.0_1
 liblldb.so.14 lldb-14.0.3_1
-libclang.so.14 libclang-14.0.3_1
+libclang.so.13 libclang-14.0.3_1
 libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
diff --git a/srcpkgs/llvm14/files/llvm-Config-llvm-config.h b/srcpkgs/llvm14/files/llvm-Config-llvm-config.h
new file mode 100644
index 000000000000..2fa08c9be696
--- /dev/null
+++ b/srcpkgs/llvm14/files/llvm-Config-llvm-config.h
@@ -0,0 +1,9 @@
+#include <bits/wordsize.h>
+
+#if __WORDSIZE == 32
+#include "llvm-config-32.h"
+#elif __WORDSIZE == 64
+#include "llvm-config-64.h"
+#else
+#error "Unknown word size"
+#endif
diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
index e731aa76130a..f3242f0549a2 100644
--- a/srcpkgs/llvm14/template
+++ b/srcpkgs/llvm14/template
@@ -15,6 +15,7 @@ configure_args="
  -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
  -DLIBOMP_ENABLE_SHARED=YES
  -DLIBOMP_INSTALL_ALIASES=NO
+ -DCOMPILER_RT_DEFAULT_TARGET_ONLY=YES
  -DLLVM_INCLUDE_DOCS=YES
  -DLLVM_BUILD_DOCS=YES
  -DLLVM_ENABLE_SPHINX=YES
@@ -38,6 +39,7 @@ distfiles="https://github.com/llvm/llvm-project/releases/download/llvmorg-${vers
 checksum=44d3e7a784d5cf805e72853bb03f218bd1058d448c03ca883dabbebc99204e0c
 lib32disabled=yes
 python_version=3
+nopie_files="/usr/bin/llvm-omp-device-info"
 
 if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
 	configure_args+=" -DLIBCXX_HAS_MUSL_LIBC=YES"
@@ -90,6 +92,33 @@ subpackages+=" lld lld-devel"
 configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
 configure_args+=" -DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}"
 
+case "$XBPS_TARGET_MACHINE" in
+	i686) _trp="i686-pc-linux-gnu";;
+	i686-musl) _trp="i686-linux-musl";;
+	x86_64) _trp="x86_64-unknown-linux-gnu";;
+	x86_64-musl) _trp="x86_64-linux-musl";;
+	armv5tel) _trp="arm-linux-gnueabi";;
+	armv5tel-musl) _trp="arm-linux-musleabi";;
+	armv6l) _trp="arm-linux-gnueabihf";;
+	armv7l) _trp="armv7l-linux-gnueabihf";;
+	armv6l-musl) _trp="arm-linux-musleabihf";;
+	armv7l-musl) _trp="armv7l-linux-musleabihf";;
+	aarch64) _trp="aarch64-linux-gnu";;
+	aarch64-musl) _trp="aarch64-linux-musl";;
+	ppc) _trp="powerpc-linux-gnu";;
+	ppc-musl) _trp="powerpc-linux-musl";;
+	ppcle) _trp="powerpcle-linux-gnu";;
+	ppcle-musl) _trp="powerpcle-linux-musl";;
+	ppc64le) _trp="powerpc64le-linux-gnu";;
+	ppc64le-musl) _trp="powerpc64le-linux-musl";;
+	ppc64) _trp="powerpc64-linux-gnu";;
+	ppc64-musl) _trp="powerpc64-linux-musl";;
+	mips-musl) _trp="mips-linux-musl";;
+	mipshf-musl) _trp="mips-linux-muslhf";;
+	mipsel-musl) _trp="mipsel-linux-musl";;
+	mipselhf-musl) _trp="mipsel-linux-muslhf";;
+esac
+
 post_patch() {
 	if [ "$_lldb_enable" = "yes" ]; then
 		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
@@ -136,8 +165,7 @@ post_patch() {
 }
 
 pre_configure() {
-	local triplet
-
+	local triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
 	# Vastly reduce size of debugging symbols:
 	CFLAGS=${CFLAGS/ -g/ -g1}
 	CXXFLAGS=${CXXFLAGS/ -g/ -g1}
@@ -180,8 +208,6 @@ pre_configure() {
 		riscv64*) _arch="RISCV64";;
 	esac
 
-	triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
-
 	configure_args+=" -DLLVM_TARGET_ARCH=${_arch}"
 	configure_args+=" -DLLVM_HOST_TRIPLE=${triplet}"
 	configure_args+=" -DLLVM_DEFAULT_TARGET_TRIPLE=${triplet}"
@@ -251,7 +277,7 @@ clang-tools-extra_package() {
 		vmove "usr/lib/libclangQuery*"
 		vmove "usr/lib/libclangTidy*"
 		vmove "usr/share/clang/*tidy*"
-		vmove usr/share/doc/clang-tools
+		vmove usr/share/doc/LLVM/clang-tools
 		vmove usr/share/man/man1/extraclangtools.1
 		vmove usr/share/man/man1/diagtool.1
 	}
@@ -273,7 +299,7 @@ clang_package() {
 		vmove "usr/lib/libclang*.a"
 		vmove "usr/lib/libclang*.so"
 		vmove usr/share/clang
-		vmove usr/share/doc/clang
+		vmove usr/share/doc/LLVM/clang
 		vmove usr/share/man/man1/clang.1
 	}
 }
@@ -301,7 +327,7 @@ lld_package() {
 		vmove usr/bin/wasm-ld
 		vmove usr/bin/ld.lld*
 		vmove usr/bin/ld64.lld*
-		vmove usr/share/doc/lld
+		vmove usr/share/doc/LLVM/lld
 	}
 }
 
@@ -342,7 +368,7 @@ lldb-devel_package() {
 llvm-libunwind_package() {
 	short_desc+=" - libunwind"
 	pkg_install() {
-		vmove "usr/lib/libunwind.so.*"
+		vmove "usr/lib/${_trp}/libunwind.so.*"
 	}
 }
 
@@ -351,18 +377,17 @@ llvm-libunwind-devel_package() {
 	depends="llvm-libunwind>=${version}_${revision}"
 	conflicts="libunwind-devel>=0"
 	pkg_install() {
-		vmove usr/lib/libunwind.so
-		vmove usr/lib/libunwind.a
+		vmove usr/lib/${_trp}/libunwind.so
+		vmove usr/lib/${_trp}/libunwind.a
 		vmove "usr/include/*unwind*"
 		vmove usr/include/mach-o
-		vmove usr/share/doc/libunwind
 	}
 }
 
 libcxxabi_package() {
 	short_desc+=" - low level support for libc++"
 	pkg_install() {
-		vmove "usr/lib/libc++abi.so.*"
+		vmove "usr/lib/${_trp}/libc++abi.so.*"
 	}
 }
 
@@ -370,8 +395,8 @@ libcxxabi-devel_package() {
 	short_desc+=" - low level support for libc++ - development files"
 	depends="libcxxabi>=${version}_${revision}"
 	pkg_install() {
-		vmove usr/lib/libc++abi.so
-		vmove usr/lib/libc++abi.a
+		vmove usr/lib/${_trp}/libc++abi.so
+		vmove usr/lib/${_trp}/libc++abi.a
 		vmove "usr/include/*cxxabi*"
 	}
 }
@@ -379,7 +404,7 @@ libcxxabi-devel_package() {
 libcxx_package() {
 	short_desc+=" - C++ standard library"
 	pkg_install() {
-		vmove "usr/lib/libc++.so.*"
+		vmove "usr/lib/${_trp}/libc++.so.*"
 	}
 }
 
@@ -387,11 +412,10 @@ libcxx-devel_package() {
 	short_desc+=" - C++ standard library - development files"
 	depends="libcxx>=${version}_${revision}"
 	pkg_install() {
-		vmove usr/lib/libc++.so
-		vmove usr/lib/libc++.a
-		vmove usr/lib/libc++experimental.a
+		vmove usr/lib/${_trp}/libc++.so
+		vmove usr/lib/${_trp}/libc++.a
+		vmove usr/lib/${_trp}/libc++experimental.a
 		vmove usr/include/c++
-		vmove usr/share/doc/libcxx
 	}
 }
 
@@ -401,7 +425,6 @@ libomp_package() {
 		vmove usr/lib/libomp.so
 		vmove "usr/lib/libomptarget.rtl.*.so"
 		vmove usr/lib/libarcher.so
-		vmove "usr/lib/libomp*.so.*"
 	}
 }
 
@@ -413,8 +436,6 @@ libomp-devel_package() {
 		vmove "usr/lib/libarcher*"
 		vmove "usr/include/omp*.h"
 		vmove "usr/lib/clang/${version}/include/omp*.h"
-		vmove usr/share/man/man1/llvmopenmp.1
-		vmove usr/share/doc/openmp
 	}
 }
 

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (12 preceding siblings ...)
  2022-05-05 22:45 ` [PR PATCH] [Updated] Llvm14 prez
@ 2022-05-05 22:55 ` q66
  2022-05-05 23:08 ` Llvm14 prez
                   ` (55 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: q66 @ 2022-05-05 22:55 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 246 bytes --]

New comment by q66 on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1119113236

Comment:
all the stuff with libraries being installed under triplet is wrong, void does not use multiarch-style paths

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (13 preceding siblings ...)
  2022-05-05 22:55 ` Llvm14 q66
@ 2022-05-05 23:08 ` prez
  2022-05-05 23:09 ` Llvm14 prez
                   ` (54 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-05-05 23:08 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 205 bytes --]

New comment by prez on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1119127578

Comment:
The runtimes build seems to place them there. What do you propose?

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (14 preceding siblings ...)
  2022-05-05 23:08 ` Llvm14 prez
@ 2022-05-05 23:09 ` prez
  2022-05-05 23:16 ` Llvm14 prez
                   ` (53 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-05-05 23:09 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 248 bytes --]

New comment by prez on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1119127578

Comment:
The change to runtimes build (as opposed to enabled_projects) seems to place them there. What do you propose?

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (15 preceding siblings ...)
  2022-05-05 23:09 ` Llvm14 prez
@ 2022-05-05 23:16 ` prez
  2022-05-22 11:20 ` Llvm14 wael444
                   ` (52 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-05-05 23:16 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 305 bytes --]

New comment by prez on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1119127578

Comment:
The change to a runtimes/boostrapped build (as opposed to enabled_projects-style - our gcc is too old for this) seems to have placed them there.
What do you propose?

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (16 preceding siblings ...)
  2022-05-05 23:16 ` Llvm14 prez
@ 2022-05-22 11:20 ` wael444
  2022-05-22 16:52 ` Llvm14 motorto
                   ` (51 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: wael444 @ 2022-05-22 11:20 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 151 bytes --]

New comment by wael444 on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1133873781

Comment:
@motorto 

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (17 preceding siblings ...)
  2022-05-22 11:20 ` Llvm14 wael444
@ 2022-05-22 16:52 ` motorto
  2022-05-23  1:03 ` [PR PATCH] [Updated] Llvm14 prez
                   ` (50 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: motorto @ 2022-05-22 16:52 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 223 bytes --]

New comment by motorto on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1133933867

Comment:
I can definitely try to help here. @prez  What is missing currently in your pr ? 

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: [PR PATCH] [Updated] Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (18 preceding siblings ...)
  2022-05-22 16:52 ` Llvm14 motorto
@ 2022-05-23  1:03 ` prez
  2022-05-23  1:20 ` prez
                   ` (49 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-05-23  1:03 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 488 bytes --]

There is an updated pull request by prez against master on the void-packages repository

https://github.com/prez/void-packages llvm
https://github.com/void-linux/void-packages/pull/36962

Llvm14
Supersedes https://github.com/void-linux/void-packages/pull/36229, https://github.com/void-linux/void-packages/pull/34800 - thank you @motorto and @DBLouis.

Updated patches, ping @q66 .

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/36962.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-llvm-36962.patch --]
[-- Type: text/x-diff, Size: 540646 bytes --]

From db3b5c9ab542812207a6eb3a3768da28e926a6ce Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:15:06 +0200
Subject: [PATCH 01/27] New package: llvm14-14.0.3

---
 common/shlibs                                 |  16 +-
 srcpkgs/clang                                 |   2 +-
 srcpkgs/clang-analyzer                        |   2 +-
 srcpkgs/clang-tools-extra                     |   2 +-
 srcpkgs/libclang                              |   2 +-
 srcpkgs/libclang-cpp                          |   2 +-
 srcpkgs/libcxx                                |   2 +-
 srcpkgs/libcxx-devel                          |   2 +-
 srcpkgs/libcxxabi                             |   2 +-
 srcpkgs/libcxxabi-devel                       |   2 +-
 srcpkgs/libllvm14                             |   1 +
 srcpkgs/libomp                                |   2 +-
 srcpkgs/libomp-devel                          |   2 +-
 srcpkgs/lld                                   |   2 +-
 srcpkgs/lld-devel                             |   2 +-
 srcpkgs/lldb                                  |   2 +-
 srcpkgs/lldb-devel                            |   2 +-
 srcpkgs/llvm-libunwind                        |   2 +-
 srcpkgs/llvm-libunwind-devel                  |   2 +-
 .../patches/clang-002-add-musl-triples.patch  | 110 +++++
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 +
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ++
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 ++
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 +++
 srcpkgs/llvm14/patches/libcxx-musl.patch      |  26 ++
 srcpkgs/llvm14/patches/libcxx-ppc.patch       |  22 +
 .../llvm14/patches/libcxx-ssp-nonshared.patch |  11 +
 srcpkgs/llvm14/patches/libcxxabi-dl.patch     |  25 ++
 srcpkgs/llvm14/patches/lldb-musl.patch        |  31 ++
 srcpkgs/llvm14/patches/llvm-001-musl.patch    |  57 +++
 .../patches/llvm-002-musl-ppc64-elfv2.patch   |  30 ++
 .../patches/llvm-003-ppc-secureplt.patch      |  11 +
 .../patches/llvm-004-override-opt.patch       |  18 +
 .../llvm14/patches/llvm-005-ppc-bigpic.patch  |  36 ++
 .../patches/llvm-006-aarch64-mf_exec.patch    |  25 ++
 srcpkgs/llvm14/template                       | 424 ++++++++++++++++++
 srcpkgs/llvm14/update                         |   3 +
 37 files changed, 1018 insertions(+), 20 deletions(-)
 create mode 120000 srcpkgs/libllvm14
 create mode 100644 srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
 create mode 100644 srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
 create mode 100644 srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
 create mode 100644 srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-ppc.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxxabi-dl.patch
 create mode 100644 srcpkgs/llvm14/patches/lldb-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-001-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-004-override-opt.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
 create mode 100644 srcpkgs/llvm14/template
 create mode 100644 srcpkgs/llvm14/update

diff --git a/common/shlibs b/common/shlibs
index 058109664658..0ca5d7d5d6f9 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -973,11 +973,12 @@ libuchardet.so.0 uchardet-0.0.6_1
 libgtksourceviewmm-3.0.so.0 gtksourceviewmm-3.2.0_1
 libyajl.so.2 yajl-2.0.1_1
 libconfuse.so.2 confuse-3.2.1_1
-liblldb.so.12 lldb-12.0.0_1
-libclang.so.12 libclang-12.0.0_1
-libclang-cpp.so.12 libclang-cpp-12.0.0_1
+liblldb.so.14 lldb-14.0.3_1
+libclang.so.14 libclang-14.0.3_1
+libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
+libLLVM-14.so libllvm14-14.0.3_1
 libisofs.so.6 libisofs-0.6.24_1
 libmpack.so.0 libmpack-1.0.5_1
 libGeoIP.so.1 libgeoip-1.4.8_1
@@ -4170,3 +4171,12 @@ libThread.so root-6.24.06_1
 libTMVA.so root-6.24.06_1
 libMathCore.so root-6.24.06_1
 liblowdown.so lowdown-0.11.2_1
+libomp.so libomp-14.0.3_1
+libomptarget.rtl.amdgpu.so libomp-14.0.3_1
+libomptarget.rtl.cuda.so libomp-14.0.3_1
+libomptarget.rtl.x86_64.so libomp-14.0.3_1
+libarcher.so libomp-14.0.3_1
+libomptarget.so libomp-14.0.3_1
+liblldbIntelFeatures.so.14 lldb-14.0.3_1
+libLTO.so.14 llvm14-14.0.3_1
+libRemarks.so.14 llvm14-14.0.3_1
diff --git a/srcpkgs/clang b/srcpkgs/clang
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang
+++ b/srcpkgs/clang
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/clang-analyzer b/srcpkgs/clang-analyzer
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang-analyzer
+++ b/srcpkgs/clang-analyzer
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/clang-tools-extra b/srcpkgs/clang-tools-extra
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang-tools-extra
+++ b/srcpkgs/clang-tools-extra
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libclang b/srcpkgs/libclang
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libclang
+++ b/srcpkgs/libclang
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libclang-cpp b/srcpkgs/libclang-cpp
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libclang-cpp
+++ b/srcpkgs/libclang-cpp
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxx b/srcpkgs/libcxx
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxx
+++ b/srcpkgs/libcxx
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxx-devel b/srcpkgs/libcxx-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxx-devel
+++ b/srcpkgs/libcxx-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxxabi b/srcpkgs/libcxxabi
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxxabi
+++ b/srcpkgs/libcxxabi
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxxabi-devel b/srcpkgs/libcxxabi-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxxabi-devel
+++ b/srcpkgs/libcxxabi-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libllvm14 b/srcpkgs/libllvm14
new file mode 120000
index 000000000000..1d42ed7632a6
--- /dev/null
+++ b/srcpkgs/libllvm14
@@ -0,0 +1 @@
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libomp b/srcpkgs/libomp
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libomp
+++ b/srcpkgs/libomp
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libomp-devel b/srcpkgs/libomp-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libomp-devel
+++ b/srcpkgs/libomp-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lld b/srcpkgs/lld
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lld
+++ b/srcpkgs/lld
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lld-devel b/srcpkgs/lld-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lld-devel
+++ b/srcpkgs/lld-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lldb b/srcpkgs/lldb
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lldb
+++ b/srcpkgs/lldb
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lldb-devel b/srcpkgs/lldb-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lldb-devel
+++ b/srcpkgs/lldb-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm-libunwind b/srcpkgs/llvm-libunwind
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/llvm-libunwind
+++ b/srcpkgs/llvm-libunwind
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm-libunwind-devel b/srcpkgs/llvm-libunwind-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/llvm-libunwind-devel
+++ b/srcpkgs/llvm-libunwind-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
new file mode 100644
index 000000000000..7b640e102bed
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
@@ -0,0 +1,110 @@
+--- a/clang/lib/Driver/ToolChains/Gnu.cpp
++++ b/clang/lib/Driver/ToolChains/Gnu.cpp
+@@ -2083,7 +2083,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
+                                              "armv7hl-redhat-linux-gnueabi",
+                                              "armv6hl-suse-linux-gnueabi",
+-                                             "armv7hl-suse-linux-gnueabi"};
++                                             "armv7hl-suse-linux-gnueabi",
++                                             "armv7l-linux-gnueabihf"};
+   static const char *const ARMebLibDirs[] = {"/lib"};
+   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi"};
+   static const char *const ARMebHFTriples[] = {
+@@ -2151,8 +2152,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
+   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
+   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
+-                                             "powerpcle-unknown-linux-gnu",
+-                                             "powerpcle-linux-musl"};
++                                             "powerpcle-unknown-linux-gnu"};
+
+   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
+   static const char *const PPC64Triples[] = {
+@@ -2231,6 +2231,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+     return;
+   }
+
++  if (TargetTriple.isMusl()) {
++    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
++    static const char *const ARMHFMuslTriples[] = {
++        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
++    };
++    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
++    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
++    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
++    static const char *const MIPSMuslTriples[] = {
++        "mips-linux-musl", "mipsel-linux-musl",
++        "mipsel-linux-muslhf", "mips-linux-muslhf"
++    };
++    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
++    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
++    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
++    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
++
++    switch (TargetTriple.getArch()) {
++    case llvm::Triple::aarch64:
++      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      break;
++    case llvm::Triple::arm:
++      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
++      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
++        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
++      } else {
++        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
++      }
++      break;
++    case llvm::Triple::x86_64:
++      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      break;
++    case llvm::Triple::x86:
++      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      break;
++    case llvm::Triple::mips:
++      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
++      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
++      break;
++    case llvm::Triple::ppc:
++      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      break;
++    case llvm::Triple::ppcle:
++      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      break;
++    case llvm::Triple::ppc64:
++      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      break;
++    case llvm::Triple::ppc64le:
++      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      break;
++    default:
++      break;
++    }
++    TripleAliases.push_back(TargetTriple.str());
++    if (TargetTriple.str() != BiarchTriple.str())
++      BiarchTripleAliases.push_back(BiarchTriple.str());
++    return;
++  }
++
+   // Android targets should not use GNU/Linux tools or libraries.
+   if (TargetTriple.isAndroid()) {
+     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
new file mode 100644
index 000000000000..47128af79b7f
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
@@ -0,0 +1,13 @@
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -490,10 +490,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+     Loader = "ld.so.1";
+     break;
+   case llvm::Triple::ppc64:
+-    LibDir = "lib64";
+-    Loader =
+-        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
+-    break;
+   case llvm::Triple::ppc64le:
+     LibDir = "lib64";
+     Loader =
diff --git a/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
new file mode 100644
index 000000000000..21fc8003c5f1
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
@@ -0,0 +1,48 @@
+--- a/clang/lib/Basic/Targets/PPC.h
++++ b/clang/lib/Basic/Targets/PPC.h
+@@ -415,11 +415,10 @@ public:
+       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
+     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
+       DataLayout = "e-m:e-i64:64-n32:64";
+-      ABI = "elfv2";
+     } else {
+       DataLayout = "E-m:e-i64:64-n32:64";
+-      ABI = "elfv1";
+     }
++    ABI = "elfv2";
+ 
+     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
+       LongDoubleWidth = LongDoubleAlign = 64;
+--- a/clang/lib/CodeGen/TargetInfo.cpp
++++ b/clang/lib/CodeGen/TargetInfo.cpp
+@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
+       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
+ 
+     if (Triple.isOSBinFormatELF()) {
+-      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
+-      if (getTarget().getABI() == "elfv2")
+-        Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      if (getTarget().getABI() == "elfv1")
++        Kind = PPC64_SVR4_ABIInfo::ELFv1;
+       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
+ 
+       return SetCGInfo(
+--- a/clang/lib/Driver/ToolChains/Clang.cpp
++++ b/clang/lib/Driver/ToolChains/Clang.cpp
+@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
+   const llvm::Triple &T = getToolChain().getTriple();
+   if (T.isOSBinFormatELF()) {
+     switch (getToolChain().getArch()) {
+-    case llvm::Triple::ppc64: {
+-      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
+-          T.isOSOpenBSD() || T.isMusl())
+-        ABIName = "elfv2";
+-      else
+-        ABIName = "elfv1";
+-      break;
+-    }
++    case llvm::Triple::ppc64:
+     case llvm::Triple::ppc64le:
+       ABIName = "elfv2";
+       break;
diff --git a/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch b/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
new file mode 100644
index 000000000000..4135bfd4486a
--- /dev/null
+++ b/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
@@ -0,0 +1,35 @@
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
+@@ -74,6 +74,10 @@
+ #include <sys/utsname.h>
+ #endif
+
++#if SANITIZER_LINUX && defined(__powerpc__)
++#include <asm/ptrace.h>
++#endif
++
+ #if SANITIZER_LINUX && !SANITIZER_ANDROID
+ #include <sys/personality.h>
+ #endif
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
+@@ -92,7 +92,7 @@
+ # include <utime.h>
+ # include <sys/ptrace.h>
+ #    if defined(__mips64) || defined(__aarch64__) || defined(__arm__) || \
+-        defined(__hexagon__) || SANITIZER_RISCV64
++        defined(__hexagon__) || defined(__powerpc__) || SANITIZER_RISCV64
+ #      include <asm/ptrace.h>
+ #      ifdef __arm__
+ typedef struct user_fpregs elf_fpregset_t;
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
+@@ -31,7 +31,7 @@
+ #include <sys/types.h> // for pid_t
+ #include <sys/uio.h> // for iovec
+ #include <elf.h> // for NT_PRSTATUS
+-#if (defined(__aarch64__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
++#if (defined(__aarch64__) || defined(__powerpc__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
+ // GLIBC 2.20+ sys/user does not include asm/ptrace.h
+ # include <asm/ptrace.h>
+ #endif
diff --git a/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch b/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
new file mode 100644
index 000000000000..d0b61c80c897
--- /dev/null
+++ b/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
@@ -0,0 +1,62 @@
+--- a/compiler-rt/lib/xray/xray_powerpc64.inc
++++ b/compiler-rt/lib/xray/xray_powerpc64.inc
+@@ -12,7 +12,13 @@
+ 
+ #include <cstdint>
+ #include <mutex>
++#ifdef __GLIBC__
+ #include <sys/platform/ppc.h>
++#else
++#include <cctype>
++#include <cstring>
++#include <cstdlib>
++#endif
+ 
+ #include "xray_defs.h"
+ 
+@@ -20,13 +26,45 @@ namespace __xray {
+ 
+ ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
+   CPU = 0;
++#ifdef __GLIBC__
+   return __ppc_get_timebase();
++#else
++  return __builtin_ppc_get_timebase();
++#endif
+ }
+ 
+ inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
+   static std::mutex M;
+   std::lock_guard<std::mutex> Guard(M);
++#ifdef __GLIBC__
+   return __ppc_get_timebase_freq();
++#else
++  /* FIXME: a less dirty implementation? */
++  static uint64_t base;
++  if (!base) {
++    FILE *f = fopen("/proc/cpuinfo", "rb");
++    if (f) {
++      ssize_t nr;
++      /* virtually always big enough to hold the line */
++      char buf[512];
++      while (fgets(buf, sizeof(buf), f)) {
++        char *ret = strstr(buf, "timebase");
++        if (!ret) {
++          continue;
++        }
++        ret += sizeof("timebase") - 1;
++        ret = strchr(ret, ':');
++        if (!ret) {
++          continue;
++        }
++        base = strtoul(ret + 1, nullptr, 10);
++        break;
++      }
++      fclose(f);
++    }
++  }
++  return base;
++#endif
+ }
+ 
+ inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
diff --git a/srcpkgs/llvm14/patches/libcxx-musl.patch b/srcpkgs/llvm14/patches/libcxx-musl.patch
new file mode 100644
index 000000000000..bbd31ffc2cb1
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-musl.patch
@@ -0,0 +1,26 @@
+--- a/libcxx/include/locale
++++ b/libcxx/include/locale
+@@ -742,7 +742,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
+         typename remove_reference<decltype(errno)>::type __save_errno = errno;
+         errno = 0;
+         char *__p2;
++#if defined(__linux__) && !defined(__GLIBC__)
++        long long __ll = strtoll(__a, &__p2, __base);
++#else
+         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
++#endif
+         typename remove_reference<decltype(errno)>::type __current_errno = errno;
+         if (__current_errno == 0)
+             errno = __save_errno;
+@@ -782,7 +786,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
+         typename remove_reference<decltype(errno)>::type __save_errno = errno;
+         errno = 0;
+         char *__p2;
++#if defined(__linux__) && !defined(__GLIBC__)
++        unsigned long long __ll = strtoull(__a, &__p2, __base);
++#else
+         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
++#endif
+         typename remove_reference<decltype(errno)>::type __current_errno = errno;
+         if (__current_errno == 0)
+             errno = __save_errno;
diff --git a/srcpkgs/llvm14/patches/libcxx-ppc.patch b/srcpkgs/llvm14/patches/libcxx-ppc.patch
new file mode 100644
index 000000000000..7a92f8004e1c
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-ppc.patch
@@ -0,0 +1,22 @@
+This ensures `is_iec559` is defined correctly under all long double ABIs,
+including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__`
+is not defined on gcc.
+
+--- a/libcxx/include/limits
++++ b/libcxx/include/limits
+@@ -426,8 +426,14 @@ protected:
+     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
+     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
+ 
+-#if (defined(__ppc__) || defined(__ppc64__))
++#if defined(__powerpc__) || defined(__powerpc64__)
++#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__)
++    /* IEEE 754 quadruple or double precision */
++    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
++#else
++    /* 128-bit IBM double-double */
+     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
++#endif
+ #else
+     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
+ #endif
diff --git a/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch b/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
new file mode 100644
index 000000000000..70292beb2fcd
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
@@ -0,0 +1,11 @@
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -769,6 +769,8 @@ function(cxx_link_system_libraries target)
+     target_link_libraries(${target} PRIVATE atomic)
+   endif()
+ 
++#ssp  target_link_libraries(${target} PRIVATE ssp_nonshared)
++
+   if (MINGW)
+     target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
+   endif()
diff --git a/srcpkgs/llvm14/patches/libcxxabi-dl.patch b/srcpkgs/llvm14/patches/libcxxabi-dl.patch
new file mode 100644
index 000000000000..3a15f9db8c98
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxxabi-dl.patch
@@ -0,0 +1,25 @@
+Also link to -ldl to prevent undefined references.
+
+--- a/libcxxabi/src/CMakeLists.txt
++++ b/libcxxabi/src/CMakeLists.txt
+@@ -73,6 +73,7 @@
+   endif()
+ 
+   add_library_flags_if(LIBCXXABI_HAS_C_LIB c)
++  add_library_flags_if(LIBCXXABI_HAS_C_LIB dl)
+ endif()
+ 
+ if (LIBCXXABI_USE_LLVM_UNWINDER)
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -745,6 +745,10 @@
+     target_link_libraries(${target} PRIVATE m)
+   endif()
+ 
++  if (LIBCXX_HAS_C_LIB)
++    target_link_libraries(${target} PRIVATE dl)
++  endif()
++
+   if (LIBCXX_HAS_RT_LIB)
+     target_link_libraries(${target} PRIVATE rt)
+   endif()
diff --git a/srcpkgs/llvm14/patches/lldb-musl.patch b/srcpkgs/llvm14/patches/lldb-musl.patch
new file mode 100644
index 000000000000..601c0d138523
--- /dev/null
+++ b/srcpkgs/llvm14/patches/lldb-musl.patch
@@ -0,0 +1,31 @@
+--- a/lldb/source/Plugins/Process/Linux/Procfs.h
++++ b/lldb/source/Plugins/Process/Linux/Procfs.h
+@@ -10,21 +10,12 @@
+ // sys/procfs.h on Android/Linux for all supported architectures.
+ 
+ #include <sys/ptrace.h>
++#include <asm/ptrace.h>
+ 
+-#ifdef __ANDROID__
+-#if defined(__arm64__) || defined(__aarch64__)
+-typedef unsigned long elf_greg_t;
+-typedef elf_greg_t
+-    elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
+-typedef struct user_fpsimd_state elf_fpregset_t;
+-#ifndef NT_FPREGSET
+-#define NT_FPREGSET NT_PRFPREG
+-#endif // NT_FPREGSET
+-#elif defined(__mips__)
+-#ifndef NT_FPREGSET
+-#define NT_FPREGSET NT_PRFPREG
+-#endif // NT_FPREGSET
+-#endif
+-#else // __ANDROID__
++#if !defined(__GLIBC__) && defined(__powerpc__)
++#define pt_regs musl_pt_regs
++#include <sys/procfs.h>
++#undef pt_regs
++#else
+ #include <sys/procfs.h>
+-#endif // __ANDROID__
++#endif
diff --git a/srcpkgs/llvm14/patches/llvm-001-musl.patch b/srcpkgs/llvm14/patches/llvm-001-musl.patch
new file mode 100644
index 000000000000..f2a3f8d62813
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-001-musl.patch
@@ -0,0 +1,57 @@
+From faca3fbd15d0c3108493c3c54cd93138e049ac43 Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe@gmail.com>
+Date: Tue, 8 Sep 2015 22:03:02 +0200
+Subject: [PATCH 3/3] musl
+
+---
+ include/llvm/Analysis/TargetLibraryInfo.h | 9 +++++++++
+ lib/Support/DynamicLibrary.cpp            | 2 +-
+ lib/Support/Unix/Signals.inc              | 6 +++---
+ utils/unittest/googletest/src/gtest.cc    | 1 +
+ 5 files changed, 17 insertions(+), 6 deletions(-)
+
+diff --git a/include/llvm/Analysis/TargetLibraryInfo.h b/include/llvm/Analysis/TargetLibraryInfo.h
+index 34a8a1e3..1214ece5 100644
+--- a/llvm/include/llvm/Analysis/TargetLibraryInfo.h
++++ b/llvm/include/llvm/Analysis/TargetLibraryInfo.h
+@@ -18,6 +18,15 @@
+ #include "llvm/IR/PassManager.h"
+ #include "llvm/Pass.h"
+ 
++#undef fopen64
++#undef fseeko64
++#undef fstat64
++#undef fstatvfs64
++#undef ftello64
++#undef lstat64
++#undef stat64
++#undef tmpfile64
++
+ namespace llvm {
+ template <typename T> class ArrayRef;
+ class Triple;
+diff --git a/lib/Support/Unix/DynamicLibrary.inc b/lib/Support/Unix/DynamicLibrary.inc
+index a2a37996..2f86c470 100644
+--- a/llvm/lib/Support/Unix/DynamicLibrary.inc
++++ b/llvm/lib/Support/Unix/DynamicLibrary.inc
+@@ -102,7 +102,7 @@ static void *DoSearch(const char* SymbolName) {
+ 
+ // This macro returns the address of a well-known, explicit symbol
+ #define EXPLICIT_SYMBOL(SYM) \
+-   if (!strcmp(SymbolName, #SYM)) return &SYM
++   if (!strcmp(SymbolName, #SYM)) return (void *)&SYM
+ 
+ // Under glibc we have a weird situation. The stderr/out/in symbols are both
+ // macros and global variables because of standards requirements. So, we
+diff --git a/utils/unittest/googletest/src/gtest.cc b/utils/unittest/googletest/src/gtest.cc
+index d882ab2e..f1fb12d0 100644
+--- a/llvm/utils/unittest/googletest/src/gtest.cc
++++ b/llvm/utils/unittest/googletest/src/gtest.cc
+@@ -128,6 +128,7 @@
+ 
+ #if GTEST_CAN_STREAM_RESULTS_
+ # include <arpa/inet.h>  // NOLINT
++# include <sys/socket.h>  // NOLINT
+ # include <netdb.h>  // NOLINT
+ # include <sys/socket.h>  // NOLINT
+ # include <sys/types.h>  // NOLINT
diff --git a/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch b/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
new file mode 100644
index 000000000000..0071d964bd37
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
@@ -0,0 +1,30 @@
+This patches LLVM to use ELFv2 on ppc64 unconditionally unless overridden. We
+need this because unlike most distros we use ELFv2 for both glibc and musl
+on big endian ppc64.
+
+diff --git a/lib/Target/PowerPC/PPCTargetMachine.cpp b/lib/Target/PowerPC/PPCTargetMachine.cpp
+index 0634833e..b7cbc2e7 100644
+--- a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
++++ b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
+@@ -222,9 +222,8 @@ static PPCTargetMachine::PPCABI computeTargetABI(const Triple &TT,
+ 
+   switch (TT.getArch()) {
+   case Triple::ppc64le:
+-    return PPCTargetMachine::PPC_ABI_ELFv2;
+   case Triple::ppc64:
+-    return PPCTargetMachine::PPC_ABI_ELFv1;
++    return PPCTargetMachine::PPC_ABI_ELFv2;
+   default:
+     return PPCTargetMachine::PPC_ABI_UNKNOWN;
+   }
+diff --git a/test/CodeGen/PowerPC/ppc64-elf-abi.ll b/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+index 8b1cf6b5..296a2afa 100644
+--- a/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
++++ b/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+@@ -1,4 +1,5 @@
+-; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv1
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-musl < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv1 < %s | FileCheck %s -check-prefix=CHECK-ELFv1
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv2 < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
diff --git a/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch b/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
new file mode 100644
index 000000000000..b5d15974375d
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
@@ -0,0 +1,11 @@
+--- a/llvm/lib/Target/PowerPC/PPCSubtarget.cpp
++++ b/llvm/lib/Target/PowerPC/PPCSubtarget.cpp
+@@ -165,7 +165,7 @@ void PPCSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) {
+ 
+   if ((TargetTriple.isOSFreeBSD() && TargetTriple.getOSMajorVersion() >= 13) ||
+       TargetTriple.isOSNetBSD() || TargetTriple.isOSOpenBSD() ||
+-      TargetTriple.isMusl())
++      isTargetLinux())
+     SecurePlt = true;
+ 
+   if (HasSPE && IsPPC64)
diff --git a/srcpkgs/llvm14/patches/llvm-004-override-opt.patch b/srcpkgs/llvm14/patches/llvm-004-override-opt.patch
new file mode 100644
index 000000000000..51d0e4b31b32
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-004-override-opt.patch
@@ -0,0 +1,18 @@
+This allows us to override the optimization level as not all platforms can
+deal with -O3.
+
+--- a/llvm/CMakeLists.txt
++++ b/llvm/CMakeLists.txt
+@@ -918,6 +918,12 @@ if( MINGW AND NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" )
+   llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "-O2")
+ endif()
+ 
++set(VOID_CXX_OPT_FLAGS "" CACHE STRING "Optimization level to use")
++
++if (NOT VOID_CXX_OPT_FLAGS STREQUAL "")
++    llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "${VOID_CXX_OPT_FLAGS}")
++endif()
++
+ # Put this before tblgen. Else we have a circular dependence.
+ add_subdirectory(lib/Demangle)
+ add_subdirectory(lib/Support)
diff --git a/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch b/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
new file mode 100644
index 000000000000..d332687b9d92
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
@@ -0,0 +1,36 @@
+From f3dbdd49c06bfafc1d6138094cf42889c14d38b6 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Sun, 3 Nov 2019 10:57:27 -0600
+Subject: [PATCH] [LLVM][PowerPC] Assume BigPIC if no PIC level is specified
+
+---
+ llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp  | 2 +-
+ llvm/lib/Target/PowerPC/PPCMCInstLower.cpp | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/Target/PowerPC/PPCAsmPrinter.cpp b/lib/Target/PowerPC/PPCAsmPrinter.cpp
+index cce21f32..87ca5f9b 100644
+--- a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
++++ b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
+@@ -520,7 +520,7 @@ void PPCAsmPrinter::EmitTlsCall(const MachineInstr *MI,
+ 
+   // Add 32768 offset to the symbol so we follow up the latest GOT/PLT ABI.
+   if (Kind == MCSymbolRefExpr::VK_PLT && Subtarget->isSecurePlt() &&
+-      M->getPICLevel() == PICLevel::BigPIC)
++      M->getPICLevel() != PICLevel::SmallPIC)
+     TlsRef = MCBinaryExpr::createAdd(
+         TlsRef, MCConstantExpr::create(32768, OutContext), OutContext);
+   const MachineOperand &MO = MI->getOperand(2);
+diff --git a/lib/Target/PowerPC/PPCMCInstLower.cpp b/lib/Target/PowerPC/PPCMCInstLower.cpp
+index 5cc180d7..a5b02565 100644
+--- a/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
++++ b/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
+@@ -117,7 +117,7 @@ static MCOperand GetSymbolRef(const MachineOperand &MO, const MCSymbol *Symbol,
+   const MCExpr *Expr = MCSymbolRefExpr::create(Symbol, RefKind, Ctx);
+   // If -msecure-plt -fPIC, add 32768 to symbol.
+   if (Subtarget->isSecurePlt() && TM.isPositionIndependent() &&
+-      M->getPICLevel() == PICLevel::BigPIC &&
++      M->getPICLevel() != PICLevel::SmallPIC &&
+       MO.getTargetFlags() == PPCII::MO_PLT)
+     Expr =
+         MCBinaryExpr::createAdd(Expr, MCConstantExpr::create(32768, Ctx), Ctx);
diff --git a/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch b/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
new file mode 100644
index 000000000000..a00abd216665
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
@@ -0,0 +1,25 @@
+Fix failures in AllocationTests/MappedMemoryTest.* on aarch64:
+
+    Failing Tests (8):
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.AllocAndRelease/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.DuplicateNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.EnabledWrite/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.MultipleAllocAndRelease/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.SuccessiveNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.UnalignedNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.ZeroNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.ZeroSizeNear/3
+
+Upstream-Issue: https://bugs.llvm.org/show_bug.cgi?id=14278#c10
+
+--- a/llvm/lib/Support/Unix/Memory.inc
++++ b/llvm/lib/Support/Unix/Memory.inc
+@@ -58,7 +58,7 @@ static int getPosixProtectionFlags(unsigned Flags) {
+     return PROT_READ | PROT_WRITE | PROT_EXEC;
+   case llvm::sys::Memory::MF_EXEC:
+ #if (defined(__FreeBSD__) || defined(__POWERPC__) || defined (__ppc__) || \
+-     defined(_POWER) || defined(_ARCH_PPC))
++     defined(_POWER) || defined(_ARCH_PPC) || (defined(__linux__) && defined(__aarch64__)))
+     // On PowerPC, having an executable page that has no read permission
+     // can have unintended consequences.  The function InvalidateInstruction-
+     // Cache uses instructions dcbf and icbi, both of which are treated by
diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
new file mode 100644
index 000000000000..3e7e6ab2c00b
--- /dev/null
+++ b/srcpkgs/llvm14/template
@@ -0,0 +1,424 @@
+# Template file for 'llvm14'
+pkgname=llvm14
+version=14.0.3
+revision=1
+wrksrc="llvm-project-${version}.src"
+build_wrksrc=llvm
+build_style=cmake
+configure_args="
+ -DCMAKE_BUILD_TYPE=Release -Wno-dev
+ -DENABLE_LINKER_BUILD_ID=YES
+ -DLLDB_USE_SYSTEM_SIX=YES
+ -DLIBCXX_CXX_ABI=libcxxabi
+ -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
+ -DLIBCXXABI_USE_LLVM_UNWINDER=YES
+ -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
+ -DLIBOMP_ENABLE_SHARED=YES
+ -DLIBOMP_INSTALL_ALIASES=NO
+ -DLLVM_INCLUDE_DOCS=YES
+ -DLLVM_BUILD_DOCS=YES
+ -DLLVM_ENABLE_SPHINX=YES
+ -DSPHINX_WARNINGS_AS_ERRORS=NO
+ -DLLVM_INSTALL_UTILS=YES
+ -DLLVM_BUILD_LLVM_DYLIB=YES
+ -DLLVM_LINK_LLVM_DYLIB=YES
+ -DLLVM_ENABLE_RTTI=YES
+ -DLLVM_ENABLE_FFI=YES
+ -DLLVM_BINUTILS_INCDIR=/usr/include"
+hostmakedepends="perl python3 zlib-devel libffi-devel swig python3-Sphinx
+ python3-recommonmark python3-sphinx-automodapi"
+makedepends="python3-devel zlib-devel elfutils-devel libffi-devel libedit-devel
+ libxml2-devel binutils-devel libatomic-devel"
+depends="libllvm14>=${version}_${revision}"
+short_desc="Low Level Virtual Machine"
+maintainer="q66 <daniel@octaforge.org>"
+license="Apache-2.0"
+homepage="https://www.llvm.org"
+distfiles="https://github.com/llvm/llvm-project/releases/download/llvmorg-${version}/llvm-project-${version}.src.tar.xz"
+checksum=44d3e7a784d5cf805e72853bb03f218bd1058d448c03ca883dabbebc99204e0c
+lib32disabled=yes
+python_version=3
+
+if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+	configure_args+=" -DLIBCXX_HAS_MUSL_LIBC=YES"
+	makedepends+=" libexecinfo-devel"
+	depends+=" libexecinfo-devel"
+fi
+
+# "operand out of range" assembler failures
+case "$XBPS_TARGET_MACHINE" in
+	ppc64*) ;;
+	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
+esac
+
+_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
+
+_lldb_enable=yes
+_libomp_enable=no
+
+case "$XBPS_TARGET_MACHINE" in
+	ppc64le*) ;;
+	ppc*|i686*) _lldb_enable=no ;;
+esac
+
+case "$XBPS_TARGET_MACHINE" in
+	x86_64*|aarch64*|ppc64*) _libomp_enable=yes;;
+esac
+
+subpackages="clang-tools-extra"
+
+# must go before clang
+if [ "$_libomp_enable" = "yes" ]; then
+	_enabled_projects+=";openmp"
+	subpackages+=" libomp libomp-devel"
+	# because of cmake nonsense referencing libomptarget.so.*
+	depends+=" libomp>=${version}_${revision}"
+fi
+
+subpackages+=" clang clang-analyzer libclang libclang-cpp
+ llvm-libunwind llvm-libunwind-devel libcxx libcxx-devel
+ libcxxabi libcxxabi-devel libllvm14"
+
+if [ "$_lldb_enable" = "yes" ]; then
+	# XXX fails to cross compile due to python
+	_enabled_projects+=";lldb"
+	subpackages+=" lldb lldb-devel"
+fi
+
+subpackages+=" lld lld-devel"
+
+configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+
+post_patch() {
+	if [ "$_lldb_enable" = "yes" ]; then
+		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+			vsed -i 's|__ptrace_request|int|g' \
+				${wrksrc}/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
+		fi
+		# disable docs for lldb as they fail to generate
+		vsed -i '/add_subdirectory(docs)/d' \
+			${wrksrc}/lldb/CMakeLists.txt
+	fi
+
+	# update config.guess for better platform detection
+	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
+		${wrksrc}/llvm/cmake
+
+	# fix linker failures on some archs
+	vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
+		${wrksrc}/libcxxabi/cmake/config-ix.cmake
+	vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
+		${wrksrc}/libcxxabi/cmake/config-ix.cmake
+
+	# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*) ;;
+		ppc*-musl|i686-musl|mips*-musl)
+			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
+				${wrksrc}/libunwind/src/CMakeLists.txt
+			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
+				${wrksrc}/libcxxabi/src/CMakeLists.txt
+			vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
+			;;
+	esac
+
+	case "$XBPS_TARGET_MACHINE" in
+		x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
+			vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
+				${wrksrc}/compiler-rt/CMakeLists.txt
+			;;
+		arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
+			vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
+				${wrksrc}/compiler-rt/cmake/config-ix.cmake
+			;;
+	esac
+}
+
+pre_configure() {
+	local triplet
+
+	# Vastly reduce size of debugging symbols:
+	CFLAGS=${CFLAGS/ -g/ -g1}
+	CXXFLAGS=${CXXFLAGS/ -g/ -g1}
+
+	# since gcc9, the build likes to blow up for ppc32 apparently because
+	# of clang being too large for a 24-bit relative call to the PLT, so
+	# optimize for size instead
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*) ;;
+		mips*-musl|ppc*) configure_args+=" -DVOID_CXX_OPT_FLAGS=-Os" ;;
+	esac
+
+	if [ "$CROSS_BUILD" ]; then
+		msg_normal "Building host tblgen\n"
+		mkdir -p build/HOST
+		cd build/HOST
+		CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
+			CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
+			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
+			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
+		make ${makejobs} -C utils/TableGen
+		make ${makejobs} -C tools/clang/utils/TableGen
+		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
+		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
+		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
+		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
+		cd ../..
+	fi
+
+	case "$XBPS_TARGET_MACHINE" in
+		i686*) _arch="X86";;
+		x86_64*) _arch="X86";;
+		armv5*) _arch="Armv5te";;
+		armv6*) _arch="Armv6";;
+		armv7*) _arch="Armv7";;
+		aarch64*) _arch="AArch64";;
+		mips*) _arch="Mips";;
+		ppc*) _arch="PowerPC";;
+		riscv64*) _arch="RISCV64";;
+	esac
+
+	triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
+
+	configure_args+=" -DLLVM_TARGET_ARCH=${_arch}"
+	configure_args+=" -DLLVM_HOST_TRIPLE=${triplet}"
+	configure_args+=" -DLLVM_DEFAULT_TARGET_TRIPLE=${triplet}"
+}
+
+do_install() {
+	cd build
+	cmake -DCMAKE_INSTALL_PREFIX=${DESTDIR}/usr -P cmake_install.cmake
+
+	# Required for multilib.
+	if [ "$XBPS_TARGET_MACHINE" = "x86_64" ]; then
+		for _header in llvm-config; do
+			mv ${DESTDIR}/usr/include/llvm/Config/${_header}{,-64}.h
+			vinstall ${FILESDIR}/llvm-Config-${_header}.h 644 \
+				usr/include/llvm/Config ${_header}.h
+		done
+	fi
+
+	# Remove llvm-config-host in cross builds.
+	if [ "$CROSS_BUILD" ]; then
+		rm -f ${DESTDIR}/usr/bin/llvm-config-host
+	fi
+
+	# Install libcxxabi headers
+	vinstall ${wrksrc}/libcxxabi/include/__cxxabi_config.h 644 usr/include
+	vinstall ${wrksrc}/libcxxabi/include/cxxabi.h 644 usr/include
+
+	# Install libunwind headers
+	vinstall ${wrksrc}/libunwind/include/__libunwind_config.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/libunwind.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/unwind.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/mach-o/compact_unwind_encoding.h \
+		644 usr/include/mach-o
+}
+
+clang-analyzer_package() {
+	pycompile_dirs="usr/share/scan-view"
+	depends="clang-${version}_${revision} python3 perl"
+	short_desc+=" - A source code analysis framework"
+	homepage="https://clang-analyzer.llvm.org/"
+	pkg_install() {
+		vmove usr/share/man/man1/scan-build.1
+		vmove "/usr/bin/scan-*"
+		vmove "/usr/share/scan-*"
+		vmove "/usr/libexec/*analyzer"
+	}
+}
+
+clang-tools-extra_package() {
+	lib32disabled=yes
+	depends="clang-${version}_${revision} python3"
+	short_desc+=" - Extra Clang tools"
+	homepage="https://clang.llvm.org/extra/"
+	pkg_install() {
+		vmove usr/include/clang-tidy
+		vmove usr/bin/clang-apply-replacements
+		vmove usr/bin/clang-query
+		vmove usr/bin/clang-rename
+		vmove usr/bin/clang-tidy
+		vmove usr/bin/diagtool
+		vmove usr/bin/find-all-symbols
+		vmove usr/bin/hmaptool
+		vmove usr/bin/modularize
+		vmove usr/bin/pp-trace
+		vmove usr/bin/sancov
+		vmove "usr/lib/libclangApplyReplacements*"
+		vmove "usr/lib/libclangQuery*"
+		vmove "usr/lib/libclangTidy*"
+		vmove "usr/share/clang/*tidy*"
+		vmove usr/share/doc/clang-tools
+		vmove usr/share/man/man1/extraclangtools.1
+		vmove usr/share/man/man1/diagtool.1
+	}
+}
+
+clang_package() {
+	lib32disabled=yes
+	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
+	 libclang-${version}_${revision}"
+	short_desc+=" - C language family frontend"
+	homepage="https://clang.llvm.org/"
+	pkg_install() {
+		vmove usr/include/clang
+		vmove usr/include/clang-c
+		vmove "usr/bin/*clang*"
+		vmove usr/bin/c-index-test
+		vmove usr/lib/clang
+		vmove usr/lib/cmake/clang
+		vmove "usr/lib/libclang*.a"
+		vmove "usr/lib/libclang*.so"
+		vmove usr/share/clang
+		vmove usr/share/doc/clang
+		vmove usr/share/man/man1/clang.1
+	}
+}
+
+libclang_package() {
+	short_desc+=" - C frontend runtime library"
+	pkg_install() {
+		vmove "usr/lib/libclang.so.*"
+	}
+}
+
+libclang-cpp_package() {
+	short_desc+=" - C frontend runtime library (C++ interface)"
+	pkg_install() {
+		vmove "usr/lib/libclang-cpp.so.*"
+	}
+}
+
+lld_package() {
+	lib32disabled=yes
+	short_desc+=" - linker"
+	homepage="https://lld.llvm.org"
+	pkg_install() {
+		vmove usr/bin/lld*
+		vmove usr/bin/wasm-ld
+		vmove usr/bin/ld.lld*
+		vmove usr/bin/ld64.lld*
+		vmove usr/share/doc/lld
+	}
+}
+
+lld-devel_package() {
+	lib32disabled=yes
+	short_desc+=" - linker - development files"
+	homepage="https://lld.llvm.org"
+	depends="lld>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include/lld
+		vmove usr/lib/cmake/lld
+		vmove "usr/lib/liblld*a"
+	}
+}
+
+lldb_package() {
+	lib32disabled=yes
+	depends+=" python3-six"
+	short_desc+=" - LLDB debugger"
+	homepage="https://lldb.llvm.org/"
+	pkg_install() {
+		vmove usr/bin/*lldb*
+		vmove usr/lib/liblldb*so.*
+		vmove /usr/lib/python*
+	}
+}
+
+lldb-devel_package() {
+	lib32disabled=yes
+	depends="lldb>=${version}_${revision}"
+	short_desc+=" - LLDB debugger - development files"
+	pkg_install() {
+		vmove usr/include/lldb
+		vmove "usr/lib/liblldb*.so"
+	}
+}
+
+llvm-libunwind_package() {
+	short_desc+=" - libunwind"
+	pkg_install() {
+		vmove "usr/lib/libunwind.so.*"
+	}
+}
+
+llvm-libunwind-devel_package() {
+	short_desc+=" - libunwind - development files"
+	depends="llvm-libunwind>=${version}_${revision}"
+	conflicts="libunwind-devel>=0"
+	pkg_install() {
+		vmove usr/lib/libunwind.so
+		vmove usr/lib/libunwind.a
+		vmove "usr/include/*unwind*"
+		vmove usr/include/mach-o
+		vmove usr/share/doc/libunwind
+	}
+}
+
+libcxxabi_package() {
+	short_desc+=" - low level support for libc++"
+	pkg_install() {
+		vmove "usr/lib/libc++abi.so.*"
+	}
+}
+
+libcxxabi-devel_package() {
+	short_desc+=" - low level support for libc++ - development files"
+	depends="libcxxabi>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/lib/libc++abi.so
+		vmove usr/lib/libc++abi.a
+		vmove "usr/include/*cxxabi*"
+	}
+}
+
+libcxx_package() {
+	short_desc+=" - C++ standard library"
+	pkg_install() {
+		vmove "usr/lib/libc++.so.*"
+	}
+}
+
+libcxx-devel_package() {
+	short_desc+=" - C++ standard library - development files"
+	depends="libcxx>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/lib/libc++.so
+		vmove usr/lib/libc++.a
+		vmove usr/lib/libc++experimental.a
+		vmove usr/include/c++
+		vmove usr/share/doc/libcxx
+	}
+}
+
+libomp_package() {
+	short_desc+=" - Clang OpenMP support library"
+	pkg_install() {
+		vmove usr/lib/libomp.so
+		vmove "usr/lib/libomptarget.rtl.*.so"
+		vmove usr/lib/libarcher.so
+		vmove "usr/lib/libomp*.so.*"
+	}
+}
+
+libomp-devel_package() {
+	short_desc+=" - Clang OpenMP support library - development files"
+	depends="libomp>=${version}_${revision}"
+	pkg_install() {
+		vmove "usr/lib/libomp*.so"
+		vmove "usr/lib/libarcher*"
+		vmove "usr/include/omp*.h"
+		vmove "usr/lib/clang/${version}/include/omp*.h"
+		vmove usr/share/man/man1/llvmopenmp.1
+		vmove usr/share/doc/openmp
+	}
+}
+
+libllvm14_package() {
+	short_desc+=" - runtime library"
+	pkg_install() {
+		vmove "usr/lib/libLLVM-*.so*"
+	}
+}
diff --git a/srcpkgs/llvm14/update b/srcpkgs/llvm14/update
new file mode 100644
index 000000000000..e95cf26b3586
--- /dev/null
+++ b/srcpkgs/llvm14/update
@@ -0,0 +1,3 @@
+site="https://github.com/llvm/llvm-project/releases"
+pattern="llvmorg-\K(\d+.){2}\d+(-rc\d+)?"
+ignore="*-rc*"

From b369d475dbffa9297b1f0744a8d203357ac2bba0 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:16:07 +0200
Subject: [PATCH 02/27] llvm: update to 14.0.3.

---
 srcpkgs/llvm/template | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/llvm/template b/srcpkgs/llvm/template
index a92db6f94f9f..d226c61c734e 100644
--- a/srcpkgs/llvm/template
+++ b/srcpkgs/llvm/template
@@ -1,10 +1,10 @@
 # Template file for 'llvm'
 pkgname=llvm
-version=12.0.0
+version=14.0.3
 revision=1
 build_style=meta
-depends="llvm12"
-replaces="llvm11>=0 llvm10>=0 llvm9>=0 llvm8>=0 llvm7>=0 llvm6.0>=0 llvm3.9>=0"
+depends="llvm14"
+replaces="llvm13>=0 llvm12>=0 llvm11>=0 llvm10>=0 llvm9>=0 llvm8>=0 llvm7>=0 llvm6.0>=0 llvm3.9>=0"
 short_desc="LLVM meta package"
 maintainer="Enno Boland <gottox@voidlinux.org>"
 license="Public Domain"

From fa2829d7ab165c2ba96f717db287b725ff7273d3 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:36:32 +0200
Subject: [PATCH 03/27] llvm12: drop non-llvm components

---
 ...clang-001-fix-unwind-chain-inclusion.patch |  44 ---
 .../patches/clang-002-add-musl-triples.patch  | 110 -------
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 -
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ---
 .../compiler-rt-aarch64-ucontext.patch        |  11 -
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 --
 .../llvm12/patches/compiler-rt-size_t.patch   |  10 -
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 ----
 srcpkgs/llvm12/patches/libcxx-musl.patch      |  26 --
 srcpkgs/llvm12/patches/libcxx-ppc.patch       |  22 --
 .../llvm12/patches/libcxx-ssp-nonshared.patch |  11 -
 srcpkgs/llvm12/patches/libcxxabi-dl.patch     |  25 --
 srcpkgs/llvm12/patches/libunwind-ppc32.patch  |  63 ----
 srcpkgs/llvm12/patches/lldb-musl.patch        |  31 --
 .../llvm12/patches/ppc32-compiler-rt.patch    |  21 --
 srcpkgs/llvm12/template                       | 301 +-----------------
 16 files changed, 1 insertion(+), 832 deletions(-)
 delete mode 100644 srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-size_t.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-ppc.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxxabi-dl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libunwind-ppc32.patch
 delete mode 100644 srcpkgs/llvm12/patches/lldb-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/ppc32-compiler-rt.patch

diff --git a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
deleted file mode 100644
index e4eaa7783e7a..000000000000
--- a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 352974169f0d2b5da3d5321f588f5e3b5941330e Mon Sep 17 00:00:00 2001
-From: Andrea Brancaleoni <miwaxe@gmail.com>
-Date: Tue, 8 Sep 2015 22:14:57 +0200
-Subject: [PATCH 2/7] fix unwind chain inclusion
-
----
- lib/Headers/unwind.h | 9 +++++----
- 1 file changed, 5 insertions(+), 4 deletions(-)
-
-diff --git a/lib/Headers/unwind.h b/lib/Headers/unwind.h
-index 303d792..44e10cc 100644
---- a/clang/lib/Headers/unwind.h
-+++ b/clang/lib/Headers/unwind.h
-@@ -9,9 +9,6 @@
- 
- /* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/
- 
--#ifndef __CLANG_UNWIND_H
--#define __CLANG_UNWIND_H
--
- #if defined(__APPLE__) && __has_include_next(<unwind.h>)
- /* Darwin (from 11.x on) provide an unwind.h. If that's available,
-  * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE,
-@@ -39,6 +36,9 @@
- # endif
- #else
- 
-+#ifndef __CLANG_UNWIND_H
-+#define __CLANG_UNWIND_H
-+
- #include <stdint.h>
- 
- #ifdef __cplusplus
-@@ -322,6 +322,7 @@ _Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *);
- }
- #endif
- 
-+#endif /* __CLANG_UNWIND_H */
-+
- #endif
- 
--#endif /* __CLANG_UNWIND_H */
--- 
-2.5.1
diff --git a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
deleted file mode 100644
index 25688d40dbc2..000000000000
--- a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
+++ /dev/null
@@ -1,110 +0,0 @@
---- a/clang/lib/Driver/ToolChains/Gnu.cpp
-+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
-@@ -2086,7 +2086,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
-                                              "armv7hl-redhat-linux-gnueabi",
-                                              "armv6hl-suse-linux-gnueabi",
--                                             "armv7hl-suse-linux-gnueabi"};
-+                                             "armv7hl-suse-linux-gnueabi",
-+                                             "armv7l-linux-gnueabihf"};
-   static const char *const ARMebLibDirs[] = {"/lib"};
-   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
-                                              "armeb-linux-androideabi"};
-@@ -2153,8 +2154,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
-   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
-   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
--                                             "powerpcle-unknown-linux-gnu",
--                                             "powerpcle-linux-musl"};
-+                                             "powerpcle-unknown-linux-gnu"};
- 
-   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
-   static const char *const PPC64Triples[] = {
-@@ -2235,6 +2235,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-     return;
-   }
- 
-+  if (TargetTriple.isMusl()) {
-+    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
-+    static const char *const ARMHFMuslTriples[] = {
-+        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
-+    };
-+    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
-+    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
-+    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
-+    static const char *const MIPSMuslTriples[] = {
-+        "mips-linux-musl", "mipsel-linux-musl",
-+        "mipsel-linux-muslhf", "mips-linux-muslhf"
-+    };
-+    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
-+    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
-+    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
-+    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
-+
-+    switch (TargetTriple.getArch()) {
-+    case llvm::Triple::aarch64:
-+      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
-+      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
-+      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
-+      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
-+      break;
-+    case llvm::Triple::arm:
-+      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
-+      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
-+        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
-+      } else {
-+        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
-+      }
-+      break;
-+    case llvm::Triple::x86_64:
-+      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-+      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
-+      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-+      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
-+      break;
-+    case llvm::Triple::x86:
-+      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-+      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
-+      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-+      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
-+      break;
-+    case llvm::Triple::mips:
-+      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
-+      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
-+      break;
-+    case llvm::Triple::ppc:
-+      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
-+      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
-+      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
-+      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
-+      break;
-+    case llvm::Triple::ppcle:
-+      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
-+      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
-+      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
-+      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
-+      break;
-+    case llvm::Triple::ppc64:
-+      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
-+      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
-+      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
-+      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
-+      break;
-+    case llvm::Triple::ppc64le:
-+      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
-+      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
-+      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
-+      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
-+      break;
-+    default:
-+      break;
-+    }
-+    TripleAliases.push_back(TargetTriple.str());
-+    if (TargetTriple.str() != BiarchTriple.str())
-+      BiarchTripleAliases.push_back(BiarchTriple.str());
-+    return;
-+  }
-+
-   // Android targets should not use GNU/Linux tools or libraries.
-   if (TargetTriple.isAndroid()) {
-     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
deleted file mode 100644
index 4ad6412d1e6c..000000000000
--- a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/clang/lib/Driver/ToolChains/Linux.cpp
-+++ b/clang/lib/Driver/ToolChains/Linux.cpp
-@@ -504,10 +504,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
-     Loader = "ld.so.1";
-     break;
-   case llvm::Triple::ppc64:
--    LibDir = "lib64";
--    Loader =
--        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
--    break;
-   case llvm::Triple::ppc64le:
-     LibDir = "lib64";
-     Loader =
diff --git a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
deleted file mode 100644
index 21fc8003c5f1..000000000000
--- a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
+++ /dev/null
@@ -1,48 +0,0 @@
---- a/clang/lib/Basic/Targets/PPC.h
-+++ b/clang/lib/Basic/Targets/PPC.h
-@@ -415,11 +415,10 @@ public:
-       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
-     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
-       DataLayout = "e-m:e-i64:64-n32:64";
--      ABI = "elfv2";
-     } else {
-       DataLayout = "E-m:e-i64:64-n32:64";
--      ABI = "elfv1";
-     }
-+    ABI = "elfv2";
- 
-     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
-       LongDoubleWidth = LongDoubleAlign = 64;
---- a/clang/lib/CodeGen/TargetInfo.cpp
-+++ b/clang/lib/CodeGen/TargetInfo.cpp
-@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
-       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
- 
-     if (Triple.isOSBinFormatELF()) {
--      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
--      if (getTarget().getABI() == "elfv2")
--        Kind = PPC64_SVR4_ABIInfo::ELFv2;
-+      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
-+      if (getTarget().getABI() == "elfv1")
-+        Kind = PPC64_SVR4_ABIInfo::ELFv1;
-       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
- 
-       return SetCGInfo(
---- a/clang/lib/Driver/ToolChains/Clang.cpp
-+++ b/clang/lib/Driver/ToolChains/Clang.cpp
-@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
-   const llvm::Triple &T = getToolChain().getTriple();
-   if (T.isOSBinFormatELF()) {
-     switch (getToolChain().getArch()) {
--    case llvm::Triple::ppc64: {
--      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
--          T.isOSOpenBSD() || T.isMusl())
--        ABIName = "elfv2";
--      else
--        ABIName = "elfv1";
--      break;
--    }
-+    case llvm::Triple::ppc64:
-     case llvm::Triple::ppc64le:
-       ABIName = "elfv2";
-       break;
diff --git a/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch b/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
deleted file mode 100644
index 893c059d7b8d..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp.orig
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-@@ -1799,7 +1799,7 @@
- 
- static bool Aarch64GetESR(ucontext_t *ucontext, u64 *esr) {
-   static const u32 kEsrMagic = 0x45535201;
--  u8 *aux = ucontext->uc_mcontext.__reserved;
-+  u8 *aux = reinterpret_cast<u8 *>(ucontext->uc_mcontext.__reserved);
-   while (true) {
-     _aarch64_ctx *ctx = (_aarch64_ctx *)aux;
-     if (ctx->size == 0) break;
diff --git a/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch b/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
deleted file mode 100644
index 35f16d24f340..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
+++ /dev/null
@@ -1,35 +0,0 @@
---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-@@ -74,6 +74,10 @@
- #include <sys/utsname.h>
- #endif
- 
-+#if SANITIZER_LINUX && defined(__powerpc__)
-+#include <asm/ptrace.h>
-+#endif
-+
- #if SANITIZER_LINUX && !SANITIZER_ANDROID
- #include <sys/personality.h>
- #endif
---- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
-@@ -92,7 +92,7 @@
- # include <utime.h>
- # include <sys/ptrace.h>
- #if defined(__mips64) || defined(__aarch64__) || defined(__arm__) || \
--    SANITIZER_RISCV64
-+    defined(__powerpc__) || SANITIZER_RISCV64
- #  include <asm/ptrace.h>
- #  ifdef __arm__
- typedef struct user_fpregs elf_fpregset_t;
---- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
-@@ -31,7 +31,7 @@
- #include <sys/types.h> // for pid_t
- #include <sys/uio.h> // for iovec
- #include <elf.h> // for NT_PRSTATUS
--#if (defined(__aarch64__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
-+#if (defined(__aarch64__) || defined(__powerpc__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
- // GLIBC 2.20+ sys/user does not include asm/ptrace.h
- # include <asm/ptrace.h>
- #endif
diff --git a/srcpkgs/llvm12/patches/compiler-rt-size_t.patch b/srcpkgs/llvm12/patches/compiler-rt-size_t.patch
deleted file mode 100644
index 2c63063a5e9e..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-size_t.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/compiler-rt/lib/fuzzer/FuzzerInterceptors.cpp.orig
-+++ b/compiler-rt/lib/fuzzer/FuzzerInterceptors.cpp
-@@ -25,6 +25,7 @@
-   }
- 
- #include <cassert>
-+#include <cstddef>
- #include <cstdint>
- #include <dlfcn.h> // for dlsym()
- 
diff --git a/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch b/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
deleted file mode 100644
index d0b61c80c897..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
+++ /dev/null
@@ -1,62 +0,0 @@
---- a/compiler-rt/lib/xray/xray_powerpc64.inc
-+++ b/compiler-rt/lib/xray/xray_powerpc64.inc
-@@ -12,7 +12,13 @@
- 
- #include <cstdint>
- #include <mutex>
-+#ifdef __GLIBC__
- #include <sys/platform/ppc.h>
-+#else
-+#include <cctype>
-+#include <cstring>
-+#include <cstdlib>
-+#endif
- 
- #include "xray_defs.h"
- 
-@@ -20,13 +26,45 @@ namespace __xray {
- 
- ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
-   CPU = 0;
-+#ifdef __GLIBC__
-   return __ppc_get_timebase();
-+#else
-+  return __builtin_ppc_get_timebase();
-+#endif
- }
- 
- inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
-   static std::mutex M;
-   std::lock_guard<std::mutex> Guard(M);
-+#ifdef __GLIBC__
-   return __ppc_get_timebase_freq();
-+#else
-+  /* FIXME: a less dirty implementation? */
-+  static uint64_t base;
-+  if (!base) {
-+    FILE *f = fopen("/proc/cpuinfo", "rb");
-+    if (f) {
-+      ssize_t nr;
-+      /* virtually always big enough to hold the line */
-+      char buf[512];
-+      while (fgets(buf, sizeof(buf), f)) {
-+        char *ret = strstr(buf, "timebase");
-+        if (!ret) {
-+          continue;
-+        }
-+        ret += sizeof("timebase") - 1;
-+        ret = strchr(ret, ':');
-+        if (!ret) {
-+          continue;
-+        }
-+        base = strtoul(ret + 1, nullptr, 10);
-+        break;
-+      }
-+      fclose(f);
-+    }
-+  }
-+  return base;
-+#endif
- }
- 
- inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
diff --git a/srcpkgs/llvm12/patches/libcxx-musl.patch b/srcpkgs/llvm12/patches/libcxx-musl.patch
deleted file mode 100644
index bbd31ffc2cb1..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-musl.patch
+++ /dev/null
@@ -1,26 +0,0 @@
---- a/libcxx/include/locale
-+++ b/libcxx/include/locale
-@@ -742,7 +742,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
-         typename remove_reference<decltype(errno)>::type __save_errno = errno;
-         errno = 0;
-         char *__p2;
-+#if defined(__linux__) && !defined(__GLIBC__)
-+        long long __ll = strtoll(__a, &__p2, __base);
-+#else
-         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
-+#endif
-         typename remove_reference<decltype(errno)>::type __current_errno = errno;
-         if (__current_errno == 0)
-             errno = __save_errno;
-@@ -782,7 +786,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
-         typename remove_reference<decltype(errno)>::type __save_errno = errno;
-         errno = 0;
-         char *__p2;
-+#if defined(__linux__) && !defined(__GLIBC__)
-+        unsigned long long __ll = strtoull(__a, &__p2, __base);
-+#else
-         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
-+#endif
-         typename remove_reference<decltype(errno)>::type __current_errno = errno;
-         if (__current_errno == 0)
-             errno = __save_errno;
diff --git a/srcpkgs/llvm12/patches/libcxx-ppc.patch b/srcpkgs/llvm12/patches/libcxx-ppc.patch
deleted file mode 100644
index 7a92f8004e1c..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-ppc.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-This ensures `is_iec559` is defined correctly under all long double ABIs,
-including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__`
-is not defined on gcc.
-
---- a/libcxx/include/limits
-+++ b/libcxx/include/limits
-@@ -426,8 +426,14 @@ protected:
-     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
-     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
- 
--#if (defined(__ppc__) || defined(__ppc64__))
-+#if defined(__powerpc__) || defined(__powerpc64__)
-+#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__)
-+    /* IEEE 754 quadruple or double precision */
-+    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
-+#else
-+    /* 128-bit IBM double-double */
-     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
-+#endif
- #else
-     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
- #endif
diff --git a/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch b/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
deleted file mode 100644
index 70292beb2fcd..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/libcxx/CMakeLists.txt
-+++ b/libcxx/CMakeLists.txt
-@@ -769,6 +769,8 @@ function(cxx_link_system_libraries target)
-     target_link_libraries(${target} PRIVATE atomic)
-   endif()
- 
-+#ssp  target_link_libraries(${target} PRIVATE ssp_nonshared)
-+
-   if (MINGW)
-     target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
-   endif()
diff --git a/srcpkgs/llvm12/patches/libcxxabi-dl.patch b/srcpkgs/llvm12/patches/libcxxabi-dl.patch
deleted file mode 100644
index 3a15f9db8c98..000000000000
--- a/srcpkgs/llvm12/patches/libcxxabi-dl.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-Also link to -ldl to prevent undefined references.
-
---- a/libcxxabi/src/CMakeLists.txt
-+++ b/libcxxabi/src/CMakeLists.txt
-@@ -73,6 +73,7 @@
-   endif()
- 
-   add_library_flags_if(LIBCXXABI_HAS_C_LIB c)
-+  add_library_flags_if(LIBCXXABI_HAS_C_LIB dl)
- endif()
- 
- if (LIBCXXABI_USE_LLVM_UNWINDER)
---- a/libcxx/CMakeLists.txt
-+++ b/libcxx/CMakeLists.txt
-@@ -745,6 +745,10 @@
-     target_link_libraries(${target} PRIVATE m)
-   endif()
- 
-+  if (LIBCXX_HAS_C_LIB)
-+    target_link_libraries(${target} PRIVATE dl)
-+  endif()
-+
-   if (LIBCXX_HAS_RT_LIB)
-     target_link_libraries(${target} PRIVATE rt)
-   endif()
diff --git a/srcpkgs/llvm12/patches/libunwind-ppc32.patch b/srcpkgs/llvm12/patches/libunwind-ppc32.patch
deleted file mode 100644
index 74aa7576ecf9..000000000000
--- a/srcpkgs/llvm12/patches/libunwind-ppc32.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-This fixes build at least with gcc9 which does not define `__ppc__`.
-
---- a/libunwind/include/__libunwind_config.h
-+++ b/libunwind/include/__libunwind_config.h
-@@ -49,7 +49,7 @@
- #  define _LIBUNWIND_CONTEXT_SIZE 167
- #  define _LIBUNWIND_CURSOR_SIZE 179
- #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64
--# elif defined(__ppc__)
-+# elif defined(__powerpc__)
- #  define _LIBUNWIND_TARGET_PPC 1
- #  define _LIBUNWIND_CONTEXT_SIZE 117
- #  define _LIBUNWIND_CURSOR_SIZE 124
---- a/libunwind/src/UnwindRegistersRestore.S
-+++ b/libunwind/src/UnwindRegistersRestore.S
-@@ -392,7 +392,7 @@ Lnovec:
-   PPC64_LR(3)
-   bctr
- 
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- 
- DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind13Registers_ppc6jumptoEv)
- //
---- a/libunwind/src/UnwindRegistersSave.S
-+++ b/libunwind/src/UnwindRegistersSave.S
-@@ -554,7 +554,7 @@ DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext)
-   blr
- 
- 
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- 
- //
- // extern int unw_getcontext(unw_context_t* thread_state)
---- a/libunwind/src/config.h
-+++ b/libunwind/src/config.h
-@@ -95,12 +95,12 @@
- #define _LIBUNWIND_BUILD_SJLJ_APIS
- #endif
- 
--#if defined(__i386__) || defined(__x86_64__) || defined(__ppc__) || defined(__ppc64__) || defined(__powerpc64__)
-+#if defined(__i386__) || defined(__x86_64__) || defined(__powerpc__) || defined(__powerpc64__)
- #define _LIBUNWIND_SUPPORT_FRAME_APIS
- #endif
- 
- #if defined(__i386__) || defined(__x86_64__) ||                                \
--    defined(__ppc__) || defined(__ppc64__) || defined(__powerpc64__) ||        \
-+    defined(__powerpc__) || defined(__powerpc64__) ||                          \
-     (!defined(__APPLE__) && defined(__arm__)) ||                               \
-     (defined(__arm64__) || defined(__aarch64__)) ||                            \
-     defined(__mips__)
---- a/libunwind/src/libunwind.cpp
-+++ b/libunwind/src/libunwind.cpp
-@@ -42,7 +42,7 @@ _LIBUNWIND_HIDDEN int __unw_init_local(unw_cursor_t *cursor,
- # define REGISTER_KIND Registers_x86_64
- #elif defined(__powerpc64__)
- # define REGISTER_KIND Registers_ppc64
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- # define REGISTER_KIND Registers_ppc
- #elif defined(__aarch64__)
- # define REGISTER_KIND Registers_arm64
diff --git a/srcpkgs/llvm12/patches/lldb-musl.patch b/srcpkgs/llvm12/patches/lldb-musl.patch
deleted file mode 100644
index 601c0d138523..000000000000
--- a/srcpkgs/llvm12/patches/lldb-musl.patch
+++ /dev/null
@@ -1,31 +0,0 @@
---- a/lldb/source/Plugins/Process/Linux/Procfs.h
-+++ b/lldb/source/Plugins/Process/Linux/Procfs.h
-@@ -10,21 +10,12 @@
- // sys/procfs.h on Android/Linux for all supported architectures.
- 
- #include <sys/ptrace.h>
-+#include <asm/ptrace.h>
- 
--#ifdef __ANDROID__
--#if defined(__arm64__) || defined(__aarch64__)
--typedef unsigned long elf_greg_t;
--typedef elf_greg_t
--    elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
--typedef struct user_fpsimd_state elf_fpregset_t;
--#ifndef NT_FPREGSET
--#define NT_FPREGSET NT_PRFPREG
--#endif // NT_FPREGSET
--#elif defined(__mips__)
--#ifndef NT_FPREGSET
--#define NT_FPREGSET NT_PRFPREG
--#endif // NT_FPREGSET
--#endif
--#else // __ANDROID__
-+#if !defined(__GLIBC__) && defined(__powerpc__)
-+#define pt_regs musl_pt_regs
-+#include <sys/procfs.h>
-+#undef pt_regs
-+#else
- #include <sys/procfs.h>
--#endif // __ANDROID__
-+#endif
diff --git a/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch b/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch
deleted file mode 100644
index 8e0a9a779d1b..000000000000
--- a/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-commit ba4ede595ff9599232f5dd2b4384c243137b53fc
-Author: Daniel Kolesa <daniel@octaforge.org>
-Date:   Tue Jun 22 23:40:54 2021 +0200
-
-    enable compiler-rt support for ppc32
-
-diff --git a/compiler-rt/cmake/base-config-ix.cmake b/compiler-rt/cmake/base-config-ix.cmake
-index 1edab43..5c0c8a2 100644
---- a/compiler-rt/cmake/base-config-ix.cmake
-+++ b/compiler-rt/cmake/base-config-ix.cmake
-@@ -182,9 +182,7 @@ macro(test_targets)
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc64le")
-       test_target_arch(powerpc64le "" "-m64")
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc")
--      if(CMAKE_SYSTEM_NAME MATCHES "AIX")
--        test_target_arch(powerpc "" "-m32")
--      endif()
-+      test_target_arch(powerpc "" "-m32")
-       test_target_arch(powerpc64 "" "-m64")
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "s390x")
-       test_target_arch(s390x "" "")
diff --git a/srcpkgs/llvm12/template b/srcpkgs/llvm12/template
index 7ce18028e4a3..7b361bbbf5bc 100644
--- a/srcpkgs/llvm12/template
+++ b/srcpkgs/llvm12/template
@@ -1,25 +1,17 @@
 # Template file for 'llvm12'
 pkgname=llvm12
 version=12.0.1
-revision=2
+revision=3
 wrksrc="llvm-project-${version}.src"
 build_wrksrc=llvm
 build_style=cmake
 configure_args="
  -DCMAKE_BUILD_TYPE=Release -Wno-dev
  -DENABLE_LINKER_BUILD_ID=YES
- -DLLDB_USE_SYSTEM_SIX=YES
- -DLIBCXX_CXX_ABI=libcxxabi
- -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
- -DLIBCXXABI_USE_LLVM_UNWINDER=YES
- -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
- -DLIBOMP_ENABLE_SHARED=YES
- -DLIBOMP_INSTALL_ALIASES=NO
  -DLLVM_INCLUDE_DOCS=YES
  -DLLVM_BUILD_DOCS=YES
  -DLLVM_ENABLE_SPHINX=YES
  -DSPHINX_WARNINGS_AS_ERRORS=NO
- -DLLVM_INSTALL_UTILS=YES
  -DLLVM_BUILD_LLVM_DYLIB=YES
  -DLLVM_LINK_LLVM_DYLIB=YES
  -DLLVM_ENABLE_RTTI=YES
@@ -51,87 +43,10 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
-_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
-
-_lldb_enable=yes
-_libomp_enable=no
-
-case "$XBPS_TARGET_MACHINE" in
-	ppc64le*) ;;
-	ppc*|i686*) _lldb_enable=no ;;
-esac
-
-case "$XBPS_TARGET_MACHINE" in
-	x86_64*|aarch64*|ppc64*) _libomp_enable=yes;;
-esac
-
-subpackages="clang-tools-extra"
-
-# must go before clang
-if [ "$_libomp_enable" = "yes" ]; then
-	_enabled_projects+=";openmp"
-	subpackages+=" libomp libomp-devel"
-	# because of cmake nonsense referencing libomptarget.so.*
-	depends+=" libomp>=${version}_${revision}"
-fi
-
-subpackages+=" clang clang-analyzer libclang libclang-cpp
- llvm-libunwind llvm-libunwind-devel libcxx libcxx-devel
- libcxxabi libcxxabi-devel libllvm12"
-
-if [ "$_lldb_enable" = "yes" ]; then
-	# XXX fails to cross compile due to python
-	_enabled_projects+=";lldb"
-	subpackages+=" lldb lldb-devel"
-fi
-
-subpackages+=" lld lld-devel"
-
-configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
-
 post_patch() {
-	if [ "$_lldb_enable" = "yes" ]; then
-		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
-			vsed -i 's|__ptrace_request|int|g' \
-				${wrksrc}/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
-		fi
-		# disable docs for lldb as they fail to generate
-		vsed -i '/add_subdirectory(docs)/d' \
-			${wrksrc}/lldb/CMakeLists.txt
-	fi
-
 	# update config.guess for better platform detection
 	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
 		${wrksrc}/llvm/cmake
-
-	# fix linker failures on some archs
-	vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
-		${wrksrc}/libcxxabi/cmake/config-ix.cmake
-	vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
-		${wrksrc}/libcxxabi/cmake/config-ix.cmake
-
-	# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
-	case "$XBPS_TARGET_MACHINE" in
-		ppc64*) ;;
-		ppc*-musl|i686-musl|mips*-musl)
-			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
-				${wrksrc}/libunwind/src/CMakeLists.txt
-			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
-				${wrksrc}/libcxxabi/src/CMakeLists.txt
-			vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
-			;;
-	esac
-
-	case "$XBPS_TARGET_MACHINE" in
-		x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
-			vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
-				${wrksrc}/compiler-rt/CMakeLists.txt
-			;;
-		arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
-			vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
-				${wrksrc}/compiler-rt/cmake/config-ix.cmake
-			;;
-	esac
 }
 
 pre_configure() {
@@ -158,10 +73,8 @@ pre_configure() {
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
 			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
 		make ${makejobs} -C utils/TableGen
-		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
 		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
-		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
 		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
 		cd ../..
 	fi
@@ -202,218 +115,6 @@ do_install() {
 	if [ "$CROSS_BUILD" ]; then
 		rm -f ${DESTDIR}/usr/bin/llvm-config-host
 	fi
-
-	# Install libcxxabi headers
-	vinstall ${wrksrc}/libcxxabi/include/__cxxabi_config.h 644 usr/include
-	vinstall ${wrksrc}/libcxxabi/include/cxxabi.h 644 usr/include
-
-	# Install libunwind headers
-	vinstall ${wrksrc}/libunwind/include/__libunwind_config.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/libunwind.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/unwind.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/mach-o/compact_unwind_encoding.h \
-		644 usr/include/mach-o
-}
-
-clang-analyzer_package() {
-	pycompile_dirs="usr/share/scan-view"
-	depends="clang-${version}_${revision} python3 perl"
-	short_desc+=" - A source code analysis framework"
-	homepage="https://clang-analyzer.llvm.org/"
-	pkg_install() {
-		vmove usr/share/man/man1/scan-build.1
-		vmove "/usr/bin/scan-*"
-		vmove "/usr/share/scan-*"
-		vmove "/usr/libexec/*analyzer"
-	}
-}
-
-clang-tools-extra_package() {
-	lib32disabled=yes
-	depends="clang-${version}_${revision} python3"
-	short_desc+=" - Extra Clang tools"
-	homepage="https://clang.llvm.org/extra/"
-	pkg_install() {
-		vmove usr/include/clang-tidy
-		vmove usr/bin/clang-apply-replacements
-		vmove usr/bin/clang-query
-		vmove usr/bin/clang-rename
-		vmove usr/bin/clang-tidy
-		vmove usr/bin/diagtool
-		vmove usr/bin/find-all-symbols
-		vmove usr/bin/hmaptool
-		vmove usr/bin/modularize
-		vmove usr/bin/pp-trace
-		vmove usr/bin/sancov
-		vmove "usr/lib/libclangApplyReplacements*"
-		vmove "usr/lib/libclangQuery*"
-		vmove "usr/lib/libclangTidy*"
-		vmove "usr/share/clang/*tidy*"
-		vmove usr/share/doc/clang-tools
-		vmove usr/share/man/man1/extraclangtools.1
-		vmove usr/share/man/man1/diagtool.1
-	}
-}
-
-clang_package() {
-	lib32disabled=yes
-	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
-	 libclang-${version}_${revision}"
-	short_desc+=" - C language family frontend"
-	homepage="https://clang.llvm.org/"
-	pkg_install() {
-		vmove usr/include/clang
-		vmove usr/include/clang-c
-		vmove "usr/bin/*clang*"
-		vmove usr/bin/c-index-test
-		vmove usr/lib/clang
-		vmove usr/lib/cmake/clang
-		vmove "usr/lib/libclang*.a"
-		vmove "usr/lib/libclang*.so"
-		vmove usr/share/clang
-		vmove usr/share/doc/clang
-		vmove usr/share/man/man1/clang.1
-	}
-}
-
-libclang_package() {
-	short_desc+=" - C frontend runtime library"
-	pkg_install() {
-		vmove "usr/lib/libclang.so.*"
-	}
-}
-
-libclang-cpp_package() {
-	short_desc+=" - C frontend runtime library (C++ interface)"
-	pkg_install() {
-		vmove "usr/lib/libclang-cpp.so.*"
-	}
-}
-
-lld_package() {
-	lib32disabled=yes
-	short_desc+=" - linker"
-	homepage="https://lld.llvm.org"
-	pkg_install() {
-		vmove usr/bin/lld*
-		vmove usr/bin/wasm-ld
-		vmove usr/bin/ld.lld*
-		vmove usr/bin/ld64.lld*
-		vmove usr/share/doc/lld
-	}
-}
-
-lld-devel_package() {
-	lib32disabled=yes
-	short_desc+=" - linker - development files"
-	homepage="https://lld.llvm.org"
-	depends="lld>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/include/lld
-		vmove usr/lib/cmake/lld
-		vmove "usr/lib/liblld*a"
-	}
-}
-
-lldb_package() {
-	lib32disabled=yes
-	depends+=" python3-six"
-	short_desc+=" - LLDB debugger"
-	homepage="https://lldb.llvm.org/"
-	pkg_install() {
-		vmove usr/bin/*lldb*
-		vmove usr/lib/liblldb*so.*
-		vmove /usr/lib/python*
-	}
-}
-
-lldb-devel_package() {
-	lib32disabled=yes
-	depends="lldb>=${version}_${revision}"
-	short_desc+=" - LLDB debugger - development files"
-	pkg_install() {
-		vmove usr/include/lldb
-		vmove "usr/lib/liblldb*.so"
-	}
-}
-
-llvm-libunwind_package() {
-	short_desc+=" - libunwind"
-	pkg_install() {
-		vmove "usr/lib/libunwind.so.*"
-	}
-}
-
-llvm-libunwind-devel_package() {
-	short_desc+=" - libunwind - development files"
-	depends="llvm-libunwind>=${version}_${revision}"
-	conflicts="libunwind-devel>=0"
-	pkg_install() {
-		vmove usr/lib/libunwind.so
-		vmove usr/lib/libunwind.a
-		vmove "usr/include/*unwind*"
-		vmove usr/include/mach-o
-		vmove usr/share/doc/libunwind
-	}
-}
-
-libcxxabi_package() {
-	short_desc+=" - low level support for libc++"
-	pkg_install() {
-		vmove "usr/lib/libc++abi.so.*"
-	}
-}
-
-libcxxabi-devel_package() {
-	short_desc+=" - low level support for libc++ - development files"
-	depends="libcxxabi>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/lib/libc++abi.so
-		vmove usr/lib/libc++abi.a
-		vmove "usr/include/*cxxabi*"
-	}
-}
-
-libcxx_package() {
-	short_desc+=" - C++ standard library"
-	pkg_install() {
-		vmove "usr/lib/libc++.so.*"
-	}
-}
-
-libcxx-devel_package() {
-	short_desc+=" - C++ standard library - development files"
-	depends="libcxx>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/lib/libc++.so
-		vmove usr/lib/libc++.a
-		vmove usr/lib/libc++experimental.a
-		vmove usr/include/c++
-		vmove usr/share/doc/libcxx
-	}
-}
-
-libomp_package() {
-	short_desc+=" - Clang OpenMP support library"
-	pkg_install() {
-		vmove usr/lib/libomp.so
-		vmove "usr/lib/libomptarget.rtl.*.so"
-		vmove usr/lib/libarcher.so
-		vmove "usr/lib/libomp*.so.*"
-	}
-}
-
-libomp-devel_package() {
-	short_desc+=" - Clang OpenMP support library - development files"
-	depends="libomp>=${version}_${revision}"
-	pkg_install() {
-		vmove "usr/lib/libomp*.so"
-		vmove "usr/lib/libarcher*"
-		vmove "usr/include/omp*.h"
-		vmove "usr/lib/clang/${version}/include/omp*.h"
-		vmove usr/share/man/man1/llvmopenmp.1
-		vmove usr/share/doc/openmp
-	}
 }
 
 libllvm12_package() {

From 9b28478ff94d67c2bf273ba7d4094d2136b2962f Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 14:00:28 +0200
Subject: [PATCH 04/27] New packages: clang12, libclang12, libclang12-cpp,
 lld12, lld12-devel.

---
 common/shlibs                                 |   2 +
 srcpkgs/clang12                               |   1 +
 srcpkgs/libclang12                            |   1 +
 srcpkgs/libclang12-cpp                        |   1 +
 srcpkgs/lld12                                 |   1 +
 srcpkgs/lld12-devel                           |   1 +
 ...clang-001-fix-unwind-chain-inclusion.patch |  44 +++++++
 .../patches/clang-002-add-musl-triples.patch  | 110 ++++++++++++++++++
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 +++
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ++++++++
 srcpkgs/llvm12/template                       |  71 +++++++++++
 11 files changed, 293 insertions(+)
 create mode 120000 srcpkgs/clang12
 create mode 120000 srcpkgs/libclang12
 create mode 120000 srcpkgs/libclang12-cpp
 create mode 120000 srcpkgs/lld12
 create mode 120000 srcpkgs/lld12-devel
 create mode 100644 srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch

diff --git a/common/shlibs b/common/shlibs
index 0ca5d7d5d6f9..36bab1d3d999 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -973,6 +973,8 @@ libuchardet.so.0 uchardet-0.0.6_1
 libgtksourceviewmm-3.0.so.0 gtksourceviewmm-3.2.0_1
 libyajl.so.2 yajl-2.0.1_1
 libconfuse.so.2 confuse-3.2.1_1
+libclang.so.12 libclang12-12.0.0_1
+libclang-cpp.so.12 libclang12-cpp-12.0.0_1
 liblldb.so.14 lldb-14.0.3_1
 libclang.so.14 libclang-14.0.3_1
 libclang-cpp.so.14 libclang-cpp-14.0.3_1
diff --git a/srcpkgs/clang12 b/srcpkgs/clang12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/clang12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/libclang12 b/srcpkgs/libclang12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/libclang12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/libclang12-cpp b/srcpkgs/libclang12-cpp
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/libclang12-cpp
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/lld12 b/srcpkgs/lld12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/lld12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/lld12-devel b/srcpkgs/lld12-devel
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/lld12-devel
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
new file mode 100644
index 000000000000..e4eaa7783e7a
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
@@ -0,0 +1,44 @@
+From 352974169f0d2b5da3d5321f588f5e3b5941330e Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe@gmail.com>
+Date: Tue, 8 Sep 2015 22:14:57 +0200
+Subject: [PATCH 2/7] fix unwind chain inclusion
+
+---
+ lib/Headers/unwind.h | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/lib/Headers/unwind.h b/lib/Headers/unwind.h
+index 303d792..44e10cc 100644
+--- a/clang/lib/Headers/unwind.h
++++ b/clang/lib/Headers/unwind.h
+@@ -9,9 +9,6 @@
+ 
+ /* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/
+ 
+-#ifndef __CLANG_UNWIND_H
+-#define __CLANG_UNWIND_H
+-
+ #if defined(__APPLE__) && __has_include_next(<unwind.h>)
+ /* Darwin (from 11.x on) provide an unwind.h. If that's available,
+  * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE,
+@@ -39,6 +36,9 @@
+ # endif
+ #else
+ 
++#ifndef __CLANG_UNWIND_H
++#define __CLANG_UNWIND_H
++
+ #include <stdint.h>
+ 
+ #ifdef __cplusplus
+@@ -322,6 +322,7 @@ _Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *);
+ }
+ #endif
+ 
++#endif /* __CLANG_UNWIND_H */
++
+ #endif
+ 
+-#endif /* __CLANG_UNWIND_H */
+-- 
+2.5.1
diff --git a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
new file mode 100644
index 000000000000..25688d40dbc2
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
@@ -0,0 +1,110 @@
+--- a/clang/lib/Driver/ToolChains/Gnu.cpp
++++ b/clang/lib/Driver/ToolChains/Gnu.cpp
+@@ -2086,7 +2086,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
+                                              "armv7hl-redhat-linux-gnueabi",
+                                              "armv6hl-suse-linux-gnueabi",
+-                                             "armv7hl-suse-linux-gnueabi"};
++                                             "armv7hl-suse-linux-gnueabi",
++                                             "armv7l-linux-gnueabihf"};
+   static const char *const ARMebLibDirs[] = {"/lib"};
+   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
+                                              "armeb-linux-androideabi"};
+@@ -2153,8 +2154,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
+   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
+   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
+-                                             "powerpcle-unknown-linux-gnu",
+-                                             "powerpcle-linux-musl"};
++                                             "powerpcle-unknown-linux-gnu"};
+ 
+   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
+   static const char *const PPC64Triples[] = {
+@@ -2235,6 +2235,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+     return;
+   }
+ 
++  if (TargetTriple.isMusl()) {
++    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
++    static const char *const ARMHFMuslTriples[] = {
++        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
++    };
++    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
++    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
++    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
++    static const char *const MIPSMuslTriples[] = {
++        "mips-linux-musl", "mipsel-linux-musl",
++        "mipsel-linux-muslhf", "mips-linux-muslhf"
++    };
++    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
++    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
++    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
++    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
++
++    switch (TargetTriple.getArch()) {
++    case llvm::Triple::aarch64:
++      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      break;
++    case llvm::Triple::arm:
++      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
++      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
++        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
++      } else {
++        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
++      }
++      break;
++    case llvm::Triple::x86_64:
++      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      break;
++    case llvm::Triple::x86:
++      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      break;
++    case llvm::Triple::mips:
++      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
++      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
++      break;
++    case llvm::Triple::ppc:
++      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      break;
++    case llvm::Triple::ppcle:
++      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      break;
++    case llvm::Triple::ppc64:
++      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      break;
++    case llvm::Triple::ppc64le:
++      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      break;
++    default:
++      break;
++    }
++    TripleAliases.push_back(TargetTriple.str());
++    if (TargetTriple.str() != BiarchTriple.str())
++      BiarchTripleAliases.push_back(BiarchTriple.str());
++    return;
++  }
++
+   // Android targets should not use GNU/Linux tools or libraries.
+   if (TargetTriple.isAndroid()) {
+     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
new file mode 100644
index 000000000000..4ad6412d1e6c
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
@@ -0,0 +1,13 @@
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -504,10 +504,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+     Loader = "ld.so.1";
+     break;
+   case llvm::Triple::ppc64:
+-    LibDir = "lib64";
+-    Loader =
+-        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
+-    break;
+   case llvm::Triple::ppc64le:
+     LibDir = "lib64";
+     Loader =
diff --git a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
new file mode 100644
index 000000000000..21fc8003c5f1
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
@@ -0,0 +1,48 @@
+--- a/clang/lib/Basic/Targets/PPC.h
++++ b/clang/lib/Basic/Targets/PPC.h
+@@ -415,11 +415,10 @@ public:
+       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
+     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
+       DataLayout = "e-m:e-i64:64-n32:64";
+-      ABI = "elfv2";
+     } else {
+       DataLayout = "E-m:e-i64:64-n32:64";
+-      ABI = "elfv1";
+     }
++    ABI = "elfv2";
+ 
+     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
+       LongDoubleWidth = LongDoubleAlign = 64;
+--- a/clang/lib/CodeGen/TargetInfo.cpp
++++ b/clang/lib/CodeGen/TargetInfo.cpp
+@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
+       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
+ 
+     if (Triple.isOSBinFormatELF()) {
+-      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
+-      if (getTarget().getABI() == "elfv2")
+-        Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      if (getTarget().getABI() == "elfv1")
++        Kind = PPC64_SVR4_ABIInfo::ELFv1;
+       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
+ 
+       return SetCGInfo(
+--- a/clang/lib/Driver/ToolChains/Clang.cpp
++++ b/clang/lib/Driver/ToolChains/Clang.cpp
+@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
+   const llvm::Triple &T = getToolChain().getTriple();
+   if (T.isOSBinFormatELF()) {
+     switch (getToolChain().getArch()) {
+-    case llvm::Triple::ppc64: {
+-      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
+-          T.isOSOpenBSD() || T.isMusl())
+-        ABIName = "elfv2";
+-      else
+-        ABIName = "elfv1";
+-      break;
+-    }
++    case llvm::Triple::ppc64:
+     case llvm::Triple::ppc64le:
+       ABIName = "elfv2";
+       break;
diff --git a/srcpkgs/llvm12/template b/srcpkgs/llvm12/template
index 7b361bbbf5bc..274b57183654 100644
--- a/srcpkgs/llvm12/template
+++ b/srcpkgs/llvm12/template
@@ -43,6 +43,12 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
+_enabled_projects="clang;lld"
+
+subpackages+=" clang12 libclang12 libclang12-cpp libllvm12 lld12 lld12-devel"
+
+configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+
 post_patch() {
 	# update config.guess for better platform detection
 	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
@@ -73,8 +79,10 @@ pre_configure() {
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
 			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
 		make ${makejobs} -C utils/TableGen
+		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
 		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
+		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
 		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
 		cd ../..
 	fi
@@ -117,6 +125,69 @@ do_install() {
 	fi
 }
 
+clang12_package() {
+	conflicts="clang"
+	lib32disabled=yes
+	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
+	 libclang12-${version}_${revision}"
+	short_desc+=" - C language family frontend"
+	homepage="https://clang.llvm.org/"
+	pkg_install() {
+		vmove usr/include/clang
+		vmove usr/include/clang-c
+		vmove "usr/bin/*clang*"
+		vmove usr/bin/c-index-test
+		vmove usr/lib/clang
+		vmove usr/lib/cmake/clang
+		vmove "usr/lib/libclang*.a"
+		vmove "usr/lib/libclang*.so"
+		vmove usr/share/clang
+		vmove usr/share/doc/clang
+		vmove usr/share/man/man1/clang.1
+	}
+}
+
+libclang12_package() {
+	short_desc+=" - C frontend runtime library"
+	pkg_install() {
+		vmove "usr/lib/libclang.so.*"
+	}
+}
+
+libclang12-cpp_package() {
+	short_desc+=" - C frontend runtime library (C++ interface)"
+	pkg_install() {
+		vmove "usr/lib/libclang-cpp.so.*"
+	}
+}
+
+lld12_package() {
+	conflicts="lld"
+	lib32disabled=yes
+	short_desc+=" - linker"
+	homepage="https://lld.llvm.org"
+	pkg_install() {
+		vmove usr/bin/lld*
+		vmove usr/bin/wasm-ld
+		vmove usr/bin/ld.lld*
+		vmove usr/bin/ld64.lld*
+		vmove usr/share/doc/lld
+	}
+}
+
+lld12-devel_package() {
+	conflicts="lld-devel"
+	lib32disabled=yes
+	short_desc+=" - linker - development files"
+	homepage="https://lld.llvm.org"
+	depends="lld12>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include/lld
+		vmove usr/lib/cmake/lld
+		vmove "usr/lib/liblld*a"
+	}
+}
+
 libllvm12_package() {
 	short_desc+=" - runtime library"
 	pkg_install() {

From fb3f7f07c61afb3b3ee36f33886d8061aee71d3b Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 05/27] chromium: update for llvm14

---
 srcpkgs/chromium/template | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/srcpkgs/chromium/template b/srcpkgs/chromium/template
index 0dce8772fdb8..8b604a349229 100644
--- a/srcpkgs/chromium/template
+++ b/srcpkgs/chromium/template
@@ -2,7 +2,7 @@
 pkgname=chromium
 # See https://chromiumdash.appspot.com/releases?platform=Linux for the latest version
 version=101.0.4951.41
-revision=1
+revision=2
 archs="i686* x86_64* aarch64* armv7l* ppc64le*"
 short_desc="Google's attempt at creating a safer, faster, and more stable browser"
 maintainer="Duncaen <duncaen@voidlinux.org>"
@@ -20,7 +20,7 @@ desc_option_debug="Build with debug symbols"
 desc_option_js_optimize="Optimize the JS used for Chromium's UI"
 desc_option_pipewire="Enable support for screen sharing for WebRTC via PipeWire"
 
-hostmakedepends="$(vopt_if clang "clang lld llvm12") python python3 pkgconf perl gperf bison ninja nodejs hwids
+hostmakedepends="$(vopt_if clang "clang lld llvm14") python python3 pkgconf perl gperf bison ninja nodejs hwids
  libatomic-devel libevent-devel libglib-devel $(vopt_if js_optimize openjdk) wayland-devel libepoxy-devel"
 makedepends="libpng-devel gtk+-devel gtk+3-devel nss-devel pciutils-devel
  libXi-devel libgcrypt-devel libgnome-keyring-devel cups-devel elfutils-devel
@@ -266,12 +266,6 @@ do_configure() {
 		'disable_fieldtrial_testing_config=true'
 
 		'is_official_build=true'
-
-		# segfaults with llvm-12.0.1
-		'is_cfi=false'
-		'use_thin_lto=false'
-		'use_cfi_icall=false'
-		'chrome_pgo_phase=0'
 	)
 
 	if [ "$CROSS_BUILD" ]; then

From 6f92edb94778a692d5bce81aa2a994b9375e187e Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 06/27] ghdl: update for llvm14

---
 srcpkgs/ghdl/patches/{llvm12.patch => llvm.patch} | 2 ++
 srcpkgs/ghdl/template                             | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)
 rename srcpkgs/ghdl/patches/{llvm12.patch => llvm.patch} (82%)

diff --git a/srcpkgs/ghdl/patches/llvm12.patch b/srcpkgs/ghdl/patches/llvm.patch
similarity index 82%
rename from srcpkgs/ghdl/patches/llvm12.patch
rename to srcpkgs/ghdl/patches/llvm.patch
index 8d2f76bfda06..9201816ae053 100644
--- a/srcpkgs/ghdl/patches/llvm12.patch
+++ b/srcpkgs/ghdl/patches/llvm.patch
@@ -7,6 +7,8 @@ index c1c1a6d..dad7c38 100755
         check_version 10.0 $llvm_version ||
         check_version 11.0 $llvm_version ||
 +       check_version 12.0 $llvm_version ||
++       check_version 13.0 $llvm_version ||
++       check_version 14.0 $llvm_version ||
         false; then
      echo "Debugging is enabled with llvm $llvm_version"
    else
diff --git a/srcpkgs/ghdl/template b/srcpkgs/ghdl/template
index e756d8c3cd87..9ca1169b22bd 100644
--- a/srcpkgs/ghdl/template
+++ b/srcpkgs/ghdl/template
@@ -7,7 +7,7 @@
 pkgname=ghdl
 reverts="20181129_1"
 version=1.0.0
-revision=1
+revision=2
 build_style=configure
 configure_args="--prefix=/usr --srcdir=.. --incdir=lib/ghdl/include"
 makedepends="zlib-devel"

From b6203c7eac1b53b9a80c673bfa8b0c569deb7733 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 07/27] qt5: rebuild for llvm14

---
 srcpkgs/qt5/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index ee788fad2019..25f15583a42d 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -3,7 +3,7 @@ pkgname=qt5
 version=5.15.3+20220222
 # commit fcca82ca40a5d8a02a4ddd90846d070f2c58cfad
 # base repo: https://invent.kde.org/qt/qt/qt5
-revision=3
+revision=4
 build_style=meta
 hostmakedepends="cmake clang flex perl glib-devel pkg-config
  python re2c ruby which"

From c4663a9c394dc5d48de96e3646887027ea17118b Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 08/27] tilix: rebuild for llvm14

---
 srcpkgs/tilix/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/tilix/template b/srcpkgs/tilix/template
index d8f014bc78c5..ac1bf7dd3bdd 100644
--- a/srcpkgs/tilix/template
+++ b/srcpkgs/tilix/template
@@ -1,7 +1,7 @@
 # Template file for 'tilix'
 pkgname=tilix
 version=1.9.4
-revision=3
+revision=4
 build_style=meson
 configure_args="-Db_lto=false"
 hostmakedepends="automake gettext-devel gdk-pixbuf glib-devel ldc po4a pkg-config

From 43875514f850c36f6112a13e77491a2ad5726f82 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 09/27] shiboken2: rebuild for llvm14

---
 srcpkgs/shiboken2/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/shiboken2/template b/srcpkgs/shiboken2/template
index b56613229c13..ab9d2c4cb8f9 100644
--- a/srcpkgs/shiboken2/template
+++ b/srcpkgs/shiboken2/template
@@ -1,7 +1,7 @@
 # Template file for 'shiboken2'
 pkgname=shiboken2
 version=5.15.2
-revision=4
+revision=5
 _pkgname="pyside-setup-opensource-src-${version}"
 wrksrc="${_pkgname/%5.14.2.1/5.14.2}"
 build_wrksrc="sources/shiboken2"

From a5fa6c1dbd26f1858929081fc9998f569c2ee6e8 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 10/27] gnome-builder: rebuild for llvm14

---
 srcpkgs/gnome-builder/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/gnome-builder/template b/srcpkgs/gnome-builder/template
index 93559b21774f..5a5a51893ae8 100644
--- a/srcpkgs/gnome-builder/template
+++ b/srcpkgs/gnome-builder/template
@@ -1,7 +1,7 @@
 # Template file for 'gnome-builder'
 pkgname=gnome-builder
 version=41.3
-revision=1
+revision=2
 build_style=meson
 build_helper=qemu
 configure_args="-Dhelp=true -Dnetwork_tests=false"

From 2afc9ac533b8aea0598ffca1ca646a9c5330ef55 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 11/27] bcc: rebuild for llvm14

---
 srcpkgs/bcc/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/bcc/template b/srcpkgs/bcc/template
index 54509b63d5a7..2cfa0a2977d0 100644
--- a/srcpkgs/bcc/template
+++ b/srcpkgs/bcc/template
@@ -1,7 +1,7 @@
 # Template file for 'bcc'
 pkgname=bcc
 version=0.24.0
-revision=1
+revision=2
 wrksrc="bcc"
 build_style=cmake
 configure_args="-DREVISION=${version} -DENABLE_LLVM_SHARED=1"

From dd1e06a1508d22944bdc7771cc6093d031b5e5c0 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 12/27] mesa: rebuild for llvm14

---
 srcpkgs/mesa/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/mesa/template b/srcpkgs/mesa/template
index c90500de7416..8f08262fb135 100644
--- a/srcpkgs/mesa/template
+++ b/srcpkgs/mesa/template
@@ -1,7 +1,7 @@
 # Template file for 'mesa'
 pkgname=mesa
 version=21.3.7
-revision=1
+revision=2
 build_style=meson
 configure_args="-Dglvnd=true -Dshared-glapi=enabled -Dgbm=enabled -Degl=enabled
  -Dosmesa=true -Dgles1=enabled -Dgles2=enabled -Dglx=dri -Ddri3=enabled

From b257c3076a77f5bbf4dd3d9e7691e1c0ac530051 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 13/27] juCi++: rebuild for llvm14

---
 srcpkgs/juCi++/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/juCi++/template b/srcpkgs/juCi++/template
index 1a7604b44a00..5103324dec20 100644
--- a/srcpkgs/juCi++/template
+++ b/srcpkgs/juCi++/template
@@ -1,7 +1,7 @@
 # Template file for 'juCi++'
 pkgname=juCi++
 version=1.6.2
-revision=2
+revision=3
 _libclangmm_commit="b342f4dd6de4fe509a692a4b4fcfc7e24aae9590"
 _tiny_commit="c9c8bf810ddad8cd17882b9a9ee628a690e779f5"
 wrksrc="jucipp-v${version}"

From 1900de5d7dac6b9c2a2bbc73608aa30d3e06a34b Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 14/27] codelite: rebuild for llvm14

---
 srcpkgs/codelite/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/codelite/template b/srcpkgs/codelite/template
index 3a993a2c0cfb..24e2c879dd45 100644
--- a/srcpkgs/codelite/template
+++ b/srcpkgs/codelite/template
@@ -1,7 +1,7 @@
 # Template file for 'codelite'
 pkgname=codelite
 version=15.0.6
-revision=1
+revision=2
 build_style=cmake
 build_helper=cmake-wxWidgets-gtk3
 configure_args="-DWITH_PCH=0 -DWITH_WX_CONFIG=wx-config-gtk3

From 169acc39cff060ea26358d2dae55be7269bad0cc Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 15/27] ccls: rebuild for llvm14

---
 srcpkgs/ccls/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/ccls/template b/srcpkgs/ccls/template
index fbb7c6847bc1..40aba3b55bfe 100644
--- a/srcpkgs/ccls/template
+++ b/srcpkgs/ccls/template
@@ -1,7 +1,7 @@
 # Template file for 'ccls'
 pkgname=ccls
 version=0.20210330
-revision=2
+revision=3
 build_style=cmake
 hostmakedepends="clang-tools-extra"
 makedepends="llvm ncurses-devel rapidjson zlib-devel clang-tools-extra"

From 11e02ab441b3788a20063df0c26cb19a08ab634b Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 16/27] clazy: rebuild for llvm14

---
 srcpkgs/clazy/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/clazy/template b/srcpkgs/clazy/template
index 11f3bab55aef..f81de08ab836 100644
--- a/srcpkgs/clazy/template
+++ b/srcpkgs/clazy/template
@@ -1,7 +1,7 @@
 # Template file for 'clazy'
 pkgname=clazy
 version=1.11
-revision=1
+revision=2
 build_style=cmake
 build_helper=qemu
 hostmakedepends="llvm"

From 6e3a591c8ea85a2ea3098ee40f7387345e86a1b3 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 17/27] bpftrace: rebuild for llvm14

---
 srcpkgs/bpftrace/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/bpftrace/template b/srcpkgs/bpftrace/template
index 28ab3c626399..eb2480d2230e 100644
--- a/srcpkgs/bpftrace/template
+++ b/srcpkgs/bpftrace/template
@@ -1,7 +1,7 @@
 # Template file for 'bpftrace'
 pkgname=bpftrace
 version=0.14.1
-revision=1
+revision=2
 archs="x86_64* aarch64* ppc64*"
 build_style=cmake
 configure_args="-DBUILD_TESTING=OFF"  # needs root to run

From 9ea5f9123f0c01b1bb792bd39bebf61577b1a2de Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 18/27] rtags: rebuild for llvm14

---
 srcpkgs/rtags/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/rtags/template b/srcpkgs/rtags/template
index b496a1b0e721..9b161e690d76 100644
--- a/srcpkgs/rtags/template
+++ b/srcpkgs/rtags/template
@@ -1,7 +1,7 @@
 # Template file for 'rtags'
 pkgname=rtags
 version=2.38
-revision=5
+revision=6
 build_style=cmake
 # Don't run tests in do_install, please.
 configure_args="-DSKIP_CTEST=TRUE"

From 306fcd20351cac9619b1718b4979dcc5ab34b949 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:07:19 +0200
Subject: [PATCH 19/27] beignet: remove package

---
 srcpkgs/beignet/patches/cl_uint.patch         |  22 -
 ...419a0008e38ef2d9d255d9e9c74e9fba084b.patch | 134 ---
 srcpkgs/beignet/patches/llvm06.patch          |  33 -
 srcpkgs/beignet/patches/llvm08.patch          |  56 --
 srcpkgs/beignet/patches/llvm09.patch          | 111 ---
 srcpkgs/beignet/patches/llvm10.patch          | 347 -------
 srcpkgs/beignet/patches/llvm11.patch          | 937 ------------------
 srcpkgs/beignet/patches/llvm12.patch          | 115 ---
 srcpkgs/beignet/patches/musl.patch            |  11 -
 srcpkgs/beignet/template                      |  22 -
 srcpkgs/beignet/update                        |   1 -
 srcpkgs/removed-packages/template             |   3 +-
 12 files changed, 2 insertions(+), 1790 deletions(-)
 delete mode 100644 srcpkgs/beignet/patches/cl_uint.patch
 delete mode 100644 srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm06.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm08.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm09.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm10.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm11.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm12.patch
 delete mode 100644 srcpkgs/beignet/patches/musl.patch
 delete mode 100644 srcpkgs/beignet/template
 delete mode 100644 srcpkgs/beignet/update

diff --git a/srcpkgs/beignet/patches/cl_uint.patch b/srcpkgs/beignet/patches/cl_uint.patch
deleted file mode 100644
index 86ba00f04e95..000000000000
--- a/srcpkgs/beignet/patches/cl_uint.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/src/cl_api_kernel.c	2017-09-22 10:05:22.000000000 +0200
-+++ b/src/cl_api_kernel.c	2020-03-24 18:27:40.186485887 +0100
-@@ -151,7 +151,7 @@
-         fixed_local_sz[0] = 16;
-         fixed_local_sz[1] = 1;
-       } else {
--        uint j, maxDimSize = 64 /* from 64? */, maxGroupSize = 256; //MAX_WORK_GROUP_SIZE may too large
-+        cl_uint j, maxDimSize = 64 /* from 64? */, maxGroupSize = 256; //MAX_WORK_GROUP_SIZE may too large
-         size_t realGroupSize = 1;
-         for (i = 0; i < work_dim; i++) {
-           for (j = maxDimSize; j > 1; j--) {
---- a/src/cl_enqueue.c	2017-09-22 10:05:22.000000000 +0200
-+++ b/src/cl_enqueue.c	2020-03-24 18:30:12.031479833 +0100
-@@ -494,7 +494,7 @@
- cl_int cl_enqueue_svm_free(enqueue_data *data, cl_int status) {
-   int i;
-   void **pointers = data->pointers;
--  uint num_svm_ptrs = data->size;
-+  cl_uint num_svm_ptrs = data->size;
-   cl_int err = CL_SUCCESS;
- 
-   if (status != CL_COMPLETE)
diff --git a/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch b/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
deleted file mode 100644
index 8de9e6e2f093..000000000000
--- a/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
+++ /dev/null
@@ -1,134 +0,0 @@
-From e1b2419a0008e38ef2d9d255d9e9c74e9fba084b Mon Sep 17 00:00:00 2001
-From: "Rebecca N. Palmer" <rebecca_palmer@zoho.com>
-Date: Sat, 21 Jul 2018 20:05:54 +0100
-Subject: Add preliminary LLVM 7 support
-
-This is preliminary because LLVM 7 has not been released yet:
-it was tested with the snapshot from Debian experimental (svn336894).
-
-1.Change linking order, as clangCodeGen now links to clangFrontend
-2.Pass references not pointers to WriteBitcodeToFile and CloneModule
-3.Add the headers that LoopSimplifyID, LCSSAID and
-some create*Pass have moved to
-4.Define our DEBUG whether or not we just undefined LLVM's
-(theirs is now LLVM_DEBUG, but we never actually use it)
-
-Signed-off-by: Rebecca N. Palmer <rebecca_palmer@zoho.com>
-Reviewed-by: Yang Rong <rong.r.yang@intel.com>
----
- CMake/FindLLVM.cmake                     | 2 +-
- backend/src/backend/gen_program.cpp      | 8 ++++++++
- backend/src/backend/program.cpp          | 4 ++++
- backend/src/llvm/ExpandLargeIntegers.cpp | 2 +-
- backend/src/llvm/llvm_bitcode_link.cpp   | 4 ++++
- backend/src/llvm/llvm_includes.hpp       | 4 ++++
- 6 files changed, 22 insertions(+), 2 deletions(-)
-
-diff --git a/CMake/FindLLVM.cmake b/CMake/FindLLVM.cmake
-index 5457f24..f882589 100644
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -113,10 +113,10 @@ macro(add_one_lib name)
- endmacro()
- 
- #Assume clang lib path same as llvm lib path
-+add_one_lib("clangCodeGen")
- add_one_lib("clangFrontend")
- add_one_lib("clangSerialization")
- add_one_lib("clangDriver")
--add_one_lib("clangCodeGen")
- add_one_lib("clangSema")
- add_one_lib("clangStaticAnalyzerFrontend")
- add_one_lib("clangStaticAnalyzerCheckers")
-diff --git a/backend/src/backend/gen_program.cpp b/backend/src/backend/gen_program.cpp
-index 274c99c..4159234 100644
---- a/backend/src/backend/gen_program.cpp
-+++ b/backend/src/backend/gen_program.cpp
-@@ -454,7 +454,11 @@ namespace gbe {
- #ifdef GBE_COMPILER_AVAILABLE
-       std::string str;
-       llvm::raw_string_ostream OS(str);
-+#if LLVM_VERSION_MAJOR >= 7
-+      llvm::WriteBitcodeToFile(*((llvm::Module*)prog->module), OS);
-+#else
-       llvm::WriteBitcodeToFile((llvm::Module*)prog->module, OS);
-+#endif
-       std::string& bin_str = OS.str();
-       int llsz = bin_str.size();
-       *binary = (char *)malloc(sizeof(char) * (llsz+1) );
-@@ -545,7 +549,11 @@ namespace gbe {
-                                     &modRef);
-         src = llvm::unwrap(modRef);
-       }
-+#if LLVM_VERSION_MAJOR >= 7
-+      llvm::Module* clone = llvm::CloneModule(*src).release();
-+#else
-       llvm::Module* clone = llvm::CloneModule(src).release();
-+#endif
-       if (LLVMLinkModules2(wrap(dst), wrap(clone))) {
- #elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-       if (LLVMLinkModules(wrap(dst), wrap(src), LLVMLinkerPreserveSource_Removed, &errMsg)) {
-diff --git a/backend/src/backend/program.cpp b/backend/src/backend/program.cpp
-index c37c595..b36f7b4 100644
---- a/backend/src/backend/program.cpp
-+++ b/backend/src/backend/program.cpp
-@@ -794,7 +794,11 @@ namespace gbe {
-       llvm::raw_fd_ostream ostream (dumpSPIRBinaryName.c_str(),
-                                     err, llvm::sys::fs::F_None);
-       if (!err)
-+#if LLVM_VERSION_MAJOR<7
-         llvm::WriteBitcodeToFile(*out_module, ostream);
-+#else
-+        llvm::WriteBitcodeToFile(**out_module, ostream);
-+#endif
-     }
- #endif
-     return true;
-diff --git a/backend/src/llvm/ExpandLargeIntegers.cpp b/backend/src/llvm/ExpandLargeIntegers.cpp
-index 8515dc1..4aec44e 100644
---- a/backend/src/llvm/ExpandLargeIntegers.cpp
-+++ b/backend/src/llvm/ExpandLargeIntegers.cpp
-@@ -99,8 +99,8 @@ using namespace llvm;
- 
- #ifdef DEBUG
-   #undef DEBUG
--  #define DEBUG(...)
- #endif
-+#define DEBUG(...)
- // Break instructions up into no larger than 64-bit chunks.
- static const unsigned kChunkBits = 64;
- static const unsigned kChunkBytes = kChunkBits / CHAR_BIT;
-diff --git a/backend/src/llvm/llvm_bitcode_link.cpp b/backend/src/llvm/llvm_bitcode_link.cpp
-index ef56e4c..4c3e20e 100644
---- a/backend/src/llvm/llvm_bitcode_link.cpp
-+++ b/backend/src/llvm/llvm_bitcode_link.cpp
-@@ -340,7 +340,11 @@ namespace gbe
-     /* We use beignet's bitcode as dst because it will have a lot of
-        lazy functions which will not be loaded. */
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 39
-+#if LLVM_VERSION_MAJOR >= 7
-+    llvm::Module * linked_module = llvm::CloneModule(*(llvm::Module*)mod).release();
-+#else
-     llvm::Module * linked_module = llvm::CloneModule((llvm::Module*)mod).release();
-+#endif
-     if(LLVMLinkModules2(wrap(clonedLib), wrap(linked_module))) {
- #else
-     char* errorMsg;
-diff --git a/backend/src/llvm/llvm_includes.hpp b/backend/src/llvm/llvm_includes.hpp
-index 184553a..ffccf02 100644
---- a/backend/src/llvm/llvm_includes.hpp
-+++ b/backend/src/llvm/llvm_includes.hpp
-@@ -89,6 +89,10 @@
- #include "llvm/CodeGen/IntrinsicLowering.h"
- 
- #include "llvm/Transforms/Scalar.h"
-+#if LLVM_VERSION_MAJOR >= 7
-+#include "llvm/Transforms/Utils.h"
-+#include "llvm/Transforms/InstCombine/InstCombine.h"
-+#endif
- #include "llvm/MC/MCAsmInfo.h"
- #include "llvm/MC/MCContext.h"
- #include "llvm/MC/MCInstrInfo.h"
--- 
-cgit v1.1
-
diff --git a/srcpkgs/beignet/patches/llvm06.patch b/srcpkgs/beignet/patches/llvm06.patch
deleted file mode 100644
index 3389e66c82df..000000000000
--- a/srcpkgs/beignet/patches/llvm06.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-Source: Arch Linux
-Upstream: unknown
-Reason: fixes llvm6 compilation
-
---- a/backend/src/llvm/llvm_to_gen.cpp	2017-10-24 09:04:48.000000000 +0300
-+++ b/backend/src/llvm/llvm_to_gen.cpp	2018-03-16 16:08:54.669963824 +0200
-@@ -322,7 +322,11 @@ namespace gbe
-     DataLayout DL(&mod);
-     
-     gbeDiagnosticContext dc;
-+#if LLVM_VERSION_MAJOR >= 6
-+    mod.getContext().setDiagnosticHandlerCallBack(&gbeDiagnosticHandler,&dc);
-+#else
-     mod.getContext().setDiagnosticHandler(&gbeDiagnosticHandler,&dc);
-+#endif
- 
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-     mod.setDataLayout(DL);
---- a/backend/src/llvm/llvm_unroll.cpp	2017-10-24 09:04:48.000000000 +0300
-+++ b/backend/src/llvm/llvm_unroll.cpp	2018-03-16 16:09:47.736403557 +0200
-@@ -205,7 +205,9 @@ namespace gbe {
-           if (parentTripCount != 0 && currTripCount * parentTripCount > 32) {
-             //Don't change the unrollID if doesn't force unroll.
-             //setUnrollID(parentL, false);
--#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-+#if LLVM_VERSION_MAJOR >= 6
-+            loopInfo.erase(parentL);
-+#elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-             loopInfo.markAsRemoved(parentL);
- #else
-             LPM.deleteLoopFromQueue(parentL);
-Only in Beignet-1.3.2-Source: build
-
diff --git a/srcpkgs/beignet/patches/llvm08.patch b/srcpkgs/beignet/patches/llvm08.patch
deleted file mode 100644
index a0c5e7a7c4f7..000000000000
--- a/srcpkgs/beignet/patches/llvm08.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 75c152599a7c1739e6dadcdb9b377acf7e44d9cf Mon Sep 17 00:00:00 2001
-From: Jan Beich <jbeich@FreeBSD.org>
-Date: Wed, 30 Jan 2019 12:42:34 +0000
-Subject: [PATCH] lang/beignet: unbreak with llvm80
-
-Regressed by https://github.com/llvm/llvm-project/commit/721d95713a9e
-
-unable to load /usr/local/lib/beignet//libgbeinterp.so which is part of the driver, please check!
-ld-elf.so.1: /usr/local/lib/beignet//libgbeinterp.so: Undefined symbol "_ZN4llvm24DisableABIBreakingChecksE"
-
-Regressed by https://github.com/llvm/llvm-project/commit/4a2d58e16acc
-
-backend/src/llvm/llvm_gen_backend.cpp:3076:5: error:
-      unknown type name 'TerminatorInst'
-    TerminatorInst *term = bb->getTerminator();
-    ^
-backend/src/llvm/llvm_gen_backend.cpp:3083:5: error:
-      unknown type name 'TerminatorInst'
-    TerminatorInst *term = bb->getTerminator();
-    ^
-
---- a/backend/src/CMakeLists.txt	2017-09-22 08:05:22 UTC
-+++ b/backend/src/CMakeLists.txt
-@@ -168,6 +168,7 @@ add_dependencies(gbe beignet_bitcode)
- endif (NOT (USE_STANDALONE_GBE_COMPILER STREQUAL "true"))
- 
- add_library(gbeinterp SHARED gbe_bin_interpreter.cpp)
-+target_link_libraries(gbeinterp ${LLVM_MODULE_LIBS})
- 
- if (LLVM_VERSION_NODOT VERSION_EQUAL 34)
-   find_library(TERMINFO NAMES tinfo ncurses)
---- a/backend/src/llvm/llvm_gen_backend.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -3073,14 +3073,22 @@ namespace gbe
- 
- 
-   static unsigned getChildNo(BasicBlock *bb) {
-+#if LLVM_VERSION_MAJOR < 8
-     TerminatorInst *term = bb->getTerminator();
-+#else
-+    Instruction *term = bb->getTerminator();
-+#endif
-     return term->getNumSuccessors();
-   }
- 
-   // return NULL if index out-range of children number
-   static BasicBlock *getChildPossible(BasicBlock *bb, unsigned index) {
- 
-+#if LLVM_VERSION_MAJOR < 8
-     TerminatorInst *term = bb->getTerminator();
-+#else
-+    Instruction *term = bb->getTerminator();
-+#endif
-     unsigned childNo = term->getNumSuccessors();
-     BasicBlock *child = NULL;
-     if(index < childNo) {
diff --git a/srcpkgs/beignet/patches/llvm09.patch b/srcpkgs/beignet/patches/llvm09.patch
deleted file mode 100644
index acaeceabb6dd..000000000000
--- a/srcpkgs/beignet/patches/llvm09.patch
+++ /dev/null
@@ -1,111 +0,0 @@
-Source: FreeBSD + q66
-
-Mostly FreeBSD other than FindLLVM.cmake changes.
-Linking against clang-cpp does not work for us.
-
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -140,6 +140,7 @@ add_one_lib("clangStaticAnalyzerCore")
- add_one_lib("clangAnalysis")
- add_one_lib("clangEdit")
- add_one_lib("clangAST")
-+add_one_lib("clangASTMatchers")
- add_one_lib("clangParse")
- add_one_lib("clangSema")
- add_one_lib("clangLex")
---- a/backend/src/llvm/llvm_intrinsic_lowering.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_intrinsic_lowering.cpp
-@@ -77,7 +77,11 @@ namespace gbe {
-         std::vector<Type *> ParamTys;
-         for (Value** I = ArgBegin; I != ArgEnd; ++I)
-           ParamTys.push_back((*I)->getType());
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+        FunctionCallee FCache = M->getOrInsertFunction(NewFn,
-+#else
-         Constant* FCache = M->getOrInsertFunction(NewFn,
-+#endif
-                                         FunctionType::get(RetTy, ParamTys, false));
- 
-         IRBuilder<> Builder(CI->getParent(), BasicBlock::iterator(CI));
---- a/backend/src/llvm/llvm_sampler_fix.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp
-@@ -82,7 +82,11 @@ namespace gbe {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-           Module *M = I->getParent()->getParent()->getParent();
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+          FunctionCallee samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#endif
- #else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType(), nullptr);
- #endif
-@@ -124,7 +128,11 @@ namespace gbe {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-           Module *M = I->getParent()->getParent()->getParent();
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+          FunctionCallee samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#endif
- #else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType(), nullptr);
- #endif
---- a/backend/src/llvm/llvm_profiling.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_profiling.cpp
-@@ -163,10 +163,18 @@ namespace gbe
-       // __gen_ocl_store_timestamp(int nth, int type);
-       Value *Args[2] = {ConstantInt::get(intTy, pointNum++), ConstantInt::get(intTy, profilingType)};
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+      builder->CreateCall(module->getOrInsertFunction(
-+#else
-       builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-+#endif
-               "__gen_ocl_calc_timestamp", Type::getVoidTy(module->getContext()),
-               IntegerType::getInt32Ty(module->getContext()),
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+              IntegerType::getInt32Ty(module->getContext())),
-+#else
-               IntegerType::getInt32Ty(module->getContext()))),
-+#endif
-               ArrayRef<Value*>(Args));
- #else
-       builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-@@ -185,10 +193,18 @@ namespace gbe
-     Value *Args2[2] = {profilingBuf, ConstantInt::get(intTy, profilingType)};
- 
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+    builder->CreateCall(module->getOrInsertFunction(
-+#else
-     builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-+#endif
-             "__gen_ocl_store_profiling", Type::getVoidTy(module->getContext()),
-             ptrTy,
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+            IntegerType::getInt32Ty(module->getContext())),
-+#else
-             IntegerType::getInt32Ty(module->getContext()))),
-+#endif
-             ArrayRef<Value*>(Args2));
- #else
-     builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
---- a/backend/src/llvm/llvm_device_enqueue.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_device_enqueue.cpp
-@@ -398,8 +398,13 @@ namespace gbe {
-               std::vector<Type *> ParamTys;
-               for (Value** iter = args.begin(); iter != args.end(); ++iter)
-                 ParamTys.push_back((*iter)->getType());
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+              CallInst* newCI = builder.CreateCall(mod->getOrInsertFunction(
-+                              "__gen_enqueue_kernel_slm", FunctionType::get(intTy, ParamTys, false)), args);
-+#else
-               CallInst* newCI = builder.CreateCall(cast<llvm::Function>(mod->getOrInsertFunction(
-                               "__gen_enqueue_kernel_slm", FunctionType::get(intTy, ParamTys, false))), args);
-+#endif
-               CI->replaceAllUsesWith(newCI);
-               deadInsnSet.insert(CI);
-             }
diff --git a/srcpkgs/beignet/patches/llvm10.patch b/srcpkgs/beignet/patches/llvm10.patch
deleted file mode 100644
index 8aafe48a240d..000000000000
--- a/srcpkgs/beignet/patches/llvm10.patch
+++ /dev/null
@@ -1,347 +0,0 @@
-diff --git CMake/FindLLVM.cmake CMake/FindLLVM.cmake
-index 0a59e47..6e90923 100644
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -104,28 +104,16 @@ string(REGEX REPLACE " *\n" "" LLVM_SYSTEM_LIBS ${LLVM_SYSTEM_LIBS_ORIG})
- endif (LLVM_SYSTEM_LIBS_ORIG)
- endif (LLVM_VERSION_NODOT VERSION_GREATER 34)
- 
-+#something harmless because whitespace at start is an error
-+set(CLANG_LIBRARIES "-ldl")
- macro(add_one_lib name)
-   FIND_LIBRARY(CLANG_LIB
-     NAMES ${name}
-     PATHS ${LLVM_LIBRARY_DIR} NO_DEFAULT_PATH)
--  set(CLANG_LIBRARIES ${CLANG_LIBRARIES} ${CLANG_LIB})
-+  set(CLANG_LIBRARIES "${CLANG_LIBRARIES} ${CLANG_LIB}")
-+  message(STATUS "clanglibs name ${name} this ${CLANG_LIB} all ${CLANG_LIBRARIES} ")
- 	unset(CLANG_LIB CACHE)
- endmacro()
- 
- #Assume clang lib path same as llvm lib path
--add_one_lib("clangCodeGen")
--add_one_lib("clangFrontend")
--add_one_lib("clangSerialization")
--add_one_lib("clangDriver")
--add_one_lib("clangSema")
--add_one_lib("clangStaticAnalyzerFrontend")
--add_one_lib("clangStaticAnalyzerCheckers")
--add_one_lib("clangStaticAnalyzerCore")
--add_one_lib("clangAnalysis")
--add_one_lib("clangEdit")
--add_one_lib("clangAST")
--add_one_lib("clangASTMatchers")
--add_one_lib("clangParse")
--add_one_lib("clangSema")
--add_one_lib("clangLex")
--add_one_lib("clangBasic")
-+add_one_lib("clang-cpp")
-diff --git CMakeLists.txt CMakeLists.txt
-index c11acbb..08f427d 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -79,7 +79,7 @@ elseif (COMPILER STREQUAL "CLANG")
- elseif (COMPILER STREQUAL "ICC")
-   set (CMAKE_C_CXX_FLAGS "${CMAKE_C_CXX_FLAGS}  -wd2928 -Wall -fPIC -fstrict-aliasing -fp-model fast -msse4.1 -Wl,-E")
- endif ()
--set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
-+set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof")
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
- set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
- set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
-diff --git backend/src/backend/program.cpp backend/src/backend/program.cpp
-index b36f7b4..e666031 100644
---- a/backend/src/backend/program.cpp
-+++ b/backend/src/backend/program.cpp
-@@ -694,9 +694,9 @@ namespace gbe {
- #endif
-                 );
- 
-+    llvm::cl::ResetAllOptionOccurrences();
-     clang::CompilerInvocation::CreateFromArgs(*CI,
--                                              &args[0],
--                                              &args[0] + args.size(),
-+                                              clang::ArrayRef<const char*>(args),
-                                               Diags);
-     // Create the compiler instance
-     clang::CompilerInstance Clang;
-@@ -1242,8 +1242,7 @@ EXTEND_QUOTE:
-       // Create the compiler invocation
-       std::unique_ptr<clang::CompilerInvocation> CI(new clang::CompilerInvocation);
-       return clang::CompilerInvocation::CreateFromArgs(*CI,
--                                                       &args[0],
--                                                       &args[0] + args.size(),
-+                                                       clang::ArrayRef<const char*>(args),
-                                                        Diags);
-     }
- #endif
-diff --git backend/src/llvm/llvm_gen_backend.cpp backend/src/llvm/llvm_gen_backend.cpp
-index c6fc30d..82441d8 100644
---- a/backend/src/llvm/llvm_gen_backend.cpp
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -575,10 +575,12 @@ namespace gbe
-         has_errors(false),
-         legacyMode(true)
-     {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-       initializeLoopInfoWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeLoopInfoPass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-       pass = PASS_EMIT_REGISTERS;
-     }
-diff --git backend/src/llvm/llvm_gen_backend.hpp backend/src/llvm/llvm_gen_backend.hpp
-index b4715b1..8e74f7a 100644
---- a/backend/src/llvm/llvm_gen_backend.hpp
-+++ b/backend/src/llvm/llvm_gen_backend.hpp
-@@ -130,10 +130,10 @@ namespace gbe
-   llvm::FunctionPass *createGenPass(ir::Unit &unit);
- 
-   /*! Remove the GEP instructions */
--  llvm::BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit);
-+  llvm::FunctionPass *createRemoveGEPPass(const ir::Unit &unit);
- 
-   /*! Merge load/store if possible */
--  llvm::BasicBlockPass *createLoadStoreOptimizationPass();
-+  llvm::FunctionPass *createLoadStoreOptimizationPass();
- 
-   /*! Scalarize all vector op instructions */
-   llvm::FunctionPass* createScalarizePass();
-@@ -141,7 +141,7 @@ namespace gbe
-   llvm::ModulePass* createBarrierNodupPass(bool);
- 
-   /*! Convert the Intrinsic call to gen function */
--  llvm::BasicBlockPass *createIntrinsicLoweringPass();
-+  llvm::FunctionPass *createIntrinsicLoweringPass();
- 
-   /*! Passer the printf function call. */
-   llvm::FunctionPass* createPrintfParserPass(ir::Unit &unit);
-diff --git backend/src/llvm/llvm_intrinsic_lowering.cpp backend/src/llvm/llvm_intrinsic_lowering.cpp
-index 94f0ce6..b5539e9 100644
---- a/backend/src/llvm/llvm_intrinsic_lowering.cpp
-+++ b/backend/src/llvm/llvm_intrinsic_lowering.cpp
-@@ -29,12 +29,12 @@
- using namespace llvm;
- 
- namespace gbe {
--    class InstrinsicLowering : public BasicBlockPass
-+    class InstrinsicLowering : public FunctionPass
-     {
-     public:
-       static char ID;
-       InstrinsicLowering() :
--        BasicBlockPass(ID) {}
-+        FunctionPass(ID) {}
- 
-       void getAnalysisUsage(AnalysisUsage &AU) const {
- 
-@@ -93,9 +93,9 @@ namespace gbe {
-         CI->eraseFromParent();
-         return NewCI;
-       }
--      virtual bool runOnBasicBlock(BasicBlock &BB)
-+      virtual bool runOnFunction(Function &F)
-       {
--        bool changedBlock = false;
-+        for (BasicBlock &BB : F) {
-         Module *M = BB.getParent()->getParent();
- 
-         DataLayout TD(M);
-@@ -159,13 +159,14 @@ namespace gbe {
-             }
-           }
-         }
--        return changedBlock;
-+        }
-+        return true;
-       }
-     };
- 
-     char InstrinsicLowering::ID = 0;
- 
--    BasicBlockPass *createIntrinsicLoweringPass() {
-+    FunctionPass *createIntrinsicLoweringPass() {
-       return new InstrinsicLowering();
-     }
- } // end namespace
-diff --git backend/src/llvm/llvm_loadstore_optimization.cpp backend/src/llvm/llvm_loadstore_optimization.cpp
-index 5aa38be..e314302 100644
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
-@@ -26,13 +26,13 @@
- 
- using namespace llvm;
- namespace gbe {
--  class GenLoadStoreOptimization : public BasicBlockPass {
-+  class GenLoadStoreOptimization : public FunctionPass {
- 
-   public:
-     static char ID;
-     ScalarEvolution *SE;
-     const DataLayout *TD;
--    GenLoadStoreOptimization() : BasicBlockPass(ID) {}
-+    GenLoadStoreOptimization() : FunctionPass(ID) {}
- 
-     void getAnalysisUsage(AnalysisUsage &AU) const {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-@@ -45,7 +45,9 @@ namespace gbe {
-       AU.setPreservesCFG();
-     }
- 
--    virtual bool runOnBasicBlock(BasicBlock &BB) {
-+    virtual bool runOnFunction(Function &F) {
-+        bool changedAnyBlock = false;
-+        for (BasicBlock &BB : F) {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-       SE = &getAnalysis<ScalarEvolutionWrapperPass>().getSE();
- #else
-@@ -59,7 +61,9 @@ namespace gbe {
-       #else
-         TD = getAnalysisIfAvailable<DataLayout>();
-       #endif
--      return optimizeLoadStore(BB);
-+           changedAnyBlock = optimizeLoadStore(BB) | changedAnyBlock;
-+        }
-+        return changedAnyBlock;
-     }
-     Type    *getValueType(Value *insn);
-     Value   *getPointerOperand(Value *I);
-@@ -148,7 +152,7 @@ namespace gbe {
-       values.push_back(merged[i]);
-     }
-     LoadInst *ld = cast<LoadInst>(merged[0]);
--    unsigned align = ld->getAlignment();
-+    MaybeAlign align = ld->getAlign();
-     unsigned addrSpace = ld->getPointerAddressSpace();
-     // insert before first load
-     Builder.SetInsertPoint(ld);
-@@ -231,7 +235,7 @@ namespace gbe {
- 
-     unsigned addrSpace = st->getPointerAddressSpace();
- 
--    unsigned align = st->getAlignment();
-+    MaybeAlign align = st->getAlign();
-     // insert before the last store
-     Builder.SetInsertPoint(merged[size-1]);
- 
-@@ -325,7 +329,7 @@ namespace gbe {
-     return changed;
-   }
- 
--  BasicBlockPass *createLoadStoreOptimizationPass() {
-+  FunctionPass *createLoadStoreOptimizationPass() {
-     return new GenLoadStoreOptimization();
-   }
- };
-diff --git backend/src/llvm/llvm_passes.cpp backend/src/llvm/llvm_passes.cpp
-index 10752a3..b8f2282 100644
---- a/backend/src/llvm/llvm_passes.cpp
-+++ b/backend/src/llvm/llvm_passes.cpp
-@@ -37,7 +37,7 @@
- #include "sys/map.hpp"
- 
- using namespace llvm;
--
-+template class cfg::Update<BasicBlock *>;
- namespace gbe
- {
-   bool isKernelFunction(const llvm::Function &F) {
-@@ -219,13 +219,13 @@ namespace gbe
-     return offset;
-   }
- 
--  class GenRemoveGEPPasss : public BasicBlockPass
-+  class GenRemoveGEPPasss : public FunctionPass
-   {
- 
-    public:
-     static char ID;
-     GenRemoveGEPPasss(const ir::Unit &unit) :
--      BasicBlockPass(ID),
-+      FunctionPass(ID),
-       unit(unit) {}
-     const ir::Unit &unit;
-     void getAnalysisUsage(AnalysisUsage &AU) const {
-@@ -242,16 +242,18 @@ namespace gbe
- 
-     bool simplifyGEPInstructions(GetElementPtrInst* GEPInst);
- 
--    virtual bool runOnBasicBlock(BasicBlock &BB)
-+    virtual bool runOnFunction(Function &F)
-     {
--      bool changedBlock = false;
-+      bool changedAnyBlock = false;
-+        for (BasicBlock &BB : F) {
-       iplist<Instruction>::iterator I = BB.getInstList().begin();
-       for (auto nextI = I, E = --BB.getInstList().end(); I != E; I = nextI) {
-         iplist<Instruction>::iterator I = nextI++;
-         if(GetElementPtrInst* gep = dyn_cast<GetElementPtrInst>(&*I))
--          changedBlock = (simplifyGEPInstructions(gep) || changedBlock);
-+          changedAnyBlock = (simplifyGEPInstructions(gep) | changedAnyBlock);
-       }
--      return changedBlock;
-+        }
-+      return changedAnyBlock;
-     }
-   };
- 
-@@ -367,7 +369,7 @@ namespace gbe
-     return true;
-   }
- 
--  BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit) {
-+  FunctionPass *createRemoveGEPPass(const ir::Unit &unit) {
-     return new GenRemoveGEPPasss(unit);
-   }
- } /* namespace gbe */
-diff --git backend/src/llvm/llvm_sampler_fix.cpp backend/src/llvm/llvm_sampler_fix.cpp
-index 2a097c8..863be6d 100644
---- a/backend/src/llvm/llvm_sampler_fix.cpp
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp
-@@ -33,10 +33,12 @@ namespace gbe {
-   class SamplerFix : public FunctionPass {
-   public:
-     SamplerFix() : FunctionPass(ID) {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
-       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-     }
- 
-diff --git backend/src/llvm/llvm_scalarize.cpp backend/src/llvm/llvm_scalarize.cpp
-index e9a2a66..e9d2ee4 100644
---- a/backend/src/llvm/llvm_scalarize.cpp
-+++ b/backend/src/llvm/llvm_scalarize.cpp
-@@ -96,10 +96,12 @@ namespace gbe {
- 
-     Scalarize() : FunctionPass(ID)
-     {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
-       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-     }
- 
-diff --git utests/CMakeLists.txt utests/CMakeLists.txt
-index 300d87a..64179c7 100644
---- a/utests/CMakeLists.txt
-+++ b/utests/CMakeLists.txt
-@@ -26,8 +26,8 @@ if (NOT NOT_BUILD_STAND_ALONE_UTEST)
-   # Threads
-   Find_Package(Threads)
- 
--  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
--  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
-+  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof -ffloat-store -fno-strict-aliasing")
-+  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS} -ffloat-store -fno-strict-aliasing") #compiler_{degrees,radians,function_argument2} use equality comparison of floats, compiler_long_bitcast uses aliasing
-   set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
-   set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
-   set (CMAKE_CXX_FLAGS_MINSIZEREL     "-Os -DNDEBUG -DGBE_DEBUG=0")
diff --git a/srcpkgs/beignet/patches/llvm11.patch b/srcpkgs/beignet/patches/llvm11.patch
deleted file mode 100644
index 2c3a4278943c..000000000000
--- a/srcpkgs/beignet/patches/llvm11.patch
+++ /dev/null
@@ -1,937 +0,0 @@
-Source: Snektron
-
-There were a few changes required for LLVM 11:
-* llvm::StringRef requires .str(), implicit conversion was removed
-* llvm::CallSite was removed, but the required methods are available on llvm::CallInst
-* VectorTyID was split into FixedVectorTyID and ScalableVectorTyID, FixedVectorTyID was used
-* CallInst::getCalledValue() was renamed to CallInst::getCalledOperand()
-* Implicit conversion from MaybeAlign to Align was removed, so MaybeAlign::valueOrOne was used instead.
-
---- a/backend/src/llvm/StripAttributes.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/StripAttributes.cpp	2020-11-09 19:04:19.641897141 +0100
-@@ -107,9 +107,8 @@
-        BB != E; ++BB) {
-     for (BasicBlock::iterator Inst = BB->begin(), E = BB->end();
-          Inst != E; ++Inst) {
--      CallSite Call(&*Inst);
--      if (Call)
--        Call.setCallingConv(CallingConv::C);
-+      if (CallInst* callInst = dyn_cast<CallInst>(&*Inst))
-+        callInst->setCallingConv(CallingConv::C);
-     }
-   }
-
---- a/backend/src/llvm/llvm_bitcode_link.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_bitcode_link.cpp	2020-11-09 17:04:09.633753428 +0100
-@@ -98,7 +98,7 @@
-         if (callFunc && callFunc->getIntrinsicID() != 0)
-           continue;
-
--        std::string fnName = call->getCalledValue()->stripPointerCasts()->getName();
-+        std::string fnName = call->getCalledOperand()->stripPointerCasts()->getName().str();
-
-         if (!MFS.insert(fnName).second) {
-           continue;
---- a/backend/src/llvm/llvm_device_enqueue.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_device_enqueue.cpp	2020-11-09 19:01:49.201915008 +0100
-@@ -45,7 +45,7 @@
-       return NULL;
-
-     /* This is a fake, to check the function bitcast is for block or not */
--    std::string fnName = Fn->getName();
-+    std::string fnName = Fn->getName().str();
-     if(fnName.find("_invoke") == std::string::npos)
-       return NULL;
-
-@@ -119,18 +119,18 @@
-       ParamTys.push_back(ty);
-     }
-     FunctionType* NewFT = FunctionType::get(Fn->getReturnType(), ParamTys, false);
--    Function* NewFn = Function::Create(NewFT, Function::ExternalLinkage, Fn->getName());
-+    Function* NewFn = Function::Create(NewFT, Function::ExternalLinkage, Fn->getName().str());
-     SmallVector<ReturnInst*, 8> Returns;
-
-     Function::arg_iterator NewFnArgIt = NewFn->arg_begin();
-     for (Function::arg_iterator I = Fn->arg_begin(), E = Fn->arg_end(); I != E; ++I) {
--      std::string ArgName = I->getName();
-+      std::string ArgName = I->getName().str();
-       NewFnArgIt->setName(ArgName);
-       VMap[&*I] = &(*NewFnArgIt++);
-     }
-     CloneFunctionInto(NewFn, Fn, VMap, /*ModuleLevelChanges=*/true, Returns);
-
--    Fn->setName("__d" + Fn->getName());
-+    Fn->setName("__d" + Fn->getName().str());
-     mod->getFunctionList().push_back(NewFn);
-     //mod->getOrInsertFunction(NewFn->getName(), NewFn->getFunctionType(),
-     //                         NewFn->getAttributes());
-@@ -147,7 +147,7 @@
-       argTypeNames.push_back(llvm::MDString::get(Context, "char*"));
-       argBaseTypeNames.push_back(llvm::MDString::get(Context, "char*"));
-       argTypeQuals.push_back(llvm::MDString::get(Context, ""));
--      argNames.push_back(llvm::MDString::get(Context, I->getName()));
-+      argNames.push_back(llvm::MDString::get(Context, I->getName().str()));
-     }
-
-     //If run to here, llvm version always > 3.9, add the version check just for build.
-@@ -198,7 +198,7 @@
-            * invoke pointer to store the index in the unit's block functions index.*/
-           Function *Fn = dyn_cast<Function>(bt->getOperand(0));
-
--          std::string fnName = Fn->getName();
-+          std::string fnName = Fn->getName().str();
-           int index = -1;
-           for(size_t i=0; i<unit.blockFuncs.size(); i++) {
-             if(unit.blockFuncs[i] == fnName) {
-@@ -241,7 +241,7 @@
-             //unnamed call function, parse the use to find the define of called function
-             SmallVector<Value*, 16> args(CI->op_begin(), CI->op_end()-1);
-
--            Value *v = CI->getCalledValue();
-+            Value *v = CI->getCalledOperand();
-             BitCastInst* bt = dyn_cast<BitCastInst>(v);
-             if(bt == NULL)
-               continue;
-@@ -316,7 +316,7 @@
-                   ConstantExpr *expr = dyn_cast<ConstantExpr>(c->getOperand(3));
-                   BitCastInst *bt = dyn_cast<BitCastInst>(expr->getAsInstruction());
-                   Function* f = dyn_cast<Function>(bt->getOperand(0));
--                  blocks[v] = f->getName();
-+                  blocks[v] = f->getName().str();
-                 }
-               }
-
-@@ -332,7 +332,7 @@
-           } else {
-             //handle enqueue_kernel function call
-             Function *fn = CI->getCalledFunction();
--            if (fn->getName().find("enqueue_kernel") == std::string::npos)
-+            if (fn->getName().str().find("enqueue_kernel") == std::string::npos)
-               continue;
-
-             //block parameter's index, 3 or 6
-@@ -361,7 +361,7 @@
-                   ConstantExpr *expr = dyn_cast<ConstantExpr>(c->getOperand(3));
-                   BitCastInst *bt = dyn_cast<BitCastInst>(expr->getAsInstruction());
-                   Function* f = dyn_cast<Function>(bt->getOperand(0));
--                  blocks[v] = f->getName();
-+                  blocks[v] = f->getName().str();
-                 }
-               }
-             } else if(isa<AllocaInst>(block)) {
---- a/backend/src/llvm/llvm_gen_backend.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_gen_backend.cpp	2020-11-09 18:33:50.919114327 +0100
-@@ -376,7 +376,7 @@
-           GBE_ASSERT(index == 0);
-           return this->_newScalar(value, key, type, index, uniform);
-           break;
--        case Type::VectorTyID:
-+        case Type::FixedVectorTyID:
-         {
-           auto vectorType = cast<VectorType>(type);
-           auto elementType = vectorType->getElementType();
-@@ -743,20 +743,20 @@
- #undef DECL_VISIT_FN
-
-     // Emit rounding instructions from gen native function
--    void emitRoundingCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode);
-+    void emitRoundingCallInst(CallInst &I, ir::Opcode opcode);
-     // Emit unary instructions from gen native function
--    void emitUnaryCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode, ir::Type = ir::TYPE_FLOAT);
-+    void emitUnaryCallInst(CallInst &I, ir::Opcode opcode, ir::Type = ir::TYPE_FLOAT);
-     // Emit unary instructions from gen native function
--    void emitAtomicInst(CallInst &I, CallSite &CS, ir::AtomicOps opcode);
-+    void emitAtomicInst(CallInst &I, ir::AtomicOps opcode);
-     // Emit workgroup instructions
--    void emitWorkGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode);
-+    void emitWorkGroupInst(CallInst &I, ir::WorkGroupOps opcode);
-     // Emit subgroup instructions
--    void emitSubGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode);
-+    void emitSubGroupInst(CallInst &I, ir::WorkGroupOps opcode);
-     // Emit subgroup instructions
--    void emitBlockReadWriteMemInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
--    void emitBlockReadWriteImageInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-+    void emitBlockReadWriteMemInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-+    void emitBlockReadWriteImageInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-
--    uint8_t appendSampler(CallSite::arg_iterator AI);
-+    uint8_t appendSampler(User::op_iterator AI);
-     uint8_t getImageID(CallInst &I);
-
-     // These instructions are not supported at all
-@@ -1320,13 +1320,13 @@
- #endif
-
-       if(typeNameNode) {
--        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
-+        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-       }
-       if(typeBaseNameNode) {
--        llvmInfo.typeBaseName= (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString();
-+        llvmInfo.typeBaseName= (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString().str();
-       }
--      llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
--      llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString();
-+      llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-+      llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString().str();
-       bool isImage = llvmInfo.isImageType();
-       bool isPipe = llvmInfo.isPipeType();
-       if (I->getType()->isPointerTy() || isImage || isPipe) {
-@@ -1531,7 +1531,7 @@
-             EltTy = getEltType(EltTy, TypeIndex);
-         }
-
--        ir::Constant cc = unit.getConstantSet().getConstant(pointer->getName());
-+        ir::Constant cc = unit.getConstantSet().getConstant(pointer->getName().str());
-         unsigned int defOffset = cc.getOffset();
-         relocs.push_back(ir::RelocEntry(offset, defOffset + constantOffset));
-
-@@ -1546,7 +1546,7 @@
-       return;
-     }
-     if (isa<GlobalVariable>(c)) {
--      ir::Constant cc = unit.getConstantSet().getConstant(c->getName());
-+      ir::Constant cc = unit.getConstantSet().getConstant(c->getName().str());
-       unsigned int defOffset = cc.getOffset();
-
-       relocs.push_back(ir::RelocEntry(offset, defOffset));
-@@ -1609,7 +1609,7 @@
-           }
-           break;
-         }
--      case Type::TypeID::VectorTyID:
-+      case Type::TypeID::FixedVectorTyID:
-         {
-           const ConstantDataSequential *cds = dyn_cast<ConstantDataSequential>(c);
-           const VectorType *vecTy = cast<VectorType>(type);
-@@ -1936,7 +1936,7 @@
-       case Type::PointerTyID:
-         regTranslator.newScalar(value, key, 0, uniform);
-         break;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         auto vectorType = cast<VectorType>(type);
-         const uint32_t elemNum = vectorType->getNumElements();
-@@ -2395,7 +2395,7 @@
- #endif
-         }
-         if(typeNameNode) {
--          llvmInfo.typeName = (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
-+          llvmInfo.typeName = (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-           //LLVM 3.9 image's type name include access qual, don't match OpenCL spec, erase them.
-           std::vector<std::string> filters = {"__read_only ", "__write_only "};
-           for (uint32_t i = 0; i < filters.size(); i++) {
-@@ -2406,16 +2406,16 @@
-           }
-         }
-         if(typeBaseNameNode){
--          llvmInfo.typeBaseName = (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString();
-+          llvmInfo.typeBaseName = (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString().str();
-         }
-         if(accessQualNode) {
--          llvmInfo.accessQual = (cast<MDString>(accessQualNode->getOperand(opID)))->getString();
-+          llvmInfo.accessQual = (cast<MDString>(accessQualNode->getOperand(opID)))->getString().str();
-         }
-         if(typeQualNode) {
--          llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString();
-+          llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString().str();
-         }
-         if(argNameNode){
--          llvmInfo.argName = (cast<MDString>(argNameNode->getOperand(opID)))->getString();
-+          llvmInfo.argName = (cast<MDString>(argNameNode->getOperand(opID)))->getString().str();
-         }
-
-         // function arguments are uniform values.
-@@ -3010,7 +3010,7 @@
-         } else {
-           this->newRegister(const_cast<GlobalVariable*>(&v));
-           ir::Register reg = regTranslator.getScalar(const_cast<GlobalVariable*>(&v), 0);
--          ir::Constant &con = unit.getConstantSet().getConstant(v.getName());
-+          ir::Constant &con = unit.getConstantSet().getConstant(v.getName().str());
-           if (!legacyMode) {
-             ir::Register regload = ctx.reg(getFamily(getType(ctx, v.getType())));
-             ctx.LOADI(getType(ctx, v.getType()), regload, ctx.newIntegerImmediate(con.getOffset(), getType(ctx, v.getType())));
-@@ -3212,7 +3212,7 @@
-         GBE_ASSERTM(false, "Unsupported calling convention");
-     }
-
--    ctx.startFunction(F.getName());
-+    ctx.startFunction(F.getName().str());
-
-     ir::Function &fn = ctx.getFunction();
-     this->regTranslator.clear();
-@@ -3810,9 +3810,9 @@
-
-   void GenWriter::regAllocateCallInst(CallInst &I) {
-     Value *dst = &I;
--    Value *Callee = I.getCalledValue();
-+    Value *Callee = I.getCalledOperand();
-     GBE_ASSERT(ctx.getFunction().getProfile() == ir::PROFILE_OCL);
--    GBE_ASSERT(isa<InlineAsm>(I.getCalledValue()) == false);
-+    GBE_ASSERT(isa<InlineAsm>(I.getCalledOperand()) == false);
-     if(I.getNumArgOperands()) GBE_ASSERT(I.hasStructRetAttr() == false);
-
-     // We only support a small number of intrinsics right now
-@@ -3870,7 +3870,7 @@
-       }
-     }
-     // Get the name of the called function and handle it
--    const std::string fnName = Callee->stripPointerCasts()->getName();
-+    const std::string fnName = Callee->stripPointerCasts()->getName().str();
-     auto genIntrinsicID = intrinsicMap.find(fnName);
-     switch (genIntrinsicID) {
-       case GEN_OCL_GET_GROUP_ID0:
-@@ -4166,7 +4166,7 @@
-     };
-   }
-
--  void GenWriter::emitRoundingCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode) {
-+  void GenWriter::emitRoundingCallInst(CallInst &I, ir::Opcode opcode) {
-     if (I.getType()->isHalfTy()) {
-       const ir::Register src = this->getRegister(I.getOperand(0));
-       const ir::Register srcFloat = ctx.reg(ir::FAMILY_DWORD);
-@@ -4177,14 +4177,14 @@
-       ctx.F32TO16(ir::TYPE_U16, ir::TYPE_FLOAT, dst, dstFloat);
-     } else {
-       GBE_ASSERT(I.getType()->isFloatTy());
--      this->emitUnaryCallInst(I,CS,opcode);
-+      this->emitUnaryCallInst(I,opcode);
-     }
-   }
-
--  void GenWriter::emitUnaryCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
-+  void GenWriter::emitUnaryCallInst(CallInst &I, ir::Opcode opcode, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--    CallSite::arg_iterator AE = CS.arg_end();
-+    User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-     GBE_ASSERT(AI != AE);
-     const ir::Register src = this->getRegister(*AI);
-@@ -4293,9 +4293,9 @@
-     this->emitAtomicInstHelper(opcode, type, dst, llvmPtr, payloadTuple);
-   }
-
--  void GenWriter::emitAtomicInst(CallInst &I, CallSite &CS, ir::AtomicOps opcode) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitAtomicInst(CallInst &I, ir::AtomicOps opcode) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-     Value *llvmPtr = *AI;
-     ir::AddressSpace addrSpace = addressSpaceLLVMToGen(llvmPtr->getType()->getPointerAddressSpace());
-@@ -4348,7 +4348,7 @@
-     }
-   }
-
--  void GenWriter::emitWorkGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode) {
-+  void GenWriter::emitWorkGroupInst(CallInst &I, ir::WorkGroupOps opcode) {
-     ir::Function &f = ctx.getFunction();
-
-     if (f.getwgBroadcastSLM() < 0 && opcode == ir::WORKGROUP_OP_BROADCAST) {
-@@ -4378,8 +4378,8 @@
-       GBE_ASSERT(f.gettidMapSLM() >= 0);
-     }
-
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     if (opcode == ir::WORKGROUP_OP_ALL || opcode == ir::WORKGROUP_OP_ANY) {
-@@ -4391,14 +4391,14 @@
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], 3);
-       ctx.WORKGROUP(opcode, (uint32_t)f.gettidMapSLM(), getRegister(&I), srcTuple, 3, ir::TYPE_S32);
-     } else if (opcode == ir::WORKGROUP_OP_BROADCAST) {
--      int argNum = CS.arg_size();
-+      int argNum = I.arg_size();
-       std::vector<ir::Register> src(argNum);
-       for (int i = 0; i < argNum; i++) {
-         src[i] = this->getRegister(*(AI++));
-       }
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], argNum);
-       ctx.WORKGROUP(ir::WORKGROUP_OP_BROADCAST, (uint32_t)f.getwgBroadcastSLM(), getRegister(&I), srcTuple, argNum,
--          getType(ctx, (*CS.arg_begin())->getType()));
-+          getType(ctx, (*I.arg_begin())->getType()));
-     } else {
-       ConstantInt *sign = dyn_cast<ConstantInt>(AI);
-       GBE_ASSERT(sign);
-@@ -4423,9 +4423,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitSubGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitSubGroupInst(CallInst &I, ir::WorkGroupOps opcode) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     if (opcode == ir::WORKGROUP_OP_ALL || opcode == ir::WORKGROUP_OP_ANY) {
-@@ -4435,7 +4435,7 @@
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], 1);
-       ctx.SUBGROUP(opcode, getRegister(&I), srcTuple, 1, ir::TYPE_S32);
-     } else if (opcode == ir::WORKGROUP_OP_BROADCAST) {
--      int argNum = CS.arg_size();
-+      int argNum = I.arg_size();
-       GBE_ASSERT(argNum == 2);
-       std::vector<ir::Register> src(argNum);
-       for (int i = 0; i < argNum; i++) {
-@@ -4443,7 +4443,7 @@
-       }
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], argNum);
-       ctx.SUBGROUP(ir::WORKGROUP_OP_BROADCAST, getRegister(&I), srcTuple, argNum,
--          getType(ctx, (*CS.arg_begin())->getType()));
-+          getType(ctx, (*I.arg_begin())->getType()));
-     } else {
-       ConstantInt *sign = dyn_cast<ConstantInt>(AI);
-       GBE_ASSERT(sign);
-@@ -4466,9 +4466,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitBlockReadWriteMemInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitBlockReadWriteMemInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     Value *llvmPtr = *(AI++);
-@@ -4522,9 +4522,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitBlockReadWriteImageInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitBlockReadWriteImageInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     const uint8_t imageID = getImageID(I);
-@@ -4557,7 +4557,7 @@
-
-   /* append a new sampler. should be called before any reference to
-    * a sampler_t value. */
--  uint8_t GenWriter::appendSampler(CallSite::arg_iterator AI) {
-+  uint8_t GenWriter::appendSampler(User::op_iterator AI) {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-     CallInst *TC = dyn_cast<CallInst>(*AI);
-     Constant *CPV = TC ? dyn_cast<Constant>(TC->getOperand(0)) : NULL;
-@@ -4595,10 +4595,9 @@
-         const ir::Function &fn = ctx.getFunction();
-
-         // Get the function arguments
--        CallSite CS(&I);
--        CallSite::arg_iterator AI = CS.arg_begin();
-+        User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--        CallSite::arg_iterator AE = CS.arg_end();
-+        User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-         switch (F->getIntrinsicID()) {
-           case Intrinsic::stacksave:
-@@ -4764,17 +4763,17 @@
-             ctx.MAD(srcType, dst, src0, src1, src2);
-           }
-           break;
--          case Intrinsic::sqrt: this->emitUnaryCallInst(I,CS,ir::OP_SQR); break;
--          case Intrinsic::ceil: this->emitRoundingCallInst(I,CS,ir::OP_RNDU); break;
--          case Intrinsic::trunc: this->emitRoundingCallInst(I,CS,ir::OP_RNDZ); break;
--          case Intrinsic::rint: this->emitRoundingCallInst(I,CS,ir::OP_RNDE); break;
--          case Intrinsic::floor: this->emitRoundingCallInst(I,CS,ir::OP_RNDD); break;
--          case Intrinsic::sin: this->emitUnaryCallInst(I,CS,ir::OP_SIN); break;
--          case Intrinsic::cos: this->emitUnaryCallInst(I,CS,ir::OP_COS); break;
--          case Intrinsic::log2: this->emitUnaryCallInst(I,CS,ir::OP_LOG); break;
--          case Intrinsic::exp2: this->emitUnaryCallInst(I,CS,ir::OP_EXP); break;
-+          case Intrinsic::sqrt: this->emitUnaryCallInst(I,ir::OP_SQR); break;
-+          case Intrinsic::ceil: this->emitRoundingCallInst(I,ir::OP_RNDU); break;
-+          case Intrinsic::trunc: this->emitRoundingCallInst(I,ir::OP_RNDZ); break;
-+          case Intrinsic::rint: this->emitRoundingCallInst(I,ir::OP_RNDE); break;
-+          case Intrinsic::floor: this->emitRoundingCallInst(I,ir::OP_RNDD); break;
-+          case Intrinsic::sin: this->emitUnaryCallInst(I,ir::OP_SIN); break;
-+          case Intrinsic::cos: this->emitUnaryCallInst(I,ir::OP_COS); break;
-+          case Intrinsic::log2: this->emitUnaryCallInst(I,ir::OP_LOG); break;
-+          case Intrinsic::exp2: this->emitUnaryCallInst(I,ir::OP_EXP); break;
-           case Intrinsic::bswap:
--            this->emitUnaryCallInst(I,CS,ir::OP_BSWAP, getUnsignedType(ctx, I.getType())); break;
-+            this->emitUnaryCallInst(I,ir::OP_BSWAP, getUnsignedType(ctx, I.getType())); break;
-           case Intrinsic::pow:
-           {
-             const ir::Register src0 = this->getRegister(*AI); ++AI;
-@@ -4794,21 +4793,20 @@
-         }
-       } else {
-         // Get the name of the called function and handle it
--        Value *Callee = I.getCalledValue();
--        const std::string fnName = Callee->stripPointerCasts()->getName();
-+        Value *Callee = I.getCalledOperand();
-+        const std::string fnName = Callee->stripPointerCasts()->getName().str();
-         auto genIntrinsicID = intrinsicMap.find(fnName);
-
-         // Get the function arguments
--        CallSite CS(&I);
--        CallSite::arg_iterator AI = CS.arg_begin();
-+        User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--        CallSite::arg_iterator AE = CS.arg_end();
-+        User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-
-         switch (genIntrinsicID) {
--          case GEN_OCL_FBH: this->emitUnaryCallInst(I,CS,ir::OP_FBH, ir::TYPE_U32); break;
--          case GEN_OCL_FBL: this->emitUnaryCallInst(I,CS,ir::OP_FBL, ir::TYPE_U32); break;
--          case GEN_OCL_CBIT: this->emitUnaryCallInst(I,CS,ir::OP_CBIT, getUnsignedType(ctx, (*AI)->getType())); break;
-+          case GEN_OCL_FBH: this->emitUnaryCallInst(I,ir::OP_FBH, ir::TYPE_U32); break;
-+          case GEN_OCL_FBL: this->emitUnaryCallInst(I,ir::OP_FBL, ir::TYPE_U32); break;
-+          case GEN_OCL_CBIT: this->emitUnaryCallInst(I,ir::OP_CBIT, getUnsignedType(ctx, (*AI)->getType())); break;
-           case GEN_OCL_ABS:
-           {
-             const ir::Register src = this->getRegister(*AI);
-@@ -4915,8 +4913,8 @@
-             ctx.REGION(dst, src, x.getIntegerValue());
-             break;
-           }
--          case GEN_OCL_RSQ: this->emitUnaryCallInst(I,CS,ir::OP_RSQ); break;
--          case GEN_OCL_RCP: this->emitUnaryCallInst(I,CS,ir::OP_RCP); break;
-+          case GEN_OCL_RSQ: this->emitUnaryCallInst(I,ir::OP_RSQ); break;
-+          case GEN_OCL_RCP: this->emitUnaryCallInst(I,ir::OP_RCP); break;
-           case GEN_OCL_FORCE_SIMD8: ctx.setSimdWidth(8); break;
-           case GEN_OCL_FORCE_SIMD16: ctx.setSimdWidth(16); break;
-           case GEN_OCL_LBARRIER: ctx.SYNC(ir::syncLocalBarrier); break;
-@@ -4947,31 +4945,31 @@
-             break;
-           }
-           case GEN_OCL_ATOMIC_ADD0:
--          case GEN_OCL_ATOMIC_ADD1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_ADD); break;
-+          case GEN_OCL_ATOMIC_ADD1: this->emitAtomicInst(I,ir::ATOMIC_OP_ADD); break;
-           case GEN_OCL_ATOMIC_SUB0:
--          case GEN_OCL_ATOMIC_SUB1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_SUB); break;
-+          case GEN_OCL_ATOMIC_SUB1: this->emitAtomicInst(I,ir::ATOMIC_OP_SUB); break;
-           case GEN_OCL_ATOMIC_AND0:
--          case GEN_OCL_ATOMIC_AND1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_AND); break;
-+          case GEN_OCL_ATOMIC_AND1: this->emitAtomicInst(I,ir::ATOMIC_OP_AND); break;
-           case GEN_OCL_ATOMIC_OR0:
--          case GEN_OCL_ATOMIC_OR1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_OR); break;
-+          case GEN_OCL_ATOMIC_OR1: this->emitAtomicInst(I,ir::ATOMIC_OP_OR); break;
-           case GEN_OCL_ATOMIC_XOR0:
--          case GEN_OCL_ATOMIC_XOR1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_XOR); break;
-+          case GEN_OCL_ATOMIC_XOR1: this->emitAtomicInst(I,ir::ATOMIC_OP_XOR); break;
-           case GEN_OCL_ATOMIC_XCHG0:
--          case GEN_OCL_ATOMIC_XCHG1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_XCHG); break;
-+          case GEN_OCL_ATOMIC_XCHG1: this->emitAtomicInst(I,ir::ATOMIC_OP_XCHG); break;
-           case GEN_OCL_ATOMIC_INC0:
--          case GEN_OCL_ATOMIC_INC1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_INC); break;
-+          case GEN_OCL_ATOMIC_INC1: this->emitAtomicInst(I,ir::ATOMIC_OP_INC); break;
-           case GEN_OCL_ATOMIC_DEC0:
--          case GEN_OCL_ATOMIC_DEC1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_DEC); break;
-+          case GEN_OCL_ATOMIC_DEC1: this->emitAtomicInst(I,ir::ATOMIC_OP_DEC); break;
-           case GEN_OCL_ATOMIC_UMIN0:
--          case GEN_OCL_ATOMIC_UMIN1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_UMIN); break;
-+          case GEN_OCL_ATOMIC_UMIN1: this->emitAtomicInst(I,ir::ATOMIC_OP_UMIN); break;
-           case GEN_OCL_ATOMIC_UMAX0:
--          case GEN_OCL_ATOMIC_UMAX1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_UMAX); break;
-+          case GEN_OCL_ATOMIC_UMAX1: this->emitAtomicInst(I,ir::ATOMIC_OP_UMAX); break;
-           case GEN_OCL_ATOMIC_IMIN0:
--          case GEN_OCL_ATOMIC_IMIN1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_IMIN); break;
-+          case GEN_OCL_ATOMIC_IMIN1: this->emitAtomicInst(I,ir::ATOMIC_OP_IMIN); break;
-           case GEN_OCL_ATOMIC_IMAX0:
--          case GEN_OCL_ATOMIC_IMAX1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_IMAX); break;
-+          case GEN_OCL_ATOMIC_IMAX1: this->emitAtomicInst(I,ir::ATOMIC_OP_IMAX); break;
-           case GEN_OCL_ATOMIC_CMPXCHG0:
--          case GEN_OCL_ATOMIC_CMPXCHG1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_CMPXCHG); break;
-+          case GEN_OCL_ATOMIC_CMPXCHG1: this->emitAtomicInst(I,ir::ATOMIC_OP_CMPXCHG); break;
-           case GEN_OCL_GET_IMAGE_WIDTH:
-           case GEN_OCL_GET_IMAGE_HEIGHT:
-           case GEN_OCL_GET_IMAGE_DEPTH:
-@@ -5429,48 +5427,48 @@
-             ctx.WAIT();
-             break;
-           }
--          case GEN_OCL_WORK_GROUP_ALL: this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_ALL); break;
--          case GEN_OCL_WORK_GROUP_ANY: this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_ANY); break;
-+          case GEN_OCL_WORK_GROUP_ALL: this->emitWorkGroupInst(I, ir::WORKGROUP_OP_ALL); break;
-+          case GEN_OCL_WORK_GROUP_ANY: this->emitWorkGroupInst(I, ir::WORKGROUP_OP_ANY); break;
-           case GEN_OCL_WORK_GROUP_BROADCAST:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_BROADCAST); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_BROADCAST); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_ADD); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_MAX); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_MIN); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-           case GEN_OCL_SUB_GROUP_BROADCAST:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_BROADCAST); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_BROADCAST); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_ADD); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_MAX); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_MIN); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-           case GEN_OCL_LRP:
-           {
-             const ir::Register dst  = this->getRegister(&I);
-@@ -5484,69 +5482,69 @@
-             break;
-           }
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, false, 1); break;
-+            this->emitBlockReadWriteMemInst(I, false, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, false, 2); break;
-+            this->emitBlockReadWriteMemInst(I, false, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, false, 4); break;
-+            this->emitBlockReadWriteMemInst(I, false, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, false, 8); break;
-+            this->emitBlockReadWriteMemInst(I, false, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, true, 1); break;
-+            this->emitBlockReadWriteMemInst(I, true, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, true, 2); break;
-+            this->emitBlockReadWriteMemInst(I, true, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, true, 4); break;
-+            this->emitBlockReadWriteMemInst(I, true, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, true, 8); break;
-+            this->emitBlockReadWriteMemInst(I, true, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, false, 1); break;
-+            this->emitBlockReadWriteImageInst(I, false, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, false, 2); break;
-+            this->emitBlockReadWriteImageInst(I, false, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, false, 4); break;
-+            this->emitBlockReadWriteImageInst(I, false, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, false, 8); break;
-+            this->emitBlockReadWriteImageInst(I, false, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, true, 1); break;
-+            this->emitBlockReadWriteImageInst(I, true, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, true, 2); break;
-+            this->emitBlockReadWriteImageInst(I, true, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, true, 4); break;
-+            this->emitBlockReadWriteImageInst(I, true, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, true, 8); break;
-+            this->emitBlockReadWriteImageInst(I, true, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, false, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, false, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, false, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, false, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, true, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, true, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, true, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, true, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, false, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, false, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, false, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, false, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, true, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, true, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, true, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, true, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 8, ir::TYPE_U16); break;
-           case GEN_OCL_GET_PIPE:
-           case GEN_OCL_MAKE_RID:
-           case GEN_OCL_GET_RID:
---- a/backend/src/llvm/llvm_includes.hpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_includes.hpp	2020-11-09 19:00:09.955926795 +0100
-@@ -103,7 +103,6 @@
-
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
- #include "llvm/IR/Mangler.h"
--#include "llvm/IR/CallSite.h"
- #include "llvm/IR/CFG.h"
- #include "llvm/IR/InstVisitor.h"
- #include "llvm/IR/IRPrintingPasses.h"
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-11-09 19:10:37.141852308 +0100
-@@ -160,7 +160,7 @@
-     Value *vecPtr = Builder.CreateBitCast(ld->getPointerOperand(),
-                                         PointerType::get(vecTy, addrSpace));
-     LoadInst *vecValue = Builder.CreateLoad(vecPtr);
--    vecValue->setAlignment(align);
-+    vecValue->setAlignment(align.valueOrOne());
-
-     for (unsigned i = 0; i < size; ++i) {
-       Value *S = Builder.CreateExtractElement(vecValue, Builder.getInt32(i));
-@@ -251,7 +251,7 @@
-       return;
-     Value *newPtr = Builder.CreateBitCast(stPointer, PointerType::get(vecTy, addrSpace));
-     StoreInst *newST = Builder.CreateStore(parent, newPtr);
--    newST->setAlignment(align);
-+    newST->setAlignment(align.valueOrOne());
-   }
-
-   // Find the safe iterator we can point to. If reorder happens, we need to
---- a/backend/src/llvm/llvm_passes.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_passes.cpp	2020-11-09 18:48:55.997006837 +0100
-@@ -95,7 +95,7 @@
-   {
-     switch (Ty->getTypeID()) {
-       case Type::VoidTyID: NOT_SUPPORTED;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         const VectorType* VecTy = cast<VectorType>(Ty);
-         uint32_t elemNum = VecTy->getNumElements();
-@@ -138,7 +138,7 @@
-       case Type::HalfTyID:    return 16;
-       case Type::FloatTyID:   return 32;
-       case Type::DoubleTyID:  return 64;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         const VectorType* VecTy = cast<VectorType>(Ty);
-         uint32_t numElem = VecTy->getNumElements();
-@@ -184,10 +184,12 @@
-     Type *elementType = NULL;
-     if (PointerType* ptrType = dyn_cast<PointerType>(eltTy))
-       elementType = ptrType->getElementType();
--    else if(SequentialType * seqType = dyn_cast<SequentialType>(eltTy))
--      elementType = seqType->getElementType();
--    else if(CompositeType * compTy= dyn_cast<CompositeType>(eltTy))
--      elementType = compTy->getTypeAtIndex(index);
-+    else if (ArrayType * arrType = dyn_cast<ArrayType>(eltTy))
-+      elementType = arrType->getElementType();
-+    else if(VectorType * vecType = dyn_cast<VectorType>(eltTy))
-+      elementType = vecType->getElementType();
-+    else if(StructType * structType = dyn_cast<StructType>(eltTy))
-+      elementType = structType->getTypeAtIndex(index);
-     GBE_ASSERT(elementType);
-     return elementType;
-   }
---- a/backend/src/llvm/llvm_printf_parser.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_printf_parser.cpp	2020-11-09 18:57:52.618943105 +0100
-@@ -323,8 +323,7 @@
-
-   bool PrintfParser::parseOnePrintfInstruction(CallInst * call)
-   {
--    CallSite CS(call);
--    CallSite::arg_iterator CI_FMT = CS.arg_begin();
-+    User::op_iterator CI_FMT = call->arg_begin();
-     int param_num = 0;
-
-     llvm::Constant* arg0 = dyn_cast<llvm::ConstantExpr>(*CI_FMT);
-@@ -341,7 +340,7 @@
-       return false;
-     }
-
--    std::string fmt = fmt_arg->getAsCString();
-+    std::string fmt = fmt_arg->getAsCString().str();
-     if (fmt.size() == 0)
-       return false;
-
-@@ -437,8 +436,8 @@
-         if ( callFunc->getIntrinsicID() != 0)
-           continue;
-
--        Value *Callee = call->getCalledValue();
--        const std::string fnName = Callee->getName();
-+        Value *Callee = call->getCalledOperand();
-+        const std::string fnName = Callee->getName().str();
-
-         if (fnName != "__gen_ocl_printf_stub" && fnName != "__gen_ocl_puts_stub")
-           continue;
-@@ -582,7 +581,7 @@
-             if (!fmt_arg || !fmt_arg->isCString()) {
-               return false;
-             }
--            slot.state.str = fmt_arg->getAsCString();
-+            slot.state.str = fmt_arg->getAsCString().str();
-             return true;
-           }
-           case PRINTF_CONVERSION_P: {
-@@ -595,10 +594,10 @@
-
-         break;
-
--      case Type::VectorTyID: {
--        Type* vect_type = arg->getType();
--        Type* elt_type = vect_type->getVectorElementType();
--        int vec_num = vect_type->getVectorNumElements();
-+      case Type::FixedVectorTyID: {
-+        VectorType* vect_type = dyn_cast<VectorType>(arg->getType());
-+        Type* elt_type = vect_type->getElementType();
-+        int vec_num = vect_type->getNumElements();
-         bool sign = false;
-
-         if (vec_num != slot.state.vector_n) {
---- a/backend/src/llvm/llvm_profiling.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_profiling.cpp	2020-11-09 18:59:50.120929150 +0100
-@@ -35,7 +35,6 @@
- #include "llvm/IR/IRBuilder.h"
-
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
--#include "llvm/IR/CallSite.h"
- #include "llvm/IR/CFG.h"
- #else
- #include "llvm/Support/CallSite.h"
---- a/backend/src/llvm/llvm_sampler_fix.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp	2020-11-09 17:01:09.407774832 +0100
-@@ -45,8 +45,8 @@
-     bool visitCallInst(CallInst *I) {
-       if(!I)
-         return false;
--      Value *Callee = I->getCalledValue();
--      const std::string fnName = Callee->getName();
-+      Value *Callee = I->getCalledOperand();
-+      const std::string fnName = Callee->getName().str();
-       bool changed = false;
-       Type *boolTy = IntegerType::get(I->getContext(), 1);
-       Type *i32Ty = IntegerType::get(I->getContext(), 32);
-@@ -59,7 +59,7 @@
-         Value *needFixVal;
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-         CallInst *init = dyn_cast<CallInst>(I->getOperand(0));
--        if (init && init->getCalledValue()->getName().compare("__translate_sampler_initializer"))
-+        if (init && init->getCalledOperand()->getName().compare("__translate_sampler_initializer"))
-         {
-           const ConstantInt *ci = dyn_cast<ConstantInt>(init->getOperand(0));
-           uint32_t samplerInt = ci->getZExtValue();
-@@ -113,7 +113,7 @@
-         Value *needFixVal;
-  #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-         CallInst *init = dyn_cast<CallInst>(I->getOperand(0));
--        if (init && init->getCalledValue()->getName().compare("__translate_sampler_initializer"))
-+        if (init && init->getCalledOperand()->getName().compare("__translate_sampler_initializer"))
-         {
-           const ConstantInt *ci = dyn_cast<ConstantInt>(init->getOperand(0));
-           uint32_t samplerInt = ci->getZExtValue();
---- a/backend/src/llvm/llvm_scalarize.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_scalarize.cpp	2020-11-09 18:51:16.888990104 +0100
-@@ -178,7 +178,7 @@
-       if(!type)
-         return type;
-       switch(type->getTypeID()) {
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       case Type::ArrayTyID:
-         return GetBasicType(type->getContainedType(0));
-       default:
-@@ -188,7 +188,7 @@
-     }
-
-     int GetComponentCount(const Type* type)  {
--      if (type && type->getTypeID() == Type::VectorTyID)
-+      if (type && type->getTypeID() == Type::FixedVectorTyID)
-         return llvm::dyn_cast<VectorType>(type)->getNumElements();
-       else
-         return 1;
-@@ -652,13 +652,12 @@
-           break;
-         }
-       } else {
--        Value *Callee = call->getCalledValue();
--        const std::string fnName = Callee->getName();
-+        Value *Callee = call->getCalledOperand();
-+        const std::string fnName = Callee->getName().str();
-         auto genIntrinsicID = intrinsicMap.find(fnName);
-
-         // Get the function arguments
--        CallSite CS(call);
--        CallSite::arg_iterator CI = CS.arg_begin() + 1;
-+        User::op_iterator CI = call->arg_begin() + 1;
-
-         switch (genIntrinsicID) {
-           case GEN_OCL_NOT_FOUND:
-@@ -729,7 +728,7 @@
-             extractFromVector(call);
-             break;
-           case GEN_OCL_PRINTF:
--            for (; CI != CS.arg_end(); ++CI)
-+            for (; CI != call->arg_end(); ++CI)
-               if ((*CI)->getType()->isVectorTy())
-                 *CI = InsertToVector(call, *CI);
-             break;
diff --git a/srcpkgs/beignet/patches/llvm12.patch b/srcpkgs/beignet/patches/llvm12.patch
deleted file mode 100644
index 6f8ab005c148..000000000000
--- a/srcpkgs/beignet/patches/llvm12.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-diff --git backend/src/llvm/ExpandLargeIntegers.cpp backend/src/llvm/ExpandLargeIntegers.cpp
-index 8515dc13..27080380 100644
---- a/backend/src/llvm/ExpandLargeIntegers.cpp
-+++ b/backend/src/llvm/ExpandLargeIntegers.cpp
-@@ -328,7 +328,7 @@ static Value *buildVectorOrScalar(ConversionState &State, IRBuilder<> &IRB, Smal
-     // splited, that's why these temporary values should be erased.
-     bool KeepInsert = isLegalBitSize(ElemTy->getPrimitiveSizeInBits() * ElemNo);
-     for (unsigned i = 0; i < ElemNo; ++i) {
--      Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo));
-+      Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo, false));
-       Value *idx = ConstantInt::get(IntTy, i);
-       vec = IRB.CreateInsertElement(tmp, Elements[i], idx);
-       if (!KeepInsert && !isa<Constant>(vec)) {
-@@ -373,7 +373,7 @@ static void unifyElementType(IRBuilder<> &IRB, SmallVector<Value *, 16> &Src, Sm
-       assert((Size % MinWidth) == 0);
- 
-       if (Size > MinWidth) {
--        VectorType *VecTy = VectorType::get(ElemTy, Size/MinWidth);
-+        VectorType *VecTy = VectorType::get(ElemTy, Size/MinWidth, false);
-         Value *Casted = IRB.CreateBitCast(Src[i], VecTy);
-         for (unsigned j = 0; j < Size/MinWidth; j++)
-           Dst.push_back(IRB.CreateExtractElement(Casted, ConstantInt::get(IntTy, j)));
-@@ -462,7 +462,7 @@ static void convertInstruction(Instruction *Inst, ConversionState &State,
-       unsigned ElemNo = Unified.size();
-       Type *ElemTy = Unified[0]->getType();
-       for (unsigned i = 0; i < ElemNo; ++i) {
--        Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo));
-+        Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo, false));
-         Value *idx = ConstantInt::get(IntTy, i);
-         vec = IRB.CreateInsertElement(tmp, Unified[i], idx);
-       }
-diff --git backend/src/llvm/llvm_gen_backend.cpp backend/src/llvm/llvm_gen_backend.cpp
-index c93d89cc..64d5b0e5 100644
---- a/backend/src/llvm/llvm_gen_backend.cpp
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -304,7 +304,7 @@ namespace gbe
-       TYPESIZEVEC(long,8)
-       TYPESIZEVEC(unsigned long,8)
-       else{
--        StructType *StrTy = M->getTypeByName("struct."+name);
-+        StructType *StrTy = StructType::getTypeByName(M->getContext(), "struct."+name);
-         if(StrTy)
-           return getTypeByteSize(unit,StrTy);
-       }
-diff --git backend/src/llvm/llvm_loadstore_optimization.cpp backend/src/llvm/llvm_loadstore_optimization.cpp
-index 5aa38bef..6b5c1bad 100644
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
-@@ -152,7 +152,7 @@ namespace gbe {
-     unsigned addrSpace = ld->getPointerAddressSpace();
-     // insert before first load
-     Builder.SetInsertPoint(ld);
--    VectorType *vecTy = VectorType::get(ld->getType(), size);
-+    VectorType *vecTy = VectorType::get(ld->getType(), size, false);
-     Value *vecPtr = Builder.CreateBitCast(ld->getPointerOperand(),
-                                         PointerType::get(vecTy, addrSpace));
-     LoadInst *vecValue = Builder.CreateLoad(vecPtr);
-@@ -236,7 +236,7 @@ namespace gbe {
-     Builder.SetInsertPoint(merged[size-1]);
- 
-     Type *dataTy = st->getValueOperand()->getType();
--    VectorType *vecTy = VectorType::get(dataTy, size);
-+    VectorType *vecTy = VectorType::get(dataTy, size, false);
-     Value * parent = UndefValue::get(vecTy);
-     for(unsigned i = 0; i < size; i++) {
-       parent = Builder.CreateInsertElement(parent, values[i], ConstantInt::get(IntegerType::get(st->getContext(), 32), i));
-diff --git backend/src/llvm/llvm_printf_parser.cpp backend/src/llvm/llvm_printf_parser.cpp
-index 6bb7c52a..af459cd2 100644
---- a/backend/src/llvm/llvm_printf_parser.cpp
-+++ b/backend/src/llvm/llvm_printf_parser.cpp
-@@ -630,7 +630,7 @@ error:
-             if (elt_type != elt_dst_type) {
-               Value *II = NULL;
-               for (int i = 0; i < vec_num; i++) {
--                Value *vec = II ? II : UndefValue::get(VectorType::get(elt_dst_type, vec_num));
-+                Value *vec = II ? II : UndefValue::get(VectorType::get(elt_dst_type, vec_num, false));
-                 Value *cv = ConstantInt::get(Type::getInt32Ty(elt_type->getContext()), i);
-                 Value *org = builder->CreateExtractElement(arg, cv);
-                 Value *cvt = builder->CreateIntCast(org, elt_dst_type, sign);
-@@ -658,7 +658,7 @@ error:
-             if (elt_type->getTypeID() != Type::FloatTyID) {
-               Value *II = NULL;
-               for (int i = 0; i < vec_num; i++) {
--                Value *vec = II ? II : UndefValue::get(VectorType::get(Type::getFloatTy(elt_type->getContext()), vec_num));
-+                Value *vec = II ? II : UndefValue::get(VectorType::get(Type::getFloatTy(elt_type->getContext()), vec_num, false));
-                 Value *cv = ConstantInt::get(Type::getInt32Ty(elt_type->getContext()), i);
-                 Value *org = builder->CreateExtractElement(arg, cv);
-                 Value* cvt  = builder->CreateFPCast(org, Type::getFloatTy(module->getContext()));
-diff --git backend/src/llvm/llvm_to_gen.cpp backend/src/llvm/llvm_to_gen.cpp
-index 7f7deffe..9e8ccc67 100644
---- a/backend/src/llvm/llvm_to_gen.cpp
-+++ b/backend/src/llvm/llvm_to_gen.cpp
-@@ -358,7 +358,7 @@ namespace gbe
-     passes.add(createScalarReplAggregatesPass(64, true, -1, -1, 64));
- #endif
-     passes.add(createLoadStoreOptimizationPass());
--    passes.add(createConstantPropagationPass());
-+    //passes.add(createConstantPropagationPass());
-     passes.add(createPromoteMemoryToRegisterPass());
-     if(optLevel > 0)
-       passes.add(createGVNPass());                 // Remove redundancies
-@@ -367,11 +367,11 @@ namespace gbe
-     passes.add(createScalarizePass());             // Expand all vector ops
-     passes.add(createExpandLargeIntegersPass());   // legalize large integer operation
-     passes.add(createInstructionCombiningPass());  // legalize will generate some silly instructions
--    passes.add(createConstantPropagationPass());   // propagate constant after scalarize/legalize
-+    //passes.add(createConstantPropagationPass());   // propagate constant after scalarize/legalize
-     passes.add(createExpandConstantExprPass());    // constant prop may generate ConstantExpr
-     passes.add(createPromoteIntegersPass());       // align integer size to power of two
-     passes.add(createRemoveGEPPass(unit));         // Constant prop may generate gep
--    passes.add(createDeadInstEliminationPass());   // Remove simplified instructions
-+    //passes.add(createDeadInstEliminationPass());   // Remove simplified instructions
-     passes.add(createCFGSimplificationPass());     // Merge & remove BBs
-     passes.add(createLowerSwitchPass());           // simplify cfg will generate switch-case instruction
-     if (profiling) {
diff --git a/srcpkgs/beignet/patches/musl.patch b/srcpkgs/beignet/patches/musl.patch
deleted file mode 100644
index cefafbb65588..000000000000
--- a/srcpkgs/beignet/patches/musl.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/backend/src/backend/gen/gen_mesa_disasm.c
-+++ b/backend/src/backend/gen/gen_mesa_disasm.c
-@@ -1137,7 +1137,7 @@ static uint32_t __conv_half_to_float(uint16_t h)
-       // Adjust mantissa so it's normalized (and keep
-       // track of exponent adjustment)
-       int e = -1;
--      uint m = i.mantissa;
-+      unsigned int m = i.mantissa;
-       do {
-         e++;
-         m <<= 1;
diff --git a/srcpkgs/beignet/template b/srcpkgs/beignet/template
deleted file mode 100644
index dce6bbb7ae24..000000000000
--- a/srcpkgs/beignet/template
+++ /dev/null
@@ -1,22 +0,0 @@
-# Template file for 'beignet'
-pkgname=beignet
-version=1.3.2
-revision=10
-archs="i686* x86_64*"
-wrksrc="Beignet-${version}-Source"
-build_style=cmake
-hostmakedepends="clang llvm pkg-config"
-makedepends="MesaLib-devel libedit-devel libffi-devel ocl-icd-devel zlib-devel
- libXfixes-devel"
-depends="ocl-icd"
-short_desc="Beignet GPGPU System for Intel GPUs"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://www.freedesktop.org/wiki/Software/Beignet/"
-distfiles="https://01.org/sites/default/files/${pkgname}-${version}-source.tar.gz"
-checksum=c555edba149de23243965a703f39f79fa06f15bcff5a3762b5544b0925010b43
-
-post_install() {
-	# remove CL headers, we do use opencl-headers instead.
-	rm -r ${DESTDIR}/usr/include
-}
diff --git a/srcpkgs/beignet/update b/srcpkgs/beignet/update
deleted file mode 100644
index ca41e0afe60c..000000000000
--- a/srcpkgs/beignet/update
+++ /dev/null
@@ -1 +0,0 @@
-site="https://01.org/beignet/downloads"
diff --git a/srcpkgs/removed-packages/template b/srcpkgs/removed-packages/template
index 65516dfa921c..b6f2efa5e415 100644
--- a/srcpkgs/removed-packages/template
+++ b/srcpkgs/removed-packages/template
@@ -1,7 +1,7 @@
 # Template file for 'removed-packages'
 pkgname=removed-packages
 version=0.1
-revision=69
+revision=70
 build_style=meta
 short_desc="Uninstalls packages removed from repository"
 maintainer="Piotr Wójcik <chocimier@tlen.pl>"
@@ -25,6 +25,7 @@ replaces="
  atom<=1.44.0_1
  avogadro-devel<=1.2.0_8
  avogadro<=1.2.0_8
+ beignet<=1.3.2_10
  bokken<=1.8_3
  bomi<=0.9.11_17
  burp-client<=1.4.40_13

From 805c9f964e67e1df015b33bfeb375d74b61a7ca3 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 20/27] ldc: rebuild for llvm14

---
 srcpkgs/ldc/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/ldc/template b/srcpkgs/ldc/template
index a27280dde3b8..e21bc6555e38 100644
--- a/srcpkgs/ldc/template
+++ b/srcpkgs/ldc/template
@@ -1,7 +1,7 @@
 # Template file for 'ldc'
 pkgname=ldc
 version=1.28.0
-revision=1
+revision=2
 wrksrc="ldc-${version}-src"
 build_style=cmake
 configure_args="

From 36f1b316767e14d1ae2c0227f3c02aa5c9269b29 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 22:31:25 +0200
Subject: [PATCH 21/27] ldc: update to 1.29.0.

---
 srcpkgs/ldc/template | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/srcpkgs/ldc/template b/srcpkgs/ldc/template
index e21bc6555e38..1d72a8805eb6 100644
--- a/srcpkgs/ldc/template
+++ b/srcpkgs/ldc/template
@@ -1,7 +1,7 @@
 # Template file for 'ldc'
 pkgname=ldc
-version=1.28.0
-revision=2
+version=1.29.0
+revision=1
 wrksrc="ldc-${version}-src"
 build_style=cmake
 configure_args="
@@ -11,7 +11,7 @@ configure_args="
  -DBASH_COMPLETION_COMPLETIONSDIR=/usr/share/bash-completion
  -DC_SYSTEM_LIBS='unwind;m;pthread;rt;dl'"
 conf_files="/etc/ldc2.conf"
-hostmakedepends="dmd llvm12 perl pkg-config"
+hostmakedepends="dmd llvm14 perl pkg-config"
 makedepends="libcurl-devel libffi-devel ncurses-devel zlib-devel
  llvm-libunwind-devel"
 depends="ldc-runtime llvm-libunwind-devel"
@@ -22,7 +22,7 @@ license="BSD-3-Clause, BSL-1.0"
 homepage="https://wiki.dlang.org/LDC"
 changelog="https://raw.githubusercontent.com/ldc-developers/ldc/master/CHANGELOG.md"
 distfiles="https://github.com/ldc-developers/ldc/releases/download/v${version}/ldc-${version}-src.tar.gz"
-checksum=17fee8bb535bcb8cda0a45947526555c46c045f302a7349cc8711b254e54cf09
+checksum=d0c066eb965467625d9c5e75c00c583451b9ffa363601f9e37275ca8a8aea140
 nopie=yes
 nocross="dmd compilation fails on cross"
 # tests timeout on musl; also require unpackaged python3-lit

From 0ef0fb032d358668a8044bd3088ad0a20548c465 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 22/27] include-what-you-use: update to 0.18.

---
 srcpkgs/include-what-you-use/template | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/include-what-you-use/template b/srcpkgs/include-what-you-use/template
index b13bb7ee56af..297669f60459 100644
--- a/srcpkgs/include-what-you-use/template
+++ b/srcpkgs/include-what-you-use/template
@@ -1,6 +1,6 @@
 # Template file for 'include-what-you-use'
 pkgname=include-what-you-use
-version=0.16
+version=0.18
 revision=1
 wrksrc="${pkgname}"
 build_style=cmake
@@ -12,7 +12,7 @@ maintainer="Leah Neukirchen <leah@vuxu.org>"
 license="NCSA"
 homepage="https://include-what-you-use.org/"
 distfiles="https://include-what-you-use.org/downloads/${pkgname}-${version}.src.tar.gz"
-checksum=8d6fc9b255343bc1e5ec459e39512df1d51c60e03562985e0076036119ff5a1c
+checksum=9102fc8419294757df86a89ce6ec305f8d90a818d1f2598a139d15eb1894b8f3
 python_version=3
 
 post_install() {

From 88a34b3f474600f4e2b740ea802eb99c6920b76c Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:18:24 +0200
Subject: [PATCH 23/27] SPIRV-LLVM-Translator: update to 14.0.0.

---
 common/shlibs                          |  1 +
 srcpkgs/SPIRV-LLVM-Translator/template | 11 ++++++-----
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/common/shlibs b/common/shlibs
index 36bab1d3d999..5d06c2381fed 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -981,6 +981,7 @@ libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
 libLLVM-14.so libllvm14-14.0.3_1
+libLLVMSPIRVLib.so.14 SPIRV-LLVM-Translator-14.0.0_1
 libisofs.so.6 libisofs-0.6.24_1
 libmpack.so.0 libmpack-1.0.5_1
 libGeoIP.so.1 libgeoip-1.4.8_1
diff --git a/srcpkgs/SPIRV-LLVM-Translator/template b/srcpkgs/SPIRV-LLVM-Translator/template
index 2504cabed367..2277d062d992 100644
--- a/srcpkgs/SPIRV-LLVM-Translator/template
+++ b/srcpkgs/SPIRV-LLVM-Translator/template
@@ -1,19 +1,20 @@
 # Template file for 'SPIRV-LLVM-Translator'
 pkgname=SPIRV-LLVM-Translator
-version=12.0.0
+version=14.0.0
 revision=1
 build_style=cmake
 make_build_args="llvm-spirv"
-configure_args="-Wno-dev -DLLVM_LINK_LLVM_DYLIB=ON -DCMAKE_SKIP_RPATH=ON
- -DLLVM_SPIRV_INCLUDE_TESTS=OFF -DBUILD_SHARED_LIBS=ON"
+configure_args="-DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release
+ -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_SKIP_RPATH=ON -DLLVM_INCLUDE_TESTS=OFF
+ -DLLVM_LINK_LLVM_DYLIB=ON -DLLVM_EXTERNAL_LIT=/usr/bin/lit -Wno-dev -DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=/usr/include/spirv/ "
 hostmakedepends="clang clang-tools-extra llvm"
-makedepends="llvm"
+makedepends="llvm SPIRV-Headers"
 short_desc="API and commands for processing SPIR-V modules"
 maintainer="Orphaned <orphan@voidlinux.org>"
 license="NCSA"
 homepage="https://github.com/KhronosGroup/SPIRV-LLVM-Translator"
 distfiles="https://github.com/KhronosGroup/${pkgname}/archive/refs/tags/v${version}.tar.gz"
-checksum=6e4fad04203f25fcde4c308c53e9f59bd05a390978992db3212d4b63aff62108
+checksum=1afc52bb4e39aeb9b5b69324a201c81bd986364f347b559995eff6fd6f013318
 make_check=no
 
 post_install() {

From e1d2ef11efb22ed4f3168b64d960f10ec44a3b8d Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:35:43 +0200
Subject: [PATCH 24/27] ispc: update to 1.17.0.

---
 .../ispc/patches/cmake-build-type-none.patch  |   18 -
 srcpkgs/ispc/patches/llvm12-001.patch         |   57 -
 srcpkgs/ispc/patches/llvm12-002.patch         |  923 --------
 srcpkgs/ispc/patches/llvm12-003.patch         | 1504 ------------
 srcpkgs/ispc/patches/llvm12-004.patch         |   34 -
 srcpkgs/ispc/patches/llvm12-005.patch         |  372 ---
 srcpkgs/ispc/patches/llvm12-006.patch         |  126 -
 srcpkgs/ispc/patches/llvm12-007.patch         |  160 --
 srcpkgs/ispc/patches/llvm12-008.patch         |  149 --
 srcpkgs/ispc/patches/llvm12-009.patch         | 2109 -----------------
 srcpkgs/ispc/template                         |    6 +-
 11 files changed, 3 insertions(+), 5455 deletions(-)
 delete mode 100644 srcpkgs/ispc/patches/cmake-build-type-none.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-001.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-002.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-003.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-004.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-005.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-006.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-007.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-008.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-009.patch

diff --git a/srcpkgs/ispc/patches/cmake-build-type-none.patch b/srcpkgs/ispc/patches/cmake-build-type-none.patch
deleted file mode 100644
index 411e353c7314..000000000000
--- a/srcpkgs/ispc/patches/cmake-build-type-none.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Index: ispc-1.15.0/CMakeLists.txt
-===================================================================
---- ispc-1.15.0.orig/CMakeLists.txt
-+++ ispc-1.15.0/CMakeLists.txt
-@@ -157,13 +157,6 @@ set(OUTPUT_RELEASE Release/bin)
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin )
- 
- if(CMAKE_BUILD_TYPE)
--    # Validate build type
--    set(CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo")
--
--    string(FIND "${CONFIGURATION_TYPES}" "${CMAKE_BUILD_TYPE}" MATCHED_CONFIG)
--    if (${MATCHED_CONFIG} EQUAL -1)
--         message(FATAL_ERROR "CMAKE_BUILD_TYPE (${CMAKE_BUILD_TYPE}) allows only the following values: ${CONFIGURATION_TYPES}")
--    endif()
- else(NOT CMAKE_BUILD_TYPE)
-     set(CMAKE_BUILD_TYPE "Release")
-     message(STATUS "Build type not specified: Use Release by default.")
diff --git a/srcpkgs/ispc/patches/llvm12-001.patch b/srcpkgs/ispc/patches/llvm12-001.patch
deleted file mode 100644
index 5f2d3f5a409e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-001.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 1c0f89dccb774f216c7f6e76a99ee907a1e641cb Mon Sep 17 00:00:00 2001
-From: Dmitry Babokin <dmitry.y.babokin@intel.com>
-Date: Tue, 22 Dec 2020 17:03:59 -0800
-Subject: [PATCH] Fix to work with LLVM trunk after llvm/llvm-project@41c3b2713
-
----
- src/ctx.cpp | 18 ++++++++++++------
- 1 file changed, 12 insertions(+), 6 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 6fbb8b9cf..977e9d222 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1473,11 +1473,15 @@ void FunctionEmitContext::AddDebugPos(llvm::Value *value, const SourcePos *pos,
-     llvm::Instruction *inst = llvm::dyn_cast<llvm::Instruction>(value);
-     if (inst != NULL && m->diBuilder) {
-         SourcePos p = pos ? *pos : currentPos;
--        if (p.first_line != 0)
-+        if (p.first_line != 0) {
-             // If first_line == 0, then we're in the middle of setting up
-             // the standard library or the like; don't add debug positions
-             // for those functions
--            inst->setDebugLoc(llvm::DebugLoc::get(p.first_line, p.first_column, scope ? scope : GetDIScope()));
-+            scope = scope ? scope : GetDIScope();
-+            llvm::DebugLoc diLoc =
-+                llvm::DILocation::get(scope->getContext(), p.first_line, p.first_column, scope, nullptr, false);
-+            inst->setDebugLoc(diLoc);
-+        }
-     }
- }
- 
-@@ -1518,9 +1522,10 @@ void FunctionEmitContext::EmitVariableDebugInfo(Symbol *sym) {
-     llvm::DILocalVariable *var = m->diBuilder->createAutoVariable(
-         scope, sym->name, sym->pos.GetDIFile(), sym->pos.first_line, diType, true /* preserve through opts */);
- 
-+    llvm::DebugLoc diLoc =
-+        llvm::DILocation::get(scope->getContext(), sym->pos.first_line, sym->pos.first_column, scope, nullptr, false);
-     llvm::Instruction *declareInst =
--        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(),
--                                    llvm::DebugLoc::get(sym->pos.first_line, sym->pos.first_column, scope), bblock);
-+        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(), diLoc, bblock);
-     AddDebugPos(declareInst, &sym->pos, scope);
- }
- 
-@@ -1535,9 +1540,10 @@ void FunctionEmitContext::EmitFunctionParameterDebugInfo(Symbol *sym, int argNum
-         m->diBuilder->createParameterVariable(scope, sym->name, argNum + 1, sym->pos.GetDIFile(), sym->pos.first_line,
-                                               diType, true /* preserve through opts */, flags);
- 
-+    llvm::DebugLoc diLoc =
-+        llvm::DILocation::get(scope->getContext(), sym->pos.first_line, sym->pos.first_column, scope, nullptr, false);
-     llvm::Instruction *declareInst =
--        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(),
--                                    llvm::DebugLoc::get(sym->pos.first_line, sym->pos.first_column, scope), bblock);
-+        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(), diLoc, bblock);
-     AddDebugPos(declareInst, &sym->pos, scope);
- }
- 
diff --git a/srcpkgs/ispc/patches/llvm12-002.patch b/srcpkgs/ispc/patches/llvm12-002.patch
deleted file mode 100644
index 0903f30da10d..000000000000
--- a/srcpkgs/ispc/patches/llvm12-002.patch
+++ /dev/null
@@ -1,923 +0,0 @@
-From 0597a79d084c014780136da906afe21d15e982cb Mon Sep 17 00:00:00 2001
-From: DeepakRajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Tue, 5 Jan 2021 13:53:30 -0800
-Subject: [PATCH] Remove LLVM 8.0 and LLVM 9.0. (#1966)
-
----
- .appveyor.yml                        |  3 --
- .travis.yml                          |  7 ---
- CMakeLists.txt                       | 12 ++----
- src/ast.cpp                          |  4 --
- src/ctx.cpp                          | 30 -------------
- src/gen/GlobalsLocalization.cpp      |  4 --
- src/ispc.cpp                         | 20 ---------
- src/ispc.h                           |  3 +-
- src/ispc_version.h                   |  4 +-
- src/main.cpp                         | 13 ------
- src/module.cpp                       | 27 ------------
- src/module.h                         |  2 -
- src/opt.cpp                          | 64 ++--------------------------
- src/type.cpp                         | 10 ++---
- tests/lit-tests/1771.ispc            |  1 -
- tests/lit-tests/1844.ispc            |  3 --
- tests/lit-tests/1926.ispc            |  2 -
- tests/lit-tests/cpus_x86.ispc        |  2 +
- tests/lit-tests/cpus_x86_llvm10.ispc | 11 -----
- tests/lit-tests/lit.cfg              |  5 ---
- 20 files changed, 14 insertions(+), 213 deletions(-)
- delete mode 100644 tests/lit-tests/cpus_x86_llvm10.ispc
-
-diff --git a/.appveyor.yml b/.appveyor.yml
-index 451a7b3e0..7945cca2a 100644
---- a/.appveyor.yml
-+++ b/.appveyor.yml
-@@ -41,8 +41,6 @@ environment:
-       LLVM_VERSION: latest
-     - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
-       LLVM_VERSION: 10.0
--    - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
--      LLVM_VERSION: 9.0
- 
- for:
- -
-@@ -62,7 +60,6 @@ for:
-         if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2019" ( (set generator="Visual Studio 16") & (set vsversion=2019))
-         set LLVM_TAR=llvm-11.0.0-win.vs2019-Release+Asserts-x86.arm.wasm.7z
-         if "%LLVM_VERSION%"=="10.0" (set LLVM_TAR=llvm-10.0.1-win.vs2019-Release+Asserts-x86.arm.wasm.zip)
--        if "%LLVM_VERSION%"=="9.0" (set LLVM_TAR=llvm-9.0.1-win.vs2017-Release+Asserts-x86.arm.wasm.zip)
-   install:
-     - ps: choco install --no-progress winflexbison3 wget 7zip
-     - cmd: |-
-diff --git a/.travis.yml b/.travis.yml
-index 2e96017a6..3a6b85264 100644
---- a/.travis.yml
-+++ b/.travis.yml
-@@ -108,13 +108,6 @@ jobs:
-         - LLVM_TAR=llvm-10.0.1-ubuntu16.04-Release+Asserts-x86.arm.wasm.tar.xz
-         - LLVM_REPO=https://github.com/dbabokin/llvm-project
-         - ISPC_HOME=$TRAVIS_BUILD_DIR
--    # LLVM 9.0 + Ubuntu 16.04: build, lit tests, examples (build + run), benchmarks (build + trial run)
--    - <<: *my_tag
--      env:
--        - LLVM_VERSION=9.0 OS=Ubuntu16.04
--        - LLVM_TAR=llvm-9.0.1-ubuntu16.04-Release+Asserts-x86.arm.wasm.tar.xz
--        - LLVM_REPO=https://github.com/dbabokin/llvm-project
--        - ISPC_HOME=$TRAVIS_BUILD_DIR
-     # WASM enabled build
-     # LLVM 11.0 + Ubuntu 16.04: build, lit tests, examples (build), benchmarks (build + trial run)
-     - <<: *my_tag
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 5fa863fcf..a6b3ed251 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -241,10 +241,8 @@ if (X86_ENABLED)
-         avx2-i8x32 avx2-i16x16
-         avx2-i32x4 avx2-i32x8 avx2-i32x16 avx2-i64x4
-         avx512knl-i32x16
--        avx512skx-i32x16 avx512skx-i32x8)
--    if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "10.0.0")
--        list(APPEND ISPC_TARGETS avx512skx-i8x64 avx512skx-i16x32)
--    endif()
-+        avx512skx-i32x16 avx512skx-i32x8
-+        avx512skx-i8x64 avx512skx-i16x32)
- endif()
- if (ARM_ENABLED)
-     list(APPEND ISPC_TARGETS neon-i8x16 neon-i16x8 neon-i32x4 neon-i32x8)
-@@ -259,11 +257,7 @@ if (WASM_ENABLED)
- endif()
- 
- set(CLANG_LIBRARY_LIST clangFrontend clangDriver clangSerialization clangParse clangSema clangAnalysis clangAST clangBasic clangEdit clangLex)
--set(LLVM_COMPONENTS engine ipo bitreader bitwriter instrumentation linker option)
--
--if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "10.0.0")
--    list(APPEND LLVM_COMPONENTS frontendopenmp)
--endif()
-+set(LLVM_COMPONENTS engine ipo bitreader bitwriter instrumentation linker option frontendopenmp)
- 
- if (X86_ENABLED)
-     list(APPEND LLVM_COMPONENTS x86)
-diff --git a/src/ast.cpp b/src/ast.cpp
-index 20f75a29c..5a43c4854 100644
---- a/src/ast.cpp
-+++ b/src/ast.cpp
-@@ -44,9 +44,7 @@
- #include "sym.h"
- #include "util.h"
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/TimeProfiler.h>
--#endif
- ///////////////////////////////////////////////////////////////////////////
- // ASTNode
- 
-@@ -62,9 +60,7 @@ void AST::AddFunction(Symbol *sym, Stmt *code) {
- }
- 
- void AST::GenerateIR() {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope TimeScope("GenerateIR");
--#endif
-     for (unsigned int i = 0; i < functions.size(); ++i)
-         functions[i]->GenerateIR();
- }
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 977e9d222..42c4ea09d 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -309,21 +309,13 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym, llvm::F
-             char buf[256];
-             snprintf(buf, sizeof(buf), "__off_all_on_mask_%s", g->target->GetISAString());
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_8_0
--            llvm::Constant *offFunc = m->module->getOrInsertFunction(buf, LLVMTypes::VoidType);
--#else // LLVM 9.0+
-             llvm::FunctionCallee offFuncCallee = m->module->getOrInsertFunction(buf, LLVMTypes::VoidType);
-             llvm::Constant *offFunc = llvm::cast<llvm::Constant>(offFuncCallee.getCallee());
--#endif
-             AssertPos(currentPos, llvm::isa<llvm::Function>(offFunc));
-             llvm::BasicBlock *offBB = llvm::BasicBlock::Create(*g->ctx, "entry", (llvm::Function *)offFunc, 0);
-             llvm::StoreInst *inst = new llvm::StoreInst(LLVMMaskAllOff, globalAllOnMaskPtr, offBB);
-             if (g->opt.forceAlignedMemory) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-                 inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-             }
-             llvm::ReturnInst::Create(*g->ctx, offBB);
-         }
-@@ -2288,11 +2280,7 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
- #endif
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-     }
- 
-     AddDebugPos(inst);
-@@ -2431,11 +2419,7 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-                 // vs the proper alignment in practice.)
-                 int align = 1;
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                inst->setAlignment(align);
--#else // LLVM 10.0+
-                 inst->setAlignment(llvm::MaybeAlign(align).valueOrOne());
--#endif
-             }
- 
-             AddDebugPos(inst);
-@@ -2649,11 +2633,7 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-         align = g->target->getNativeVectorAlignment();
- 
-     if (align != 0) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(align);
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(align).valueOrOne());
--#endif
-     }
-     // Don't add debugging info to alloca instructions
-     return inst;
-@@ -2926,11 +2906,7 @@ void FunctionEmitContext::StoreInst(llvm::Value *value, llvm::Value *ptr, const
-     llvm::StoreInst *inst = new llvm::StoreInst(value, ptr, bblock);
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-     }
- 
- #ifdef ISPC_GENX_ENABLED
-@@ -3025,16 +3001,10 @@ void FunctionEmitContext::MemcpyInst(llvm::Value *dest, llvm::Value *src, llvm::
-     }
-     if (align == NULL)
-         align = LLVMInt32(1);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_8_0
--    llvm::Constant *mcFunc =
--        m->module->getOrInsertFunction("llvm.memcpy.p0i8.p0i8.i64", LLVMTypes::VoidType, LLVMTypes::VoidPointerType,
--                                       LLVMTypes::VoidPointerType, LLVMTypes::Int64Type, LLVMTypes::BoolType);
--#else // LLVM 9.0+
-     llvm::FunctionCallee mcFuncCallee =
-         m->module->getOrInsertFunction("llvm.memcpy.p0i8.p0i8.i64", LLVMTypes::VoidType, LLVMTypes::VoidPointerType,
-                                        LLVMTypes::VoidPointerType, LLVMTypes::Int64Type, LLVMTypes::BoolType);
-     llvm::Constant *mcFunc = llvm::cast<llvm::Constant>(mcFuncCallee.getCallee());
--#endif
-     AssertPos(currentPos, mcFunc != NULL);
-     AssertPos(currentPos, llvm::isa<llvm::Function>(mcFunc));
- 
-diff --git a/src/gen/GlobalsLocalization.cpp b/src/gen/GlobalsLocalization.cpp
-index 193a66289..a176e9462 100644
---- a/src/gen/GlobalsLocalization.cpp
-+++ b/src/gen/GlobalsLocalization.cpp
-@@ -470,11 +470,7 @@ void GlobalsLocalization::LocalizeGlobals(LocalizationInfo &LI) {
-         Instruction &FirstI = *Fn->getEntryBlock().begin();
-         Type *ElemTy = GV->getType()->getElementType();
-         AllocaInst *Alloca = new AllocaInst(ElemTy, 0, GV->getName() + ".local", &FirstI);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        Alloca->setAlignment(GV->getAlignment());
--#else // LLVM 10.0+
-         Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()));
--#endif
-         if (!isa<UndefValue>(GV->getInitializer()))
-             new StoreInst(GV->getInitializer(), Alloca, &FirstI);
- 
-diff --git a/src/ispc.cpp b/src/ispc.cpp
-index e2d0f206e..fac5233f7 100644
---- a/src/ispc.cpp
-+++ b/src/ispc.cpp
-@@ -272,9 +272,7 @@ typedef enum {
-     CPU_Silvermont,
- 
-     CPU_ICX,
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     CPU_TGL,
--#endif
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-     CPU_ADL,
-     CPU_SPR,
-@@ -365,10 +363,8 @@ class AllCPUs {
- 
-         names[CPU_ICX].push_back("icelake-server");
-         names[CPU_ICX].push_back("icx");
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         names[CPU_TGL].push_back("tigerlake");
-         names[CPU_TGL].push_back("tgl");
--#endif
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-         names[CPU_ADL].push_back("alderlake");
-         names[CPU_ADL].push_back("adl");
-@@ -411,11 +407,9 @@ class AllCPUs {
-         compat[CPU_ADL] = Set(CPU_ADL, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont,
-                               CPU_SandyBridge, CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_None);
- #endif
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         compat[CPU_TGL] =
-             Set(CPU_TGL, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont, CPU_SandyBridge,
-                 CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_SKX, CPU_ICL, CPU_ICX, CPU_None);
--#endif
-         compat[CPU_ICX] = Set(CPU_ICX, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont,
-                               CPU_SandyBridge, CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_SKX, CPU_ICL, CPU_None);
- 
-@@ -556,9 +550,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-         case CPU_SPR:
- #endif
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         case CPU_TGL:
--#endif
-         case CPU_ICX:
-         case CPU_ICL:
-         case CPU_SKX:
-@@ -916,7 +908,6 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         }
-         break;
-     case ISPCTarget::avx512skx_i8x64:
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0 // LLVM 10.0+
-         // This target is enabled only for LLVM 10.0 and later
-         // because LLVM requires a number of fixes, which are
-         // committed to LLVM 11.0 and can be applied to 10.0, but not
-@@ -937,12 +928,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         this->m_hasVecPrefetch = false;
-         CPUfromISA = CPU_SKX;
-         break;
--#else
--        unsupported_target = true;
--        break;
--#endif
-     case ISPCTarget::avx512skx_i16x32:
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0 // LLVM 10.0+
-         // This target is enabled only for LLVM 10.0 and later
-         // because LLVM requires a number of fixes, which are
-         // committed to LLVM 11.0 and can be applied to 10.0, but not
-@@ -963,10 +949,6 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         this->m_hasVecPrefetch = false;
-         CPUfromISA = CPU_SKX;
-         break;
--#else
--        unsupported_target = true;
--        break;
--#endif
- #ifdef ISPC_ARM_ENABLED
-     case ISPCTarget::neon_i8x16:
-         this->m_isa = Target::NEON;
-@@ -1662,11 +1644,9 @@ Globals::Globals() {
-     isMultiTargetCompilation = false;
-     errorLimit = -1;
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     enableTimeTrace = false;
-     // set default granularity to 500.
-     timeTraceGranularity = 500;
--#endif
-     target = NULL;
-     ctx = new llvm::LLVMContext;
- 
-diff --git a/src/ispc.h b/src/ispc.h
-index e25d8830e..de357a21c 100644
---- a/src/ispc.h
-+++ b/src/ispc.h
-@@ -695,13 +695,12 @@ struct Globals {
- 
-     /* Number of errors to show in ISPC. */
-     int errorLimit;
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-+
-     /* When true, enable compile time tracing. */
-     bool enableTimeTrace;
- 
-     /* When compile time tracing is enabled, set time granularity. */
-     int timeTraceGranularity;
--#endif
- };
- 
- enum {
-diff --git a/src/ispc_version.h b/src/ispc_version.h
-index d781347fd..434b2d678 100644
---- a/src/ispc_version.h
-+++ b/src/ispc_version.h
-@@ -44,13 +44,11 @@
- 
- #define ISPC_LLVM_VERSION (LLVM_VERSION_MAJOR * 10000 + LLVM_VERSION_MINOR * 100)
- 
--#define ISPC_LLVM_8_0 80000
--#define ISPC_LLVM_9_0 90000
- #define ISPC_LLVM_10_0 100000
- #define ISPC_LLVM_11_0 110000
- #define ISPC_LLVM_12_0 120000
- 
--#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_8_0
-+#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_10_0
- #define LATEST_SUPPORTED_LLVM ISPC_LLVM_12_0
- 
- #ifdef __ispc__xstr
-diff --git a/src/main.cpp b/src/main.cpp
-index 8f64330cc..5c920eabc 100644
---- a/src/main.cpp
-+++ b/src/main.cpp
-@@ -55,9 +55,7 @@
- #include <llvm/Support/Signals.h>
- #include <llvm/Support/TargetRegistry.h>
- #include <llvm/Support/TargetSelect.h>
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/ToolOutputFile.h>
--#endif
- 
- #ifdef ISPC_HOST_IS_WINDOWS
- #define strcasecmp stricmp
-@@ -181,11 +179,9 @@ static void lPrintVersion() {
-     snprintf(targetHelp, sizeof(targetHelp), "[--target-os=<os>]\t\t\tSelect target OS.  <os>={%s}",
-              g->target_registry->getSupportedOSes().c_str());
-     PrintWithWordBreaks(targetHelp, 24, TerminalWidth(), stdout);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     printf("    [--time-trace]\t\t\tTurn on time profiler. Generates JSON file based on output filename.\n");
-     printf("    [--time-trace-granularity=<value>\tMinimum time granularity (in microseconds) traced by time "
-            "profiler.\n");
--#endif
-     printf("    [--version]\t\t\t\tPrint ispc version\n");
- #ifdef ISPC_GENX_ENABLED
-     printf("    [--vc-options=<\"-option1 -option2...\">]\t\t\t\tPass additional options to Vector Compiler backend\n");
-@@ -462,7 +458,6 @@ static void setCallingConv(VectorCallStatus vectorCall, Arch arch) {
-     }
- }
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- static void writeCompileTimeFile(const char *outFileName) {
-     llvm::SmallString<128> jsonFileName(outFileName);
-     jsonFileName.append(".json");
-@@ -479,7 +474,6 @@ static void writeCompileTimeFile(const char *outFileName) {
-     of->keep();
-     return;
- }
--#endif
- 
- static std::set<int> ParsingPhases(char *stages, ArgErrors &errorHandler) {
-     constexpr int parsing_limit = 100;
-@@ -791,12 +785,10 @@ int main(int Argc, char *Argv[]) {
-             }
-         } else if (!strncmp(argv[i], "--force-alignment=", 18)) {
-             g->forceAlignment = atoi(argv[i] + 18);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         } else if (!strcmp(argv[i], "--time-trace")) {
-             g->enableTimeTrace = true;
-         } else if (!strncmp(argv[i], "--time-trace-granularity=", 25)) {
-             g->timeTraceGranularity = atoi(argv[i] + 25);
--#endif
-         } else if (!strcmp(argv[i], "--woff") || !strcmp(argv[i], "-woff")) {
-             g->disableWarnings = true;
-             g->emitPerfWarnings = false;
-@@ -1059,7 +1051,6 @@ int main(int Argc, char *Argv[]) {
- 
-     // This needs to happen after the TargetOS is decided.
-     setCallingConv(vectorCall, arch);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     if (g->enableTimeTrace) {
-         llvm::timeTraceProfilerInitialize(g->timeTraceGranularity, "ispc");
-     }
-@@ -1077,9 +1068,5 @@ int main(int Argc, char *Argv[]) {
-         }
-         llvm::timeTraceProfilerCleanup();
-     }
--#else
--    int ret = Module::CompileAndOutput(file, arch, cpu, targets, flags, ot, outFileName, headerFileName, depsFileName,
--                                       depsTargetName, hostStubFileName, devStubFileName);
--#endif
-     return ret;
- }
-diff --git a/src/module.cpp b/src/module.cpp
-index fe7452df1..a85fec77a 100644
---- a/src/module.cpp
-+++ b/src/module.cpp
-@@ -170,9 +170,7 @@ Module::Module(const char *fn) {
-     module->setDataLayout(g->target->getDataLayout()->getStringRepresentation());
- 
-     if (g->generateDebuggingSymbols) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Create Debug Data");
--#endif
-         // To enable debug information on Windows, we have to let llvm know, that
-         // debug information should be emitted in CodeView format.
-         if (g->target_os == TargetOS::windows) {
-@@ -226,10 +224,8 @@ extern YY_BUFFER_STATE yy_create_buffer(FILE *, int);
- extern void yy_delete_buffer(YY_BUFFER_STATE);
- 
- int Module::CompileFile() {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope CompileFileTimeScope(
-         "CompileFile", llvm::StringRef(filename + ("_" + std::string(g->target->GetISAString()))));
--#endif
-     extern void ParserInit();
-     ParserInit();
- 
-@@ -238,18 +234,14 @@ int Module::CompileFile() {
-     // variable 'm' to be initialized and available (which it isn't until
-     // the Module constructor returns...)
-     {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("DefineStdlib");
--#endif
-         DefineStdlib(symbolTable, g->ctx, module, g->includeStdlib);
-     }
- 
-     bool runPreprocessor = g->runCPP;
- 
-     if (runPreprocessor) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Frontend parser");
--#endif
-         if (!IsStdin(filename)) {
-             // Try to open the file first, since otherwise we crash in the
-             // preprocessor if the file doesn't exist.
-@@ -268,9 +260,7 @@ int Module::CompileFile() {
-         yyparse();
-         yy_delete_buffer(strbuf);
-     } else {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Frontend parser");
--#endif
-         // No preprocessor, just open up the file if it's not stdin..
-         FILE *f = NULL;
-         if (IsStdin(filename)) {
-@@ -297,9 +287,7 @@ int Module::CompileFile() {
- 
-     if (diBuilder)
-         diBuilder->finalize();
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope TimeScope("Optimize");
--#endif
-     if (errorCount == 0)
-         Optimize(module, g->opt.level);
- 
-@@ -1243,15 +1231,8 @@ bool Module::writeObjectFileOrAssembly(llvm::TargetMachine *targetMachine, llvm:
-                                        const char *outFileName) {
-     // Figure out if we're generating object file or assembly output, and
-     // set binary output for object files
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    Assert(!g->target->isGenXTarget());
--    llvm::TargetMachine::CodeGenFileType fileType =
--        (outputType == Object) ? llvm::TargetMachine::CGFT_ObjectFile : llvm::TargetMachine::CGFT_AssemblyFile;
--    bool binary = (fileType == llvm::TargetMachine::CGFT_ObjectFile);
--#else // LLVM 10.0+
-     llvm::CodeGenFileType fileType = (outputType == Object) ? llvm::CGFT_ObjectFile : llvm::CGFT_AssemblyFile;
-     bool binary = (fileType == llvm::CGFT_ObjectFile);
--#endif
- 
-     llvm::sys::fs::OpenFlags flags = binary ? llvm::sys::fs::F_None : llvm::sys::fs::F_Text;
- 
-@@ -2219,11 +2200,7 @@ void Module::execPreprocessor(const char *infilename, llvm::raw_string_ostream *
-     inst.setTarget(target);
-     inst.createSourceManager(inst.getFileManager());
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    clang::FrontendInputFile inputFile(infilename, clang::InputKind::Unknown);
--#else // LLVM 10.0+
-     clang::FrontendInputFile inputFile(infilename, clang::InputKind());
--#endif
- 
-     inst.InitializeSourceManager(inputFile);
- 
-@@ -2722,9 +2699,7 @@ int Module::CompileAndOutput(const char *srcFile, Arch arch, const char *cpu, st
- 
-         m = new Module(srcFile);
-         if (m->CompileFile() == 0) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-             llvm::TimeTraceScope TimeScope("Backend");
--#endif
- #ifdef ISPC_GENX_ENABLED
-             if (outputType == Asm || outputType == Object) {
-                 if (g->target->isGenXTarget()) {
-@@ -2855,9 +2830,7 @@ int Module::CompileAndOutput(const char *srcFile, Arch arch, const char *cpu, st
- 
-             m = new Module(srcFile);
-             int compileFileError = m->CompileFile();
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-             llvm::TimeTraceScope TimeScope("Backend");
--#endif
-             if (compileFileError == 0) {
-                 // Create the dispatch module, unless already created;
-                 // in the latter case, just do the checking
-diff --git a/src/module.h b/src/module.h
-index 61d3cfea0..603124d50 100644
---- a/src/module.h
-+++ b/src/module.h
-@@ -43,9 +43,7 @@
- 
- #include <llvm/IR/DebugInfo.h>
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/TimeProfiler.h>
--#endif
- 
- #ifdef ISPC_GENX_ENABLED
- #include "ocl_igc_interface/igc_ocl_device_ctx.h"
-diff --git a/src/opt.cpp b/src/opt.cpp
-index a655a8344..5b1ac7b63 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -66,6 +66,7 @@
- #include <llvm/IR/Instructions.h>
- #include <llvm/IR/IntrinsicInst.h>
- #include <llvm/IR/Intrinsics.h>
-+#include <llvm/IR/IntrinsicsX86.h>
- #include <llvm/IR/LegacyPassManager.h>
- #include <llvm/IR/Module.h>
- #include <llvm/IR/PatternMatch.h>
-@@ -85,9 +86,6 @@
- #include <llvm/Transforms/Scalar/InstSimplifyPass.h>
- #include <llvm/Transforms/Utils.h>
- #include <llvm/Transforms/Utils/BasicBlockUtils.h>
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
--#include <llvm/IR/IntrinsicsX86.h>
--#endif
- 
- #ifdef ISPC_HOST_IS_LINUX
- #include <alloca.h>
-@@ -1003,10 +1001,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
-                 name = LLVMGetName(callInst->getArgOperand(0), "_load");
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                llvm::Instruction *loadInst =
--                    new llvm::LoadInst(castPtr, name, false /* not volatile */, align, (llvm::Instruction *)NULL);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-                 llvm::Instruction *loadInst = new llvm::LoadInst(castPtr, name, false /* not volatile */,
-                                                                  llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
- #else
-@@ -1043,13 +1038,8 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedStore32 ? 4 : 8;
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                llvm::StoreInst *storeInst = new llvm::StoreInst(rvalue, castPtr, (llvm::Instruction *)NULL);
--                storeInst->setAlignment(align);
--#else
-                 llvm::StoreInst *storeInst = new llvm::StoreInst(rvalue, castPtr, (llvm::Instruction *)NULL,
-                                                                  llvm::MaybeAlign(align).valueOrOne());
--#endif
-                 lCopyMetadata(storeInst, callInst);
-                 llvm::ReplaceInstWithInst(callInst, storeInst);
- 
-@@ -1066,9 +1056,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool IntrinsicsOpt::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("IntrinsicsOpt::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -1239,9 +1227,7 @@ bool InstructionSimplifyPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool InstructionSimplifyPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("InstructionSimplifyPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -2974,16 +2960,10 @@ static bool lImproveMaskedStore(llvm::CallInst *callInst) {
- 
-             lvalue = new llvm::BitCastInst(lvalue, ptrType, "lvalue_to_ptr_type", callInst);
-             lCopyMetadata(lvalue, callInst);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--            store =
--                new llvm::StoreInst(rvalue, lvalue, false /* not volatile */,
--                                    g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align);
--#else
-             store = new llvm::StoreInst(
-                 rvalue, lvalue, false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-                     .valueOrOne());
--#endif
-         }
-         if (store != NULL) {
-             lCopyMetadata(store, callInst);
-@@ -3059,11 +3039,7 @@ static bool lImproveMaskedLoad(llvm::CallInst *callInst, llvm::BasicBlock::itera
-         {
-             llvm::Type *ptrType = llvm::PointerType::get(callInst->getType(), 0);
-             ptr = new llvm::BitCastInst(ptr, ptrType, "ptr_cast_for_load", callInst);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--            load = new llvm::LoadInst(ptr, callInst->getName(), false /* not volatile */,
--                                      g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align,
--                                      (llvm::Instruction *)NULL);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-             load = new llvm::LoadInst(
-                 ptr, callInst->getName(), false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-@@ -3129,9 +3105,7 @@ bool ImproveMemoryOpsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ImproveMemoryOpsPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ImproveMemoryOpsPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -3424,9 +3398,7 @@ llvm::Value *lGEPAndLoad(llvm::Value *basePtr, int64_t offset, int align, llvm::
-                          llvm::Type *type) {
-     llvm::Value *ptr = lGEPInst(basePtr, LLVMInt64(offset), "new_base", insertBefore);
-     ptr = new llvm::BitCastInst(ptr, llvm::PointerType::get(type, 0), "ptr_cast", insertBefore);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, align, insertBefore);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-     return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, llvm::MaybeAlign(align), insertBefore);
- #else // LLVM 11.0+
-     return new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-@@ -4135,9 +4107,7 @@ bool GatherCoalescePass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool GatherCoalescePass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("GatherCoalescePass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -4467,9 +4437,7 @@ bool ReplacePseudoMemoryOpsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplacePseudoMemoryOpsPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplacePseudoMemoryOpsPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -4573,9 +4541,7 @@ bool IsCompileTimeConstantPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool IsCompileTimeConstantPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("IsCompileTimeConstantPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5201,9 +5167,7 @@ bool PeepholePass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool PeepholePass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("PeepholePass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5299,9 +5263,7 @@ bool ReplaceStdlibShiftPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceStdlibShiftPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceStdlibShiftPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5399,9 +5361,7 @@ llvm::Instruction *FixBooleanSelectPass::fixSelect(llvm::SelectInst *sel, llvm::
- }
- 
- bool FixBooleanSelectPass::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("FixBooleanSelectPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
- 
-     return modifiedAny;
-@@ -5964,9 +5924,7 @@ bool GenXGatherCoalescing::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool GenXGatherCoalescing::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("GenXGatherCoalescing::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6113,9 +6071,7 @@ bool PromoteToPrivateMemoryPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool PromoteToPrivateMemoryPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("PromoteToPrivateMemoryPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6181,9 +6137,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceLLVMIntrinsics::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceLLVMIntrinsics::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6278,9 +6232,7 @@ bool ReplaceUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceUnsupportedInsts::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceUnsupportedInsts::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6369,9 +6321,7 @@ bool CheckUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool CheckUnsupportedInsts::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("CheckUnsupportedInsts::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6440,9 +6390,7 @@ bool MangleOpenCLBuiltins::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool MangleOpenCLBuiltins::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("MangleOpenCLBuiltins::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6828,9 +6776,7 @@ bool FixAddressSpace::runOnFunction(llvm::Function &F) {
-     // Transformations are correct when the function is not internal.
-     // This is due to address space calculation algorithm.
-     // TODO: problems can be met in case of Stack Calls
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("FixAddressSpace::runOnFunction", F.getName());
--#endif
-     if (F.getLinkage() == llvm::GlobalValue::LinkageTypes::InternalLinkage)
-         return false;
- 
-@@ -6854,9 +6800,7 @@ class DemotePHIs : public llvm::FunctionPass {
- char DemotePHIs::ID = 0;
- 
- bool DemotePHIs::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("DemotePHIs::runOnFunction", F.getName());
--#endif
-     if (F.isDeclaration() || skipFunction(F))
-         return false;
-     std::vector<llvm::Instruction *> WorkList;
-diff --git a/src/type.cpp b/src/type.cpp
-index 688a4e874..fa0cb04db 100644
---- a/src/type.cpp
-+++ b/src/type.cpp
-@@ -1822,14 +1822,10 @@ llvm::DIType *StructType::GetDIType(llvm::DIScope *scope) const {
-     llvm::DIFile *diFile = pos.GetDIFile();
-     llvm::DINamespace *diSpace = pos.GetDINamespace();
-     return m->diBuilder->createStructType(diSpace, GetString(), diFile,
--                                          pos.first_line,          // Line number
--                                          layout->getSizeInBits(), // Size in bits
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                                          layout->getAlignment() * 8, // Alignment in bits
--#else                                                                 // LLVM 10.0+
-+                                          pos.first_line,                     // Line number
-+                                          layout->getSizeInBits(),            // Size in bits
-                                           layout->getAlignment().value() * 8, // Alignment in bits
--#endif
--                                          llvm::DINode::FlagZero, // Flags
-+                                          llvm::DINode::FlagZero,             // Flags
-                                           NULL, elements);
- }
- 
-diff --git a/tests/lit-tests/1771.ispc b/tests/lit-tests/1771.ispc
-index 98064d84d..4feb73dd7 100644
---- a/tests/lit-tests/1771.ispc
-+++ b/tests/lit-tests/1771.ispc
-@@ -5,7 +5,6 @@
- // RUN: %{ispc} %s --target=sse4-i16x8 --emit-asm -o - | FileCheck %s -check-prefix=CHECKSSE4_I16X8
- // RUN: %{ispc} %s --target=sse4-i8x16 --emit-asm -o - | FileCheck %s -check-prefix=CHECKSSE4_I8X16
- 
--// REQUIRES: LLVM_10_0+
- // REQUIRES: X86_ENABLED
- 
- // CHECKAVX2_I32X8: {{[a-z]*xor[a-z]*}}  %xmm0, %xmm0, %xmm0
-diff --git a/tests/lit-tests/1844.ispc b/tests/lit-tests/1844.ispc
-index 793a8866c..189edf4c3 100644
---- a/tests/lit-tests/1844.ispc
-+++ b/tests/lit-tests/1844.ispc
-@@ -6,9 +6,6 @@
- 
- // REQUIRES: X86_ENABLED
- 
--// It doesn't work for anything earlier than 10.0, but it will not be fixed, so don't run.
--// REQUIRES: LLVM_10_0+
--
- extern uniform unsigned int64 var_6;
- extern uniform unsigned int16 var_11;
- extern uniform bool arr_201 [1] [15] [20];
-diff --git a/tests/lit-tests/1926.ispc b/tests/lit-tests/1926.ispc
-index 70f7cc3c2..7921c91a6 100644
---- a/tests/lit-tests/1926.ispc
-+++ b/tests/lit-tests/1926.ispc
-@@ -2,8 +2,6 @@
- // RUN: cat %T/1926.o.json \
- // RUN:   | FileCheck %s
- 
--// REQUIRES: LLVM_10_0+
--
- // CHECK: "traceEvents"
- // CHECK: "detail"
- export uniform int foo(uniform int a[], uniform int count) {
-diff --git a/tests/lit-tests/cpus_x86.ispc b/tests/lit-tests/cpus_x86.ispc
-index 516efdd4c..4d60186f6 100644
---- a/tests/lit-tests/cpus_x86.ispc
-+++ b/tests/lit-tests/cpus_x86.ispc
-@@ -24,6 +24,8 @@
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icl
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icelake-server
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icx
-+//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tigerlake
-+//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tgl
- 
- // REQUIRES: X86_ENABLED
- 
-diff --git a/tests/lit-tests/cpus_x86_llvm10.ispc b/tests/lit-tests/cpus_x86_llvm10.ispc
-deleted file mode 100644
-index ef00000e5..000000000
---- a/tests/lit-tests/cpus_x86_llvm10.ispc
-+++ /dev/null
-@@ -1,11 +0,0 @@
--// The test checks that cpu definitions (including all synonyms) are successfully consumed by compiler.
--
--//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tigerlake
--//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tgl
--
--// REQUIRES: X86_ENABLED
--// REQUIRES: LLVM_10_0+
--
--uniform int i;
--
--void foo() {}
-diff --git a/tests/lit-tests/lit.cfg b/tests/lit-tests/lit.cfg
-index 17016579d..045e69437 100644
---- a/tests/lit-tests/lit.cfg
-+++ b/tests/lit-tests/lit.cfg
-@@ -30,11 +30,6 @@ print("Config:")
- 
- # LLVM version
- llvm_version = LooseVersion(ispc_llvm_version_number)
--if llvm_version >= LooseVersion("10.0.0"):
--    print("LLVM_10_0+: YES")
--    config.available_features.add("LLVM_10_0+")
--else:
--    print("LLVM_10_0+: NO")
- 
- if llvm_version >= LooseVersion("12.0.0"):
-     print("LLVM_12_0+: YES")
diff --git a/srcpkgs/ispc/patches/llvm12-003.patch b/srcpkgs/ispc/patches/llvm12-003.patch
deleted file mode 100644
index 0423afc9e3f9..000000000000
--- a/srcpkgs/ispc/patches/llvm12-003.patch
+++ /dev/null
@@ -1,1504 +0,0 @@
-From 1851d18b213dbad169937076176b2d5509733c76 Mon Sep 17 00:00:00 2001
-From: Deepak Rajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Tue, 12 Jan 2021 22:15:12 -0800
-Subject: [PATCH] fixes #1821 - Removing LLVMGetName() and switching to
- LLVM::Twine.
-
----
- src/ctx.cpp      | 304 ++++++++++++++++++++++-------------------------
- src/ctx.h        |  72 +++++------
- src/expr.cpp     |  36 +++---
- src/llvmutil.cpp |  17 ---
- src/llvmutil.h   |   5 -
- src/opt.cpp      | 103 +++++++++-------
- 6 files changed, 255 insertions(+), 282 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 42c4ea09d..ded524b71 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1020,8 +1020,8 @@ void FunctionEmitContext::EmitCaseLabel(int value, bool checkMask, SourcePos pos
-     llvm::BasicBlock *bbCaseImpl = NULL;
-     if (emitGenXHardwareMask()) {
-         // Create basic block with actual case implementation
--        std::string bbName = bbCase->getName().str() + "_impl";
--        bbCaseImpl = CreateBasicBlock(bbName.c_str(), bbCase);
-+        llvm::Twine bbName = llvm::Twine(bbCase->getName()) + "_impl";
-+        bbCaseImpl = CreateBasicBlock(bbName, bbCase);
-     }
- #endif
- 
-@@ -1185,7 +1185,7 @@ bool FunctionEmitContext::initLabelBBlocks(ASTNode *node, void *data) {
-     if (ctx->labelMap.find(ls->name) != ctx->labelMap.end())
-         Error(ls->pos, "Multiple labels named \"%s\" in function.", ls->name.c_str());
-     else {
--        llvm::BasicBlock *bb = ctx->CreateBasicBlock(ls->name.c_str());
-+        llvm::BasicBlock *bb = ctx->CreateBasicBlock(ls->name);
-         ctx->labelMap[ls->name] = bb;
-     }
-     return true;
-@@ -1299,7 +1299,7 @@ llvm::Value *FunctionEmitContext::Any(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_any"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_any");
- }
- 
- llvm::Value *FunctionEmitContext::All(llvm::Value *mask) {
-@@ -1315,7 +1315,7 @@ llvm::Value *FunctionEmitContext::All(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_all"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_all");
- }
- 
- llvm::Value *FunctionEmitContext::None(llvm::Value *mask) {
-@@ -1331,7 +1331,7 @@ llvm::Value *FunctionEmitContext::None(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_none"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_none");
- }
- 
- llvm::Value *FunctionEmitContext::LaneMask(llvm::Value *v) {
-@@ -1349,7 +1349,7 @@ llvm::Value *FunctionEmitContext::LaneMask(llvm::Value *v) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, v, LLVMGetName(v, "_movmsk"));
-+    return CallInst(fmm, NULL, v, llvm::Twine(v->getName()) + "_movmsk");
- }
- 
- llvm::Value *FunctionEmitContext::MasksAllEqual(llvm::Value *v1, llvm::Value *v2) {
-@@ -1364,11 +1364,12 @@ llvm::Value *FunctionEmitContext::MasksAllEqual(llvm::Value *v1, llvm::Value *v2
- #else
-     if (g->target->getArch() == Arch::wasm32) {
-         llvm::Function *fmm = m->module->getFunction("__wasm_cmp_msk_eq");
--        return CallInst(fmm, NULL, {v1, v2}, LLVMGetName("wasm_cmp_msk_eq", v1, v2));
-+        return CallInst(fmm, NULL, {v1, v2}, ((llvm::Twine("wasm_cmp_msk_eq_") + v1->getName()) + "_") + v2->getName());
-     }
-     llvm::Value *mm1 = LaneMask(v1);
-     llvm::Value *mm2 = LaneMask(v2);
--    return CmpInst(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_EQ, mm1, mm2, LLVMGetName("equal", v1, v2));
-+    return CmpInst(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_EQ, mm1, mm2,
-+                   ((llvm::Twine("equal_") + v1->getName()) + "_") + v2->getName());
- #endif
- }
- 
-@@ -1392,7 +1393,7 @@ llvm::Value *FunctionEmitContext::GetStringPtr(const std::string &str) {
-     return new llvm::BitCastInst(lstrPtr, LLVMTypes::VoidPointerType, "str_void_ptr", bblock);
- }
- 
--llvm::BasicBlock *FunctionEmitContext::CreateBasicBlock(const char *name, llvm::BasicBlock *insertAfter) {
-+llvm::BasicBlock *FunctionEmitContext::CreateBasicBlock(const llvm::Twine &name, llvm::BasicBlock *insertAfter) {
-     llvm::BasicBlock *newBB = llvm::BasicBlock::Create(*g->ctx, name, llvmFunction);
-     if (insertAfter)
-         newBB->moveAfter(insertAfter);
-@@ -1416,14 +1417,15 @@ llvm::Value *FunctionEmitContext::I1VecToBoolVec(llvm::Value *b) {
- 
-         for (unsigned int i = 0; i < at->getNumElements(); ++i) {
-             llvm::Value *elt = ExtractInst(b, i);
--            llvm::Value *sext = SwitchBoolSize(elt, LLVMTypes::BoolVectorStorageType, LLVMGetName(elt, "_to_boolvec"));
-+            llvm::Value *sext =
-+                SwitchBoolSize(elt, LLVMTypes::BoolVectorStorageType, llvm::Twine(elt->getName()) + "_to_boolvec");
-             ret = InsertInst(ret, sext, i);
-         }
-         return ret;
-     } else {
-         // For non-array types, convert to 'LLVMTypes::BoolVectorType' if
-         // necessary.
--        return SwitchBoolSize(b, LLVMTypes::BoolVectorType, LLVMGetName(b, "_to_boolvec"));
-+        return SwitchBoolSize(b, LLVMTypes::BoolVectorType, llvm::Twine(b->getName()) + "_to_boolvec");
-     }
- }
- 
-@@ -1563,7 +1565,7 @@ static int lArrayVectorWidth(llvm::Type *t) {
- }
- 
- llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps inst, llvm::Value *v0, llvm::Value *v1,
--                                                 const char *name) {
-+                                                 const llvm::Twine &name) {
-     if (v0 == NULL || v1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1573,7 +1575,7 @@ llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps in
-     llvm::Type *type = v0->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *bop = llvm::BinaryOperator::Create(inst, v0, v1, name ? name : "", bblock);
-+        llvm::Instruction *bop = llvm::BinaryOperator::Create(inst, v0, v1, name, bblock);
-         AddDebugPos(bop);
-         return bop;
-     } else {
-@@ -1591,7 +1593,7 @@ llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps in
-     }
- }
- 
--llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const char *name) {
-+llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const llvm::Twine &name) {
-     if (v == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1603,14 +1605,14 @@ llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const char *name)
-     llvm::Type *type = v->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *binst = llvm::BinaryOperator::CreateNot(v, name ? name : "not", bblock);
-+        llvm::Instruction *binst = llvm::BinaryOperator::CreateNot(v, name.isTriviallyEmpty() ? "not" : name, bblock);
-         AddDebugPos(binst);
-         return binst;
-     } else {
-         llvm::Value *ret = llvm::UndefValue::get(type);
-         for (int i = 0; i < arraySize; ++i) {
-             llvm::Value *a = ExtractInst(v, i);
--            llvm::Value *op = llvm::BinaryOperator::CreateNot(a, name ? name : "not", bblock);
-+            llvm::Value *op = llvm::BinaryOperator::CreateNot(a, name.isTriviallyEmpty() ? "not" : name, bblock);
-             AddDebugPos(op);
-             ret = InsertInst(ret, op, i);
-         }
-@@ -1638,7 +1640,7 @@ static llvm::Type *lGetMatchingBoolVectorType(llvm::Type *type) {
- }
- 
- llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm::CmpInst::Predicate pred,
--                                          llvm::Value *v0, llvm::Value *v1, const char *name) {
-+                                          llvm::Value *v0, llvm::Value *v1, const llvm::Twine &name) {
-     if (v0 == NULL || v1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1648,7 +1650,8 @@ llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm
-     llvm::Type *type = v0->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *ci = llvm::CmpInst::Create(inst, pred, v0, v1, name ? name : "cmp", bblock);
-+        llvm::Instruction *ci =
-+            llvm::CmpInst::Create(inst, pred, v0, v1, name.isTriviallyEmpty() ? "cmp" : name, bblock);
-         AddDebugPos(ci);
-         return ci;
-     } else {
-@@ -1657,14 +1660,14 @@ llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm
-         for (int i = 0; i < arraySize; ++i) {
-             llvm::Value *a = ExtractInst(v0, i);
-             llvm::Value *b = ExtractInst(v1, i);
--            llvm::Value *op = CmpInst(inst, pred, a, b, name);
-+            llvm::Value *op = CmpInst(inst, pred, a, b, name.isTriviallyEmpty() ? "cmp" : name);
-             ret = InsertInst(ret, op, i);
-         }
-         return ret;
-     }
- }
- 
--llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const char *name) {
-+llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1704,21 +1707,19 @@ llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const char *n
-     return ret;
- }
- 
--llvm::Value *FunctionEmitContext::BitCastInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Value *FunctionEmitContext::BitCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_bitcast");
--
--    llvm::Instruction *inst = new llvm::BitCastInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::BitCastInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_bitcast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const char *name) {
-+llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1728,23 +1729,19 @@ llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const char *n
-         // no-op for varying pointers; they're already vectors of ints
-         return value;
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_ptr2int");
-     llvm::Type *type = LLVMTypes::PointerIntType;
--    llvm::Instruction *inst = new llvm::PtrToIntInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::PtrToIntInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_ptr2int");
--
-     llvm::Type *fromType = value->getType();
-     if (llvm::isa<llvm::VectorType>(fromType)) {
-         // varying pointer
-@@ -1752,27 +1749,26 @@ llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *t
-             // already the right type--done
-             return value;
-         else if (fromType->getScalarSizeInBits() > toType->getScalarSizeInBits())
--            return TruncInst(value, toType, name);
-+            return TruncInst(value, toType,
-+                             name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name);
-         else {
-             AssertPos(currentPos, fromType->getScalarSizeInBits() < toType->getScalarSizeInBits());
--            return ZExtInst(value, toType, name);
-+            return ZExtInst(value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name);
-         }
-     }
- 
--    llvm::Instruction *inst = new llvm::PtrToIntInst(value, toType, name, bblock);
-+    llvm::Instruction *inst = new llvm::PtrToIntInst(
-+        value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_int2ptr");
--
-     llvm::Type *fromType = value->getType();
-     if (llvm::isa<llvm::VectorType>(fromType)) {
-         // varying pointer
-@@ -1780,95 +1776,87 @@ llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *t
-             // done
-             return value;
-         else if (fromType->getScalarSizeInBits() > toType->getScalarSizeInBits())
--            return TruncInst(value, toType, name);
-+            return TruncInst(value, toType,
-+                             name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name);
-         else {
-             AssertPos(currentPos, fromType->getScalarSizeInBits() < toType->getScalarSizeInBits());
--            return ZExtInst(value, toType, name);
-+            return ZExtInst(value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name);
-         }
-     }
- 
--    llvm::Instruction *inst = new llvm::IntToPtrInst(value, toType, name, bblock);
-+    llvm::Instruction *inst = new llvm::IntToPtrInst(
-+        value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::TruncInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::TruncInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_trunc");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::TruncInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::TruncInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_trunc" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
- llvm::Instruction *FunctionEmitContext::CastInst(llvm::Instruction::CastOps op, llvm::Value *value, llvm::Type *type,
--                                                 const char *name) {
-+                                                 const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_cast");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = llvm::CastInst::Create(op, value, type, name, bblock);
-+    llvm::Instruction *inst = llvm::CastInst::Create(
-+        op, value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_cast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::FPCastInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::FPCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_cast");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = llvm::CastInst::CreateFPCast(value, type, name, bblock);
-+    llvm::Instruction *inst = llvm::CastInst::CreateFPCast(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_cast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::SExtInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::SExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_sext");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::SExtInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::SExtInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_sext" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::ZExtInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::ZExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_zext");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::ZExtInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::ZExtInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_zext" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
-@@ -1913,14 +1901,15 @@ llvm::Value *FunctionEmitContext::applyVaryingGEP(llvm::Value *basePtr, llvm::Va
-         scale = SmearUniform(scale);
-         Assert(index != NULL);
-         // offset = index * scale
--        offset = BinaryOperator(llvm::Instruction::Mul, scale, index, LLVMGetName("mul", scale, index));
-+        offset = BinaryOperator(llvm::Instruction::Mul, scale, index,
-+                                ((llvm::Twine("mul_") + scale->getName()) + "_") + index->getName());
-     }
- 
-     // For 64-bit targets, if we've been doing our offset calculations in
-     // 32 bits, we still have to convert to a 64-bit value before we
-     // actually add the offset to the pointer.
-     if (g->target->is32Bit() == false && g->opt.force32BitAddressing == true)
--        offset = SExtInst(offset, LLVMTypes::Int64VectorType, LLVMGetName(offset, "_to_64"));
-+        offset = SExtInst(offset, LLVMTypes::Int64VectorType, llvm::Twine(offset->getName()) + "_to_64");
- 
-     // Smear out the pointer to be varying; either the base pointer or the
-     // index must be varying for this method to be called.
-@@ -1929,7 +1918,7 @@ llvm::Value *FunctionEmitContext::applyVaryingGEP(llvm::Value *basePtr, llvm::Va
-     llvm::Value *varyingPtr = baseIsUniform ? SmearUniform(basePtr) : basePtr;
- 
-     // newPtr = ptr + offset
--    return BinaryOperator(llvm::Instruction::Add, varyingPtr, offset, LLVMGetName(basePtr, "_offset"));
-+    return BinaryOperator(llvm::Instruction::Add, varyingPtr, offset, llvm::Twine(basePtr->getName()) + "_offset");
- }
- 
- void FunctionEmitContext::MatchIntegerTypes(llvm::Value **v0, llvm::Value **v1) {
-@@ -2006,13 +1995,13 @@ llvm::Value *FunctionEmitContext::MakeSlicePointer(llvm::Value *ptr, llvm::Value
-     llvm::StructType *st = llvm::StructType::get(*g->ctx, eltTypes);
- 
-     llvm::Value *ret = llvm::UndefValue::get(st);
--    ret = InsertInst(ret, ptr, 0, LLVMGetName(ret, "_slice_ptr"));
--    ret = InsertInst(ret, offset, 1, LLVMGetName(ret, "_slice_offset"));
-+    ret = InsertInst(ret, ptr, 0, llvm::Twine(ret->getName()) + "_slice_ptr");
-+    ret = InsertInst(ret, offset, 1, llvm::Twine(ret->getName()) + "_slice_offset");
-     return ret;
- }
- 
- llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index, const Type *ptrRefType,
--                                                    const char *name) {
-+                                                    const llvm::Twine &name) {
-     if (basePtr == NULL || index == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2065,8 +2054,8 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
-         // uniform, so just emit the regular LLVM GEP instruction
-         llvm::Value *ind[1] = {index};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&ind[0], &ind[1]);
--        llvm::Instruction *inst =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "gep", bblock);
-+        llvm::Instruction *inst = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                                  name.isTriviallyEmpty() ? "gep" : name, bblock);
-         AddDebugPos(inst);
-         return inst;
-     } else
-@@ -2074,7 +2063,7 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
- }
- 
- llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0, llvm::Value *index1,
--                                                    const Type *ptrRefType, const char *name) {
-+                                                    const Type *ptrRefType, const llvm::Twine &name) {
-     if (basePtr == NULL || index0 == NULL || index1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2114,8 +2103,8 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
-         // uniform, so just emit the regular LLVM GEP instruction
-         llvm::Value *indices[2] = {index0, index1};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&indices[0], &indices[2]);
--        llvm::Instruction *inst =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "gep", bblock);
-+        llvm::Instruction *inst = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                                  name.isTriviallyEmpty() ? "gep" : name, bblock);
-         AddDebugPos(inst);
-         return inst;
-     } else {
-@@ -2138,7 +2127,7 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
- }
- 
- llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int elementNum, const Type *ptrRefType,
--                                                   const char *name, const PointerType **resultPtrType) {
-+                                                   const llvm::Twine &name, const PointerType **resultPtrType) {
-     if (resultPtrType != NULL)
-         AssertPos(currentPos, ptrRefType != NULL);
- 
-@@ -2195,8 +2184,8 @@ llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int
-         // If the pointer is uniform, we can use the regular LLVM GEP.
-         llvm::Value *offsets[2] = {LLVMInt32(0), LLVMInt32(elementNum)};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&offsets[0], &offsets[2]);
--        resultPtr =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "struct_offset", bblock);
-+        resultPtr = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                    name.isTriviallyEmpty() ? "struct_offset" : name, bblock);
-     } else {
-         // Otherwise do the math to find the offset and add it to the given
-         // varying pointers
-@@ -2237,7 +2226,7 @@ llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int
-         return resultPtr;
- }
- 
--llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if ((value == NULL) || (toType == NULL)) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2248,20 +2237,18 @@ llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type
-     llvm::Value *newBool = value;
-     if (g->target->getDataLayout()->getTypeSizeInBits(fromType) >
-         g->target->getDataLayout()->getTypeSizeInBits(toType)) {
--        if (name == NULL)
--            name = LLVMGetName(value, "_switchBool");
--        newBool = TruncInst(value, toType, name);
-+        newBool =
-+            TruncInst(value, toType, name.isTriviallyEmpty() ? (llvm::Twine(value->getName()) + "_switchBool") : name);
-     } else if (g->target->getDataLayout()->getTypeSizeInBits(fromType) <
-                g->target->getDataLayout()->getTypeSizeInBits(toType)) {
--        if (name == NULL)
--            name = LLVMGetName(value, "_switchBool");
--        newBool = SExtInst(value, toType, name);
-+        newBool =
-+            SExtInst(value, toType, name.isTriviallyEmpty() ? (llvm::Twine(value->getName()) + "_switchBool") : name);
-     }
- 
-     return newBool;
- }
- 
--llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, const char *name) {
-+llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, const llvm::Twine &name) {
-     if (ptr == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2270,13 +2257,13 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
-     llvm::PointerType *pt = llvm::dyn_cast<llvm::PointerType>(ptr->getType());
-     AssertPos(currentPos, pt != NULL);
- 
--    if (name == NULL)
--        name = LLVMGetName(ptr, "_load");
--
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    llvm::LoadInst *inst = new llvm::LoadInst(pt->getPointerElementType(), ptr, name, bblock);
-+    llvm::LoadInst *inst =
-+        new llvm::LoadInst(pt->getPointerElementType(), ptr,
-+                           name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name, bblock);
- #else
--    llvm::LoadInst *inst = new llvm::LoadInst(ptr, name, bblock);
-+    llvm::LoadInst *inst =
-+        new llvm::LoadInst(ptr, name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name, bblock);
- #endif
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
-@@ -2307,8 +2294,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
- static llvm::Value *lFinalSliceOffset(FunctionEmitContext *ctx, llvm::Value *ptr, const PointerType **ptrType) {
-     Assert(CastType<PointerType>(*ptrType) != NULL);
- 
--    llvm::Value *slicePtr = ctx->ExtractInst(ptr, 0, LLVMGetName(ptr, "_ptr"));
--    llvm::Value *sliceOffset = ctx->ExtractInst(ptr, 1, LLVMGetName(ptr, "_offset"));
-+    llvm::Value *slicePtr = ctx->ExtractInst(ptr, 0, llvm::Twine(ptr->getName()) + "_ptr");
-+    llvm::Value *sliceOffset = ctx->ExtractInst(ptr, 1, llvm::Twine(ptr->getName()) + "_offset");
- 
-     // slicePtr should be a pointer to an soa-width wide array of the
-     // final atomic/enum/pointer type
-@@ -2327,14 +2314,14 @@ static llvm::Value *lFinalSliceOffset(FunctionEmitContext *ctx, llvm::Value *ptr
-         slicePtr = ctx->BitCastInst(slicePtr, (*ptrType)->LLVMType(g->ctx));
- 
-     // And finally index based on the slice offset
--    return ctx->GetElementPtrInst(slicePtr, sliceOffset, *ptrType, LLVMGetName(slicePtr, "_final_gep"));
-+    return ctx->GetElementPtrInst(slicePtr, sliceOffset, *ptrType, llvm::Twine(slicePtr->getName()) + "_final_gep");
- }
- 
- /** Utility routine that loads from a uniform pointer to soa<> data,
-     returning a regular uniform (non-SOA result).
-  */
- llvm::Value *FunctionEmitContext::loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType,
--                                                     const char *name) {
-+                                                     const llvm::Twine &name) {
-     const Type *unifType = ptrType->GetBaseType()->GetAsUniformType();
- 
-     const CollectionType *ct = CastType<CollectionType>(ptrType->GetBaseType());
-@@ -2363,7 +2350,7 @@ llvm::Value *FunctionEmitContext::loadUniformFromSOA(llvm::Value *ptr, llvm::Val
- }
- 
- llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrRefType,
--                                           const char *name, bool one_elem) {
-+                                           const llvm::Twine &name, bool one_elem) {
-     if (ptr == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2371,9 +2358,6 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
- 
-     AssertPos(currentPos, ptrRefType != NULL && mask != NULL);
- 
--    if (name == NULL)
--        name = LLVMGetName(ptr, "_load");
--
-     const PointerType *ptrType;
-     const Type *elType;
-     if (CastType<ReferenceType>(ptrRefType) != NULL) {
-@@ -2393,7 +2377,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
- 
-     if (ptrType->IsUniformType()) {
-         if (ptrType->IsSlice()) {
--            return loadUniformFromSOA(ptr, mask, ptrType, name);
-+            return loadUniformFromSOA(ptr, mask, ptrType,
-+                                      name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name);
-         } else {
-             // FIXME: same issue as above load inst regarding alignment...
-             //
-@@ -2405,11 +2390,15 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-             const AtomicType *atomicType = CastType<AtomicType>(ptrType->GetBaseType());
- 
- #if ISPC_LLVM_VERSION <= ISPC_LLVM_10_0
--            llvm::LoadInst *inst = new llvm::LoadInst(ptr, name, false /* not volatile */, bblock);
-+            llvm::LoadInst *inst =
-+                new llvm::LoadInst(ptr, name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name,
-+                                   false /* not volatile */, bblock);
- #else // LLVM 11.0+
-             llvm::PointerType *ptr_type = llvm::dyn_cast<llvm::PointerType>(ptr->getType());
-             llvm::LoadInst *inst =
--                new llvm::LoadInst(ptr_type->getPointerElementType(), ptr, name, false /* not volatile */, bblock);
-+                new llvm::LoadInst(ptr_type->getPointerElementType(), ptr,
-+                                   name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name,
-+                                   false /* not volatile */, bblock);
- #endif
- 
-             if (atomicType != NULL && atomicType->IsVaryingType()) {
-@@ -2433,7 +2422,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-     } else {
-         // Otherwise we should have a varying ptr and it's time for a
-         // gather.
--        llvm::Value *gather_result = gather(ptr, ptrType, GetFullMask(), name);
-+        llvm::Value *gather_result = gather(ptr, ptrType, GetFullMask(),
-+                                            name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name);
-         if (!one_elem)
-             return gather_result;
- 
-@@ -2453,19 +2443,19 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-         // We can actually call either one, since both are i32s as far as
-         // LLVM's type system is concerned...
-         llvm::Function *fmm = mm[0]->function;
--        llvm::Value *int_mask = CallInst(fmm, NULL, mask, LLVMGetName(mask, "_movmsk"));
-+        llvm::Value *int_mask = CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_movmsk");
-         std::vector<Symbol *> lz;
-         m->symbolTable->LookupFunction("__count_trailing_zeros_i64", &lz);
-         llvm::Function *flz = lz[0]->function;
--        llvm::Value *elem_idx = CallInst(flz, NULL, int_mask, LLVMGetName(mask, "_clz"));
--        llvm::Value *elem = llvm::ExtractElementInst::Create(gather_result, elem_idx,
--                                                             LLVMGetName(gather_result, "_umasked_elem"), bblock);
-+        llvm::Value *elem_idx = CallInst(flz, NULL, int_mask, llvm::Twine(mask->getName()) + "_clz");
-+        llvm::Value *elem = llvm::ExtractElementInst::Create(
-+            gather_result, elem_idx, llvm::Twine(gather_result->getName()) + "_umasked_elem", bblock);
-         return elem;
-     }
- }
- 
- llvm::Value *FunctionEmitContext::gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask,
--                                         const char *name) {
-+                                         const llvm::Twine &name) {
-     // We should have a varying pointer if we get here...
-     AssertPos(currentPos, ptrType->IsVaryingType());
- 
-@@ -2602,7 +2592,8 @@ void FunctionEmitContext::addGSMetadata(llvm::Value *v, SourcePos pos) {
-     inst->setMetadata("last_column", md);
- }
- 
--llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *name, int align, bool atEntryBlock) {
-+llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const llvm::Twine &name, int align,
-+                                             bool atEntryBlock) {
-     if (llvmType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2615,12 +2606,12 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-         llvm::Instruction *retInst = allocaBlock->getTerminator();
-         AssertPos(currentPos, retInst);
-         unsigned AS = llvmFunction->getParent()->getDataLayout().getAllocaAddrSpace();
--        inst = new llvm::AllocaInst(llvmType, AS, name ? name : "", retInst);
-+        inst = new llvm::AllocaInst(llvmType, AS, name, retInst);
-     } else {
-         // Unless the caller overrode the default and wants it in the
-         // current basic block
-         unsigned AS = llvmFunction->getParent()->getDataLayout().getAllocaAddrSpace();
--        inst = new llvm::AllocaInst(llvmType, AS, name ? name : "", bblock);
-+        inst = new llvm::AllocaInst(llvmType, AS, name, bblock);
-     }
- 
-     // If no alignment was specified but we have an array of a uniform
-@@ -2639,7 +2630,8 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::AllocaInst(const Type *ptrType, const char *name, int align, bool atEntryBlock) {
-+llvm::Value *FunctionEmitContext::AllocaInst(const Type *ptrType, const llvm::Twine &name, int align,
-+                                             bool atEntryBlock) {
-     if (ptrType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3075,66 +3067,59 @@ llvm::Instruction *FunctionEmitContext::BranchInst(llvm::BasicBlock *trueBlock,
-     return b;
- }
- 
--llvm::Value *FunctionEmitContext::ExtractInst(llvm::Value *v, int elt, const char *name) {
-+llvm::Value *FunctionEmitContext::ExtractInst(llvm::Value *v, int elt, const llvm::Twine &name) {
-     if (v == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_extract_%d", elt);
--        name = LLVMGetName(v, buf);
--    }
-     llvm::Instruction *ei = NULL;
-     if (llvm::isa<llvm::VectorType>(v->getType()))
--        ei = llvm::ExtractElementInst::Create(v, LLVMInt32(elt), name, bblock);
-+        ei = llvm::ExtractElementInst::Create(
-+            v, LLVMInt32(elt),
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_extract_") + llvm::Twine(elt)) : name, bblock);
-     else
--        ei = llvm::ExtractValueInst::Create(v, elt, name, bblock);
-+        ei = llvm::ExtractValueInst::Create(
-+            v, elt, name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_extract_") + llvm::Twine(elt)) : name,
-+            bblock);
-     AddDebugPos(ei);
-     return ei;
- }
- 
--llvm::Value *FunctionEmitContext::InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const char *name) {
-+llvm::Value *FunctionEmitContext::InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const llvm::Twine &name) {
-     if (v == NULL || eltVal == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_insert_%d", elt);
--        name = LLVMGetName(v, buf);
--    }
--
-     llvm::Instruction *ii = NULL;
-     if (llvm::isa<llvm::VectorType>(v->getType()))
--        ii = llvm::InsertElementInst::Create(v, eltVal, LLVMInt32(elt), name, bblock);
-+        ii = llvm::InsertElementInst::Create(
-+            v, eltVal, LLVMInt32(elt),
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_insert_") + llvm::Twine(elt)) : name, bblock);
-     else
--        ii = llvm::InsertValueInst::Create(v, eltVal, elt, name, bblock);
-+        ii = llvm::InsertValueInst::Create(
-+            v, eltVal, elt,
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_insert_") + llvm::Twine(elt)) : name, bblock);
-     AddDebugPos(ii);
-     return ii;
- }
- 
--llvm::Value *FunctionEmitContext::ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const char *name) {
-+llvm::Value *FunctionEmitContext::ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask,
-+                                              const llvm::Twine &name) {
-     if (v1 == NULL || v2 == NULL || mask == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_shuffle");
--        name = LLVMGetName(v1, buf);
--    }
--
--    llvm::Instruction *ii = new llvm::ShuffleVectorInst(v1, v2, mask, name, bblock);
-+    llvm::Instruction *ii = new llvm::ShuffleVectorInst(
-+        v1, v2, mask, name.isTriviallyEmpty() ? (llvm::Twine(v1->getName()) + "_shuffle") : name, bblock);
- 
-     AddDebugPos(ii);
-     return ii;
- }
- 
--llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vecType, const char *name) {
-+llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vecType, const llvm::Twine &name) {
-     if (v == NULL || vecType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3148,12 +3133,6 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     Assert(ty && ty->getVectorElementType() == v->getType());
- #endif
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_broadcast");
--        name = LLVMGetName(v, buf);
--    }
--
-     // Generate the following sequence:
-     //   %name_init.i = insertelement <4 x i32> undef, i32 %val, i32 0
-     //   %name.i = shufflevector <4 x i32> %name_init.i, <4 x i32> undef,
-@@ -3163,7 +3142,7 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     llvm::Value *undef2 = llvm::UndefValue::get(vecType);
- 
-     // InsertElement
--    llvm::Twine tw = llvm::Twine(name) + llvm::Twine("_init");
-+    llvm::Twine tw = name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + llvm::Twine("_init");
-     llvm::Value *insert = InsertInst(undef1, v, 0, tw.str().c_str());
- 
-     // ShuffleVector
-@@ -3179,28 +3158,27 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-         llvm::ConstantVector::getSplat(llvm::ElementCount::get(static_cast<unsigned int>(ty->getNumElements()), false),
-                                        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
- #endif
--    llvm::Value *ret = ShuffleInst(insert, undef2, zeroVec, name);
-+    llvm::Value *ret = ShuffleInst(insert, undef2, zeroVec,
-+                                   name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name);
- 
-     return ret;
- }
- 
--llvm::PHINode *FunctionEmitContext::PhiNode(llvm::Type *type, int count, const char *name) {
--    llvm::PHINode *pn = llvm::PHINode::Create(type, count, name ? name : "phi", bblock);
-+llvm::PHINode *FunctionEmitContext::PhiNode(llvm::Type *type, int count, const llvm::Twine &name) {
-+    llvm::PHINode *pn = llvm::PHINode::Create(type, count, name.isTriviallyEmpty() ? "phi" : name, bblock);
-     AddDebugPos(pn);
-     return pn;
- }
- 
- llvm::Instruction *FunctionEmitContext::SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1,
--                                                   const char *name) {
-+                                                   const llvm::Twine &name) {
-     if (test == NULL || val0 == NULL || val1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(test, "_select");
--
--    llvm::Instruction *inst = llvm::SelectInst::Create(test, val0, val1, name, bblock);
-+    llvm::Instruction *inst = llvm::SelectInst::Create(
-+        test, val0, val1, name.isTriviallyEmpty() ? (llvm::Twine(test->getName()) + "_select") : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
-@@ -3226,7 +3204,7 @@ static unsigned int lCalleeArgCount(llvm::Value *callee, const FunctionType *fun
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType,
--                                           const std::vector<llvm::Value *> &args, const char *name) {
-+                                           const std::vector<llvm::Value *> &args, const llvm::Twine &name) {
-     if (func == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3258,9 +3236,9 @@ llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-         llvm::PointerType *func_ptr_type = llvm::dyn_cast<llvm::PointerType>(func->getType());
-         llvm::FunctionType *func_type = llvm::dyn_cast<llvm::FunctionType>(func_ptr_type->getPointerElementType());
--        llvm::CallInst *callinst = llvm::CallInst::Create(func_type, func, argVals, name ? name : "", bblock);
-+        llvm::CallInst *callinst = llvm::CallInst::Create(func_type, func, argVals, name, bblock);
- #else
--        llvm::CallInst *callinst = llvm::CallInst::Create(func, argVals, name ? name : "", bblock);
-+        llvm::CallInst *callinst = llvm::CallInst::Create(func, argVals, name, bblock);
- #endif
- 
-         // We could be dealing with a function pointer in which case this will not be a 'llvm::Function'.
-@@ -3464,14 +3442,14 @@ llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg,
--                                           const char *name) {
-+                                           const llvm::Twine &name) {
-     std::vector<llvm::Value *> args;
-     args.push_back(arg);
-     return CallInst(func, funcType, args, name);
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg0,
--                                           llvm::Value *arg1, const char *name) {
-+                                           llvm::Value *arg1, const llvm::Twine &name) {
-     std::vector<llvm::Value *> args;
-     args.push_back(arg0);
-     args.push_back(arg1);
-diff --git a/src/ctx.h b/src/ctx.h
-index 6e5ad74ba..48b3bb826 100644
---- a/src/ctx.h
-+++ b/src/ctx.h
-@@ -302,7 +302,7 @@ class FunctionEmitContext {
-     llvm::Value *GetStringPtr(const std::string &str);
- 
-     /** Create a new basic block with given name */
--    llvm::BasicBlock *CreateBasicBlock(const char *name, llvm::BasicBlock *insertAfter = NULL);
-+    llvm::BasicBlock *CreateBasicBlock(const llvm::Twine &name, llvm::BasicBlock *insertAfter = NULL);
- 
-     /** Given a vector with element type i1, return a vector of type
-         LLVMTypes::BoolVectorType.  This method handles the conversion for
-@@ -380,33 +380,33 @@ class FunctionEmitContext {
-         this also handles applying the given operation to the vector
-         elements. */
-     llvm::Value *BinaryOperator(llvm::Instruction::BinaryOps inst, llvm::Value *v0, llvm::Value *v1,
--                                const char *name = NULL);
-+                                const llvm::Twine &name = "");
- 
-     /** Emit the "not" operator.  Like BinaryOperator(), this also handles
-         a VectorType-based operand. */
--    llvm::Value *NotOperator(llvm::Value *v, const char *name = NULL);
-+    llvm::Value *NotOperator(llvm::Value *v, const llvm::Twine &name = "");
- 
-     /** Emit a comparison instruction.  If the operands are VectorTypes,
-         then a value for the corresponding boolean VectorType is
-         returned. */
-     llvm::Value *CmpInst(llvm::Instruction::OtherOps inst, llvm::CmpInst::Predicate pred, llvm::Value *v0,
--                         llvm::Value *v1, const char *name = NULL);
-+                         llvm::Value *v1, const llvm::Twine &name = "");
- 
-     /** Given a scalar value, return a vector of the same type (or an
-         array, for pointer types). */
--    llvm::Value *SmearUniform(llvm::Value *value, const char *name = NULL);
-+    llvm::Value *SmearUniform(llvm::Value *value, const llvm::Twine &name = "");
- 
--    llvm::Value *BitCastInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Value *PtrToIntInst(llvm::Value *value, const char *name = NULL);
--    llvm::Value *PtrToIntInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Value *IntToPtrInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+    llvm::Value *BitCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Value *PtrToIntInst(llvm::Value *value, const llvm::Twine &name = "");
-+    llvm::Value *PtrToIntInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Value *IntToPtrInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
- 
--    llvm::Instruction *TruncInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+    llvm::Instruction *TruncInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-     llvm::Instruction *CastInst(llvm::Instruction::CastOps op, llvm::Value *value, llvm::Type *type,
--                                const char *name = NULL);
--    llvm::Instruction *FPCastInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Instruction *SExtInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Instruction *ZExtInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+                                const llvm::Twine &name = "");
-+    llvm::Instruction *FPCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Instruction *SExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Instruction *ZExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
- 
-     /** Given two integer-typed values (but possibly one vector and the
-         other not, and or of possibly-different bit-widths), update their
-@@ -426,9 +426,9 @@ class FunctionEmitContext {
-         pointers.  The underlying type of the base pointer must be provided
-         via the ptrType parameter */
-     llvm::Value *GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index, const Type *ptrType,
--                                   const char *name = NULL);
-+                                   const llvm::Twine &name = "");
-     llvm::Value *GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0, llvm::Value *index1, const Type *ptrType,
--                                   const char *name = NULL);
-+                                   const llvm::Twine &name = "");
- 
-     /** This method returns a new pointer that represents offsetting the
-         given base pointer to point at the given element number of the
-@@ -436,26 +436,26 @@ class FunctionEmitContext {
-         pointer must be a pointer to a structure type.  The ptrType gives
-         the type of the pointer, though it may be NULL if the base pointer
-         is uniform. */
--    llvm::Value *AddElementOffset(llvm::Value *basePtr, int elementNum, const Type *ptrType, const char *name = NULL,
--                                  const PointerType **resultPtrType = NULL);
-+    llvm::Value *AddElementOffset(llvm::Value *basePtr, int elementNum, const Type *ptrType,
-+                                  const llvm::Twine &name = "", const PointerType **resultPtrType = NULL);
- 
-     /** Bool is stored as i8 and <WIDTH x i8> but represented in IR as i1 and
-      * <WIDTH x MASK>. This is a helper function to match bool size at storage
-      * interface. */
--    llvm::Value *SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const char *name = NULL);
-+    llvm::Value *SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name = "");
-     /** Load from the memory location(s) given by lvalue, using the given
-         mask.  The lvalue may be varying, in which case this corresponds to
-         a gather from the multiple memory locations given by the array of
-         pointer values given by the lvalue.  If the lvalue is not varying,
-         then both the mask pointer and the type pointer may be NULL. */
--    llvm::Value *LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrType, const char *name = NULL,
-+    llvm::Value *LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrType, const llvm::Twine &name = "",
-                           bool one_elem = false);
- 
-     /* Load from memory location(s) given.
-      * 'type' needs to be provided when storage type is different from IR type. For example,
-      * 'unform bool' is 'i1' in IR but stored as 'i8'.
-      * Otherwise leave this as NULL. */
--    llvm::Value *LoadInst(llvm::Value *ptr, const Type *type = NULL, const char *name = NULL);
-+    llvm::Value *LoadInst(llvm::Value *ptr, const Type *type = NULL, const llvm::Twine &name = "");
- 
-     /** Emits an alloca instruction to allocate stack storage for the given
-         type.  If a non-zero alignment is specified, the object is also
-@@ -463,7 +463,8 @@ class FunctionEmitContext {
-         instruction is added at the start of the function in the entry
-         basic block; if it should be added to the current basic block, then
-         the atEntryBlock parameter should be false. */
--    llvm::Value *AllocaInst(llvm::Type *llvmType, const char *name = NULL, int align = 0, bool atEntryBlock = true);
-+    llvm::Value *AllocaInst(llvm::Type *llvmType, const llvm::Twine &name = "", int align = 0,
-+                            bool atEntryBlock = true);
- 
-     /** Emits an alloca instruction to allocate stack storage for the given
-         type.  If a non-zero alignment is specified, the object is also
-@@ -474,7 +475,7 @@ class FunctionEmitContext {
-         This implementation is preferred when possible. It is needed when
-         storage type is different from IR type. For example,
-         'unform bool' is 'i1' in IR but stored as 'i8'. */
--    llvm::Value *AllocaInst(const Type *ptrType, const char *name = NULL, int align = 0, bool atEntryBlock = true);
-+    llvm::Value *AllocaInst(const Type *ptrType, const llvm::Twine &name = "", int align = 0, bool atEntryBlock = true);
- 
-     /** Standard store instruction; for this variant, the lvalue must be a
-         single pointer, not a varying lvalue.
-@@ -502,39 +503,41 @@ class FunctionEmitContext {
-     /** This convenience method maps to an llvm::ExtractElementInst if the
-         given value is a llvm::VectorType, and to an llvm::ExtractValueInst
-         otherwise. */
--    llvm::Value *ExtractInst(llvm::Value *v, int elt, const char *name = NULL);
-+    llvm::Value *ExtractInst(llvm::Value *v, int elt, const llvm::Twine &name = "");
- 
-     /** This convenience method maps to an llvm::InsertElementInst if the
-         given value is a llvm::VectorType, and to an llvm::InsertValueInst
-         otherwise. */
--    llvm::Value *InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const char *name = NULL);
-+    llvm::Value *InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const llvm::Twine &name = "");
- 
-     /** This convenience method maps to an llvm::ShuffleVectorInst. */
--    llvm::Value *ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const char *name = NULL);
-+    llvm::Value *ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const llvm::Twine &name = "");
- 
-     /** This convenience method to generate broadcast pattern. It takes a value
-         and a vector type. Type of the value must match element type of the
-         vector. */
--    llvm::Value *BroadcastValue(llvm::Value *v, llvm::Type *vecType, const char *name = NULL);
-+    llvm::Value *BroadcastValue(llvm::Value *v, llvm::Type *vecType, const llvm::Twine &name = "");
- 
--    llvm::PHINode *PhiNode(llvm::Type *type, int count, const char *name = NULL);
--    llvm::Instruction *SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1, const char *name = NULL);
-+    llvm::PHINode *PhiNode(llvm::Type *type, int count, const llvm::Twine &name = "");
-+    llvm::Instruction *SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1,
-+                                  const llvm::Twine &name = "");
- 
-     /** Emits IR to do a function call with the given arguments.  If the
-         function type is a varying function pointer type, its full type
-         must be provided in funcType.  funcType can be NULL if func is a
-         uniform function pointer. */
-     llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, const std::vector<llvm::Value *> &args,
--                          const char *name = NULL);
-+                          const llvm::Twine &name = "");
- 
-     /** This is a convenience method that issues a call instruction to a
-         function that takes just a single argument. */
--    llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg, const char *name = NULL);
-+    llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg,
-+                          const llvm::Twine &name = "");
- 
-     /** This is a convenience method that issues a call instruction to a
-         function that takes two arguments. */
-     llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg0, llvm::Value *arg1,
--                          const char *name = NULL);
-+                          const llvm::Twine &name = "");
- 
-     /** Launch an asynchronous task to run the given function, passing it
-         he given argument values. */
-@@ -756,9 +759,10 @@ class FunctionEmitContext {
-     void maskedStore(llvm::Value *value, llvm::Value *ptr, const Type *ptrType, llvm::Value *mask);
-     void storeUniformToSOA(llvm::Value *value, llvm::Value *ptr, llvm::Value *mask, const Type *valueType,
-                            const PointerType *ptrType);
--    llvm::Value *loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType, const char *name);
-+    llvm::Value *loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType,
-+                                    const llvm::Twine &name = "");
- 
--    llvm::Value *gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask, const char *name);
-+    llvm::Value *gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask, const llvm::Twine &name = "");
- 
-     llvm::Value *addVaryingOffsetsIfNeeded(llvm::Value *ptr, const Type *ptrType);
- };
-diff --git a/src/expr.cpp b/src/expr.cpp
-index 80cc3020a..6d38d1889 100644
---- a/src/expr.cpp
-+++ b/src/expr.cpp
-@@ -1021,11 +1021,11 @@ static llvm::Value *lEmitNegate(Expr *arg, SourcePos pos, FunctionEmitContext *c
-     ctx->SetDebugPos(pos);
-     if (type->IsFloatType()) {
-         llvm::Value *zero = llvm::ConstantFP::getZeroValueForNegation(type->LLVMType(g->ctx));
--        return ctx->BinaryOperator(llvm::Instruction::FSub, zero, argVal, LLVMGetName(argVal, "_negate"));
-+        return ctx->BinaryOperator(llvm::Instruction::FSub, zero, argVal, llvm::Twine(argVal->getName()) + "_negate");
-     } else {
-         llvm::Value *zero = lLLVMConstantValue(type, g->ctx, 0.);
-         AssertPos(pos, type->IsIntType());
--        return ctx->BinaryOperator(llvm::Instruction::Sub, zero, argVal, LLVMGetName(argVal, "_negate"));
-+        return ctx->BinaryOperator(llvm::Instruction::Sub, zero, argVal, llvm::Twine(argVal->getName()) + "_negate");
-     }
- }
- 
-@@ -1047,11 +1047,11 @@ llvm::Value *UnaryExpr::GetValue(FunctionEmitContext *ctx) const {
-         return lEmitNegate(expr, pos, ctx);
-     case LogicalNot: {
-         llvm::Value *argVal = expr->GetValue(ctx);
--        return ctx->NotOperator(argVal, LLVMGetName(argVal, "_logicalnot"));
-+        return ctx->NotOperator(argVal, llvm::Twine(argVal->getName()) + "_logicalnot");
-     }
-     case BitNot: {
-         llvm::Value *argVal = expr->GetValue(ctx);
--        return ctx->NotOperator(argVal, LLVMGetName(argVal, "_bitnot"));
-+        return ctx->NotOperator(argVal, llvm::Twine(argVal->getName()) + "_bitnot");
-     }
-     default:
-         FATAL("logic error");
-@@ -1518,7 +1518,8 @@ static llvm::Value *lEmitBinaryArith(BinaryExpr::Op op, llvm::Value *value0, llv
-             return NULL;
-         }
- 
--        return ctx->BinaryOperator(inst, value0, value1, LLVMGetName(opName, value0, value1));
-+        return ctx->BinaryOperator(inst, value0, value1,
-+                                   (((llvm::Twine(opName) + "_") + value0->getName()) + "_") + value1->getName());
-     }
- }
- 
-@@ -1563,7 +1564,7 @@ static llvm::Value *lEmitBinaryCmp(BinaryExpr::Op op, llvm::Value *e0Val, llvm::
-     }
- 
-     llvm::Value *cmp = ctx->CmpInst(isFloatOp ? llvm::Instruction::FCmp : llvm::Instruction::ICmp, pred, e0Val, e1Val,
--                                    LLVMGetName(opName, e0Val, e1Val));
-+                                    (((llvm::Twine(opName) + "_") + e0Val->getName()) + "_") + e1Val->getName());
-     // This is a little ugly: CmpInst returns i1 values, but we use vectors
-     // of i32s for varying bool values; type convert the result here if
-     // needed.
-@@ -4177,7 +4178,7 @@ static llvm::Value *lConvertToSlicePointer(FunctionEmitContext *ctx, llvm::Value
-     // offsets
-     llvm::Value *result = llvm::Constant::getNullValue(sliceStructType);
-     // And replace the pointer in the struct with the given pointer
--    return ctx->InsertInst(result, ptr, 0, LLVMGetName(ptr, "_slice"));
-+    return ctx->InsertInst(result, ptr, 0, llvm::Twine(ptr->getName()) + "_slice");
- }
- 
- /** If the given array index is a compile time constant, check to see if it
-@@ -4258,8 +4259,8 @@ llvm::Value *IndexExpr::GetLValue(FunctionEmitContext *ctx) const {
-         // Convert to a slice pointer if we're indexing into SOA data
-         basePtrValue = lConvertPtrToSliceIfNeeded(ctx, basePtrValue, &baseExprType);
- 
--        llvm::Value *ptr =
--            ctx->GetElementPtrInst(basePtrValue, indexValue, baseExprType, LLVMGetName(basePtrValue, "_offset"));
-+        llvm::Value *ptr = ctx->GetElementPtrInst(basePtrValue, indexValue, baseExprType,
-+                                                  llvm::Twine(basePtrValue->getName()) + "_offset");
-         return lAddVaryingOffsetsIfNeeded(ctx, ptr, GetLValueType());
-     }
- 
-@@ -4290,8 +4291,8 @@ llvm::Value *IndexExpr::GetLValue(FunctionEmitContext *ctx) const {
-     ctx->SetDebugPos(pos);
- 
-     // And do the actual indexing calculation..
--    llvm::Value *ptr =
--        ctx->GetElementPtrInst(basePtr, LLVMInt32(0), indexValue, basePtrType, LLVMGetName(basePtr, "_offset"));
-+    llvm::Value *ptr = ctx->GetElementPtrInst(basePtr, LLVMInt32(0), indexValue, basePtrType,
-+                                              llvm::Twine(basePtr->getName()) + "_offset");
-     return lAddVaryingOffsetsIfNeeded(ctx, ptr, GetLValueType());
- }
- 
-@@ -4788,15 +4789,14 @@ llvm::Value *VectorMemberExpr::GetValue(FunctionEmitContext *ctx) const {
-         for (size_t i = 0; i < identifier.size(); ++i) {
-             char idStr[2] = {identifier[i], '\0'};
-             llvm::Value *elementPtr =
--                ctx->AddElementOffset(basePtr, indices[i], basePtrType, LLVMGetName(basePtr, idStr));
-+                ctx->AddElementOffset(basePtr, indices[i], basePtrType, llvm::Twine(basePtr->getName()) + idStr);
-             llvm::Value *elementValue = ctx->LoadInst(elementPtr, elementMask, elementPtrType);
- 
--            const char *resultName = LLVMGetName(resultPtr, idStr);
--            llvm::Value *ptmp = ctx->AddElementOffset(resultPtr, i, NULL, resultName);
-+            llvm::Value *ptmp = ctx->AddElementOffset(resultPtr, i, NULL, llvm::Twine(resultPtr->getName()) + idStr);
-             ctx->StoreInst(elementValue, ptmp, elementPtrType, expr->GetType()->IsUniformType());
-         }
- 
--        return ctx->LoadInst(resultPtr, memberType, LLVMGetName(basePtr, "_swizzle"));
-+        return ctx->LoadInst(resultPtr, memberType, llvm::Twine(basePtr->getName()) + "_swizzle");
-     }
- }
- 
-@@ -4932,7 +4932,7 @@ llvm::Value *MemberExpr::GetValue(FunctionEmitContext *ctx) const {
- 
-     ctx->SetDebugPos(pos);
-     std::string suffix = std::string("_") + identifier;
--    return ctx->LoadInst(lvalue, mask, lvalueType, LLVMGetName(lvalue, suffix.c_str()));
-+    return ctx->LoadInst(lvalue, mask, lvalueType, llvm::Twine(lvalue->getName()) + suffix);
- }
- 
- const Type *MemberExpr::GetType() const { return NULL; }
-@@ -6502,7 +6502,7 @@ static llvm::Value *lTypeConvAtomic(FunctionEmitContext *ctx, llvm::Value *exprV
-                 // does for everyone else...
-                 Assert(cast);
-                 cast = ctx->SwitchBoolSize(cast, LLVMTypes::BoolVectorType->getElementType(),
--                                           LLVMGetName(cast, "to_i_bool"));
-+                                           llvm::Twine(cast->getName()) + "to_i_bool");
-             }
-         } else {
-             // fromType->IsVaryingType())
-@@ -8246,7 +8246,7 @@ llvm::Value *NewExpr::GetValue(FunctionEmitContext *ctx) const {
-         // pointer of the return type and to run the code for initializers,
-         // if present.
-         llvm::Type *ptrType = retType->LLVMType(g->ctx);
--        ptrValue = ctx->BitCastInst(ptrValue, ptrType, LLVMGetName(ptrValue, "_cast_ptr"));
-+        ptrValue = ctx->BitCastInst(ptrValue, ptrType, llvm::Twine(ptrValue->getName()) + "_cast_ptr");
- 
-         if (initExpr != NULL)
-             InitSymbol(ptrValue, allocType, initExpr, ctx, pos);
-diff --git a/src/llvmutil.cpp b/src/llvmutil.cpp
-index 970175dbf..d0becb9f5 100644
---- a/src/llvmutil.cpp
-+++ b/src/llvmutil.cpp
-@@ -1605,23 +1605,6 @@ llvm::Value *LLVMShuffleVectors(llvm::Value *v1, llvm::Value *v2, int32_t shuf[]
-     return new llvm::ShuffleVectorInst(v1, v2, vec, "shuffle", insertBefore);
- }
- 
--const char *LLVMGetName(llvm::Value *v, const char *s) {
--    if (v == NULL)
--        return s;
--    std::string ret = std::string(v->getName());
--    ret += s;
--    return strdup(ret.c_str());
--}
--
--const char *LLVMGetName(const char *op, llvm::Value *v1, llvm::Value *v2) {
--    std::string r = op;
--    r += "_";
--    r += v1->getName().str();
--    r += "_";
--    r += v2->getName().str();
--    return strdup(r.c_str());
--}
--
- #ifdef ISPC_GENX_ENABLED
- bool lIsSVMLoad(llvm::Instruction *inst) {
-     Assert(inst);
-diff --git a/src/llvmutil.h b/src/llvmutil.h
-index 42cce4d83..07d089bb4 100644
---- a/src/llvmutil.h
-+++ b/src/llvmutil.h
-@@ -328,11 +328,6 @@ extern llvm::Value *LLVMConcatVectors(llvm::Value *v1, llvm::Value *v2, llvm::In
- extern llvm::Value *LLVMShuffleVectors(llvm::Value *v1, llvm::Value *v2, int32_t shuf[], int shufSize,
-                                        llvm::Instruction *insertBefore);
- 
--/** Utility routines to concat strings with the names of existing values to
--    create meaningful new names for instruction values.
--*/
--extern const char *LLVMGetName(llvm::Value *v, const char *);
--extern const char *LLVMGetName(const char *op, llvm::Value *v1, llvm::Value *v2);
- #ifdef ISPC_GENX_ENABLED
- enum AddressSpace { Local, Global, External };
- 
-diff --git a/src/opt.cpp b/src/opt.cpp
-index 5b1ac7b63..9d6cae058 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -257,7 +257,7 @@ static bool lGetSourcePosFromMetadata(const llvm::Instruction *inst, SourcePos *
-     return true;
- }
- 
--static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, const char *name,
-+static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[2] = {arg0, arg1};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[2]);
-@@ -265,21 +265,22 @@ static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llv
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    const char *name, llvm::Instruction *insertBefore = NULL) {
-+                                    const llvm::Twine &name, llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[3] = {arg0, arg1, arg2};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[3]);
-     return llvm::CallInst::Create(func, newArgArray, name, insertBefore);
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, const char *name, llvm::Instruction *insertBefore = NULL) {
-+                                    llvm::Value *arg3, const llvm::Twine &name,
-+                                    llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[4] = {arg0, arg1, arg2, arg3};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[4]);
-     return llvm::CallInst::Create(func, newArgArray, name, insertBefore);
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, llvm::Value *arg4, const char *name,
-+                                    llvm::Value *arg3, llvm::Value *arg4, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[5] = {arg0, arg1, arg2, arg3, arg4};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[5]);
-@@ -287,7 +288,7 @@ static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llv
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, llvm::Value *arg4, llvm::Value *arg5, const char *name,
-+                                    llvm::Value *arg3, llvm::Value *arg4, llvm::Value *arg5, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[6] = {arg0, arg1, arg2, arg3, arg4, arg5};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[6]);
-@@ -991,23 +992,24 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 llvm::Type *returnType = callInst->getType();
-                 Assert(llvm::isa<llvm::VectorType>(returnType));
-                 // cast the i8 * to the appropriate type
--                const char *name = LLVMGetName(callInst->getArgOperand(0), "_cast");
--                llvm::Value *castPtr = new llvm::BitCastInst(callInst->getArgOperand(0),
--                                                             llvm::PointerType::get(returnType, 0), name, callInst);
-+                llvm::Value *castPtr =
-+                    new llvm::BitCastInst(callInst->getArgOperand(0), llvm::PointerType::get(returnType, 0),
-+                                          llvm::Twine(callInst->getArgOperand(0)->getName()) + "_cast", callInst);
-                 lCopyMetadata(castPtr, callInst);
-                 int align;
-                 if (g->opt.forceAlignedMemory)
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
--                name = LLVMGetName(callInst->getArgOperand(0), "_load");
- #if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
--                llvm::Instruction *loadInst = new llvm::LoadInst(castPtr, name, false /* not volatile */,
--                                                                 llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
-+                llvm::Instruction *loadInst =
-+                    new llvm::LoadInst(castPtr, llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load",
-+                                       false /* not volatile */, llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
- #else
-                 llvm::Instruction *loadInst = new llvm::LoadInst(
--                    llvm::dyn_cast<llvm::PointerType>(castPtr->getType())->getPointerElementType(), castPtr, name,
--                    false /* not volatile */, llvm::MaybeAlign(align).valueOrOne(), (llvm::Instruction *)NULL);
-+                    llvm::dyn_cast<llvm::PointerType>(castPtr->getType())->getPointerElementType(), castPtr,
-+                    llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load", false /* not volatile */,
-+                    llvm::MaybeAlign(align).valueOrOne(), (llvm::Instruction *)NULL);
- #endif
-                 lCopyMetadata(loadInst, callInst);
-                 llvm::ReplaceInstWithInst(callInst, loadInst);
-@@ -1028,9 +1030,9 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 // all lanes storing, so replace with a regular store
-                 llvm::Value *rvalue = callInst->getArgOperand(2);
-                 llvm::Type *storeType = rvalue->getType();
--                const char *name = LLVMGetName(callInst->getArgOperand(0), "_ptrcast");
--                llvm::Value *castPtr = new llvm::BitCastInst(callInst->getArgOperand(0),
--                                                             llvm::PointerType::get(storeType, 0), name, callInst);
-+                llvm::Value *castPtr =
-+                    new llvm::BitCastInst(callInst->getArgOperand(0), llvm::PointerType::get(storeType, 0),
-+                                          llvm::Twine(callInst->getArgOperand(0)->getName()) + "_ptrcast", callInst);
-                 lCopyMetadata(castPtr, callInst);
- 
-                 int align;
-@@ -1339,8 +1341,8 @@ static llvm::Value *lGetBasePointer(llvm::Value *v, llvm::Instruction *insertBef
-         if (t == NULL) {
-             return NULL;
-         } else {
--            return llvm::CastInst::Create(ci->getOpcode(), t, ci->getType()->getScalarType(), LLVMGetName(t, "_cast"),
--                                          insertBefore);
-+            return llvm::CastInst::Create(ci->getOpcode(), t, ci->getType()->getScalarType(),
-+                                          llvm::Twine(t->getName()) + "_cast", insertBefore);
-         }
-     }
- 
-@@ -1583,13 +1585,13 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-         if (co == NULL)
-             *constOffset = NULL;
-         else
--            *constOffset =
--                llvm::CastInst::Create(cast->getOpcode(), co, cast->getType(), LLVMGetName(co, "_cast"), insertBefore);
-+            *constOffset = llvm::CastInst::Create(cast->getOpcode(), co, cast->getType(),
-+                                                  llvm::Twine(co->getName()) + "_cast", insertBefore);
-         if (vo == NULL)
-             *variableOffset = NULL;
-         else
--            *variableOffset =
--                llvm::CastInst::Create(cast->getOpcode(), vo, cast->getType(), LLVMGetName(vo, "_cast"), insertBefore);
-+            *variableOffset = llvm::CastInst::Create(cast->getOpcode(), vo, cast->getType(),
-+                                                     llvm::Twine(vo->getName()) + "_cast", insertBefore);
-         return;
-     }
- 
-@@ -1608,16 +1610,18 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-             else if (c1 == NULL || llvm::isa<llvm::ConstantAggregateZero>(c1))
-                 *constOffset = c0;
-             else
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, c0, c1, LLVMGetName("add", c0, c1),
--                                                            insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, c0, c1, ((llvm::Twine("add_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
- 
-             if (v0 == NULL || llvm::isa<llvm::ConstantAggregateZero>(v0))
-                 *variableOffset = v1;
-             else if (v1 == NULL || llvm::isa<llvm::ConstantAggregateZero>(v1))
-                 *variableOffset = v0;
-             else
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, v0, v1,
--                                                               LLVMGetName("add", v0, v1), insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, v0, v1, ((llvm::Twine("add_") + v0->getName()) + "_") + v1->getName(),
-+                    insertBefore);
-             return;
-         } else if (bop->getOpcode() == llvm::Instruction::Shl) {
-             lExtractConstantOffset(op0, &c0, &v0, insertBefore);
-@@ -1633,10 +1637,12 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-                 *constOffset = vec;
-                 *variableOffset = NULL;
-             } else {
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Shl, c0, c1, LLVMGetName("shl", c0, c1),
--                                                            insertBefore);
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Shl, v0, c1,
--                                                               LLVMGetName("shl", v0, c1), insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Shl, c0, c1, ((llvm::Twine("shl_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Shl, v0, c1, ((llvm::Twine("shl_") + v0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-             }
-             return;
-         } else if (bop->getOpcode() == llvm::Instruction::Mul) {
-@@ -1648,25 +1654,30 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-             // Note that the first term is a constant and the last three are
-             // variable.
-             if (c0 != NULL && c1 != NULL)
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, c1, LLVMGetName("mul", c0, c1),
--                                                            insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Mul, c0, c1, ((llvm::Twine("mul_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-             else
-                 *constOffset = NULL;
- 
-             llvm::Value *va = NULL, *vb = NULL, *vc = NULL;
-             if (v0 != NULL && c1 != NULL)
--                va = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, c1, LLVMGetName("mul", v0, c1),
-+                va = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, c1,
-+                                                  ((llvm::Twine("mul_") + v0->getName()) + "_") + c1->getName(),
-                                                   insertBefore);
-             if (c0 != NULL && v1 != NULL)
--                vb = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, v1, LLVMGetName("mul", c0, v1),
-+                vb = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, v1,
-+                                                  ((llvm::Twine("mul_") + c0->getName()) + "_") + v1->getName(),
-                                                   insertBefore);
-             if (v0 != NULL && v1 != NULL)
--                vc = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, v1, LLVMGetName("mul", v0, v1),
-+                vc = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, v1,
-+                                                  ((llvm::Twine("mul_") + v0->getName()) + "_") + v1->getName(),
-                                                   insertBefore);
- 
-             llvm::Value *vab = NULL;
-             if (va != NULL && vb != NULL)
--                vab = llvm::BinaryOperator::Create(llvm::Instruction::Add, va, vb, LLVMGetName("add", va, vb),
-+                vab = llvm::BinaryOperator::Create(llvm::Instruction::Add, va, vb,
-+                                                   ((llvm::Twine("add_") + va->getName()) + "_") + vb->getName(),
-                                                    insertBefore);
-             else if (va != NULL)
-                 vab = va;
-@@ -1674,8 +1685,9 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-                 vab = vb;
- 
-             if (vab != NULL && vc != NULL)
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, vab, vc,
--                                                               LLVMGetName("add", vab, vc), insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, vab, vc, ((llvm::Twine("add_") + vab->getName()) + "_") + vc->getName(),
-+                    insertBefore);
-             else if (vab != NULL)
-                 *variableOffset = vab;
-             else
-@@ -1943,7 +1955,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-             // all zeros (i.e. a ConstantAggregateZero, but just in case,
-             // do the more general check with lVectorIs32BitInts().
-             variableOffset = new llvm::TruncInst(variableOffset, LLVMTypes::Int32VectorType,
--                                                 LLVMGetName(variableOffset, "_trunc"), insertBefore);
-+                                                 llvm::Twine(variableOffset->getName()) + "_trunc", insertBefore);
-         else
-             return false;
-     }
-@@ -1952,7 +1964,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-         if (lVectorIs32BitInts(constOffset)) {
-             // Truncate them so we have a 32-bit vector type for them.
-             constOffset = new llvm::TruncInst(constOffset, LLVMTypes::Int32VectorType,
--                                              LLVMGetName(constOffset, "_trunc"), insertBefore);
-+                                              llvm::Twine(constOffset->getName()) + "_trunc", insertBefore);
-         } else {
-             // FIXME: otherwise we just assume that all constant offsets
-             // can actually always fit into 32-bits...  (This could be
-@@ -1963,7 +1975,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-             // llvm::ConstantFoldInstruction() doesn't seem to be doing
-             // enough for us in some cases if we call it from here.
-             constOffset = new llvm::TruncInst(constOffset, LLVMTypes::Int32VectorType,
--                                              LLVMGetName(constOffset, "_trunc"), insertBefore);
-+                                              llvm::Twine(constOffset->getName()) + "_trunc", insertBefore);
-         }
-     }
- 
-@@ -2012,8 +2024,8 @@ static bool lOffsets32BitSafe(llvm::Value **offsetPtr, llvm::Instruction *insert
- 
-         // Alternatively, offset could be a sequence of adds terminating
-         // in safe constant vectors or a SExt.
--        *offsetPtr =
--            new llvm::TruncInst(offset, LLVMTypes::Int32VectorType, LLVMGetName(offset, "_trunc"), insertBefore);
-+        *offsetPtr = new llvm::TruncInst(offset, LLVMTypes::Int32VectorType, llvm::Twine(offset->getName()) + "_trunc",
-+                                         insertBefore);
-         return true;
-     } else
-         return false;
-@@ -2229,7 +2241,8 @@ static bool lGSToGSBaseOffsets(llvm::CallInst *callInst) {
-     }
-     // Cast the base pointer to a void *, since that's what the
-     // __pseudo_*_base_offsets_* functions want.
--    basePtr = new llvm::IntToPtrInst(basePtr, LLVMTypes::VoidPointerType, LLVMGetName(basePtr, "_2void"), callInst);
-+    basePtr = new llvm::IntToPtrInst(basePtr, LLVMTypes::VoidPointerType, llvm::Twine(basePtr->getName()) + "_2void",
-+                                     callInst);
-     lCopyMetadata(basePtr, callInst);
-     llvm::Function *gatherScatterFunc = info->baseOffsetsFunc;
- 
-@@ -2803,7 +2816,7 @@ static bool lGSToLoadStore(llvm::CallInst *callInst) {
-                 lCopyMetadata(ptr, callInst);
-                 Debug(pos, "Transformed gather to unaligned vector load!");
-                 llvm::Instruction *newCall =
--                    lCallInst(gatherInfo->loadMaskedFunc, ptr, mask, LLVMGetName(ptr, "_masked_load"));
-+                    lCallInst(gatherInfo->loadMaskedFunc, ptr, mask, llvm::Twine(ptr->getName()) + "_masked_load");
-                 lCopyMetadata(newCall, callInst);
-                 llvm::ReplaceInstWithInst(callInst, newCall);
-                 return true;
diff --git a/srcpkgs/ispc/patches/llvm12-004.patch b/srcpkgs/ispc/patches/llvm12-004.patch
deleted file mode 100644
index 3a94d8443a5e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-004.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From c03a5142444476a1caa5c2ba7fa2d92d7793d6f1 Mon Sep 17 00:00:00 2001
-From: Deepak Rajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Mon, 25 Jan 2021 09:22:49 -0800
-Subject: [PATCH] Fixing build on llvm trunk.
-
----
- src/ctx.cpp | 7 +++----
- 1 file changed, 3 insertions(+), 4 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index ded524b71..b60e6fe84 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1020,8 +1020,7 @@ void FunctionEmitContext::EmitCaseLabel(int value, bool checkMask, SourcePos pos
-     llvm::BasicBlock *bbCaseImpl = NULL;
-     if (emitGenXHardwareMask()) {
-         // Create basic block with actual case implementation
--        llvm::Twine bbName = llvm::Twine(bbCase->getName()) + "_impl";
--        bbCaseImpl = CreateBasicBlock(bbName, bbCase);
-+        bbCaseImpl = CreateBasicBlock(llvm::Twine(bbCase->getName()) + "_impl", bbCase);
-     }
- #endif
- 
-@@ -3142,8 +3141,8 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     llvm::Value *undef2 = llvm::UndefValue::get(vecType);
- 
-     // InsertElement
--    llvm::Twine tw = name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + llvm::Twine("_init");
--    llvm::Value *insert = InsertInst(undef1, v, 0, tw.str().c_str());
-+    llvm::Value *insert =
-+        InsertInst(undef1, v, 0, name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + "_init");
- 
-     // ShuffleVector
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
diff --git a/srcpkgs/ispc/patches/llvm12-005.patch b/srcpkgs/ispc/patches/llvm12-005.patch
deleted file mode 100644
index e3e96b00abfa..000000000000
--- a/srcpkgs/ispc/patches/llvm12-005.patch
+++ /dev/null
@@ -1,372 +0,0 @@
-From c1d0a51bf8416d42144de9e2bdd59825eaeff1ac Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Fri, 8 Jan 2021 14:13:49 -0800
-Subject: [PATCH] LLVM 11 support for gen code
-
----
- src/ctx.cpp                     |  13 ++-
- src/gen/GlobalsLocalization.cpp |   9 +-
- src/opt.cpp                     | 143 ++++++++++++++++++++++++--------
- 3 files changed, 124 insertions(+), 41 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index b60e6fe84..2a72e6837 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1,5 +1,5 @@
- /*
--  Copyright (c) 2010-2020, Intel Corporation
-+  Copyright (c) 2010-2021, Intel Corporation
-   All rights reserved.
- 
-   Redistribution and use in source and binary forms, with or without
-@@ -3685,8 +3685,17 @@ llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::
-     AssertPos(currentPos, llvm::isa<llvm::VectorType>(value->getType()));
-     llvm::VectorType *vt = llvm::dyn_cast<llvm::VectorType>(value->getType());
-     if (defaults == NULL) {
--        defaults = llvm::ConstantVector::getSplat(value->getType()->getVectorNumElements(),
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+        defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-+                                                  llvm::Constant::getNullValue(vt->getElementType()));
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+        defaults = llvm::ConstantVector::getSplat({static_cast<unsigned int>(vt->getNumElements()), false},
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
-+#else
-+        defaults = llvm::ConstantVector::getSplat(
-+            llvm::ElementCount::get(static_cast<unsigned int>(vt->getNumElements()), false),
-+            llvm::Constant::getNullValue(vt->getElementType()));
-+#endif
-     }
- 
-     auto Fn = llvm::GenXIntrinsic::getGenXDeclaration(m->module, llvm::GenXIntrinsic::genx_simdcf_predicate,
-diff --git a/src/gen/GlobalsLocalization.cpp b/src/gen/GlobalsLocalization.cpp
-index a176e9462..41f3b00e2 100644
---- a/src/gen/GlobalsLocalization.cpp
-+++ b/src/gen/GlobalsLocalization.cpp
-@@ -1,5 +1,5 @@
- /*
--  Copyright (c) 2014, 2016-2020, Intel Corporation
-+  Copyright (c) 2014, 2016-2021, Intel Corporation
-   All rights reserved.
- 
-   Redistribution and use in source and binary forms, with or without
-@@ -53,8 +53,10 @@
- #include <llvm/GenXIntrinsics/GenXIntrOpts.h>
- #include <llvm/GenXIntrinsics/GenXIntrinsics.h>
- #include <llvm/GenXIntrinsics/GenXMetadata.h>
--#include <llvm/IR/CFG.h>
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
- #include <llvm/IR/CallSite.h>
-+#endif
-+#include <llvm/IR/CFG.h>
- #include <llvm/IR/DebugInfo.h>
- #include <llvm/IR/Dominators.h>
- #include <llvm/IR/Function.h>
-@@ -470,7 +472,8 @@ void GlobalsLocalization::LocalizeGlobals(LocalizationInfo &LI) {
-         Instruction &FirstI = *Fn->getEntryBlock().begin();
-         Type *ElemTy = GV->getType()->getElementType();
-         AllocaInst *Alloca = new AllocaInst(ElemTy, 0, GV->getName() + ".local", &FirstI);
--        Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()));
-+        Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()).valueOrOne());
-+
-         if (!isa<UndefValue>(GV->getInitializer()))
-             new StoreInst(GV->getInitializer(), Alloca, &FirstI);
- 
-diff --git a/src/opt.cpp b/src/opt.cpp
-index d58d77f73..1789b8476 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -2899,15 +2899,17 @@ static llvm::Function *lGenXMaskedInt8Inst(llvm::Instruction *inst, bool isStore
- static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::Instruction *inst) {
-     Assert(g->target->isGenXTarget());
-     Assert(llvm::isa<llvm::VectorType>(val->getType()));
--    Assert(llvm::isPowerOf2_32(val->getType()->getVectorNumElements()));
--    Assert(val->getType()->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-+
-+    llvm::VectorType *valVecType = llvm::dyn_cast<llvm::VectorType>(val->getType());
-+    Assert(llvm::isPowerOf2_32(valVecType->getNumElements()));
-+    Assert(valVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
- 
-     // The data write of svm store must have a size that is a power of two from 16 to 128
-     // bytes. However for int8 type and simd width = 8, the data write size is 8.
-     // So we use masked store function here instead of svm store which process int8 type
-     // correctly.
--    if (val->getType()->getPrimitiveSizeInBits() / 8 < 16) {
--        Assert(val->getType()->getScalarType() == LLVMTypes::Int8Type);
-+    if (valVecType->getPrimitiveSizeInBits() / 8 < 16) {
-+        Assert(valVecType->getScalarType() == LLVMTypes::Int8Type);
-         if (llvm::Function *maskedFunc = lGenXMaskedInt8Inst(inst, true))
-             return llvm::dyn_cast<llvm::CallInst>(lCallInst(maskedFunc, ptr, val, LLVMMaskAllOn, ""));
-         else {
-@@ -2923,15 +2925,17 @@ static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::
- 
- static llvm::CallInst *lGenXLoadInst(llvm::Value *ptr, llvm::Type *retType, llvm::Instruction *inst) {
-     Assert(llvm::isa<llvm::VectorType>(retType));
--    Assert(llvm::isPowerOf2_32(retType->getVectorNumElements()));
--    Assert(retType->getPrimitiveSizeInBits());
--    Assert(retType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-+
-+    llvm::VectorType *retVecType = llvm::dyn_cast<llvm::VectorType>(retType);
-+    Assert(llvm::isPowerOf2_32(retVecType->getNumElements()));
-+    Assert(retVecType->getPrimitiveSizeInBits());
-+    Assert(retVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-     // The data read of svm load must have a size that is a power of two from 16 to 128
-     // bytes. However for int8 type and simd width = 8, the data read size is 8.
-     // So we use masked load function here instead of svm load which process int8 type
-     // correctly.
--    if (retType->getPrimitiveSizeInBits() / 8 < 16) {
--        Assert(retType->getScalarType() == LLVMTypes::Int8Type);
-+    if (retVecType->getPrimitiveSizeInBits() / 8 < 16) {
-+        Assert(retVecType->getScalarType() == LLVMTypes::Int8Type);
-         if (llvm::Function *maskedFunc = lGenXMaskedInt8Inst(inst, false))
-             return llvm::dyn_cast<llvm::CallInst>(lCallInst(maskedFunc, ptr, LLVMMaskAllOn, ""));
-         else {
-@@ -5622,15 +5626,24 @@ static bool lVectorizeGEPs(llvm::Value *ptr, std::vector<PtrUse> &ptrUses, std::
-         llvm::PtrToIntInst *ptrToInt =
-             new llvm::PtrToIntInst(ptr, LLVMTypes::Int64Type, "vectorized_ptrtoint", insertBefore);
-         llvm::Instruction *addr = llvm::BinaryOperator::CreateAdd(ptrToInt, offset, "vectorized_address", insertBefore);
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        llvm::Type *retType = llvm::FixedVectorType::get(scalar_type, reqSize / t_size);
-+#else
-         llvm::Type *retType = llvm::VectorType::get(scalar_type, reqSize / t_size);
-+#endif
-         llvm::Function *fn = llvm::GenXIntrinsic::getGenXDeclaration(
-             m->module, llvm::GenXIntrinsic::genx_svm_block_ld_unaligned, {retType, addr->getType()});
-         llvm::Instruction *ld = llvm::CallInst::Create(fn, {addr}, "vectorized_ld", insertBefore);
- 
-         if (loadingPtr) {
-             // Cast int to ptr via inttoptr
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            ld = new llvm::IntToPtrInst(ld, llvm::FixedVectorType::get(originalType, reqSize / t_size),
-+                                        "vectorized_inttoptr", insertBefore);
-+#else
-             ld = new llvm::IntToPtrInst(ld, llvm::VectorType::get(originalType, reqSize / t_size),
-                                         "vectorized_inttoptr", insertBefore);
-+#endif
-         }
- 
-         // Scalar extracts for all loaded elements
-@@ -6160,19 +6173,34 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-         llvm::Instruction *inst = &*I;
-         if (llvm::CallInst *ci = llvm::dyn_cast<llvm::CallInst>(inst)) {
-             llvm::Function *func = ci->getCalledFunction();
--            if (func && func->getName() == "llvm.trap") {
-+            if (func && func->getName().equals("llvm.trap")) {
-                 llvm::Type *argTypes[] = {LLVMTypes::Int1VectorType, LLVMTypes::Int16VectorType};
-                 // Description of parameters for genx_raw_send_noresult can be found in target-genx.ll
-                 auto Fn = +llvm::GenXIntrinsic::getGenXDeclaration(
-                     m->module, llvm::GenXIntrinsic::genx_raw_send_noresult, argTypes);
-                 llvm::SmallVector<llvm::Value *, 8> Args;
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 0));
--                Args.push_back(llvm::ConstantVector::getSplat(g->target->getNativeVectorWidth(),
--                                                              llvm::ConstantInt::getTrue(*g->ctx)));
-+                Args.push_back(llvm::ConstantVector::getSplat(
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+                    g->target->getNativeVectorWidth(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+                    {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
-+#else // LLVM 12.0+
-+                    llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-+#endif
-+                    llvm::ConstantInt::getTrue(*g->ctx)));
-+
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 39));
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 33554448));
-                 llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
--                    g->target->getNativeVectorWidth(), llvm::Constant::getNullValue(llvm::Type::getInt16Ty(*g->ctx)));
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+                    g->target->getNativeVectorWidth(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+                    {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
-+#else // LLVM 12.0+
-+                    llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-+#endif
-+                    llvm::Constant::getNullValue(llvm::Type::getInt16Ty(*g->ctx)));
-                 Args.push_back(zeroMask);
- 
-                 llvm::Instruction *newInst = llvm::CallInst::Create(Fn, Args, ci->getName());
-@@ -6181,7 +6209,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     modifiedAny = true;
-                     goto restart;
-                 }
--            } else if (func && func->getName() == "llvm.assume") {
-+            } else if (func && func->getName().equals("llvm.assume")) {
-                 ci->eraseFromParent();
-                 modifiedAny = true;
-                 goto restart;
-@@ -6335,7 +6363,7 @@ bool CheckUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 continue;
-             for (int i = 0; i < unsupportedFuncs.size(); i++) {
-                 std::smatch match;
--                std::string funcName = func->getName();
-+                std::string funcName = func->getName().str();
-                 if (std::regex_match(funcName, match, unsupportedFuncs[i])) {
-                     // We found unsupported function. Generate error and stop compilation.
-                     SourcePos pos;
-@@ -6418,12 +6446,14 @@ bool MangleOpenCLBuiltins::runOnBasicBlock(llvm::BasicBlock &bb) {
-             if (func->getName().startswith("__spirv_ocl")) {
-                 std::string mangledName;
-                 llvm::Type *retType = func->getReturnType();
--                std::string funcName = func->getName();
-+                std::string funcName = func->getName().str();
-                 std::vector<llvm::Type *> ArgTy;
-                 // spirv OpenCL builtins are used for double types only
--                Assert(retType->isVectorTy() && retType->getVectorElementType()->isDoubleTy() ||
-+                Assert(retType->isVectorTy() &&
-+                           llvm::dyn_cast<llvm::VectorType>(retType)->getElementType()->isDoubleTy() ||
-                        retType->isSingleValueType() && retType->isDoubleTy());
--                if (retType->isVectorTy() && retType->getVectorElementType()->isDoubleTy()) {
-+                if (retType->isVectorTy() &&
-+                    llvm::dyn_cast<llvm::VectorType>(retType)->getElementType()->isDoubleTy()) {
-                     ArgTy.push_back(LLVMTypes::DoubleVectorType);
-                     // _DvWIDTH suffix is used in target file to differentiate scalar
-                     // and vector versions of intrinsics. Here we remove this
-@@ -6511,8 +6541,15 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- 
-     // Cast offsets to int64
-     Offsets = new llvm::ZExtInst(
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        Offsets,
-+        llvm::FixedVectorType::get(LLVMTypes::Int64Type,
-+                                   llvm::dyn_cast<llvm::VectorType>(Offsets->getType())->getNumElements()),
-+        "svm_offset_zext", InsertBefore);
-+#else
-         Offsets, llvm::VectorType::get(LLVMTypes::Int64Type, Offsets->getType()->getVectorNumElements()),
-         "svm_offset_zext", InsertBefore);
-+#endif
- 
-     if (!llvm::isa<llvm::ConstantPointerNull>(Ptr)) {
-         // Cast ptr to int64
-@@ -6520,13 +6557,31 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- 
-         // Vectorize ptr
-         llvm::Value *undefInsertValue =
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            llvm::UndefValue::get(llvm::FixedVectorType::get(
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+#else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
-+#endif
-         address = llvm::InsertElementInst::Create(undefInsertValue, address, LLVMInt32(0), "svm_ptr_iei", InsertBefore);
-         llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+            {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
-+#else
-+        llvm::ElementCount::get(
-+                                llvm::dyn_cast<llvm::FixedVectorType>(addressType->getNumElements(), false),
-+#endif
-             llvm::Constant::getNullValue(llvm::Type::getInt32Ty(InsertBefore->getContext())));
-+
-         llvm::Value *undefShuffleValue =
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            llvm::UndefValue::get(llvm::FixedVectorType::get(
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+#else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
-+#endif
-         address = new llvm::ShuffleVectorInst(address, undefShuffleValue, zeroVec, "svm_ptr_svi", InsertBefore);
- 
-         // Calculate address
-@@ -6553,9 +6608,12 @@ llvm::Instruction *FixAddressSpace::processVectorLoad(llvm::LoadInst *LI) {
-     if (retType->getScalarType()->isPointerTy()) {
-         isPtrLoad = true;
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        retType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(retType)->getNumElements());
-+#else
-         retType = llvm::VectorType::get(scalarType, retType->getVectorNumElements());
-+#endif
-     }
--
-     llvm::Instruction *res = lGenXLoadInst(ptr, retType, llvm::dyn_cast<llvm::Instruction>(LI));
-     Assert(res);
- 
-@@ -6580,11 +6638,16 @@ llvm::Instruction *FixAddressSpace::processSVMVectorLoad(llvm::Instruction *CI)
-     ptr = new llvm::IntToPtrInst(ptr, llvm::PointerType::get(retType, 0), CI->getName() + "_inttoptr", CI);
-     llvm::Instruction *loadInst = NULL;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    loadInst = new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), loadInst,
--                                  CI->getName(), (llvm::Instruction *)NULL);
-+    loadInst = new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-+                                  CI->getName(), false /* not volatile */,
-+                                  llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne(),
-+                                  (llvm::Instruction *)NULL);
- #else
--    loadInst = new llvm::LoadInst(ptr, CI->getName(), (llvm::Instruction *)NULL);
-+    loadInst = new llvm::LoadInst(ptr, CI->getName(), false,
-+                                  llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne(),
-+                                  (llvm::Instruction *)NULL);
- #endif
-+
-     Assert(loadInst);
-     return loadInst;
- }
-@@ -6606,7 +6669,11 @@ llvm::Instruction *FixAddressSpace::processVectorStore(llvm::StoreInst *SI) {
-     // Note: it doesn't look like a normal case for GenX target
-     if (valType->getScalarType()->isPointerTy()) {
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        valType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(valType)->getNumElements());
-+#else
-         valType = llvm::VectorType::get(scalarType, valType->getVectorNumElements());
-+#endif
-         val = new llvm::PtrToIntInst(val, valType, "svm_st_val_ptrtoint", SI);
-     }
- 
-@@ -6631,12 +6698,8 @@ llvm::Instruction *FixAddressSpace::processSVMVectorStore(llvm::Instruction *CI)
-     ptr = new llvm::IntToPtrInst(ptr, llvm::PointerType::get(valType, 0), CI->getName() + "_inttoptr", CI);
- 
-     llvm::Instruction *storeInst = NULL;
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    loadInst = new llvm::StoreInst(val, llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(),
--                                   storeInst, CI->getName(), (llvm::Instruction *)NULL);
--#else
--    storeInst = new llvm::StoreInst(val, ptr, (llvm::Instruction *)NULL);
--#endif
-+    storeInst = new llvm::StoreInst(val, ptr, (llvm::Instruction *)NULL,
-+                                    llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
-     Assert(storeInst);
-     return storeInst;
- }
-@@ -6645,15 +6708,18 @@ llvm::Instruction *FixAddressSpace::createInt8WrRegion(llvm::Value *Val, llvm::V
-     int width = g->target->getVectorWidth();
- 
-     llvm::Value *Args[8];
--
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Args[0] = llvm::UndefValue::get(llvm::FixedVectorType::get(LLVMTypes::Int8Type, width * 4)); // old value
-+#else
-     Args[0] = llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int8Type, width * 4)); // old value
--    Args[1] = Val;                                                                          // value to store
--    Args[2] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);                              // vstride
--    Args[3] = llvm::ConstantInt::get(LLVMTypes::Int32Type, width);                          // width
--    Args[4] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 4);                              // stride
--    Args[5] = llvm::ConstantInt::get(LLVMTypes::Int16Type, 0);                              // offsets
--    Args[6] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);                              // parent width (ignored)
--    Args[7] = Mask;                                                                         // mask
-+#endif
-+    Args[1] = Val;                                                 // value to store
-+    Args[2] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);     // vstride
-+    Args[3] = llvm::ConstantInt::get(LLVMTypes::Int32Type, width); // width
-+    Args[4] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 4);     // stride
-+    Args[5] = llvm::ConstantInt::get(LLVMTypes::Int16Type, 0);     // offsets
-+    Args[6] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);     // parent width (ignored)
-+    Args[7] = Mask;                                                // mask
- 
-     llvm::Type *Tys[4];
- 
-@@ -6708,7 +6774,12 @@ llvm::Instruction *FixAddressSpace::processGatherScatterPrivate(llvm::CallInst *
-         return NULL;
- 
-     llvm::Value *address = calculateGatherScatterAddress(ptr, offsets, CI);
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    llvm::Type *i8VecType = llvm::FixedVectorType::get(LLVMTypes::Int8Type, width * 4);
-+#else
-     llvm::Type *i8VecType = llvm::VectorType::get(LLVMTypes::Int8Type, width * 4);
-+#endif
-+
-     bool isInt8 = (value->getType()->getScalarType() == LLVMTypes::Int8Type);
- 
-     Assert(address && "Bad gather/scatter address!");
diff --git a/srcpkgs/ispc/patches/llvm12-006.patch b/srcpkgs/ispc/patches/llvm12-006.patch
deleted file mode 100644
index a829ea48391e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-006.patch
+++ /dev/null
@@ -1,126 +0,0 @@
-From bb3f493d1fbd45c79e1d9dee67a0430ba313eaad Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 19 Jan 2021 11:07:33 -0800
-Subject: [PATCH] Fixed ifdefs for LLVM_11
-
----
- src/ctx.cpp |  6 +++---
- src/opt.cpp | 18 +++++++++---------
- 2 files changed, 12 insertions(+), 12 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 2a72e6837..527a02f30 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1691,7 +1691,7 @@ llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const llvm::T
-     if (llvm::Constant *const_val = llvm::dyn_cast<llvm::Constant>(value)) {
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         ret = llvm::ConstantVector::getSplat(g->target->getVectorWidth(), const_val);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-         ret =
-             llvm::ConstantVector::getSplat({static_cast<unsigned int>(g->target->getVectorWidth()), false}, const_val);
- #else // LLVM 12.0+
-@@ -3148,7 +3148,7 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-     llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
-         vecType->getVectorNumElements(), llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-     llvm::Constant *zeroVec =
-         llvm::ConstantVector::getSplat({static_cast<unsigned int>(ty->getNumElements()), false},
-                                        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
-@@ -3688,7 +3688,7 @@ llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-         defaults = llvm::ConstantVector::getSplat({static_cast<unsigned int>(vt->getNumElements()), false},
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
- #else
-diff --git a/src/opt.cpp b/src/opt.cpp
-index 1789b8476..3ff191a0a 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -1045,7 +1045,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                 llvm::Instruction *loadInst =
-                     new llvm::LoadInst(castPtr, llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load",
-                                        false /* not volatile */, llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
-@@ -1472,7 +1472,7 @@ static llvm::Value *lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offse
-                     llvm::Value *zeroMask =
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                         llvm::ConstantVector::getSplat(cv->getType()->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                         llvm::ConstantVector::getSplat(
-                             {llvm::dyn_cast<llvm::VectorType>(cv->getType())->getNumElements(), false},
- #else // LLVM 12.0+
-@@ -1495,7 +1495,7 @@ static llvm::Value *lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offse
-                         llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                             bop_var_type->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                             {llvm::dyn_cast<llvm::VectorType>(bop_var_type)->getNumElements(), false},
- #else // LLVM 12.0+
-                             llvm::ElementCount::get(
-@@ -2803,7 +2803,7 @@ static bool lGSToLoadStore(llvm::CallInst *callInst) {
-             llvm::Value *zeroMask =
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                 llvm::ConstantVector::getSplat(callInst->getType()->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                 llvm::ConstantVector::getSplat(
-                     {llvm::dyn_cast<llvm::VectorType>(callInst->getType())->getNumElements(), false},
- 
-@@ -3100,7 +3100,7 @@ static bool lImproveMaskedLoad(llvm::CallInst *callInst, llvm::BasicBlock::itera
-         {
-             llvm::Type *ptrType = llvm::PointerType::get(callInst->getType(), 0);
-             ptr = new llvm::BitCastInst(ptr, ptrType, "ptr_cast_for_load", callInst);
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             load = new llvm::LoadInst(
-                 ptr, callInst->getName(), false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-@@ -3459,7 +3459,7 @@ llvm::Value *lGEPAndLoad(llvm::Value *basePtr, int64_t offset, int align, llvm::
-                          llvm::Type *type) {
-     llvm::Value *ptr = lGEPInst(basePtr, LLVMInt64(offset), "new_base", insertBefore);
-     ptr = new llvm::BitCastInst(ptr, llvm::PointerType::get(type, 0), "ptr_cast", insertBefore);
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-     return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, llvm::MaybeAlign(align), insertBefore);
- #else // LLVM 11.0+
-     return new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-@@ -6183,7 +6183,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 Args.push_back(llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                     g->target->getNativeVectorWidth(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                     {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
- #else // LLVM 12.0+
-                     llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-@@ -6195,7 +6195,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                     g->target->getNativeVectorWidth(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                     {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
- #else // LLVM 12.0+
-                     llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-@@ -6567,7 +6567,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
-         llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-             {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
- #else
-         llvm::ElementCount::get(
diff --git a/srcpkgs/ispc/patches/llvm12-007.patch b/srcpkgs/ispc/patches/llvm12-007.patch
deleted file mode 100644
index 1b975f896c7e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-007.patch
+++ /dev/null
@@ -1,160 +0,0 @@
-From 62f5a6c37bf26fc25a7cf81868052d3472874610 Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 23 Mar 2021 23:07:30 -0700
-Subject: [PATCH] Do not generate function mask when it is not required
-
----
- src/ctx.cpp                    | 39 ++++++++++++++-------
- tests/lit-tests/full_mask.ispc | 63 ++++++++++++++++++++++++++++++++++
- 2 files changed, 90 insertions(+), 12 deletions(-)
- create mode 100644 tests/lit-tests/full_mask.ispc
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 527a02f30..9e775fc5c 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -231,10 +231,18 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym, llvm::F
-     internalMaskPointer = AllocaInst(LLVMTypes::MaskType, "internal_mask_memory");
-     StoreInst(LLVMMaskAllOn, internalMaskPointer);
- 
--    functionMaskValue = LLVMMaskAllOn;
--
--    fullMaskPointer = AllocaInst(LLVMTypes::MaskType, "full_mask_memory");
--    StoreInst(LLVMMaskAllOn, fullMaskPointer);
-+    // If the function doesn't have __mask in parameters, there is no need to
-+    // have function mask
-+    if ((func->GetType()->isExported &&
-+         (lf->getFunctionType()->getNumParams() == func->GetType()->GetNumParameters())) ||
-+        (func->GetType()->isUnmasked) || (func->GetType()->isTask)) {
-+        functionMaskValue = NULL;
-+        fullMaskPointer = NULL;
-+    } else {
-+        functionMaskValue = LLVMMaskAllOn;
-+        fullMaskPointer = AllocaInst(LLVMTypes::MaskType, "full_mask_memory");
-+        StoreInst(LLVMMaskAllOn, fullMaskPointer);
-+    }
- 
-     blockEntryMask = NULL;
-     breakLanesPtr = continueLanesPtr = NULL;
-@@ -389,20 +397,26 @@ llvm::BasicBlock *FunctionEmitContext::GetCurrentBasicBlock() { return bblock; }
- 
- void FunctionEmitContext::SetCurrentBasicBlock(llvm::BasicBlock *bb) { bblock = bb; }
- 
--llvm::Value *FunctionEmitContext::GetFunctionMask() { return functionMaskValue; }
-+llvm::Value *FunctionEmitContext::GetFunctionMask() { return fullMaskPointer ? functionMaskValue : LLVMMaskAllOn; }
- 
- llvm::Value *FunctionEmitContext::GetInternalMask() { return LoadInst(internalMaskPointer, NULL, "load_mask"); }
- 
- llvm::Value *FunctionEmitContext::GetFullMask() {
--    return BinaryOperator(llvm::Instruction::And, GetInternalMask(), functionMaskValue, "internal_mask&function_mask");
-+    return fullMaskPointer ? BinaryOperator(llvm::Instruction::And, GetInternalMask(), functionMaskValue,
-+                                            "internal_mask&function_mask")
-+                           : GetInternalMask();
- }
- 
--llvm::Value *FunctionEmitContext::GetFullMaskPointer() { return fullMaskPointer; }
-+llvm::Value *FunctionEmitContext::GetFullMaskPointer() {
-+    return fullMaskPointer ? fullMaskPointer : internalMaskPointer;
-+}
- 
- void FunctionEmitContext::SetFunctionMask(llvm::Value *value) {
--    functionMaskValue = value;
--    if (bblock != NULL)
--        StoreInst(GetFullMask(), fullMaskPointer);
-+    if (fullMaskPointer != NULL) {
-+        functionMaskValue = value;
-+        if (bblock != NULL)
-+            StoreInst(GetFullMask(), fullMaskPointer);
-+    }
- }
- 
- void FunctionEmitContext::SetBlockEntryMask(llvm::Value *value) { blockEntryMask = value; }
-@@ -410,7 +424,8 @@ void FunctionEmitContext::SetBlockEntryMask(llvm::Value *value) { blockEntryMask
- void FunctionEmitContext::SetInternalMask(llvm::Value *value) {
-     StoreInst(value, internalMaskPointer);
-     // kludge so that __mask returns the right value in ispc code.
--    StoreInst(GetFullMask(), fullMaskPointer);
-+    if (fullMaskPointer)
-+        StoreInst(GetFullMask(), fullMaskPointer);
- }
- 
- void FunctionEmitContext::SetInternalMaskAnd(llvm::Value *oldMask, llvm::Value *test) {
-@@ -1265,7 +1280,7 @@ void FunctionEmitContext::CurrentLanesReturned(Expr *expr, bool doCoherenceCheck
-         // lanes have returned
-         if (doCoherenceCheck) {
-             // if newReturnedLanes == functionMaskValue, get out of here!
--            llvm::Value *cmp = MasksAllEqual(functionMaskValue, newReturnedLanes);
-+            llvm::Value *cmp = MasksAllEqual(GetFunctionMask(), newReturnedLanes);
-             llvm::BasicBlock *bDoReturn = CreateBasicBlock("do_return");
-             llvm::BasicBlock *bNoReturn = CreateBasicBlock("no_return");
-             BranchInst(bDoReturn, bNoReturn, cmp);
-diff --git a/tests/lit-tests/full_mask.ispc b/tests/lit-tests/full_mask.ispc
-new file mode 100644
-index 000000000..ac0b0bca3
---- /dev/null
-+++ b/tests/lit-tests/full_mask.ispc
-@@ -0,0 +1,63 @@
-+// RUN: %{ispc} %s -DISPC_EXPORT --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_EXPORT %s
-+
-+// RUN: %{ispc} %s -DISPC_UNMASKED --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_UNMASKED %s
-+
-+// RUN: %{ispc} %s -DISPC_NOQUALIF --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_NOQUALIF %s
-+
-+// RUN: %{ispc} %s -DISPC_TASK --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_TASK %s
-+
-+struct Parameters {
-+    float *vout;
-+    int param;
-+};
-+
-+#ifdef ISPC_EXPORT
-+// CHECK_ISPC_EXPORT: define void @simple_export___
-+// CHECK_ISPC_EXPORT: %full_mask_memory = alloca
-+// CHECK_ISPC_EXPORT: define void @simple_export(
-+// CHECK_ISPC_EXPORT-NOT: %full_mask_memory = alloca
-+export void simple_export(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_UNMASKED
-+// CHECK_ISPC_UNMASKED: define void @simple_unmasked
-+// CHECK_ISPC_UNMASKED-NOT: %full_mask_memory = alloca
-+unmasked void simple_unmasked(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_NOQUALIF
-+// CHECK_ISPC_NOQUALIF: define void @simple
-+// CHECK_ISPC_NOQUALIF: %full_mask_memory = alloca
-+void simple(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_TASK
-+
-+// CHECK_ISPC_TASK: define void @simple_task
-+// CHECK_ISPC_TASK-NOT: %full_mask_memory = alloca
-+// CHECK_ISPC_TASK: define void @simple_entry_point__
-+// CHECK_ISPC_TASK: %full_mask_memory = alloca
-+// CHECK_ISPC_TASK: define void @simple_entry_point(
-+// CHECK_ISPC_TASK-NOT: %full_mask_memory = alloca
-+task void simple_task(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+export void simple_entry_point(void *uniform parameters, uniform int dim0, uniform int dim1, uniform int dim2) {
-+    launch[dim0, dim1, dim2] simple_task(parameters);
-+}
-+#endif
-\ No newline at end of file
diff --git a/srcpkgs/ispc/patches/llvm12-008.patch b/srcpkgs/ispc/patches/llvm12-008.patch
deleted file mode 100644
index c8413d8b7887..000000000000
--- a/srcpkgs/ispc/patches/llvm12-008.patch
+++ /dev/null
@@ -1,149 +0,0 @@
-From afad14227d9204a3c8a626ca608f5b43c3218fe9 Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 4 May 2021 11:43:52 -0700
-Subject: [PATCH] Fixed ISPC gen build for LLVM12
-
----
- src/ctx.cpp |  4 ++++
- src/opt.cpp | 43 +++++++++++++++++++++++++++++--------------
- 2 files changed, 33 insertions(+), 14 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 0c7050591..f7dc06939 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -3738,7 +3738,11 @@ llvm::Value *FunctionEmitContext::GenXSimdCFAny(llvm::Value *value) {
- 
- llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::Value *defaults) {
-     AssertPos(currentPos, llvm::isa<llvm::VectorType>(value->getType()));
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    llvm::FixedVectorType *vt = llvm::dyn_cast<llvm::FixedVectorType>(value->getType());
-+#else
-     llvm::VectorType *vt = llvm::dyn_cast<llvm::VectorType>(value->getType());
-+#endif
-     if (defaults == NULL) {
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-diff --git a/src/opt.cpp b/src/opt.cpp
-index cea4afa23..4e33d6b1a 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -2916,9 +2916,13 @@ static llvm::Function *lGenXMaskedInt8Inst(llvm::Instruction *inst, bool isStore
- 
- static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::Instruction *inst) {
-     Assert(g->target->isGenXTarget());
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Assert(llvm::isa<llvm::FixedVectorType>(val->getType()));
-+    llvm::FixedVectorType *valVecType = llvm::dyn_cast<llvm::FixedVectorType>(val->getType());
-+#else
-     Assert(llvm::isa<llvm::VectorType>(val->getType()));
--
-     llvm::VectorType *valVecType = llvm::dyn_cast<llvm::VectorType>(val->getType());
-+#endif
-     Assert(llvm::isPowerOf2_32(valVecType->getNumElements()));
-     Assert(valVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
- 
-@@ -2942,9 +2946,13 @@ static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::
- }
- 
- static llvm::CallInst *lGenXLoadInst(llvm::Value *ptr, llvm::Type *retType, llvm::Instruction *inst) {
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Assert(llvm::isa<llvm::FixedVectorType>(retType));
-+    llvm::FixedVectorType *retVecType = llvm::dyn_cast<llvm::FixedVectorType>(retType);
-+#else
-     Assert(llvm::isa<llvm::VectorType>(retType));
--
-     llvm::VectorType *retVecType = llvm::dyn_cast<llvm::VectorType>(retType);
-+#endif
-     Assert(llvm::isPowerOf2_32(retVecType->getNumElements()));
-     Assert(retVecType->getPrimitiveSizeInBits());
-     Assert(retVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-@@ -5485,8 +5493,13 @@ static void lCreateBlockLDUse(llvm::Instruction *currInst, std::vector<llvm::Ext
-         } else if (auto gather = lGetPseudoGather(llvm::dyn_cast<llvm::Instruction>(ui->getUser()))) {
-             // Collect idxs from gather and fix users
-             llvm::Value *res = llvm::UndefValue::get(gather->getType());
--            for (unsigned i = 0, end = llvm::dyn_cast<llvm::VectorType>(res->getType())->getNumElements(); i < end;
--                 ++i) {
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            for (unsigned i = 0, end = llvm::dyn_cast<llvm::FixedVectorType>(res->getType())->getNumElements(); i < end;
-+                 ++i)
-+#else
-+            for (unsigned i = 0, end = llvm::dyn_cast<llvm::VectorType>(res->getType())->getNumElements(); i < end; ++i)
-+#endif
-+            {
-                 // Get element via IEI
-                 res = llvm::InsertElementInst::Create(res, EEIs[ptrUse.idxs[curr_idx++]],
-                                                       llvm::ConstantInt::get(LLVMTypes::Int32Type, i),
-@@ -5522,10 +5535,11 @@ static bool lVectorizeGEPs(llvm::Value *ptr, std::vector<PtrUse> &ptrUses, std::
- 
-     // Adjust values for vector load
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    if (auto vecTy = llvm::dyn_cast<llvm::FixedVectorType>(type)) {
-+    if (auto vecTy = llvm::dyn_cast<llvm::FixedVectorType>(type))
- #else
--    if (auto vecTy = llvm::dyn_cast<llvm::VectorType>(type)) {
-+    if (auto vecTy = llvm::dyn_cast<llvm::VectorType>(type))
- #endif
-+    {
-         // Get single element size
-         t_size /= vecTy->getNumElements();
-         // Get single element type
-@@ -6477,7 +6491,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-         Offsets,
-         llvm::FixedVectorType::get(LLVMTypes::Int64Type,
--                                   llvm::dyn_cast<llvm::VectorType>(Offsets->getType())->getNumElements()),
-+                                   llvm::dyn_cast<llvm::FixedVectorType>(Offsets->getType())->getNumElements()),
-         "svm_offset_zext", InsertBefore);
- #else
-         Offsets, llvm::VectorType::get(LLVMTypes::Int64Type, Offsets->getType()->getVectorNumElements()),
-@@ -6492,7 +6506,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
-         llvm::Value *undefInsertValue =
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-             llvm::UndefValue::get(llvm::FixedVectorType::get(
--                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements()));
- #else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
- #endif
-@@ -6501,17 +6515,16 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
- #elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
--            {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
-+            {llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements(), false},
- #else
--        llvm::ElementCount::get(
--                                llvm::dyn_cast<llvm::FixedVectorType>(addressType->getNumElements(), false),
-+            llvm::ElementCount::get(llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements(), false),
- #endif
-             llvm::Constant::getNullValue(llvm::Type::getInt32Ty(InsertBefore->getContext())));
- 
-         llvm::Value *undefShuffleValue =
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-             llvm::UndefValue::get(llvm::FixedVectorType::get(
--                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements()));
- #else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
- #endif
-@@ -6542,7 +6555,8 @@ llvm::Instruction *FixAddressSpace::processVectorLoad(llvm::LoadInst *LI) {
-         isPtrLoad = true;
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--        retType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(retType)->getNumElements());
-+        retType =
-+            llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::FixedVectorType>(retType)->getNumElements());
- #else
-         retType = llvm::VectorType::get(scalarType, retType->getVectorNumElements());
- #endif
-@@ -6604,7 +6618,8 @@ llvm::Instruction *FixAddressSpace::processVectorStore(llvm::StoreInst *SI) {
-     if (valType->getScalarType()->isPointerTy()) {
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--        valType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(valType)->getNumElements());
-+        valType =
-+            llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::FixedVectorType>(valType)->getNumElements());
- #else
-         valType = llvm::VectorType::get(scalarType, valType->getVectorNumElements());
- #endif
diff --git a/srcpkgs/ispc/patches/llvm12-009.patch b/srcpkgs/ispc/patches/llvm12-009.patch
deleted file mode 100644
index d3ea67828582..000000000000
--- a/srcpkgs/ispc/patches/llvm12-009.patch
+++ /dev/null
@@ -1,2109 +0,0 @@
-From 97b13c32132e2704a5e3e7b2eae49d854d087e3e Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 4 May 2021 11:31:55 -0700
-Subject: [PATCH] Updated builtins-cm* for switch to LLVM12
-
----
- builtins/builtins-cm-32.ll | 234 ++++++++++++++++++-------------------
- builtins/builtins-cm-64.ll | 232 ++++++++++++++++++------------------
- 2 files changed, 233 insertions(+), 233 deletions(-)
-
-diff --git a/builtins/builtins-cm-32.ll b/builtins/builtins-cm-32.ll
-index 32debf32e..481bbdc48 100644
---- a/builtins/builtins-cm-32.ll
-+++ b/builtins/builtins-cm-32.ll
-@@ -557,7 +557,7 @@ $_ZN13VaryingWriter12WriteVecElemIPvEEvv = comdat any
- @.str.10 = private unnamed_addr constant [5 x i8] c"%08X\00", align 1
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -618,7 +618,7 @@ define internal <1 x i8> @_ZN7details13__impl_divremILi1EEEu2CMvbT__cS1_S1_u2CMv
- declare <1 x i8> @llvm.genx.rdregioni.v1i8.v1i8.i16(<1 x i8>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -634,7 +634,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -680,7 +680,7 @@ define internal <2 x i8> @_ZN7details13__impl_divremILi2EEEu2CMvbT__cS1_S1_u2CMv
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -818,7 +818,7 @@ define internal <16 x i8> @_ZN7details13__impl_divremILi16EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -864,7 +864,7 @@ define internal <32 x i8> @_ZN7details13__impl_divremILi32EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -890,7 +890,7 @@ define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -904,7 +904,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -918,7 +918,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -932,7 +932,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -946,7 +946,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -960,7 +960,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -974,7 +974,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1058,7 +1058,7 @@ define internal <1 x i16> @_ZN7details13__impl_divremILi1EEEu2CMvbT__sS1_S1_u2CM
- declare <1 x i16> @llvm.genx.rdregioni.v1i16.v1i16.i16(<1 x i16>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1074,7 +1074,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1143,7 +1143,7 @@ define internal <2 x i16> @_ZN7details13__impl_divremILi2EEEu2CMvbT__sS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1350,7 +1350,7 @@ define internal <16 x i16> @_ZN7details13__impl_divremILi16EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1419,7 +1419,7 @@ define internal <32 x i16> @_ZN7details13__impl_divremILi32EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1445,7 +1445,7 @@ define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 si
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1459,7 +1459,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1473,7 +1473,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1487,7 +1487,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -1501,7 +1501,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -1515,7 +1515,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1529,7 +1529,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1730,7 +1730,7 @@ define internal <1 x i32> @_ZN7details13__impl_divremILi1EEEu2CMvbT__iS1_S1_u2CM
- declare <1 x i32> @llvm.genx.rdregioni.v1i32.v1i32.i16(<1 x i32>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1746,7 +1746,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -1932,7 +1932,7 @@ define internal <2 x i32> @_ZN7details13__impl_divremILi2EEEu2CMvbT__iS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2490,7 +2490,7 @@ define internal <16 x i32> @_ZN7details13__impl_divremILi16EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2676,7 +2676,7 @@ define internal <32 x i32> @_ZN7details13__impl_divremILi32EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2702,7 +2702,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2716,7 +2716,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -2730,7 +2730,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2744,7 +2744,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -2758,7 +2758,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -2772,7 +2772,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2786,7 +2786,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2844,7 +2844,7 @@ define internal <1 x i8> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2860,7 +2860,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -2906,7 +2906,7 @@ define internal <2 x i8> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3044,7 +3044,7 @@ define internal <16 x i8> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3090,7 +3090,7 @@ define internal <32 x i8> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3116,7 +3116,7 @@ define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3130,7 +3130,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -3144,7 +3144,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3158,7 +3158,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -3172,7 +3172,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -3186,7 +3186,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3200,7 +3200,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3278,7 +3278,7 @@ define internal <1 x i16> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3294,7 +3294,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3360,7 +3360,7 @@ define internal <2 x i16> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3558,7 +3558,7 @@ define internal <16 x i16> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3624,7 +3624,7 @@ define internal <32 x i16> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3650,7 +3650,7 @@ define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 ze
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3664,7 +3664,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3678,7 +3678,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3692,7 +3692,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -3706,7 +3706,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -3720,7 +3720,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3734,7 +3734,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3892,7 +3892,7 @@ define internal <1 x i32> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3908,7 +3908,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4054,7 +4054,7 @@ define internal <2 x i32> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4492,7 +4492,7 @@ define internal <16 x i32> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4638,7 +4638,7 @@ define internal <32 x i32> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4664,7 +4664,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4678,7 +4678,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4692,7 +4692,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4706,7 +4706,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -4720,7 +4720,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -4734,7 +4734,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4748,7 +4748,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-+define internal void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-   %8 = alloca i8*, align 4
-   %9 = alloca i8*, align 4
-   %10 = alloca i32, align 4
-@@ -4988,7 +4988,7 @@ define internal void @_ZN7details16_cm_print_formatILi128EEEv15cm_surfaceindexju
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i32) #26 !dbg !117 {
-+define internal void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i32) #26 !dbg !117 {
-   %10 = alloca i32, align 4
-   %11 = alloca i8*, align 4
-   %12 = alloca i32, align 4
-@@ -5069,7 +5069,7 @@ define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i3
-   %67 = load i64, i64* %13, align 8, !dbg !159, !tbaa !19
-   %68 = load <5 x i32>, <5 x i32>* %21, align 32, !dbg !160, !tbaa !7
-   call void @_ZN13VaryingWriterC2ERjRPKjiyu2CMvb5_i(%class.VaryingWriter* %23, i32* dereferenceable(4) %19, i32** dereferenceable(4) %14, i32 %66, i64 %67, <5 x i32> %68), !dbg !161
--  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval align 32 %22, %class.VaryingWriter* byval align 32 %23), !dbg !162
-+  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval(%class.UniformWriter) align 32 %22, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %23), !dbg !162
-   br label %70, !dbg !163
- 
- ; <label>:70:                                     ; preds = %60
-@@ -5187,7 +5187,7 @@ define internal <5 x i32> @_Z17get_auxiliary_strv() #28 comdat !dbg !178 {
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %class.VaryingWriter* byval align 32) #25 comdat !dbg !191 {
-+define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !191 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %class.VaryingWriter, align 32
-@@ -5196,7 +5196,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %8 = bitcast %class.UniformWriter* %5 to i8*, !dbg !196
-   %9 = bitcast %class.UniformWriter* %1 to i8*, !dbg !196
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %8, i8* align 32 %9, i32 64, i1 false), !dbg !196, !tbaa.struct !197
--  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval align 32 %5), !dbg !198
-+  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5), !dbg !198
-   br i1 %10, label %16, label %11, !dbg !199
- 
- ; <label>:11:                                     ; preds = %3
-@@ -5204,7 +5204,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %13 = bitcast %class.VaryingWriter* %6 to i8*, !dbg !201
-   %14 = bitcast %class.VaryingWriter* %2 to i8*, !dbg !201
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %13, i8* align 32 %14, i32 64, i1 false), !dbg !201, !tbaa.struct !197
--  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval align 32 %6), !dbg !202
-+  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %6), !dbg !202
-   br label %16, !dbg !199
- 
- ; <label>:16:                                     ; preds = %11, %3
-@@ -5279,7 +5279,7 @@ define internal void @_ZN13VaryingWriterC2ERjRPKjiyu2CMvb5_i(%class.VaryingWrite
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @__num_cores() #29 !dbg !236 {
-+define internal i32 @__num_cores() #29 !dbg !236 {
-   ret i32 -1, !dbg !237
- }
- 
-@@ -8860,7 +8860,7 @@ declare dso_local void @_ZN7details37__cm_intrinsic_impl_svm_scatter_writeIiLi1E
- declare void @llvm.genx.svm.scatter.v1i1.v1i64.v1i32(<1 x i1>, i32, <1 x i64>, <1 x i32>) #27
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval align 32) #25 comdat !dbg !1645 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32) #25 comdat !dbg !1645 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.UniformWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8869,7 +8869,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
-   %7 = bitcast %class.UniformWriter* %4 to i8*, !dbg !1647
-   %8 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1647
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %7, i8* align 32 %8, i32 64, i1 false), !dbg !1647, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %5), !dbg !1648
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval(%class.UniformWriter) align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %5), !dbg !1648
-   ret i1 %9, !dbg !1649
- }
- 
-@@ -8877,7 +8877,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
- declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture readonly, i32, i1) #32
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval align 32) #25 comdat !dbg !1650 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !1650 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.VaryingWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -8886,12 +8886,12 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWrite
-   %7 = bitcast %class.VaryingWriter* %4 to i8*, !dbg !1652
-   %8 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !1652
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %7, i8* align 32 %8, i32 64, i1 false), !dbg !1652, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %5), !dbg !1653
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %5), !dbg !1653
-   ret i1 %9, !dbg !1654
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1655 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1655 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8914,7 +8914,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %22 = bitcast %class.UniformWriter* %5 to i8*, !dbg !1657
-   %23 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1657
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %22, i8* align 32 %23, i32 64, i1 false), !dbg !1657, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %6), !dbg !1658
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %6), !dbg !1658
-   br i1 %24, label %60, label %25, !dbg !1659
- 
- ; <label>:25:                                     ; preds = %3
-@@ -8922,7 +8922,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %27 = bitcast %class.UniformWriter* %7 to i8*, !dbg !1661
-   %28 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1661
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %27, i8* align 32 %28, i32 64, i1 false), !dbg !1661, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %8), !dbg !1662
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval(%class.UniformWriter) align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %8), !dbg !1662
-   br i1 %29, label %60, label %30, !dbg !1663
- 
- ; <label>:30:                                     ; preds = %25
-@@ -8930,7 +8930,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %32 = bitcast %class.UniformWriter* %9 to i8*, !dbg !1665
-   %33 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1665
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %32, i8* align 32 %33, i32 64, i1 false), !dbg !1665, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %10), !dbg !1666
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval(%class.UniformWriter) align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %10), !dbg !1666
-   br i1 %34, label %60, label %35, !dbg !1667
- 
- ; <label>:35:                                     ; preds = %30
-@@ -8938,7 +8938,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %37 = bitcast %class.UniformWriter* %11 to i8*, !dbg !1669
-   %38 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1669
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %37, i8* align 32 %38, i32 64, i1 false), !dbg !1669, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %12), !dbg !1670
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval(%class.UniformWriter) align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %12), !dbg !1670
-   br i1 %39, label %60, label %40, !dbg !1671
- 
- ; <label>:40:                                     ; preds = %35
-@@ -8946,7 +8946,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %42 = bitcast %class.UniformWriter* %13 to i8*, !dbg !1673
-   %43 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1673
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %42, i8* align 32 %43, i32 64, i1 false), !dbg !1673, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %14), !dbg !1674
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval(%class.UniformWriter) align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %14), !dbg !1674
-   br i1 %44, label %60, label %45, !dbg !1675
- 
- ; <label>:45:                                     ; preds = %40
-@@ -8954,7 +8954,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %47 = bitcast %class.UniformWriter* %15 to i8*, !dbg !1677
-   %48 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1677
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %47, i8* align 32 %48, i32 64, i1 false), !dbg !1677, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %16), !dbg !1678
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval(%class.UniformWriter) align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %16), !dbg !1678
-   br i1 %49, label %60, label %50, !dbg !1679
- 
- ; <label>:50:                                     ; preds = %45
-@@ -8962,7 +8962,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %52 = bitcast %class.UniformWriter* %17 to i8*, !dbg !1681
-   %53 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1681
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %52, i8* align 32 %53, i32 64, i1 false), !dbg !1681, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %18), !dbg !1682
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval(%class.UniformWriter) align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %18), !dbg !1682
-   br i1 %54, label %60, label %55, !dbg !1683
- 
- ; <label>:55:                                     ; preds = %50
-@@ -8970,7 +8970,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %57 = bitcast %class.UniformWriter* %19 to i8*, !dbg !1685
-   %58 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1685
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %57, i8* align 32 %58, i32 64, i1 false), !dbg !1685, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %20), !dbg !1686
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval(%class.UniformWriter) align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %20), !dbg !1686
-   br label %60, !dbg !1683
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -8979,7 +8979,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1688 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1688 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9005,7 +9005,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1697 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1697 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9031,7 +9031,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1706 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1706 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9057,7 +9057,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1715 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1715 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9083,7 +9083,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1724 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1724 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9109,7 +9109,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1733 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1733 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9135,7 +9135,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1742 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1742 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9161,7 +9161,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1751 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1751 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9984,7 +9984,7 @@ define internal i32 @_ZN7details18_cm_print_type_oclIPvEENS_18SHADER_PRINTF_TYPE
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2055 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2055 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.VaryingWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -10007,7 +10007,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %22 = bitcast %class.VaryingWriter* %5 to i8*, !dbg !2057
-   %23 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2057
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %22, i8* align 32 %23, i32 64, i1 false), !dbg !2057, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %6), !dbg !2058
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %6), !dbg !2058
-   br i1 %24, label %60, label %25, !dbg !2059
- 
- ; <label>:25:                                     ; preds = %3
-@@ -10015,7 +10015,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %27 = bitcast %class.VaryingWriter* %7 to i8*, !dbg !2061
-   %28 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2061
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %27, i8* align 32 %28, i32 64, i1 false), !dbg !2061, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %8), !dbg !2062
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %8), !dbg !2062
-   br i1 %29, label %60, label %30, !dbg !2063
- 
- ; <label>:30:                                     ; preds = %25
-@@ -10023,7 +10023,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %32 = bitcast %class.VaryingWriter* %9 to i8*, !dbg !2065
-   %33 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2065
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %32, i8* align 32 %33, i32 64, i1 false), !dbg !2065, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %10), !dbg !2066
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %10), !dbg !2066
-   br i1 %34, label %60, label %35, !dbg !2067
- 
- ; <label>:35:                                     ; preds = %30
-@@ -10031,7 +10031,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %37 = bitcast %class.VaryingWriter* %11 to i8*, !dbg !2069
-   %38 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2069
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %37, i8* align 32 %38, i32 64, i1 false), !dbg !2069, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %12), !dbg !2070
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %12), !dbg !2070
-   br i1 %39, label %60, label %40, !dbg !2071
- 
- ; <label>:40:                                     ; preds = %35
-@@ -10039,7 +10039,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %42 = bitcast %class.VaryingWriter* %13 to i8*, !dbg !2073
-   %43 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2073
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %42, i8* align 32 %43, i32 64, i1 false), !dbg !2073, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %14), !dbg !2074
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %14), !dbg !2074
-   br i1 %44, label %60, label %45, !dbg !2075
- 
- ; <label>:45:                                     ; preds = %40
-@@ -10047,7 +10047,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %47 = bitcast %class.VaryingWriter* %15 to i8*, !dbg !2077
-   %48 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2077
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %47, i8* align 32 %48, i32 64, i1 false), !dbg !2077, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %16), !dbg !2078
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %16), !dbg !2078
-   br i1 %49, label %60, label %50, !dbg !2079
- 
- ; <label>:50:                                     ; preds = %45
-@@ -10055,7 +10055,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %52 = bitcast %class.VaryingWriter* %17 to i8*, !dbg !2081
-   %53 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2081
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %52, i8* align 32 %53, i32 64, i1 false), !dbg !2081, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %18), !dbg !2082
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %18), !dbg !2082
-   br i1 %54, label %60, label %55, !dbg !2083
- 
- ; <label>:55:                                     ; preds = %50
-@@ -10063,7 +10063,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %57 = bitcast %class.VaryingWriter* %19 to i8*, !dbg !2085
-   %58 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2085
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %57, i8* align 32 %58, i32 64, i1 false), !dbg !2085, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %20), !dbg !2086
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %20), !dbg !2086
-   br label %60, !dbg !2083
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -10072,7 +10072,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2088 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2088 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10098,7 +10098,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2097 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2097 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10124,7 +10124,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2106 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2106 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10150,7 +10150,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2115 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2115 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10176,7 +10176,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2124 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2124 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10202,7 +10202,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2133 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2133 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10228,7 +10228,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2142 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2142 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10254,7 +10254,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2151 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2151 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-diff --git a/builtins/builtins-cm-64.ll b/builtins/builtins-cm-64.ll
-index 39a2dd8be..375d01bed 100644
---- a/builtins/builtins-cm-64.ll
-+++ b/builtins/builtins-cm-64.ll
-@@ -557,7 +557,7 @@ $_ZN13VaryingWriter12WriteVecElemIPvEEvv = comdat any
- @.str.10 = private unnamed_addr constant [8 x i8] c"%016llX\00", align 1
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -618,7 +618,7 @@ define internal <1 x i8> @_ZN7details13__impl_divremILi1EEEu2CMvbT__cS1_S1_u2CMv
- declare <1 x i8> @llvm.genx.rdregioni.v1i8.v1i8.i16(<1 x i8>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -634,7 +634,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -680,7 +680,7 @@ define internal <2 x i8> @_ZN7details13__impl_divremILi2EEEu2CMvbT__cS1_S1_u2CMv
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -818,7 +818,7 @@ define internal <16 x i8> @_ZN7details13__impl_divremILi16EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -864,7 +864,7 @@ define internal <32 x i8> @_ZN7details13__impl_divremILi32EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -890,7 +890,7 @@ define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -904,7 +904,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -918,7 +918,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -932,7 +932,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -946,7 +946,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -960,7 +960,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -974,7 +974,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1058,7 +1058,7 @@ define internal <1 x i16> @_ZN7details13__impl_divremILi1EEEu2CMvbT__sS1_S1_u2CM
- declare <1 x i16> @llvm.genx.rdregioni.v1i16.v1i16.i16(<1 x i16>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1074,7 +1074,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1143,7 +1143,7 @@ define internal <2 x i16> @_ZN7details13__impl_divremILi2EEEu2CMvbT__sS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1350,7 +1350,7 @@ define internal <16 x i16> @_ZN7details13__impl_divremILi16EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1419,7 +1419,7 @@ define internal <32 x i16> @_ZN7details13__impl_divremILi32EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1445,7 +1445,7 @@ define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 si
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1459,7 +1459,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1473,7 +1473,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1487,7 +1487,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -1501,7 +1501,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -1515,7 +1515,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1529,7 +1529,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1730,7 +1730,7 @@ define internal <1 x i32> @_ZN7details13__impl_divremILi1EEEu2CMvbT__iS1_S1_u2CM
- declare <1 x i32> @llvm.genx.rdregioni.v1i32.v1i32.i16(<1 x i32>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1746,7 +1746,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -1932,7 +1932,7 @@ define internal <2 x i32> @_ZN7details13__impl_divremILi2EEEu2CMvbT__iS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2490,7 +2490,7 @@ define internal <16 x i32> @_ZN7details13__impl_divremILi16EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2676,7 +2676,7 @@ define internal <32 x i32> @_ZN7details13__impl_divremILi32EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2702,7 +2702,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2716,7 +2716,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -2730,7 +2730,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2744,7 +2744,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -2758,7 +2758,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -2772,7 +2772,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2786,7 +2786,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2844,7 +2844,7 @@ define internal <1 x i8> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2860,7 +2860,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -2906,7 +2906,7 @@ define internal <2 x i8> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3044,7 +3044,7 @@ define internal <16 x i8> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3090,7 +3090,7 @@ define internal <32 x i8> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3116,7 +3116,7 @@ define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3130,7 +3130,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -3144,7 +3144,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3158,7 +3158,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -3172,7 +3172,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -3186,7 +3186,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3200,7 +3200,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3278,7 +3278,7 @@ define internal <1 x i16> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3294,7 +3294,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3360,7 +3360,7 @@ define internal <2 x i16> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3558,7 +3558,7 @@ define internal <16 x i16> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3624,7 +3624,7 @@ define internal <32 x i16> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3650,7 +3650,7 @@ define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 ze
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3664,7 +3664,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3678,7 +3678,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3692,7 +3692,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -3706,7 +3706,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -3720,7 +3720,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3734,7 +3734,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3892,7 +3892,7 @@ define internal <1 x i32> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3908,7 +3908,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4054,7 +4054,7 @@ define internal <2 x i32> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4492,7 +4492,7 @@ define internal <16 x i32> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4638,7 +4638,7 @@ define internal <32 x i32> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4664,7 +4664,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4678,7 +4678,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4692,7 +4692,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4706,7 +4706,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -4720,7 +4720,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -4734,7 +4734,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4748,7 +4748,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-+define internal void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-   %8 = alloca i8*, align 8
-   %9 = alloca i8*, align 8
-   %10 = alloca i32, align 4
-@@ -5070,7 +5070,7 @@ define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i3
-   %67 = load i64, i64* %13, align 8, !dbg !159, !tbaa !19
-   %68 = load <5 x i32>, <5 x i32>* %21, align 32, !dbg !160, !tbaa !7
-   call void @_ZN13VaryingWriterC2ERyRPKjiyu2CMvb5_i(%class.VaryingWriter* %23, i64* dereferenceable(8) %19, i32** dereferenceable(8) %14, i32 %66, i64 %67, <5 x i32> %68), !dbg !161
--  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval align 32 %22, %class.VaryingWriter* byval align 32 %23), !dbg !162
-+  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval(%class.UniformWriter) align 32 %22, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %23), !dbg !162
-   br label %70, !dbg !163
- 
- ; <label>:70:                                     ; preds = %60
-@@ -5188,7 +5188,7 @@ define internal <5 x i32> @_Z17get_auxiliary_strv() #28 comdat !dbg !178 {
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %class.VaryingWriter* byval align 32) #25 comdat !dbg !191 {
-+define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !191 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %class.VaryingWriter, align 32
-@@ -5197,7 +5197,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %8 = bitcast %class.UniformWriter* %5 to i8*, !dbg !196
-   %9 = bitcast %class.UniformWriter* %1 to i8*, !dbg !196
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %8, i8* align 32 %9, i64 64, i1 false), !dbg !196, !tbaa.struct !197
--  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval align 32 %5), !dbg !198
-+  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5), !dbg !198
-   br i1 %10, label %16, label %11, !dbg !199
- 
- ; <label>:11:                                     ; preds = %3
-@@ -5205,7 +5205,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %13 = bitcast %class.VaryingWriter* %6 to i8*, !dbg !201
-   %14 = bitcast %class.VaryingWriter* %2 to i8*, !dbg !201
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %13, i8* align 32 %14, i64 64, i1 false), !dbg !201, !tbaa.struct !197
--  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval align 32 %6), !dbg !202
-+  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %6), !dbg !202
-   br label %16, !dbg !199
- 
- ; <label>:16:                                     ; preds = %11, %3
-@@ -5280,7 +5280,7 @@ define internal void @_ZN13VaryingWriterC2ERyRPKjiyu2CMvb5_i(%class.VaryingWrite
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @__num_cores() #29 !dbg !236 {
-+define internal i32 @__num_cores() #29 !dbg !236 {
-   ret i32 -1, !dbg !237
- }
- 
-@@ -8870,7 +8870,7 @@ declare dso_local void @_ZN7details37__cm_intrinsic_impl_svm_scatter_writeIiLi1E
- declare void @llvm.genx.svm.scatter.v1i1.v1i64.v1i32(<1 x i1>, i32, <1 x i64>, <1 x i32>) #27
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval align 32) #25 comdat !dbg !1645 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32) #25 comdat !dbg !1645 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.UniformWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8879,7 +8879,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
-   %7 = bitcast %class.UniformWriter* %4 to i8*, !dbg !1647
-   %8 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1647
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %7, i8* align 32 %8, i64 64, i1 false), !dbg !1647, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %5), !dbg !1648
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval(%class.UniformWriter) align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %5), !dbg !1648
-   ret i1 %9, !dbg !1649
- }
- 
-@@ -8887,7 +8887,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
- declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1) #32
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval align 32) #25 comdat !dbg !1650 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !1650 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.VaryingWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -8896,12 +8896,12 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWrite
-   %7 = bitcast %class.VaryingWriter* %4 to i8*, !dbg !1652
-   %8 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !1652
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %7, i8* align 32 %8, i64 64, i1 false), !dbg !1652, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %5), !dbg !1653
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %5), !dbg !1653
-   ret i1 %9, !dbg !1654
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1655 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1655 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8924,7 +8924,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %22 = bitcast %class.UniformWriter* %5 to i8*, !dbg !1657
-   %23 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1657
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %22, i8* align 32 %23, i64 64, i1 false), !dbg !1657, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %6), !dbg !1658
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %6), !dbg !1658
-   br i1 %24, label %60, label %25, !dbg !1659
- 
- ; <label>:25:                                     ; preds = %3
-@@ -8932,7 +8932,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %27 = bitcast %class.UniformWriter* %7 to i8*, !dbg !1661
-   %28 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1661
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %27, i8* align 32 %28, i64 64, i1 false), !dbg !1661, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %8), !dbg !1662
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval(%class.UniformWriter) align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %8), !dbg !1662
-   br i1 %29, label %60, label %30, !dbg !1663
- 
- ; <label>:30:                                     ; preds = %25
-@@ -8940,7 +8940,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %32 = bitcast %class.UniformWriter* %9 to i8*, !dbg !1665
-   %33 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1665
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %32, i8* align 32 %33, i64 64, i1 false), !dbg !1665, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %10), !dbg !1666
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval(%class.UniformWriter) align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %10), !dbg !1666
-   br i1 %34, label %60, label %35, !dbg !1667
- 
- ; <label>:35:                                     ; preds = %30
-@@ -8948,7 +8948,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %37 = bitcast %class.UniformWriter* %11 to i8*, !dbg !1669
-   %38 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1669
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %37, i8* align 32 %38, i64 64, i1 false), !dbg !1669, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %12), !dbg !1670
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval(%class.UniformWriter) align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %12), !dbg !1670
-   br i1 %39, label %60, label %40, !dbg !1671
- 
- ; <label>:40:                                     ; preds = %35
-@@ -8956,7 +8956,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %42 = bitcast %class.UniformWriter* %13 to i8*, !dbg !1673
-   %43 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1673
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %42, i8* align 32 %43, i64 64, i1 false), !dbg !1673, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %14), !dbg !1674
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval(%class.UniformWriter) align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %14), !dbg !1674
-   br i1 %44, label %60, label %45, !dbg !1675
- 
- ; <label>:45:                                     ; preds = %40
-@@ -8964,7 +8964,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %47 = bitcast %class.UniformWriter* %15 to i8*, !dbg !1677
-   %48 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1677
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %47, i8* align 32 %48, i64 64, i1 false), !dbg !1677, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %16), !dbg !1678
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval(%class.UniformWriter) align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %16), !dbg !1678
-   br i1 %49, label %60, label %50, !dbg !1679
- 
- ; <label>:50:                                     ; preds = %45
-@@ -8972,7 +8972,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %52 = bitcast %class.UniformWriter* %17 to i8*, !dbg !1681
-   %53 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1681
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %52, i8* align 32 %53, i64 64, i1 false), !dbg !1681, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %18), !dbg !1682
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval(%class.UniformWriter) align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %18), !dbg !1682
-   br i1 %54, label %60, label %55, !dbg !1683
- 
- ; <label>:55:                                     ; preds = %50
-@@ -8980,7 +8980,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %57 = bitcast %class.UniformWriter* %19 to i8*, !dbg !1685
-   %58 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1685
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %57, i8* align 32 %58, i64 64, i1 false), !dbg !1685, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %20), !dbg !1686
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval(%class.UniformWriter) align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %20), !dbg !1686
-   br label %60, !dbg !1683
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -8989,7 +8989,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1688 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1688 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9015,7 +9015,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1697 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1697 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9041,7 +9041,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1706 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1706 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9067,7 +9067,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1715 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1715 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9093,7 +9093,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1724 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1724 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9119,7 +9119,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1733 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1733 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9145,7 +9145,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1742 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1742 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9171,7 +9171,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1751 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1751 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10013,7 +10013,7 @@ define internal i32 @_ZN7details18_cm_print_type_oclIPvEENS_18SHADER_PRINTF_TYPE
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2061 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2061 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.VaryingWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -10036,7 +10036,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %22 = bitcast %class.VaryingWriter* %5 to i8*, !dbg !2063
-   %23 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2063
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %22, i8* align 32 %23, i64 64, i1 false), !dbg !2063, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %6), !dbg !2064
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %6), !dbg !2064
-   br i1 %24, label %60, label %25, !dbg !2065
- 
- ; <label>:25:                                     ; preds = %3
-@@ -10044,7 +10044,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %27 = bitcast %class.VaryingWriter* %7 to i8*, !dbg !2067
-   %28 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2067
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %27, i8* align 32 %28, i64 64, i1 false), !dbg !2067, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %8), !dbg !2068
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %8), !dbg !2068
-   br i1 %29, label %60, label %30, !dbg !2069
- 
- ; <label>:30:                                     ; preds = %25
-@@ -10052,7 +10052,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %32 = bitcast %class.VaryingWriter* %9 to i8*, !dbg !2071
-   %33 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2071
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %32, i8* align 32 %33, i64 64, i1 false), !dbg !2071, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %10), !dbg !2072
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %10), !dbg !2072
-   br i1 %34, label %60, label %35, !dbg !2073
- 
- ; <label>:35:                                     ; preds = %30
-@@ -10060,7 +10060,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %37 = bitcast %class.VaryingWriter* %11 to i8*, !dbg !2075
-   %38 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2075
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %37, i8* align 32 %38, i64 64, i1 false), !dbg !2075, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %12), !dbg !2076
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %12), !dbg !2076
-   br i1 %39, label %60, label %40, !dbg !2077
- 
- ; <label>:40:                                     ; preds = %35
-@@ -10068,7 +10068,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %42 = bitcast %class.VaryingWriter* %13 to i8*, !dbg !2079
-   %43 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2079
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %42, i8* align 32 %43, i64 64, i1 false), !dbg !2079, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %14), !dbg !2080
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %14), !dbg !2080
-   br i1 %44, label %60, label %45, !dbg !2081
- 
- ; <label>:45:                                     ; preds = %40
-@@ -10076,7 +10076,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %47 = bitcast %class.VaryingWriter* %15 to i8*, !dbg !2083
-   %48 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2083
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %47, i8* align 32 %48, i64 64, i1 false), !dbg !2083, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %16), !dbg !2084
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %16), !dbg !2084
-   br i1 %49, label %60, label %50, !dbg !2085
- 
- ; <label>:50:                                     ; preds = %45
-@@ -10084,7 +10084,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %52 = bitcast %class.VaryingWriter* %17 to i8*, !dbg !2087
-   %53 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2087
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %52, i8* align 32 %53, i64 64, i1 false), !dbg !2087, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %18), !dbg !2088
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %18), !dbg !2088
-   br i1 %54, label %60, label %55, !dbg !2089
- 
- ; <label>:55:                                     ; preds = %50
-@@ -10092,7 +10092,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %57 = bitcast %class.VaryingWriter* %19 to i8*, !dbg !2091
-   %58 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2091
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %57, i8* align 32 %58, i64 64, i1 false), !dbg !2091, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %20), !dbg !2092
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %20), !dbg !2092
-   br label %60, !dbg !2089
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -10101,7 +10101,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2094 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2094 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10127,7 +10127,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2103 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2103 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10153,7 +10153,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2112 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2112 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10179,7 +10179,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2121 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2121 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10205,7 +10205,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2130 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2130 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10231,7 +10231,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2139 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2139 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10257,7 +10257,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2148 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2148 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10283,7 +10283,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2157 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2157 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
diff --git a/srcpkgs/ispc/template b/srcpkgs/ispc/template
index 9c3acb42a9cf..3a85ff2605af 100644
--- a/srcpkgs/ispc/template
+++ b/srcpkgs/ispc/template
@@ -1,7 +1,7 @@
 # Template file for 'ispc'
 pkgname=ispc
-version=1.15.0
-revision=2
+version=1.17.0
+revision=1
 archs="x86_64*"
 build_style=cmake
 configure_args="-DISPC_NO_DUMPS=ON -DARM_ENABLED=OFF"
@@ -12,7 +12,7 @@ maintainer="Andrea Brancaleoni <abc@pompel.me>"
 license="BSD-3-Clause"
 homepage="https://ispc.github.io"
 distfiles="https://github.com/ispc/ispc/archive/v${version}.tar.gz"
-checksum=2658ff00dc045ac9fcefbf6bd26dffaf723b059a942a27df91bbb61bc503a285
+checksum=37fb1055d6c6b232e112d8d50145d726824ed4d8da93a7396315dceba6c76e62
 nocross=yes
 nopie=yes
 

From 68de383fa4ac75743dc82204d842519ffee09d60 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Tue, 3 May 2022 01:20:03 +0200
Subject: [PATCH 25/27] llvm14: switch to runtimes build.

https://reviews.llvm.org/rGac7031b2b2fa
https://reviews.llvm.org/D110338#3022952
---
 srcpkgs/llvm14/template | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
index 3e7e6ab2c00b..e731aa76130a 100644
--- a/srcpkgs/llvm14/template
+++ b/srcpkgs/llvm14/template
@@ -51,7 +51,8 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
-_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
+_enabled_projects="clang;clang-tools-extra;lld"
+_enabled_runtimes="compiler-rt;libcxx;libcxxabi;libunwind"
 
 _lldb_enable=yes
 _libomp_enable=no
@@ -67,9 +68,8 @@ esac
 
 subpackages="clang-tools-extra"
 
-# must go before clang
 if [ "$_libomp_enable" = "yes" ]; then
-	_enabled_projects+=";openmp"
+	_enabled_runtimes+=";openmp"
 	subpackages+=" libomp libomp-devel"
 	# because of cmake nonsense referencing libomptarget.so.*
 	depends+=" libomp>=${version}_${revision}"
@@ -88,6 +88,7 @@ fi
 subpackages+=" lld lld-devel"
 
 configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+configure_args+=" -DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}"
 
 post_patch() {
 	if [ "$_lldb_enable" = "yes" ]; then
@@ -156,7 +157,8 @@ pre_configure() {
 		CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
 			CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
-			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
+			-DLLVM_ENABLE_PROJECTS=${_enabled_projects} \
+			-DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}
 		make ${makejobs} -C utils/TableGen
 		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen

From 8185eecfc1818ccb9fb08fb264c90d9aa84d8144 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 14:07:14 +0200
Subject: [PATCH 26/27] zig: fix build.

---
 srcpkgs/zig/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/zig/template b/srcpkgs/zig/template
index 728c5a64e9df..c175de62c5f7 100644
--- a/srcpkgs/zig/template
+++ b/srcpkgs/zig/template
@@ -5,7 +5,7 @@ revision=2
 archs="x86_64* aarch64*"
 build_style=cmake
 make_cmd=make
-makedepends="clang llvm12 lld-devel"
+makedepends="clang12 llvm12 lld12-devel"
 short_desc="Programming language designed for robustness, optimality, and clarity"
 maintainer="Isaac Freund <mail@isaacfreund.com>"
 license="MIT"

From b6e919e7f12e568a62316837589fb1f386c4bd92 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 03:39:58 +0200
Subject: [PATCH 27/27] llvm14: fix build.

---
 common/shlibs                                 |  2 +-
 .../llvm14/files/llvm-Config-llvm-config.h    |  9 +++
 srcpkgs/llvm14/template                       | 65 ++++++++++++-------
 3 files changed, 53 insertions(+), 23 deletions(-)
 create mode 100644 srcpkgs/llvm14/files/llvm-Config-llvm-config.h

diff --git a/common/shlibs b/common/shlibs
index 5d06c2381fed..0bc50ea1ce88 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -976,7 +976,7 @@ libconfuse.so.2 confuse-3.2.1_1
 libclang.so.12 libclang12-12.0.0_1
 libclang-cpp.so.12 libclang12-cpp-12.0.0_1
 liblldb.so.14 lldb-14.0.3_1
-libclang.so.14 libclang-14.0.3_1
+libclang.so.13 libclang-14.0.3_1
 libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
diff --git a/srcpkgs/llvm14/files/llvm-Config-llvm-config.h b/srcpkgs/llvm14/files/llvm-Config-llvm-config.h
new file mode 100644
index 000000000000..2fa08c9be696
--- /dev/null
+++ b/srcpkgs/llvm14/files/llvm-Config-llvm-config.h
@@ -0,0 +1,9 @@
+#include <bits/wordsize.h>
+
+#if __WORDSIZE == 32
+#include "llvm-config-32.h"
+#elif __WORDSIZE == 64
+#include "llvm-config-64.h"
+#else
+#error "Unknown word size"
+#endif
diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
index e731aa76130a..f3242f0549a2 100644
--- a/srcpkgs/llvm14/template
+++ b/srcpkgs/llvm14/template
@@ -15,6 +15,7 @@ configure_args="
  -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
  -DLIBOMP_ENABLE_SHARED=YES
  -DLIBOMP_INSTALL_ALIASES=NO
+ -DCOMPILER_RT_DEFAULT_TARGET_ONLY=YES
  -DLLVM_INCLUDE_DOCS=YES
  -DLLVM_BUILD_DOCS=YES
  -DLLVM_ENABLE_SPHINX=YES
@@ -38,6 +39,7 @@ distfiles="https://github.com/llvm/llvm-project/releases/download/llvmorg-${vers
 checksum=44d3e7a784d5cf805e72853bb03f218bd1058d448c03ca883dabbebc99204e0c
 lib32disabled=yes
 python_version=3
+nopie_files="/usr/bin/llvm-omp-device-info"
 
 if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
 	configure_args+=" -DLIBCXX_HAS_MUSL_LIBC=YES"
@@ -90,6 +92,33 @@ subpackages+=" lld lld-devel"
 configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
 configure_args+=" -DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}"
 
+case "$XBPS_TARGET_MACHINE" in
+	i686) _trp="i686-pc-linux-gnu";;
+	i686-musl) _trp="i686-linux-musl";;
+	x86_64) _trp="x86_64-unknown-linux-gnu";;
+	x86_64-musl) _trp="x86_64-linux-musl";;
+	armv5tel) _trp="arm-linux-gnueabi";;
+	armv5tel-musl) _trp="arm-linux-musleabi";;
+	armv6l) _trp="arm-linux-gnueabihf";;
+	armv7l) _trp="armv7l-linux-gnueabihf";;
+	armv6l-musl) _trp="arm-linux-musleabihf";;
+	armv7l-musl) _trp="armv7l-linux-musleabihf";;
+	aarch64) _trp="aarch64-linux-gnu";;
+	aarch64-musl) _trp="aarch64-linux-musl";;
+	ppc) _trp="powerpc-linux-gnu";;
+	ppc-musl) _trp="powerpc-linux-musl";;
+	ppcle) _trp="powerpcle-linux-gnu";;
+	ppcle-musl) _trp="powerpcle-linux-musl";;
+	ppc64le) _trp="powerpc64le-linux-gnu";;
+	ppc64le-musl) _trp="powerpc64le-linux-musl";;
+	ppc64) _trp="powerpc64-linux-gnu";;
+	ppc64-musl) _trp="powerpc64-linux-musl";;
+	mips-musl) _trp="mips-linux-musl";;
+	mipshf-musl) _trp="mips-linux-muslhf";;
+	mipsel-musl) _trp="mipsel-linux-musl";;
+	mipselhf-musl) _trp="mipsel-linux-muslhf";;
+esac
+
 post_patch() {
 	if [ "$_lldb_enable" = "yes" ]; then
 		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
@@ -136,8 +165,7 @@ post_patch() {
 }
 
 pre_configure() {
-	local triplet
-
+	local triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
 	# Vastly reduce size of debugging symbols:
 	CFLAGS=${CFLAGS/ -g/ -g1}
 	CXXFLAGS=${CXXFLAGS/ -g/ -g1}
@@ -180,8 +208,6 @@ pre_configure() {
 		riscv64*) _arch="RISCV64";;
 	esac
 
-	triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
-
 	configure_args+=" -DLLVM_TARGET_ARCH=${_arch}"
 	configure_args+=" -DLLVM_HOST_TRIPLE=${triplet}"
 	configure_args+=" -DLLVM_DEFAULT_TARGET_TRIPLE=${triplet}"
@@ -251,7 +277,7 @@ clang-tools-extra_package() {
 		vmove "usr/lib/libclangQuery*"
 		vmove "usr/lib/libclangTidy*"
 		vmove "usr/share/clang/*tidy*"
-		vmove usr/share/doc/clang-tools
+		vmove usr/share/doc/LLVM/clang-tools
 		vmove usr/share/man/man1/extraclangtools.1
 		vmove usr/share/man/man1/diagtool.1
 	}
@@ -273,7 +299,7 @@ clang_package() {
 		vmove "usr/lib/libclang*.a"
 		vmove "usr/lib/libclang*.so"
 		vmove usr/share/clang
-		vmove usr/share/doc/clang
+		vmove usr/share/doc/LLVM/clang
 		vmove usr/share/man/man1/clang.1
 	}
 }
@@ -301,7 +327,7 @@ lld_package() {
 		vmove usr/bin/wasm-ld
 		vmove usr/bin/ld.lld*
 		vmove usr/bin/ld64.lld*
-		vmove usr/share/doc/lld
+		vmove usr/share/doc/LLVM/lld
 	}
 }
 
@@ -342,7 +368,7 @@ lldb-devel_package() {
 llvm-libunwind_package() {
 	short_desc+=" - libunwind"
 	pkg_install() {
-		vmove "usr/lib/libunwind.so.*"
+		vmove "usr/lib/${_trp}/libunwind.so.*"
 	}
 }
 
@@ -351,18 +377,17 @@ llvm-libunwind-devel_package() {
 	depends="llvm-libunwind>=${version}_${revision}"
 	conflicts="libunwind-devel>=0"
 	pkg_install() {
-		vmove usr/lib/libunwind.so
-		vmove usr/lib/libunwind.a
+		vmove usr/lib/${_trp}/libunwind.so
+		vmove usr/lib/${_trp}/libunwind.a
 		vmove "usr/include/*unwind*"
 		vmove usr/include/mach-o
-		vmove usr/share/doc/libunwind
 	}
 }
 
 libcxxabi_package() {
 	short_desc+=" - low level support for libc++"
 	pkg_install() {
-		vmove "usr/lib/libc++abi.so.*"
+		vmove "usr/lib/${_trp}/libc++abi.so.*"
 	}
 }
 
@@ -370,8 +395,8 @@ libcxxabi-devel_package() {
 	short_desc+=" - low level support for libc++ - development files"
 	depends="libcxxabi>=${version}_${revision}"
 	pkg_install() {
-		vmove usr/lib/libc++abi.so
-		vmove usr/lib/libc++abi.a
+		vmove usr/lib/${_trp}/libc++abi.so
+		vmove usr/lib/${_trp}/libc++abi.a
 		vmove "usr/include/*cxxabi*"
 	}
 }
@@ -379,7 +404,7 @@ libcxxabi-devel_package() {
 libcxx_package() {
 	short_desc+=" - C++ standard library"
 	pkg_install() {
-		vmove "usr/lib/libc++.so.*"
+		vmove "usr/lib/${_trp}/libc++.so.*"
 	}
 }
 
@@ -387,11 +412,10 @@ libcxx-devel_package() {
 	short_desc+=" - C++ standard library - development files"
 	depends="libcxx>=${version}_${revision}"
 	pkg_install() {
-		vmove usr/lib/libc++.so
-		vmove usr/lib/libc++.a
-		vmove usr/lib/libc++experimental.a
+		vmove usr/lib/${_trp}/libc++.so
+		vmove usr/lib/${_trp}/libc++.a
+		vmove usr/lib/${_trp}/libc++experimental.a
 		vmove usr/include/c++
-		vmove usr/share/doc/libcxx
 	}
 }
 
@@ -401,7 +425,6 @@ libomp_package() {
 		vmove usr/lib/libomp.so
 		vmove "usr/lib/libomptarget.rtl.*.so"
 		vmove usr/lib/libarcher.so
-		vmove "usr/lib/libomp*.so.*"
 	}
 }
 
@@ -413,8 +436,6 @@ libomp-devel_package() {
 		vmove "usr/lib/libarcher*"
 		vmove "usr/include/omp*.h"
 		vmove "usr/lib/clang/${version}/include/omp*.h"
-		vmove usr/share/man/man1/llvmopenmp.1
-		vmove usr/share/doc/openmp
 	}
 }
 

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: [PR PATCH] [Updated] Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (19 preceding siblings ...)
  2022-05-23  1:03 ` [PR PATCH] [Updated] Llvm14 prez
@ 2022-05-23  1:20 ` prez
  2022-05-23  1:56 ` Llvm14 prez
                   ` (48 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-05-23  1:20 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 488 bytes --]

There is an updated pull request by prez against master on the void-packages repository

https://github.com/prez/void-packages llvm
https://github.com/void-linux/void-packages/pull/36962

Llvm14
Supersedes https://github.com/void-linux/void-packages/pull/36229, https://github.com/void-linux/void-packages/pull/34800 - thank you @motorto and @DBLouis.

Updated patches, ping @q66 .

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/36962.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-llvm-36962.patch --]
[-- Type: text/x-diff, Size: 541039 bytes --]

From db3b5c9ab542812207a6eb3a3768da28e926a6ce Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:15:06 +0200
Subject: [PATCH 01/27] New package: llvm14-14.0.3

---
 common/shlibs                                 |  16 +-
 srcpkgs/clang                                 |   2 +-
 srcpkgs/clang-analyzer                        |   2 +-
 srcpkgs/clang-tools-extra                     |   2 +-
 srcpkgs/libclang                              |   2 +-
 srcpkgs/libclang-cpp                          |   2 +-
 srcpkgs/libcxx                                |   2 +-
 srcpkgs/libcxx-devel                          |   2 +-
 srcpkgs/libcxxabi                             |   2 +-
 srcpkgs/libcxxabi-devel                       |   2 +-
 srcpkgs/libllvm14                             |   1 +
 srcpkgs/libomp                                |   2 +-
 srcpkgs/libomp-devel                          |   2 +-
 srcpkgs/lld                                   |   2 +-
 srcpkgs/lld-devel                             |   2 +-
 srcpkgs/lldb                                  |   2 +-
 srcpkgs/lldb-devel                            |   2 +-
 srcpkgs/llvm-libunwind                        |   2 +-
 srcpkgs/llvm-libunwind-devel                  |   2 +-
 .../patches/clang-002-add-musl-triples.patch  | 110 +++++
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 +
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ++
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 ++
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 +++
 srcpkgs/llvm14/patches/libcxx-musl.patch      |  26 ++
 srcpkgs/llvm14/patches/libcxx-ppc.patch       |  22 +
 .../llvm14/patches/libcxx-ssp-nonshared.patch |  11 +
 srcpkgs/llvm14/patches/libcxxabi-dl.patch     |  25 ++
 srcpkgs/llvm14/patches/lldb-musl.patch        |  31 ++
 srcpkgs/llvm14/patches/llvm-001-musl.patch    |  57 +++
 .../patches/llvm-002-musl-ppc64-elfv2.patch   |  30 ++
 .../patches/llvm-003-ppc-secureplt.patch      |  11 +
 .../patches/llvm-004-override-opt.patch       |  18 +
 .../llvm14/patches/llvm-005-ppc-bigpic.patch  |  36 ++
 .../patches/llvm-006-aarch64-mf_exec.patch    |  25 ++
 srcpkgs/llvm14/template                       | 424 ++++++++++++++++++
 srcpkgs/llvm14/update                         |   3 +
 37 files changed, 1018 insertions(+), 20 deletions(-)
 create mode 120000 srcpkgs/libllvm14
 create mode 100644 srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
 create mode 100644 srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
 create mode 100644 srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
 create mode 100644 srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-ppc.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxxabi-dl.patch
 create mode 100644 srcpkgs/llvm14/patches/lldb-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-001-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-004-override-opt.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
 create mode 100644 srcpkgs/llvm14/template
 create mode 100644 srcpkgs/llvm14/update

diff --git a/common/shlibs b/common/shlibs
index 058109664658..0ca5d7d5d6f9 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -973,11 +973,12 @@ libuchardet.so.0 uchardet-0.0.6_1
 libgtksourceviewmm-3.0.so.0 gtksourceviewmm-3.2.0_1
 libyajl.so.2 yajl-2.0.1_1
 libconfuse.so.2 confuse-3.2.1_1
-liblldb.so.12 lldb-12.0.0_1
-libclang.so.12 libclang-12.0.0_1
-libclang-cpp.so.12 libclang-cpp-12.0.0_1
+liblldb.so.14 lldb-14.0.3_1
+libclang.so.14 libclang-14.0.3_1
+libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
+libLLVM-14.so libllvm14-14.0.3_1
 libisofs.so.6 libisofs-0.6.24_1
 libmpack.so.0 libmpack-1.0.5_1
 libGeoIP.so.1 libgeoip-1.4.8_1
@@ -4170,3 +4171,12 @@ libThread.so root-6.24.06_1
 libTMVA.so root-6.24.06_1
 libMathCore.so root-6.24.06_1
 liblowdown.so lowdown-0.11.2_1
+libomp.so libomp-14.0.3_1
+libomptarget.rtl.amdgpu.so libomp-14.0.3_1
+libomptarget.rtl.cuda.so libomp-14.0.3_1
+libomptarget.rtl.x86_64.so libomp-14.0.3_1
+libarcher.so libomp-14.0.3_1
+libomptarget.so libomp-14.0.3_1
+liblldbIntelFeatures.so.14 lldb-14.0.3_1
+libLTO.so.14 llvm14-14.0.3_1
+libRemarks.so.14 llvm14-14.0.3_1
diff --git a/srcpkgs/clang b/srcpkgs/clang
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang
+++ b/srcpkgs/clang
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/clang-analyzer b/srcpkgs/clang-analyzer
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang-analyzer
+++ b/srcpkgs/clang-analyzer
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/clang-tools-extra b/srcpkgs/clang-tools-extra
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang-tools-extra
+++ b/srcpkgs/clang-tools-extra
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libclang b/srcpkgs/libclang
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libclang
+++ b/srcpkgs/libclang
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libclang-cpp b/srcpkgs/libclang-cpp
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libclang-cpp
+++ b/srcpkgs/libclang-cpp
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxx b/srcpkgs/libcxx
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxx
+++ b/srcpkgs/libcxx
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxx-devel b/srcpkgs/libcxx-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxx-devel
+++ b/srcpkgs/libcxx-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxxabi b/srcpkgs/libcxxabi
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxxabi
+++ b/srcpkgs/libcxxabi
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxxabi-devel b/srcpkgs/libcxxabi-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxxabi-devel
+++ b/srcpkgs/libcxxabi-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libllvm14 b/srcpkgs/libllvm14
new file mode 120000
index 000000000000..1d42ed7632a6
--- /dev/null
+++ b/srcpkgs/libllvm14
@@ -0,0 +1 @@
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libomp b/srcpkgs/libomp
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libomp
+++ b/srcpkgs/libomp
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libomp-devel b/srcpkgs/libomp-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libomp-devel
+++ b/srcpkgs/libomp-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lld b/srcpkgs/lld
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lld
+++ b/srcpkgs/lld
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lld-devel b/srcpkgs/lld-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lld-devel
+++ b/srcpkgs/lld-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lldb b/srcpkgs/lldb
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lldb
+++ b/srcpkgs/lldb
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lldb-devel b/srcpkgs/lldb-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lldb-devel
+++ b/srcpkgs/lldb-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm-libunwind b/srcpkgs/llvm-libunwind
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/llvm-libunwind
+++ b/srcpkgs/llvm-libunwind
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm-libunwind-devel b/srcpkgs/llvm-libunwind-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/llvm-libunwind-devel
+++ b/srcpkgs/llvm-libunwind-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
new file mode 100644
index 000000000000..7b640e102bed
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
@@ -0,0 +1,110 @@
+--- a/clang/lib/Driver/ToolChains/Gnu.cpp
++++ b/clang/lib/Driver/ToolChains/Gnu.cpp
+@@ -2083,7 +2083,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
+                                              "armv7hl-redhat-linux-gnueabi",
+                                              "armv6hl-suse-linux-gnueabi",
+-                                             "armv7hl-suse-linux-gnueabi"};
++                                             "armv7hl-suse-linux-gnueabi",
++                                             "armv7l-linux-gnueabihf"};
+   static const char *const ARMebLibDirs[] = {"/lib"};
+   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi"};
+   static const char *const ARMebHFTriples[] = {
+@@ -2151,8 +2152,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
+   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
+   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
+-                                             "powerpcle-unknown-linux-gnu",
+-                                             "powerpcle-linux-musl"};
++                                             "powerpcle-unknown-linux-gnu"};
+
+   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
+   static const char *const PPC64Triples[] = {
+@@ -2231,6 +2231,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+     return;
+   }
+
++  if (TargetTriple.isMusl()) {
++    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
++    static const char *const ARMHFMuslTriples[] = {
++        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
++    };
++    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
++    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
++    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
++    static const char *const MIPSMuslTriples[] = {
++        "mips-linux-musl", "mipsel-linux-musl",
++        "mipsel-linux-muslhf", "mips-linux-muslhf"
++    };
++    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
++    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
++    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
++    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
++
++    switch (TargetTriple.getArch()) {
++    case llvm::Triple::aarch64:
++      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      break;
++    case llvm::Triple::arm:
++      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
++      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
++        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
++      } else {
++        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
++      }
++      break;
++    case llvm::Triple::x86_64:
++      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      break;
++    case llvm::Triple::x86:
++      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      break;
++    case llvm::Triple::mips:
++      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
++      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
++      break;
++    case llvm::Triple::ppc:
++      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      break;
++    case llvm::Triple::ppcle:
++      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      break;
++    case llvm::Triple::ppc64:
++      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      break;
++    case llvm::Triple::ppc64le:
++      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      break;
++    default:
++      break;
++    }
++    TripleAliases.push_back(TargetTriple.str());
++    if (TargetTriple.str() != BiarchTriple.str())
++      BiarchTripleAliases.push_back(BiarchTriple.str());
++    return;
++  }
++
+   // Android targets should not use GNU/Linux tools or libraries.
+   if (TargetTriple.isAndroid()) {
+     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
new file mode 100644
index 000000000000..47128af79b7f
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
@@ -0,0 +1,13 @@
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -490,10 +490,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+     Loader = "ld.so.1";
+     break;
+   case llvm::Triple::ppc64:
+-    LibDir = "lib64";
+-    Loader =
+-        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
+-    break;
+   case llvm::Triple::ppc64le:
+     LibDir = "lib64";
+     Loader =
diff --git a/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
new file mode 100644
index 000000000000..21fc8003c5f1
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
@@ -0,0 +1,48 @@
+--- a/clang/lib/Basic/Targets/PPC.h
++++ b/clang/lib/Basic/Targets/PPC.h
+@@ -415,11 +415,10 @@ public:
+       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
+     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
+       DataLayout = "e-m:e-i64:64-n32:64";
+-      ABI = "elfv2";
+     } else {
+       DataLayout = "E-m:e-i64:64-n32:64";
+-      ABI = "elfv1";
+     }
++    ABI = "elfv2";
+ 
+     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
+       LongDoubleWidth = LongDoubleAlign = 64;
+--- a/clang/lib/CodeGen/TargetInfo.cpp
++++ b/clang/lib/CodeGen/TargetInfo.cpp
+@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
+       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
+ 
+     if (Triple.isOSBinFormatELF()) {
+-      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
+-      if (getTarget().getABI() == "elfv2")
+-        Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      if (getTarget().getABI() == "elfv1")
++        Kind = PPC64_SVR4_ABIInfo::ELFv1;
+       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
+ 
+       return SetCGInfo(
+--- a/clang/lib/Driver/ToolChains/Clang.cpp
++++ b/clang/lib/Driver/ToolChains/Clang.cpp
+@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
+   const llvm::Triple &T = getToolChain().getTriple();
+   if (T.isOSBinFormatELF()) {
+     switch (getToolChain().getArch()) {
+-    case llvm::Triple::ppc64: {
+-      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
+-          T.isOSOpenBSD() || T.isMusl())
+-        ABIName = "elfv2";
+-      else
+-        ABIName = "elfv1";
+-      break;
+-    }
++    case llvm::Triple::ppc64:
+     case llvm::Triple::ppc64le:
+       ABIName = "elfv2";
+       break;
diff --git a/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch b/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
new file mode 100644
index 000000000000..4135bfd4486a
--- /dev/null
+++ b/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
@@ -0,0 +1,35 @@
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
+@@ -74,6 +74,10 @@
+ #include <sys/utsname.h>
+ #endif
+
++#if SANITIZER_LINUX && defined(__powerpc__)
++#include <asm/ptrace.h>
++#endif
++
+ #if SANITIZER_LINUX && !SANITIZER_ANDROID
+ #include <sys/personality.h>
+ #endif
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
+@@ -92,7 +92,7 @@
+ # include <utime.h>
+ # include <sys/ptrace.h>
+ #    if defined(__mips64) || defined(__aarch64__) || defined(__arm__) || \
+-        defined(__hexagon__) || SANITIZER_RISCV64
++        defined(__hexagon__) || defined(__powerpc__) || SANITIZER_RISCV64
+ #      include <asm/ptrace.h>
+ #      ifdef __arm__
+ typedef struct user_fpregs elf_fpregset_t;
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
+@@ -31,7 +31,7 @@
+ #include <sys/types.h> // for pid_t
+ #include <sys/uio.h> // for iovec
+ #include <elf.h> // for NT_PRSTATUS
+-#if (defined(__aarch64__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
++#if (defined(__aarch64__) || defined(__powerpc__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
+ // GLIBC 2.20+ sys/user does not include asm/ptrace.h
+ # include <asm/ptrace.h>
+ #endif
diff --git a/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch b/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
new file mode 100644
index 000000000000..d0b61c80c897
--- /dev/null
+++ b/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
@@ -0,0 +1,62 @@
+--- a/compiler-rt/lib/xray/xray_powerpc64.inc
++++ b/compiler-rt/lib/xray/xray_powerpc64.inc
+@@ -12,7 +12,13 @@
+ 
+ #include <cstdint>
+ #include <mutex>
++#ifdef __GLIBC__
+ #include <sys/platform/ppc.h>
++#else
++#include <cctype>
++#include <cstring>
++#include <cstdlib>
++#endif
+ 
+ #include "xray_defs.h"
+ 
+@@ -20,13 +26,45 @@ namespace __xray {
+ 
+ ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
+   CPU = 0;
++#ifdef __GLIBC__
+   return __ppc_get_timebase();
++#else
++  return __builtin_ppc_get_timebase();
++#endif
+ }
+ 
+ inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
+   static std::mutex M;
+   std::lock_guard<std::mutex> Guard(M);
++#ifdef __GLIBC__
+   return __ppc_get_timebase_freq();
++#else
++  /* FIXME: a less dirty implementation? */
++  static uint64_t base;
++  if (!base) {
++    FILE *f = fopen("/proc/cpuinfo", "rb");
++    if (f) {
++      ssize_t nr;
++      /* virtually always big enough to hold the line */
++      char buf[512];
++      while (fgets(buf, sizeof(buf), f)) {
++        char *ret = strstr(buf, "timebase");
++        if (!ret) {
++          continue;
++        }
++        ret += sizeof("timebase") - 1;
++        ret = strchr(ret, ':');
++        if (!ret) {
++          continue;
++        }
++        base = strtoul(ret + 1, nullptr, 10);
++        break;
++      }
++      fclose(f);
++    }
++  }
++  return base;
++#endif
+ }
+ 
+ inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
diff --git a/srcpkgs/llvm14/patches/libcxx-musl.patch b/srcpkgs/llvm14/patches/libcxx-musl.patch
new file mode 100644
index 000000000000..bbd31ffc2cb1
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-musl.patch
@@ -0,0 +1,26 @@
+--- a/libcxx/include/locale
++++ b/libcxx/include/locale
+@@ -742,7 +742,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
+         typename remove_reference<decltype(errno)>::type __save_errno = errno;
+         errno = 0;
+         char *__p2;
++#if defined(__linux__) && !defined(__GLIBC__)
++        long long __ll = strtoll(__a, &__p2, __base);
++#else
+         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
++#endif
+         typename remove_reference<decltype(errno)>::type __current_errno = errno;
+         if (__current_errno == 0)
+             errno = __save_errno;
+@@ -782,7 +786,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
+         typename remove_reference<decltype(errno)>::type __save_errno = errno;
+         errno = 0;
+         char *__p2;
++#if defined(__linux__) && !defined(__GLIBC__)
++        unsigned long long __ll = strtoull(__a, &__p2, __base);
++#else
+         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
++#endif
+         typename remove_reference<decltype(errno)>::type __current_errno = errno;
+         if (__current_errno == 0)
+             errno = __save_errno;
diff --git a/srcpkgs/llvm14/patches/libcxx-ppc.patch b/srcpkgs/llvm14/patches/libcxx-ppc.patch
new file mode 100644
index 000000000000..7a92f8004e1c
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-ppc.patch
@@ -0,0 +1,22 @@
+This ensures `is_iec559` is defined correctly under all long double ABIs,
+including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__`
+is not defined on gcc.
+
+--- a/libcxx/include/limits
++++ b/libcxx/include/limits
+@@ -426,8 +426,14 @@ protected:
+     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
+     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
+ 
+-#if (defined(__ppc__) || defined(__ppc64__))
++#if defined(__powerpc__) || defined(__powerpc64__)
++#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__)
++    /* IEEE 754 quadruple or double precision */
++    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
++#else
++    /* 128-bit IBM double-double */
+     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
++#endif
+ #else
+     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
+ #endif
diff --git a/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch b/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
new file mode 100644
index 000000000000..70292beb2fcd
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
@@ -0,0 +1,11 @@
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -769,6 +769,8 @@ function(cxx_link_system_libraries target)
+     target_link_libraries(${target} PRIVATE atomic)
+   endif()
+ 
++#ssp  target_link_libraries(${target} PRIVATE ssp_nonshared)
++
+   if (MINGW)
+     target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
+   endif()
diff --git a/srcpkgs/llvm14/patches/libcxxabi-dl.patch b/srcpkgs/llvm14/patches/libcxxabi-dl.patch
new file mode 100644
index 000000000000..3a15f9db8c98
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxxabi-dl.patch
@@ -0,0 +1,25 @@
+Also link to -ldl to prevent undefined references.
+
+--- a/libcxxabi/src/CMakeLists.txt
++++ b/libcxxabi/src/CMakeLists.txt
+@@ -73,6 +73,7 @@
+   endif()
+ 
+   add_library_flags_if(LIBCXXABI_HAS_C_LIB c)
++  add_library_flags_if(LIBCXXABI_HAS_C_LIB dl)
+ endif()
+ 
+ if (LIBCXXABI_USE_LLVM_UNWINDER)
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -745,6 +745,10 @@
+     target_link_libraries(${target} PRIVATE m)
+   endif()
+ 
++  if (LIBCXX_HAS_C_LIB)
++    target_link_libraries(${target} PRIVATE dl)
++  endif()
++
+   if (LIBCXX_HAS_RT_LIB)
+     target_link_libraries(${target} PRIVATE rt)
+   endif()
diff --git a/srcpkgs/llvm14/patches/lldb-musl.patch b/srcpkgs/llvm14/patches/lldb-musl.patch
new file mode 100644
index 000000000000..601c0d138523
--- /dev/null
+++ b/srcpkgs/llvm14/patches/lldb-musl.patch
@@ -0,0 +1,31 @@
+--- a/lldb/source/Plugins/Process/Linux/Procfs.h
++++ b/lldb/source/Plugins/Process/Linux/Procfs.h
+@@ -10,21 +10,12 @@
+ // sys/procfs.h on Android/Linux for all supported architectures.
+ 
+ #include <sys/ptrace.h>
++#include <asm/ptrace.h>
+ 
+-#ifdef __ANDROID__
+-#if defined(__arm64__) || defined(__aarch64__)
+-typedef unsigned long elf_greg_t;
+-typedef elf_greg_t
+-    elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
+-typedef struct user_fpsimd_state elf_fpregset_t;
+-#ifndef NT_FPREGSET
+-#define NT_FPREGSET NT_PRFPREG
+-#endif // NT_FPREGSET
+-#elif defined(__mips__)
+-#ifndef NT_FPREGSET
+-#define NT_FPREGSET NT_PRFPREG
+-#endif // NT_FPREGSET
+-#endif
+-#else // __ANDROID__
++#if !defined(__GLIBC__) && defined(__powerpc__)
++#define pt_regs musl_pt_regs
++#include <sys/procfs.h>
++#undef pt_regs
++#else
+ #include <sys/procfs.h>
+-#endif // __ANDROID__
++#endif
diff --git a/srcpkgs/llvm14/patches/llvm-001-musl.patch b/srcpkgs/llvm14/patches/llvm-001-musl.patch
new file mode 100644
index 000000000000..f2a3f8d62813
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-001-musl.patch
@@ -0,0 +1,57 @@
+From faca3fbd15d0c3108493c3c54cd93138e049ac43 Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe@gmail.com>
+Date: Tue, 8 Sep 2015 22:03:02 +0200
+Subject: [PATCH 3/3] musl
+
+---
+ include/llvm/Analysis/TargetLibraryInfo.h | 9 +++++++++
+ lib/Support/DynamicLibrary.cpp            | 2 +-
+ lib/Support/Unix/Signals.inc              | 6 +++---
+ utils/unittest/googletest/src/gtest.cc    | 1 +
+ 5 files changed, 17 insertions(+), 6 deletions(-)
+
+diff --git a/include/llvm/Analysis/TargetLibraryInfo.h b/include/llvm/Analysis/TargetLibraryInfo.h
+index 34a8a1e3..1214ece5 100644
+--- a/llvm/include/llvm/Analysis/TargetLibraryInfo.h
++++ b/llvm/include/llvm/Analysis/TargetLibraryInfo.h
+@@ -18,6 +18,15 @@
+ #include "llvm/IR/PassManager.h"
+ #include "llvm/Pass.h"
+ 
++#undef fopen64
++#undef fseeko64
++#undef fstat64
++#undef fstatvfs64
++#undef ftello64
++#undef lstat64
++#undef stat64
++#undef tmpfile64
++
+ namespace llvm {
+ template <typename T> class ArrayRef;
+ class Triple;
+diff --git a/lib/Support/Unix/DynamicLibrary.inc b/lib/Support/Unix/DynamicLibrary.inc
+index a2a37996..2f86c470 100644
+--- a/llvm/lib/Support/Unix/DynamicLibrary.inc
++++ b/llvm/lib/Support/Unix/DynamicLibrary.inc
+@@ -102,7 +102,7 @@ static void *DoSearch(const char* SymbolName) {
+ 
+ // This macro returns the address of a well-known, explicit symbol
+ #define EXPLICIT_SYMBOL(SYM) \
+-   if (!strcmp(SymbolName, #SYM)) return &SYM
++   if (!strcmp(SymbolName, #SYM)) return (void *)&SYM
+ 
+ // Under glibc we have a weird situation. The stderr/out/in symbols are both
+ // macros and global variables because of standards requirements. So, we
+diff --git a/utils/unittest/googletest/src/gtest.cc b/utils/unittest/googletest/src/gtest.cc
+index d882ab2e..f1fb12d0 100644
+--- a/llvm/utils/unittest/googletest/src/gtest.cc
++++ b/llvm/utils/unittest/googletest/src/gtest.cc
+@@ -128,6 +128,7 @@
+ 
+ #if GTEST_CAN_STREAM_RESULTS_
+ # include <arpa/inet.h>  // NOLINT
++# include <sys/socket.h>  // NOLINT
+ # include <netdb.h>  // NOLINT
+ # include <sys/socket.h>  // NOLINT
+ # include <sys/types.h>  // NOLINT
diff --git a/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch b/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
new file mode 100644
index 000000000000..0071d964bd37
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
@@ -0,0 +1,30 @@
+This patches LLVM to use ELFv2 on ppc64 unconditionally unless overridden. We
+need this because unlike most distros we use ELFv2 for both glibc and musl
+on big endian ppc64.
+
+diff --git a/lib/Target/PowerPC/PPCTargetMachine.cpp b/lib/Target/PowerPC/PPCTargetMachine.cpp
+index 0634833e..b7cbc2e7 100644
+--- a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
++++ b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
+@@ -222,9 +222,8 @@ static PPCTargetMachine::PPCABI computeTargetABI(const Triple &TT,
+ 
+   switch (TT.getArch()) {
+   case Triple::ppc64le:
+-    return PPCTargetMachine::PPC_ABI_ELFv2;
+   case Triple::ppc64:
+-    return PPCTargetMachine::PPC_ABI_ELFv1;
++    return PPCTargetMachine::PPC_ABI_ELFv2;
+   default:
+     return PPCTargetMachine::PPC_ABI_UNKNOWN;
+   }
+diff --git a/test/CodeGen/PowerPC/ppc64-elf-abi.ll b/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+index 8b1cf6b5..296a2afa 100644
+--- a/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
++++ b/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+@@ -1,4 +1,5 @@
+-; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv1
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-musl < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv1 < %s | FileCheck %s -check-prefix=CHECK-ELFv1
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv2 < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
diff --git a/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch b/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
new file mode 100644
index 000000000000..b5d15974375d
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
@@ -0,0 +1,11 @@
+--- a/llvm/lib/Target/PowerPC/PPCSubtarget.cpp
++++ b/llvm/lib/Target/PowerPC/PPCSubtarget.cpp
+@@ -165,7 +165,7 @@ void PPCSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) {
+ 
+   if ((TargetTriple.isOSFreeBSD() && TargetTriple.getOSMajorVersion() >= 13) ||
+       TargetTriple.isOSNetBSD() || TargetTriple.isOSOpenBSD() ||
+-      TargetTriple.isMusl())
++      isTargetLinux())
+     SecurePlt = true;
+ 
+   if (HasSPE && IsPPC64)
diff --git a/srcpkgs/llvm14/patches/llvm-004-override-opt.patch b/srcpkgs/llvm14/patches/llvm-004-override-opt.patch
new file mode 100644
index 000000000000..51d0e4b31b32
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-004-override-opt.patch
@@ -0,0 +1,18 @@
+This allows us to override the optimization level as not all platforms can
+deal with -O3.
+
+--- a/llvm/CMakeLists.txt
++++ b/llvm/CMakeLists.txt
+@@ -918,6 +918,12 @@ if( MINGW AND NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" )
+   llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "-O2")
+ endif()
+ 
++set(VOID_CXX_OPT_FLAGS "" CACHE STRING "Optimization level to use")
++
++if (NOT VOID_CXX_OPT_FLAGS STREQUAL "")
++    llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "${VOID_CXX_OPT_FLAGS}")
++endif()
++
+ # Put this before tblgen. Else we have a circular dependence.
+ add_subdirectory(lib/Demangle)
+ add_subdirectory(lib/Support)
diff --git a/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch b/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
new file mode 100644
index 000000000000..d332687b9d92
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
@@ -0,0 +1,36 @@
+From f3dbdd49c06bfafc1d6138094cf42889c14d38b6 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Sun, 3 Nov 2019 10:57:27 -0600
+Subject: [PATCH] [LLVM][PowerPC] Assume BigPIC if no PIC level is specified
+
+---
+ llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp  | 2 +-
+ llvm/lib/Target/PowerPC/PPCMCInstLower.cpp | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/Target/PowerPC/PPCAsmPrinter.cpp b/lib/Target/PowerPC/PPCAsmPrinter.cpp
+index cce21f32..87ca5f9b 100644
+--- a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
++++ b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
+@@ -520,7 +520,7 @@ void PPCAsmPrinter::EmitTlsCall(const MachineInstr *MI,
+ 
+   // Add 32768 offset to the symbol so we follow up the latest GOT/PLT ABI.
+   if (Kind == MCSymbolRefExpr::VK_PLT && Subtarget->isSecurePlt() &&
+-      M->getPICLevel() == PICLevel::BigPIC)
++      M->getPICLevel() != PICLevel::SmallPIC)
+     TlsRef = MCBinaryExpr::createAdd(
+         TlsRef, MCConstantExpr::create(32768, OutContext), OutContext);
+   const MachineOperand &MO = MI->getOperand(2);
+diff --git a/lib/Target/PowerPC/PPCMCInstLower.cpp b/lib/Target/PowerPC/PPCMCInstLower.cpp
+index 5cc180d7..a5b02565 100644
+--- a/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
++++ b/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
+@@ -117,7 +117,7 @@ static MCOperand GetSymbolRef(const MachineOperand &MO, const MCSymbol *Symbol,
+   const MCExpr *Expr = MCSymbolRefExpr::create(Symbol, RefKind, Ctx);
+   // If -msecure-plt -fPIC, add 32768 to symbol.
+   if (Subtarget->isSecurePlt() && TM.isPositionIndependent() &&
+-      M->getPICLevel() == PICLevel::BigPIC &&
++      M->getPICLevel() != PICLevel::SmallPIC &&
+       MO.getTargetFlags() == PPCII::MO_PLT)
+     Expr =
+         MCBinaryExpr::createAdd(Expr, MCConstantExpr::create(32768, Ctx), Ctx);
diff --git a/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch b/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
new file mode 100644
index 000000000000..a00abd216665
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
@@ -0,0 +1,25 @@
+Fix failures in AllocationTests/MappedMemoryTest.* on aarch64:
+
+    Failing Tests (8):
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.AllocAndRelease/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.DuplicateNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.EnabledWrite/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.MultipleAllocAndRelease/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.SuccessiveNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.UnalignedNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.ZeroNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.ZeroSizeNear/3
+
+Upstream-Issue: https://bugs.llvm.org/show_bug.cgi?id=14278#c10
+
+--- a/llvm/lib/Support/Unix/Memory.inc
++++ b/llvm/lib/Support/Unix/Memory.inc
+@@ -58,7 +58,7 @@ static int getPosixProtectionFlags(unsigned Flags) {
+     return PROT_READ | PROT_WRITE | PROT_EXEC;
+   case llvm::sys::Memory::MF_EXEC:
+ #if (defined(__FreeBSD__) || defined(__POWERPC__) || defined (__ppc__) || \
+-     defined(_POWER) || defined(_ARCH_PPC))
++     defined(_POWER) || defined(_ARCH_PPC) || (defined(__linux__) && defined(__aarch64__)))
+     // On PowerPC, having an executable page that has no read permission
+     // can have unintended consequences.  The function InvalidateInstruction-
+     // Cache uses instructions dcbf and icbi, both of which are treated by
diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
new file mode 100644
index 000000000000..3e7e6ab2c00b
--- /dev/null
+++ b/srcpkgs/llvm14/template
@@ -0,0 +1,424 @@
+# Template file for 'llvm14'
+pkgname=llvm14
+version=14.0.3
+revision=1
+wrksrc="llvm-project-${version}.src"
+build_wrksrc=llvm
+build_style=cmake
+configure_args="
+ -DCMAKE_BUILD_TYPE=Release -Wno-dev
+ -DENABLE_LINKER_BUILD_ID=YES
+ -DLLDB_USE_SYSTEM_SIX=YES
+ -DLIBCXX_CXX_ABI=libcxxabi
+ -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
+ -DLIBCXXABI_USE_LLVM_UNWINDER=YES
+ -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
+ -DLIBOMP_ENABLE_SHARED=YES
+ -DLIBOMP_INSTALL_ALIASES=NO
+ -DLLVM_INCLUDE_DOCS=YES
+ -DLLVM_BUILD_DOCS=YES
+ -DLLVM_ENABLE_SPHINX=YES
+ -DSPHINX_WARNINGS_AS_ERRORS=NO
+ -DLLVM_INSTALL_UTILS=YES
+ -DLLVM_BUILD_LLVM_DYLIB=YES
+ -DLLVM_LINK_LLVM_DYLIB=YES
+ -DLLVM_ENABLE_RTTI=YES
+ -DLLVM_ENABLE_FFI=YES
+ -DLLVM_BINUTILS_INCDIR=/usr/include"
+hostmakedepends="perl python3 zlib-devel libffi-devel swig python3-Sphinx
+ python3-recommonmark python3-sphinx-automodapi"
+makedepends="python3-devel zlib-devel elfutils-devel libffi-devel libedit-devel
+ libxml2-devel binutils-devel libatomic-devel"
+depends="libllvm14>=${version}_${revision}"
+short_desc="Low Level Virtual Machine"
+maintainer="q66 <daniel@octaforge.org>"
+license="Apache-2.0"
+homepage="https://www.llvm.org"
+distfiles="https://github.com/llvm/llvm-project/releases/download/llvmorg-${version}/llvm-project-${version}.src.tar.xz"
+checksum=44d3e7a784d5cf805e72853bb03f218bd1058d448c03ca883dabbebc99204e0c
+lib32disabled=yes
+python_version=3
+
+if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+	configure_args+=" -DLIBCXX_HAS_MUSL_LIBC=YES"
+	makedepends+=" libexecinfo-devel"
+	depends+=" libexecinfo-devel"
+fi
+
+# "operand out of range" assembler failures
+case "$XBPS_TARGET_MACHINE" in
+	ppc64*) ;;
+	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
+esac
+
+_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
+
+_lldb_enable=yes
+_libomp_enable=no
+
+case "$XBPS_TARGET_MACHINE" in
+	ppc64le*) ;;
+	ppc*|i686*) _lldb_enable=no ;;
+esac
+
+case "$XBPS_TARGET_MACHINE" in
+	x86_64*|aarch64*|ppc64*) _libomp_enable=yes;;
+esac
+
+subpackages="clang-tools-extra"
+
+# must go before clang
+if [ "$_libomp_enable" = "yes" ]; then
+	_enabled_projects+=";openmp"
+	subpackages+=" libomp libomp-devel"
+	# because of cmake nonsense referencing libomptarget.so.*
+	depends+=" libomp>=${version}_${revision}"
+fi
+
+subpackages+=" clang clang-analyzer libclang libclang-cpp
+ llvm-libunwind llvm-libunwind-devel libcxx libcxx-devel
+ libcxxabi libcxxabi-devel libllvm14"
+
+if [ "$_lldb_enable" = "yes" ]; then
+	# XXX fails to cross compile due to python
+	_enabled_projects+=";lldb"
+	subpackages+=" lldb lldb-devel"
+fi
+
+subpackages+=" lld lld-devel"
+
+configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+
+post_patch() {
+	if [ "$_lldb_enable" = "yes" ]; then
+		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+			vsed -i 's|__ptrace_request|int|g' \
+				${wrksrc}/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
+		fi
+		# disable docs for lldb as they fail to generate
+		vsed -i '/add_subdirectory(docs)/d' \
+			${wrksrc}/lldb/CMakeLists.txt
+	fi
+
+	# update config.guess for better platform detection
+	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
+		${wrksrc}/llvm/cmake
+
+	# fix linker failures on some archs
+	vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
+		${wrksrc}/libcxxabi/cmake/config-ix.cmake
+	vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
+		${wrksrc}/libcxxabi/cmake/config-ix.cmake
+
+	# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*) ;;
+		ppc*-musl|i686-musl|mips*-musl)
+			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
+				${wrksrc}/libunwind/src/CMakeLists.txt
+			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
+				${wrksrc}/libcxxabi/src/CMakeLists.txt
+			vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
+			;;
+	esac
+
+	case "$XBPS_TARGET_MACHINE" in
+		x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
+			vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
+				${wrksrc}/compiler-rt/CMakeLists.txt
+			;;
+		arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
+			vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
+				${wrksrc}/compiler-rt/cmake/config-ix.cmake
+			;;
+	esac
+}
+
+pre_configure() {
+	local triplet
+
+	# Vastly reduce size of debugging symbols:
+	CFLAGS=${CFLAGS/ -g/ -g1}
+	CXXFLAGS=${CXXFLAGS/ -g/ -g1}
+
+	# since gcc9, the build likes to blow up for ppc32 apparently because
+	# of clang being too large for a 24-bit relative call to the PLT, so
+	# optimize for size instead
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*) ;;
+		mips*-musl|ppc*) configure_args+=" -DVOID_CXX_OPT_FLAGS=-Os" ;;
+	esac
+
+	if [ "$CROSS_BUILD" ]; then
+		msg_normal "Building host tblgen\n"
+		mkdir -p build/HOST
+		cd build/HOST
+		CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
+			CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
+			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
+			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
+		make ${makejobs} -C utils/TableGen
+		make ${makejobs} -C tools/clang/utils/TableGen
+		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
+		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
+		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
+		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
+		cd ../..
+	fi
+
+	case "$XBPS_TARGET_MACHINE" in
+		i686*) _arch="X86";;
+		x86_64*) _arch="X86";;
+		armv5*) _arch="Armv5te";;
+		armv6*) _arch="Armv6";;
+		armv7*) _arch="Armv7";;
+		aarch64*) _arch="AArch64";;
+		mips*) _arch="Mips";;
+		ppc*) _arch="PowerPC";;
+		riscv64*) _arch="RISCV64";;
+	esac
+
+	triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
+
+	configure_args+=" -DLLVM_TARGET_ARCH=${_arch}"
+	configure_args+=" -DLLVM_HOST_TRIPLE=${triplet}"
+	configure_args+=" -DLLVM_DEFAULT_TARGET_TRIPLE=${triplet}"
+}
+
+do_install() {
+	cd build
+	cmake -DCMAKE_INSTALL_PREFIX=${DESTDIR}/usr -P cmake_install.cmake
+
+	# Required for multilib.
+	if [ "$XBPS_TARGET_MACHINE" = "x86_64" ]; then
+		for _header in llvm-config; do
+			mv ${DESTDIR}/usr/include/llvm/Config/${_header}{,-64}.h
+			vinstall ${FILESDIR}/llvm-Config-${_header}.h 644 \
+				usr/include/llvm/Config ${_header}.h
+		done
+	fi
+
+	# Remove llvm-config-host in cross builds.
+	if [ "$CROSS_BUILD" ]; then
+		rm -f ${DESTDIR}/usr/bin/llvm-config-host
+	fi
+
+	# Install libcxxabi headers
+	vinstall ${wrksrc}/libcxxabi/include/__cxxabi_config.h 644 usr/include
+	vinstall ${wrksrc}/libcxxabi/include/cxxabi.h 644 usr/include
+
+	# Install libunwind headers
+	vinstall ${wrksrc}/libunwind/include/__libunwind_config.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/libunwind.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/unwind.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/mach-o/compact_unwind_encoding.h \
+		644 usr/include/mach-o
+}
+
+clang-analyzer_package() {
+	pycompile_dirs="usr/share/scan-view"
+	depends="clang-${version}_${revision} python3 perl"
+	short_desc+=" - A source code analysis framework"
+	homepage="https://clang-analyzer.llvm.org/"
+	pkg_install() {
+		vmove usr/share/man/man1/scan-build.1
+		vmove "/usr/bin/scan-*"
+		vmove "/usr/share/scan-*"
+		vmove "/usr/libexec/*analyzer"
+	}
+}
+
+clang-tools-extra_package() {
+	lib32disabled=yes
+	depends="clang-${version}_${revision} python3"
+	short_desc+=" - Extra Clang tools"
+	homepage="https://clang.llvm.org/extra/"
+	pkg_install() {
+		vmove usr/include/clang-tidy
+		vmove usr/bin/clang-apply-replacements
+		vmove usr/bin/clang-query
+		vmove usr/bin/clang-rename
+		vmove usr/bin/clang-tidy
+		vmove usr/bin/diagtool
+		vmove usr/bin/find-all-symbols
+		vmove usr/bin/hmaptool
+		vmove usr/bin/modularize
+		vmove usr/bin/pp-trace
+		vmove usr/bin/sancov
+		vmove "usr/lib/libclangApplyReplacements*"
+		vmove "usr/lib/libclangQuery*"
+		vmove "usr/lib/libclangTidy*"
+		vmove "usr/share/clang/*tidy*"
+		vmove usr/share/doc/clang-tools
+		vmove usr/share/man/man1/extraclangtools.1
+		vmove usr/share/man/man1/diagtool.1
+	}
+}
+
+clang_package() {
+	lib32disabled=yes
+	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
+	 libclang-${version}_${revision}"
+	short_desc+=" - C language family frontend"
+	homepage="https://clang.llvm.org/"
+	pkg_install() {
+		vmove usr/include/clang
+		vmove usr/include/clang-c
+		vmove "usr/bin/*clang*"
+		vmove usr/bin/c-index-test
+		vmove usr/lib/clang
+		vmove usr/lib/cmake/clang
+		vmove "usr/lib/libclang*.a"
+		vmove "usr/lib/libclang*.so"
+		vmove usr/share/clang
+		vmove usr/share/doc/clang
+		vmove usr/share/man/man1/clang.1
+	}
+}
+
+libclang_package() {
+	short_desc+=" - C frontend runtime library"
+	pkg_install() {
+		vmove "usr/lib/libclang.so.*"
+	}
+}
+
+libclang-cpp_package() {
+	short_desc+=" - C frontend runtime library (C++ interface)"
+	pkg_install() {
+		vmove "usr/lib/libclang-cpp.so.*"
+	}
+}
+
+lld_package() {
+	lib32disabled=yes
+	short_desc+=" - linker"
+	homepage="https://lld.llvm.org"
+	pkg_install() {
+		vmove usr/bin/lld*
+		vmove usr/bin/wasm-ld
+		vmove usr/bin/ld.lld*
+		vmove usr/bin/ld64.lld*
+		vmove usr/share/doc/lld
+	}
+}
+
+lld-devel_package() {
+	lib32disabled=yes
+	short_desc+=" - linker - development files"
+	homepage="https://lld.llvm.org"
+	depends="lld>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include/lld
+		vmove usr/lib/cmake/lld
+		vmove "usr/lib/liblld*a"
+	}
+}
+
+lldb_package() {
+	lib32disabled=yes
+	depends+=" python3-six"
+	short_desc+=" - LLDB debugger"
+	homepage="https://lldb.llvm.org/"
+	pkg_install() {
+		vmove usr/bin/*lldb*
+		vmove usr/lib/liblldb*so.*
+		vmove /usr/lib/python*
+	}
+}
+
+lldb-devel_package() {
+	lib32disabled=yes
+	depends="lldb>=${version}_${revision}"
+	short_desc+=" - LLDB debugger - development files"
+	pkg_install() {
+		vmove usr/include/lldb
+		vmove "usr/lib/liblldb*.so"
+	}
+}
+
+llvm-libunwind_package() {
+	short_desc+=" - libunwind"
+	pkg_install() {
+		vmove "usr/lib/libunwind.so.*"
+	}
+}
+
+llvm-libunwind-devel_package() {
+	short_desc+=" - libunwind - development files"
+	depends="llvm-libunwind>=${version}_${revision}"
+	conflicts="libunwind-devel>=0"
+	pkg_install() {
+		vmove usr/lib/libunwind.so
+		vmove usr/lib/libunwind.a
+		vmove "usr/include/*unwind*"
+		vmove usr/include/mach-o
+		vmove usr/share/doc/libunwind
+	}
+}
+
+libcxxabi_package() {
+	short_desc+=" - low level support for libc++"
+	pkg_install() {
+		vmove "usr/lib/libc++abi.so.*"
+	}
+}
+
+libcxxabi-devel_package() {
+	short_desc+=" - low level support for libc++ - development files"
+	depends="libcxxabi>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/lib/libc++abi.so
+		vmove usr/lib/libc++abi.a
+		vmove "usr/include/*cxxabi*"
+	}
+}
+
+libcxx_package() {
+	short_desc+=" - C++ standard library"
+	pkg_install() {
+		vmove "usr/lib/libc++.so.*"
+	}
+}
+
+libcxx-devel_package() {
+	short_desc+=" - C++ standard library - development files"
+	depends="libcxx>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/lib/libc++.so
+		vmove usr/lib/libc++.a
+		vmove usr/lib/libc++experimental.a
+		vmove usr/include/c++
+		vmove usr/share/doc/libcxx
+	}
+}
+
+libomp_package() {
+	short_desc+=" - Clang OpenMP support library"
+	pkg_install() {
+		vmove usr/lib/libomp.so
+		vmove "usr/lib/libomptarget.rtl.*.so"
+		vmove usr/lib/libarcher.so
+		vmove "usr/lib/libomp*.so.*"
+	}
+}
+
+libomp-devel_package() {
+	short_desc+=" - Clang OpenMP support library - development files"
+	depends="libomp>=${version}_${revision}"
+	pkg_install() {
+		vmove "usr/lib/libomp*.so"
+		vmove "usr/lib/libarcher*"
+		vmove "usr/include/omp*.h"
+		vmove "usr/lib/clang/${version}/include/omp*.h"
+		vmove usr/share/man/man1/llvmopenmp.1
+		vmove usr/share/doc/openmp
+	}
+}
+
+libllvm14_package() {
+	short_desc+=" - runtime library"
+	pkg_install() {
+		vmove "usr/lib/libLLVM-*.so*"
+	}
+}
diff --git a/srcpkgs/llvm14/update b/srcpkgs/llvm14/update
new file mode 100644
index 000000000000..e95cf26b3586
--- /dev/null
+++ b/srcpkgs/llvm14/update
@@ -0,0 +1,3 @@
+site="https://github.com/llvm/llvm-project/releases"
+pattern="llvmorg-\K(\d+.){2}\d+(-rc\d+)?"
+ignore="*-rc*"

From b369d475dbffa9297b1f0744a8d203357ac2bba0 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:16:07 +0200
Subject: [PATCH 02/27] llvm: update to 14.0.3.

---
 srcpkgs/llvm/template | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/llvm/template b/srcpkgs/llvm/template
index a92db6f94f9f..d226c61c734e 100644
--- a/srcpkgs/llvm/template
+++ b/srcpkgs/llvm/template
@@ -1,10 +1,10 @@
 # Template file for 'llvm'
 pkgname=llvm
-version=12.0.0
+version=14.0.3
 revision=1
 build_style=meta
-depends="llvm12"
-replaces="llvm11>=0 llvm10>=0 llvm9>=0 llvm8>=0 llvm7>=0 llvm6.0>=0 llvm3.9>=0"
+depends="llvm14"
+replaces="llvm13>=0 llvm12>=0 llvm11>=0 llvm10>=0 llvm9>=0 llvm8>=0 llvm7>=0 llvm6.0>=0 llvm3.9>=0"
 short_desc="LLVM meta package"
 maintainer="Enno Boland <gottox@voidlinux.org>"
 license="Public Domain"

From fa2829d7ab165c2ba96f717db287b725ff7273d3 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:36:32 +0200
Subject: [PATCH 03/27] llvm12: drop non-llvm components

---
 ...clang-001-fix-unwind-chain-inclusion.patch |  44 ---
 .../patches/clang-002-add-musl-triples.patch  | 110 -------
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 -
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ---
 .../compiler-rt-aarch64-ucontext.patch        |  11 -
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 --
 .../llvm12/patches/compiler-rt-size_t.patch   |  10 -
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 ----
 srcpkgs/llvm12/patches/libcxx-musl.patch      |  26 --
 srcpkgs/llvm12/patches/libcxx-ppc.patch       |  22 --
 .../llvm12/patches/libcxx-ssp-nonshared.patch |  11 -
 srcpkgs/llvm12/patches/libcxxabi-dl.patch     |  25 --
 srcpkgs/llvm12/patches/libunwind-ppc32.patch  |  63 ----
 srcpkgs/llvm12/patches/lldb-musl.patch        |  31 --
 .../llvm12/patches/ppc32-compiler-rt.patch    |  21 --
 srcpkgs/llvm12/template                       | 301 +-----------------
 16 files changed, 1 insertion(+), 832 deletions(-)
 delete mode 100644 srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-size_t.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-ppc.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxxabi-dl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libunwind-ppc32.patch
 delete mode 100644 srcpkgs/llvm12/patches/lldb-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/ppc32-compiler-rt.patch

diff --git a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
deleted file mode 100644
index e4eaa7783e7a..000000000000
--- a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 352974169f0d2b5da3d5321f588f5e3b5941330e Mon Sep 17 00:00:00 2001
-From: Andrea Brancaleoni <miwaxe@gmail.com>
-Date: Tue, 8 Sep 2015 22:14:57 +0200
-Subject: [PATCH 2/7] fix unwind chain inclusion
-
----
- lib/Headers/unwind.h | 9 +++++----
- 1 file changed, 5 insertions(+), 4 deletions(-)
-
-diff --git a/lib/Headers/unwind.h b/lib/Headers/unwind.h
-index 303d792..44e10cc 100644
---- a/clang/lib/Headers/unwind.h
-+++ b/clang/lib/Headers/unwind.h
-@@ -9,9 +9,6 @@
- 
- /* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/
- 
--#ifndef __CLANG_UNWIND_H
--#define __CLANG_UNWIND_H
--
- #if defined(__APPLE__) && __has_include_next(<unwind.h>)
- /* Darwin (from 11.x on) provide an unwind.h. If that's available,
-  * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE,
-@@ -39,6 +36,9 @@
- # endif
- #else
- 
-+#ifndef __CLANG_UNWIND_H
-+#define __CLANG_UNWIND_H
-+
- #include <stdint.h>
- 
- #ifdef __cplusplus
-@@ -322,6 +322,7 @@ _Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *);
- }
- #endif
- 
-+#endif /* __CLANG_UNWIND_H */
-+
- #endif
- 
--#endif /* __CLANG_UNWIND_H */
--- 
-2.5.1
diff --git a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
deleted file mode 100644
index 25688d40dbc2..000000000000
--- a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
+++ /dev/null
@@ -1,110 +0,0 @@
---- a/clang/lib/Driver/ToolChains/Gnu.cpp
-+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
-@@ -2086,7 +2086,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
-                                              "armv7hl-redhat-linux-gnueabi",
-                                              "armv6hl-suse-linux-gnueabi",
--                                             "armv7hl-suse-linux-gnueabi"};
-+                                             "armv7hl-suse-linux-gnueabi",
-+                                             "armv7l-linux-gnueabihf"};
-   static const char *const ARMebLibDirs[] = {"/lib"};
-   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
-                                              "armeb-linux-androideabi"};
-@@ -2153,8 +2154,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
-   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
-   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
--                                             "powerpcle-unknown-linux-gnu",
--                                             "powerpcle-linux-musl"};
-+                                             "powerpcle-unknown-linux-gnu"};
- 
-   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
-   static const char *const PPC64Triples[] = {
-@@ -2235,6 +2235,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-     return;
-   }
- 
-+  if (TargetTriple.isMusl()) {
-+    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
-+    static const char *const ARMHFMuslTriples[] = {
-+        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
-+    };
-+    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
-+    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
-+    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
-+    static const char *const MIPSMuslTriples[] = {
-+        "mips-linux-musl", "mipsel-linux-musl",
-+        "mipsel-linux-muslhf", "mips-linux-muslhf"
-+    };
-+    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
-+    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
-+    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
-+    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
-+
-+    switch (TargetTriple.getArch()) {
-+    case llvm::Triple::aarch64:
-+      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
-+      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
-+      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
-+      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
-+      break;
-+    case llvm::Triple::arm:
-+      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
-+      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
-+        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
-+      } else {
-+        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
-+      }
-+      break;
-+    case llvm::Triple::x86_64:
-+      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-+      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
-+      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-+      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
-+      break;
-+    case llvm::Triple::x86:
-+      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-+      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
-+      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-+      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
-+      break;
-+    case llvm::Triple::mips:
-+      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
-+      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
-+      break;
-+    case llvm::Triple::ppc:
-+      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
-+      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
-+      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
-+      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
-+      break;
-+    case llvm::Triple::ppcle:
-+      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
-+      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
-+      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
-+      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
-+      break;
-+    case llvm::Triple::ppc64:
-+      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
-+      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
-+      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
-+      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
-+      break;
-+    case llvm::Triple::ppc64le:
-+      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
-+      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
-+      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
-+      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
-+      break;
-+    default:
-+      break;
-+    }
-+    TripleAliases.push_back(TargetTriple.str());
-+    if (TargetTriple.str() != BiarchTriple.str())
-+      BiarchTripleAliases.push_back(BiarchTriple.str());
-+    return;
-+  }
-+
-   // Android targets should not use GNU/Linux tools or libraries.
-   if (TargetTriple.isAndroid()) {
-     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
deleted file mode 100644
index 4ad6412d1e6c..000000000000
--- a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/clang/lib/Driver/ToolChains/Linux.cpp
-+++ b/clang/lib/Driver/ToolChains/Linux.cpp
-@@ -504,10 +504,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
-     Loader = "ld.so.1";
-     break;
-   case llvm::Triple::ppc64:
--    LibDir = "lib64";
--    Loader =
--        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
--    break;
-   case llvm::Triple::ppc64le:
-     LibDir = "lib64";
-     Loader =
diff --git a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
deleted file mode 100644
index 21fc8003c5f1..000000000000
--- a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
+++ /dev/null
@@ -1,48 +0,0 @@
---- a/clang/lib/Basic/Targets/PPC.h
-+++ b/clang/lib/Basic/Targets/PPC.h
-@@ -415,11 +415,10 @@ public:
-       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
-     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
-       DataLayout = "e-m:e-i64:64-n32:64";
--      ABI = "elfv2";
-     } else {
-       DataLayout = "E-m:e-i64:64-n32:64";
--      ABI = "elfv1";
-     }
-+    ABI = "elfv2";
- 
-     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
-       LongDoubleWidth = LongDoubleAlign = 64;
---- a/clang/lib/CodeGen/TargetInfo.cpp
-+++ b/clang/lib/CodeGen/TargetInfo.cpp
-@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
-       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
- 
-     if (Triple.isOSBinFormatELF()) {
--      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
--      if (getTarget().getABI() == "elfv2")
--        Kind = PPC64_SVR4_ABIInfo::ELFv2;
-+      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
-+      if (getTarget().getABI() == "elfv1")
-+        Kind = PPC64_SVR4_ABIInfo::ELFv1;
-       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
- 
-       return SetCGInfo(
---- a/clang/lib/Driver/ToolChains/Clang.cpp
-+++ b/clang/lib/Driver/ToolChains/Clang.cpp
-@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
-   const llvm::Triple &T = getToolChain().getTriple();
-   if (T.isOSBinFormatELF()) {
-     switch (getToolChain().getArch()) {
--    case llvm::Triple::ppc64: {
--      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
--          T.isOSOpenBSD() || T.isMusl())
--        ABIName = "elfv2";
--      else
--        ABIName = "elfv1";
--      break;
--    }
-+    case llvm::Triple::ppc64:
-     case llvm::Triple::ppc64le:
-       ABIName = "elfv2";
-       break;
diff --git a/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch b/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
deleted file mode 100644
index 893c059d7b8d..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp.orig
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-@@ -1799,7 +1799,7 @@
- 
- static bool Aarch64GetESR(ucontext_t *ucontext, u64 *esr) {
-   static const u32 kEsrMagic = 0x45535201;
--  u8 *aux = ucontext->uc_mcontext.__reserved;
-+  u8 *aux = reinterpret_cast<u8 *>(ucontext->uc_mcontext.__reserved);
-   while (true) {
-     _aarch64_ctx *ctx = (_aarch64_ctx *)aux;
-     if (ctx->size == 0) break;
diff --git a/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch b/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
deleted file mode 100644
index 35f16d24f340..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
+++ /dev/null
@@ -1,35 +0,0 @@
---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-@@ -74,6 +74,10 @@
- #include <sys/utsname.h>
- #endif
- 
-+#if SANITIZER_LINUX && defined(__powerpc__)
-+#include <asm/ptrace.h>
-+#endif
-+
- #if SANITIZER_LINUX && !SANITIZER_ANDROID
- #include <sys/personality.h>
- #endif
---- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
-@@ -92,7 +92,7 @@
- # include <utime.h>
- # include <sys/ptrace.h>
- #if defined(__mips64) || defined(__aarch64__) || defined(__arm__) || \
--    SANITIZER_RISCV64
-+    defined(__powerpc__) || SANITIZER_RISCV64
- #  include <asm/ptrace.h>
- #  ifdef __arm__
- typedef struct user_fpregs elf_fpregset_t;
---- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
-@@ -31,7 +31,7 @@
- #include <sys/types.h> // for pid_t
- #include <sys/uio.h> // for iovec
- #include <elf.h> // for NT_PRSTATUS
--#if (defined(__aarch64__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
-+#if (defined(__aarch64__) || defined(__powerpc__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
- // GLIBC 2.20+ sys/user does not include asm/ptrace.h
- # include <asm/ptrace.h>
- #endif
diff --git a/srcpkgs/llvm12/patches/compiler-rt-size_t.patch b/srcpkgs/llvm12/patches/compiler-rt-size_t.patch
deleted file mode 100644
index 2c63063a5e9e..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-size_t.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/compiler-rt/lib/fuzzer/FuzzerInterceptors.cpp.orig
-+++ b/compiler-rt/lib/fuzzer/FuzzerInterceptors.cpp
-@@ -25,6 +25,7 @@
-   }
- 
- #include <cassert>
-+#include <cstddef>
- #include <cstdint>
- #include <dlfcn.h> // for dlsym()
- 
diff --git a/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch b/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
deleted file mode 100644
index d0b61c80c897..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
+++ /dev/null
@@ -1,62 +0,0 @@
---- a/compiler-rt/lib/xray/xray_powerpc64.inc
-+++ b/compiler-rt/lib/xray/xray_powerpc64.inc
-@@ -12,7 +12,13 @@
- 
- #include <cstdint>
- #include <mutex>
-+#ifdef __GLIBC__
- #include <sys/platform/ppc.h>
-+#else
-+#include <cctype>
-+#include <cstring>
-+#include <cstdlib>
-+#endif
- 
- #include "xray_defs.h"
- 
-@@ -20,13 +26,45 @@ namespace __xray {
- 
- ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
-   CPU = 0;
-+#ifdef __GLIBC__
-   return __ppc_get_timebase();
-+#else
-+  return __builtin_ppc_get_timebase();
-+#endif
- }
- 
- inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
-   static std::mutex M;
-   std::lock_guard<std::mutex> Guard(M);
-+#ifdef __GLIBC__
-   return __ppc_get_timebase_freq();
-+#else
-+  /* FIXME: a less dirty implementation? */
-+  static uint64_t base;
-+  if (!base) {
-+    FILE *f = fopen("/proc/cpuinfo", "rb");
-+    if (f) {
-+      ssize_t nr;
-+      /* virtually always big enough to hold the line */
-+      char buf[512];
-+      while (fgets(buf, sizeof(buf), f)) {
-+        char *ret = strstr(buf, "timebase");
-+        if (!ret) {
-+          continue;
-+        }
-+        ret += sizeof("timebase") - 1;
-+        ret = strchr(ret, ':');
-+        if (!ret) {
-+          continue;
-+        }
-+        base = strtoul(ret + 1, nullptr, 10);
-+        break;
-+      }
-+      fclose(f);
-+    }
-+  }
-+  return base;
-+#endif
- }
- 
- inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
diff --git a/srcpkgs/llvm12/patches/libcxx-musl.patch b/srcpkgs/llvm12/patches/libcxx-musl.patch
deleted file mode 100644
index bbd31ffc2cb1..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-musl.patch
+++ /dev/null
@@ -1,26 +0,0 @@
---- a/libcxx/include/locale
-+++ b/libcxx/include/locale
-@@ -742,7 +742,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
-         typename remove_reference<decltype(errno)>::type __save_errno = errno;
-         errno = 0;
-         char *__p2;
-+#if defined(__linux__) && !defined(__GLIBC__)
-+        long long __ll = strtoll(__a, &__p2, __base);
-+#else
-         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
-+#endif
-         typename remove_reference<decltype(errno)>::type __current_errno = errno;
-         if (__current_errno == 0)
-             errno = __save_errno;
-@@ -782,7 +786,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
-         typename remove_reference<decltype(errno)>::type __save_errno = errno;
-         errno = 0;
-         char *__p2;
-+#if defined(__linux__) && !defined(__GLIBC__)
-+        unsigned long long __ll = strtoull(__a, &__p2, __base);
-+#else
-         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
-+#endif
-         typename remove_reference<decltype(errno)>::type __current_errno = errno;
-         if (__current_errno == 0)
-             errno = __save_errno;
diff --git a/srcpkgs/llvm12/patches/libcxx-ppc.patch b/srcpkgs/llvm12/patches/libcxx-ppc.patch
deleted file mode 100644
index 7a92f8004e1c..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-ppc.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-This ensures `is_iec559` is defined correctly under all long double ABIs,
-including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__`
-is not defined on gcc.
-
---- a/libcxx/include/limits
-+++ b/libcxx/include/limits
-@@ -426,8 +426,14 @@ protected:
-     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
-     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
- 
--#if (defined(__ppc__) || defined(__ppc64__))
-+#if defined(__powerpc__) || defined(__powerpc64__)
-+#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__)
-+    /* IEEE 754 quadruple or double precision */
-+    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
-+#else
-+    /* 128-bit IBM double-double */
-     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
-+#endif
- #else
-     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
- #endif
diff --git a/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch b/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
deleted file mode 100644
index 70292beb2fcd..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/libcxx/CMakeLists.txt
-+++ b/libcxx/CMakeLists.txt
-@@ -769,6 +769,8 @@ function(cxx_link_system_libraries target)
-     target_link_libraries(${target} PRIVATE atomic)
-   endif()
- 
-+#ssp  target_link_libraries(${target} PRIVATE ssp_nonshared)
-+
-   if (MINGW)
-     target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
-   endif()
diff --git a/srcpkgs/llvm12/patches/libcxxabi-dl.patch b/srcpkgs/llvm12/patches/libcxxabi-dl.patch
deleted file mode 100644
index 3a15f9db8c98..000000000000
--- a/srcpkgs/llvm12/patches/libcxxabi-dl.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-Also link to -ldl to prevent undefined references.
-
---- a/libcxxabi/src/CMakeLists.txt
-+++ b/libcxxabi/src/CMakeLists.txt
-@@ -73,6 +73,7 @@
-   endif()
- 
-   add_library_flags_if(LIBCXXABI_HAS_C_LIB c)
-+  add_library_flags_if(LIBCXXABI_HAS_C_LIB dl)
- endif()
- 
- if (LIBCXXABI_USE_LLVM_UNWINDER)
---- a/libcxx/CMakeLists.txt
-+++ b/libcxx/CMakeLists.txt
-@@ -745,6 +745,10 @@
-     target_link_libraries(${target} PRIVATE m)
-   endif()
- 
-+  if (LIBCXX_HAS_C_LIB)
-+    target_link_libraries(${target} PRIVATE dl)
-+  endif()
-+
-   if (LIBCXX_HAS_RT_LIB)
-     target_link_libraries(${target} PRIVATE rt)
-   endif()
diff --git a/srcpkgs/llvm12/patches/libunwind-ppc32.patch b/srcpkgs/llvm12/patches/libunwind-ppc32.patch
deleted file mode 100644
index 74aa7576ecf9..000000000000
--- a/srcpkgs/llvm12/patches/libunwind-ppc32.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-This fixes build at least with gcc9 which does not define `__ppc__`.
-
---- a/libunwind/include/__libunwind_config.h
-+++ b/libunwind/include/__libunwind_config.h
-@@ -49,7 +49,7 @@
- #  define _LIBUNWIND_CONTEXT_SIZE 167
- #  define _LIBUNWIND_CURSOR_SIZE 179
- #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64
--# elif defined(__ppc__)
-+# elif defined(__powerpc__)
- #  define _LIBUNWIND_TARGET_PPC 1
- #  define _LIBUNWIND_CONTEXT_SIZE 117
- #  define _LIBUNWIND_CURSOR_SIZE 124
---- a/libunwind/src/UnwindRegistersRestore.S
-+++ b/libunwind/src/UnwindRegistersRestore.S
-@@ -392,7 +392,7 @@ Lnovec:
-   PPC64_LR(3)
-   bctr
- 
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- 
- DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind13Registers_ppc6jumptoEv)
- //
---- a/libunwind/src/UnwindRegistersSave.S
-+++ b/libunwind/src/UnwindRegistersSave.S
-@@ -554,7 +554,7 @@ DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext)
-   blr
- 
- 
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- 
- //
- // extern int unw_getcontext(unw_context_t* thread_state)
---- a/libunwind/src/config.h
-+++ b/libunwind/src/config.h
-@@ -95,12 +95,12 @@
- #define _LIBUNWIND_BUILD_SJLJ_APIS
- #endif
- 
--#if defined(__i386__) || defined(__x86_64__) || defined(__ppc__) || defined(__ppc64__) || defined(__powerpc64__)
-+#if defined(__i386__) || defined(__x86_64__) || defined(__powerpc__) || defined(__powerpc64__)
- #define _LIBUNWIND_SUPPORT_FRAME_APIS
- #endif
- 
- #if defined(__i386__) || defined(__x86_64__) ||                                \
--    defined(__ppc__) || defined(__ppc64__) || defined(__powerpc64__) ||        \
-+    defined(__powerpc__) || defined(__powerpc64__) ||                          \
-     (!defined(__APPLE__) && defined(__arm__)) ||                               \
-     (defined(__arm64__) || defined(__aarch64__)) ||                            \
-     defined(__mips__)
---- a/libunwind/src/libunwind.cpp
-+++ b/libunwind/src/libunwind.cpp
-@@ -42,7 +42,7 @@ _LIBUNWIND_HIDDEN int __unw_init_local(unw_cursor_t *cursor,
- # define REGISTER_KIND Registers_x86_64
- #elif defined(__powerpc64__)
- # define REGISTER_KIND Registers_ppc64
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- # define REGISTER_KIND Registers_ppc
- #elif defined(__aarch64__)
- # define REGISTER_KIND Registers_arm64
diff --git a/srcpkgs/llvm12/patches/lldb-musl.patch b/srcpkgs/llvm12/patches/lldb-musl.patch
deleted file mode 100644
index 601c0d138523..000000000000
--- a/srcpkgs/llvm12/patches/lldb-musl.patch
+++ /dev/null
@@ -1,31 +0,0 @@
---- a/lldb/source/Plugins/Process/Linux/Procfs.h
-+++ b/lldb/source/Plugins/Process/Linux/Procfs.h
-@@ -10,21 +10,12 @@
- // sys/procfs.h on Android/Linux for all supported architectures.
- 
- #include <sys/ptrace.h>
-+#include <asm/ptrace.h>
- 
--#ifdef __ANDROID__
--#if defined(__arm64__) || defined(__aarch64__)
--typedef unsigned long elf_greg_t;
--typedef elf_greg_t
--    elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
--typedef struct user_fpsimd_state elf_fpregset_t;
--#ifndef NT_FPREGSET
--#define NT_FPREGSET NT_PRFPREG
--#endif // NT_FPREGSET
--#elif defined(__mips__)
--#ifndef NT_FPREGSET
--#define NT_FPREGSET NT_PRFPREG
--#endif // NT_FPREGSET
--#endif
--#else // __ANDROID__
-+#if !defined(__GLIBC__) && defined(__powerpc__)
-+#define pt_regs musl_pt_regs
-+#include <sys/procfs.h>
-+#undef pt_regs
-+#else
- #include <sys/procfs.h>
--#endif // __ANDROID__
-+#endif
diff --git a/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch b/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch
deleted file mode 100644
index 8e0a9a779d1b..000000000000
--- a/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-commit ba4ede595ff9599232f5dd2b4384c243137b53fc
-Author: Daniel Kolesa <daniel@octaforge.org>
-Date:   Tue Jun 22 23:40:54 2021 +0200
-
-    enable compiler-rt support for ppc32
-
-diff --git a/compiler-rt/cmake/base-config-ix.cmake b/compiler-rt/cmake/base-config-ix.cmake
-index 1edab43..5c0c8a2 100644
---- a/compiler-rt/cmake/base-config-ix.cmake
-+++ b/compiler-rt/cmake/base-config-ix.cmake
-@@ -182,9 +182,7 @@ macro(test_targets)
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc64le")
-       test_target_arch(powerpc64le "" "-m64")
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc")
--      if(CMAKE_SYSTEM_NAME MATCHES "AIX")
--        test_target_arch(powerpc "" "-m32")
--      endif()
-+      test_target_arch(powerpc "" "-m32")
-       test_target_arch(powerpc64 "" "-m64")
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "s390x")
-       test_target_arch(s390x "" "")
diff --git a/srcpkgs/llvm12/template b/srcpkgs/llvm12/template
index 7ce18028e4a3..7b361bbbf5bc 100644
--- a/srcpkgs/llvm12/template
+++ b/srcpkgs/llvm12/template
@@ -1,25 +1,17 @@
 # Template file for 'llvm12'
 pkgname=llvm12
 version=12.0.1
-revision=2
+revision=3
 wrksrc="llvm-project-${version}.src"
 build_wrksrc=llvm
 build_style=cmake
 configure_args="
  -DCMAKE_BUILD_TYPE=Release -Wno-dev
  -DENABLE_LINKER_BUILD_ID=YES
- -DLLDB_USE_SYSTEM_SIX=YES
- -DLIBCXX_CXX_ABI=libcxxabi
- -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
- -DLIBCXXABI_USE_LLVM_UNWINDER=YES
- -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
- -DLIBOMP_ENABLE_SHARED=YES
- -DLIBOMP_INSTALL_ALIASES=NO
  -DLLVM_INCLUDE_DOCS=YES
  -DLLVM_BUILD_DOCS=YES
  -DLLVM_ENABLE_SPHINX=YES
  -DSPHINX_WARNINGS_AS_ERRORS=NO
- -DLLVM_INSTALL_UTILS=YES
  -DLLVM_BUILD_LLVM_DYLIB=YES
  -DLLVM_LINK_LLVM_DYLIB=YES
  -DLLVM_ENABLE_RTTI=YES
@@ -51,87 +43,10 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
-_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
-
-_lldb_enable=yes
-_libomp_enable=no
-
-case "$XBPS_TARGET_MACHINE" in
-	ppc64le*) ;;
-	ppc*|i686*) _lldb_enable=no ;;
-esac
-
-case "$XBPS_TARGET_MACHINE" in
-	x86_64*|aarch64*|ppc64*) _libomp_enable=yes;;
-esac
-
-subpackages="clang-tools-extra"
-
-# must go before clang
-if [ "$_libomp_enable" = "yes" ]; then
-	_enabled_projects+=";openmp"
-	subpackages+=" libomp libomp-devel"
-	# because of cmake nonsense referencing libomptarget.so.*
-	depends+=" libomp>=${version}_${revision}"
-fi
-
-subpackages+=" clang clang-analyzer libclang libclang-cpp
- llvm-libunwind llvm-libunwind-devel libcxx libcxx-devel
- libcxxabi libcxxabi-devel libllvm12"
-
-if [ "$_lldb_enable" = "yes" ]; then
-	# XXX fails to cross compile due to python
-	_enabled_projects+=";lldb"
-	subpackages+=" lldb lldb-devel"
-fi
-
-subpackages+=" lld lld-devel"
-
-configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
-
 post_patch() {
-	if [ "$_lldb_enable" = "yes" ]; then
-		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
-			vsed -i 's|__ptrace_request|int|g' \
-				${wrksrc}/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
-		fi
-		# disable docs for lldb as they fail to generate
-		vsed -i '/add_subdirectory(docs)/d' \
-			${wrksrc}/lldb/CMakeLists.txt
-	fi
-
 	# update config.guess for better platform detection
 	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
 		${wrksrc}/llvm/cmake
-
-	# fix linker failures on some archs
-	vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
-		${wrksrc}/libcxxabi/cmake/config-ix.cmake
-	vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
-		${wrksrc}/libcxxabi/cmake/config-ix.cmake
-
-	# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
-	case "$XBPS_TARGET_MACHINE" in
-		ppc64*) ;;
-		ppc*-musl|i686-musl|mips*-musl)
-			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
-				${wrksrc}/libunwind/src/CMakeLists.txt
-			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
-				${wrksrc}/libcxxabi/src/CMakeLists.txt
-			vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
-			;;
-	esac
-
-	case "$XBPS_TARGET_MACHINE" in
-		x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
-			vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
-				${wrksrc}/compiler-rt/CMakeLists.txt
-			;;
-		arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
-			vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
-				${wrksrc}/compiler-rt/cmake/config-ix.cmake
-			;;
-	esac
 }
 
 pre_configure() {
@@ -158,10 +73,8 @@ pre_configure() {
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
 			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
 		make ${makejobs} -C utils/TableGen
-		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
 		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
-		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
 		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
 		cd ../..
 	fi
@@ -202,218 +115,6 @@ do_install() {
 	if [ "$CROSS_BUILD" ]; then
 		rm -f ${DESTDIR}/usr/bin/llvm-config-host
 	fi
-
-	# Install libcxxabi headers
-	vinstall ${wrksrc}/libcxxabi/include/__cxxabi_config.h 644 usr/include
-	vinstall ${wrksrc}/libcxxabi/include/cxxabi.h 644 usr/include
-
-	# Install libunwind headers
-	vinstall ${wrksrc}/libunwind/include/__libunwind_config.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/libunwind.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/unwind.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/mach-o/compact_unwind_encoding.h \
-		644 usr/include/mach-o
-}
-
-clang-analyzer_package() {
-	pycompile_dirs="usr/share/scan-view"
-	depends="clang-${version}_${revision} python3 perl"
-	short_desc+=" - A source code analysis framework"
-	homepage="https://clang-analyzer.llvm.org/"
-	pkg_install() {
-		vmove usr/share/man/man1/scan-build.1
-		vmove "/usr/bin/scan-*"
-		vmove "/usr/share/scan-*"
-		vmove "/usr/libexec/*analyzer"
-	}
-}
-
-clang-tools-extra_package() {
-	lib32disabled=yes
-	depends="clang-${version}_${revision} python3"
-	short_desc+=" - Extra Clang tools"
-	homepage="https://clang.llvm.org/extra/"
-	pkg_install() {
-		vmove usr/include/clang-tidy
-		vmove usr/bin/clang-apply-replacements
-		vmove usr/bin/clang-query
-		vmove usr/bin/clang-rename
-		vmove usr/bin/clang-tidy
-		vmove usr/bin/diagtool
-		vmove usr/bin/find-all-symbols
-		vmove usr/bin/hmaptool
-		vmove usr/bin/modularize
-		vmove usr/bin/pp-trace
-		vmove usr/bin/sancov
-		vmove "usr/lib/libclangApplyReplacements*"
-		vmove "usr/lib/libclangQuery*"
-		vmove "usr/lib/libclangTidy*"
-		vmove "usr/share/clang/*tidy*"
-		vmove usr/share/doc/clang-tools
-		vmove usr/share/man/man1/extraclangtools.1
-		vmove usr/share/man/man1/diagtool.1
-	}
-}
-
-clang_package() {
-	lib32disabled=yes
-	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
-	 libclang-${version}_${revision}"
-	short_desc+=" - C language family frontend"
-	homepage="https://clang.llvm.org/"
-	pkg_install() {
-		vmove usr/include/clang
-		vmove usr/include/clang-c
-		vmove "usr/bin/*clang*"
-		vmove usr/bin/c-index-test
-		vmove usr/lib/clang
-		vmove usr/lib/cmake/clang
-		vmove "usr/lib/libclang*.a"
-		vmove "usr/lib/libclang*.so"
-		vmove usr/share/clang
-		vmove usr/share/doc/clang
-		vmove usr/share/man/man1/clang.1
-	}
-}
-
-libclang_package() {
-	short_desc+=" - C frontend runtime library"
-	pkg_install() {
-		vmove "usr/lib/libclang.so.*"
-	}
-}
-
-libclang-cpp_package() {
-	short_desc+=" - C frontend runtime library (C++ interface)"
-	pkg_install() {
-		vmove "usr/lib/libclang-cpp.so.*"
-	}
-}
-
-lld_package() {
-	lib32disabled=yes
-	short_desc+=" - linker"
-	homepage="https://lld.llvm.org"
-	pkg_install() {
-		vmove usr/bin/lld*
-		vmove usr/bin/wasm-ld
-		vmove usr/bin/ld.lld*
-		vmove usr/bin/ld64.lld*
-		vmove usr/share/doc/lld
-	}
-}
-
-lld-devel_package() {
-	lib32disabled=yes
-	short_desc+=" - linker - development files"
-	homepage="https://lld.llvm.org"
-	depends="lld>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/include/lld
-		vmove usr/lib/cmake/lld
-		vmove "usr/lib/liblld*a"
-	}
-}
-
-lldb_package() {
-	lib32disabled=yes
-	depends+=" python3-six"
-	short_desc+=" - LLDB debugger"
-	homepage="https://lldb.llvm.org/"
-	pkg_install() {
-		vmove usr/bin/*lldb*
-		vmove usr/lib/liblldb*so.*
-		vmove /usr/lib/python*
-	}
-}
-
-lldb-devel_package() {
-	lib32disabled=yes
-	depends="lldb>=${version}_${revision}"
-	short_desc+=" - LLDB debugger - development files"
-	pkg_install() {
-		vmove usr/include/lldb
-		vmove "usr/lib/liblldb*.so"
-	}
-}
-
-llvm-libunwind_package() {
-	short_desc+=" - libunwind"
-	pkg_install() {
-		vmove "usr/lib/libunwind.so.*"
-	}
-}
-
-llvm-libunwind-devel_package() {
-	short_desc+=" - libunwind - development files"
-	depends="llvm-libunwind>=${version}_${revision}"
-	conflicts="libunwind-devel>=0"
-	pkg_install() {
-		vmove usr/lib/libunwind.so
-		vmove usr/lib/libunwind.a
-		vmove "usr/include/*unwind*"
-		vmove usr/include/mach-o
-		vmove usr/share/doc/libunwind
-	}
-}
-
-libcxxabi_package() {
-	short_desc+=" - low level support for libc++"
-	pkg_install() {
-		vmove "usr/lib/libc++abi.so.*"
-	}
-}
-
-libcxxabi-devel_package() {
-	short_desc+=" - low level support for libc++ - development files"
-	depends="libcxxabi>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/lib/libc++abi.so
-		vmove usr/lib/libc++abi.a
-		vmove "usr/include/*cxxabi*"
-	}
-}
-
-libcxx_package() {
-	short_desc+=" - C++ standard library"
-	pkg_install() {
-		vmove "usr/lib/libc++.so.*"
-	}
-}
-
-libcxx-devel_package() {
-	short_desc+=" - C++ standard library - development files"
-	depends="libcxx>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/lib/libc++.so
-		vmove usr/lib/libc++.a
-		vmove usr/lib/libc++experimental.a
-		vmove usr/include/c++
-		vmove usr/share/doc/libcxx
-	}
-}
-
-libomp_package() {
-	short_desc+=" - Clang OpenMP support library"
-	pkg_install() {
-		vmove usr/lib/libomp.so
-		vmove "usr/lib/libomptarget.rtl.*.so"
-		vmove usr/lib/libarcher.so
-		vmove "usr/lib/libomp*.so.*"
-	}
-}
-
-libomp-devel_package() {
-	short_desc+=" - Clang OpenMP support library - development files"
-	depends="libomp>=${version}_${revision}"
-	pkg_install() {
-		vmove "usr/lib/libomp*.so"
-		vmove "usr/lib/libarcher*"
-		vmove "usr/include/omp*.h"
-		vmove "usr/lib/clang/${version}/include/omp*.h"
-		vmove usr/share/man/man1/llvmopenmp.1
-		vmove usr/share/doc/openmp
-	}
 }
 
 libllvm12_package() {

From 9b28478ff94d67c2bf273ba7d4094d2136b2962f Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 14:00:28 +0200
Subject: [PATCH 04/27] New packages: clang12, libclang12, libclang12-cpp,
 lld12, lld12-devel.

---
 common/shlibs                                 |   2 +
 srcpkgs/clang12                               |   1 +
 srcpkgs/libclang12                            |   1 +
 srcpkgs/libclang12-cpp                        |   1 +
 srcpkgs/lld12                                 |   1 +
 srcpkgs/lld12-devel                           |   1 +
 ...clang-001-fix-unwind-chain-inclusion.patch |  44 +++++++
 .../patches/clang-002-add-musl-triples.patch  | 110 ++++++++++++++++++
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 +++
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ++++++++
 srcpkgs/llvm12/template                       |  71 +++++++++++
 11 files changed, 293 insertions(+)
 create mode 120000 srcpkgs/clang12
 create mode 120000 srcpkgs/libclang12
 create mode 120000 srcpkgs/libclang12-cpp
 create mode 120000 srcpkgs/lld12
 create mode 120000 srcpkgs/lld12-devel
 create mode 100644 srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch

diff --git a/common/shlibs b/common/shlibs
index 0ca5d7d5d6f9..36bab1d3d999 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -973,6 +973,8 @@ libuchardet.so.0 uchardet-0.0.6_1
 libgtksourceviewmm-3.0.so.0 gtksourceviewmm-3.2.0_1
 libyajl.so.2 yajl-2.0.1_1
 libconfuse.so.2 confuse-3.2.1_1
+libclang.so.12 libclang12-12.0.0_1
+libclang-cpp.so.12 libclang12-cpp-12.0.0_1
 liblldb.so.14 lldb-14.0.3_1
 libclang.so.14 libclang-14.0.3_1
 libclang-cpp.so.14 libclang-cpp-14.0.3_1
diff --git a/srcpkgs/clang12 b/srcpkgs/clang12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/clang12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/libclang12 b/srcpkgs/libclang12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/libclang12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/libclang12-cpp b/srcpkgs/libclang12-cpp
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/libclang12-cpp
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/lld12 b/srcpkgs/lld12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/lld12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/lld12-devel b/srcpkgs/lld12-devel
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/lld12-devel
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
new file mode 100644
index 000000000000..e4eaa7783e7a
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
@@ -0,0 +1,44 @@
+From 352974169f0d2b5da3d5321f588f5e3b5941330e Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe@gmail.com>
+Date: Tue, 8 Sep 2015 22:14:57 +0200
+Subject: [PATCH 2/7] fix unwind chain inclusion
+
+---
+ lib/Headers/unwind.h | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/lib/Headers/unwind.h b/lib/Headers/unwind.h
+index 303d792..44e10cc 100644
+--- a/clang/lib/Headers/unwind.h
++++ b/clang/lib/Headers/unwind.h
+@@ -9,9 +9,6 @@
+ 
+ /* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/
+ 
+-#ifndef __CLANG_UNWIND_H
+-#define __CLANG_UNWIND_H
+-
+ #if defined(__APPLE__) && __has_include_next(<unwind.h>)
+ /* Darwin (from 11.x on) provide an unwind.h. If that's available,
+  * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE,
+@@ -39,6 +36,9 @@
+ # endif
+ #else
+ 
++#ifndef __CLANG_UNWIND_H
++#define __CLANG_UNWIND_H
++
+ #include <stdint.h>
+ 
+ #ifdef __cplusplus
+@@ -322,6 +322,7 @@ _Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *);
+ }
+ #endif
+ 
++#endif /* __CLANG_UNWIND_H */
++
+ #endif
+ 
+-#endif /* __CLANG_UNWIND_H */
+-- 
+2.5.1
diff --git a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
new file mode 100644
index 000000000000..25688d40dbc2
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
@@ -0,0 +1,110 @@
+--- a/clang/lib/Driver/ToolChains/Gnu.cpp
++++ b/clang/lib/Driver/ToolChains/Gnu.cpp
+@@ -2086,7 +2086,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
+                                              "armv7hl-redhat-linux-gnueabi",
+                                              "armv6hl-suse-linux-gnueabi",
+-                                             "armv7hl-suse-linux-gnueabi"};
++                                             "armv7hl-suse-linux-gnueabi",
++                                             "armv7l-linux-gnueabihf"};
+   static const char *const ARMebLibDirs[] = {"/lib"};
+   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
+                                              "armeb-linux-androideabi"};
+@@ -2153,8 +2154,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
+   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
+   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
+-                                             "powerpcle-unknown-linux-gnu",
+-                                             "powerpcle-linux-musl"};
++                                             "powerpcle-unknown-linux-gnu"};
+ 
+   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
+   static const char *const PPC64Triples[] = {
+@@ -2235,6 +2235,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+     return;
+   }
+ 
++  if (TargetTriple.isMusl()) {
++    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
++    static const char *const ARMHFMuslTriples[] = {
++        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
++    };
++    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
++    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
++    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
++    static const char *const MIPSMuslTriples[] = {
++        "mips-linux-musl", "mipsel-linux-musl",
++        "mipsel-linux-muslhf", "mips-linux-muslhf"
++    };
++    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
++    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
++    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
++    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
++
++    switch (TargetTriple.getArch()) {
++    case llvm::Triple::aarch64:
++      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      break;
++    case llvm::Triple::arm:
++      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
++      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
++        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
++      } else {
++        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
++      }
++      break;
++    case llvm::Triple::x86_64:
++      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      break;
++    case llvm::Triple::x86:
++      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      break;
++    case llvm::Triple::mips:
++      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
++      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
++      break;
++    case llvm::Triple::ppc:
++      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      break;
++    case llvm::Triple::ppcle:
++      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      break;
++    case llvm::Triple::ppc64:
++      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      break;
++    case llvm::Triple::ppc64le:
++      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      break;
++    default:
++      break;
++    }
++    TripleAliases.push_back(TargetTriple.str());
++    if (TargetTriple.str() != BiarchTriple.str())
++      BiarchTripleAliases.push_back(BiarchTriple.str());
++    return;
++  }
++
+   // Android targets should not use GNU/Linux tools or libraries.
+   if (TargetTriple.isAndroid()) {
+     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
new file mode 100644
index 000000000000..4ad6412d1e6c
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
@@ -0,0 +1,13 @@
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -504,10 +504,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+     Loader = "ld.so.1";
+     break;
+   case llvm::Triple::ppc64:
+-    LibDir = "lib64";
+-    Loader =
+-        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
+-    break;
+   case llvm::Triple::ppc64le:
+     LibDir = "lib64";
+     Loader =
diff --git a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
new file mode 100644
index 000000000000..21fc8003c5f1
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
@@ -0,0 +1,48 @@
+--- a/clang/lib/Basic/Targets/PPC.h
++++ b/clang/lib/Basic/Targets/PPC.h
+@@ -415,11 +415,10 @@ public:
+       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
+     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
+       DataLayout = "e-m:e-i64:64-n32:64";
+-      ABI = "elfv2";
+     } else {
+       DataLayout = "E-m:e-i64:64-n32:64";
+-      ABI = "elfv1";
+     }
++    ABI = "elfv2";
+ 
+     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
+       LongDoubleWidth = LongDoubleAlign = 64;
+--- a/clang/lib/CodeGen/TargetInfo.cpp
++++ b/clang/lib/CodeGen/TargetInfo.cpp
+@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
+       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
+ 
+     if (Triple.isOSBinFormatELF()) {
+-      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
+-      if (getTarget().getABI() == "elfv2")
+-        Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      if (getTarget().getABI() == "elfv1")
++        Kind = PPC64_SVR4_ABIInfo::ELFv1;
+       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
+ 
+       return SetCGInfo(
+--- a/clang/lib/Driver/ToolChains/Clang.cpp
++++ b/clang/lib/Driver/ToolChains/Clang.cpp
+@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
+   const llvm::Triple &T = getToolChain().getTriple();
+   if (T.isOSBinFormatELF()) {
+     switch (getToolChain().getArch()) {
+-    case llvm::Triple::ppc64: {
+-      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
+-          T.isOSOpenBSD() || T.isMusl())
+-        ABIName = "elfv2";
+-      else
+-        ABIName = "elfv1";
+-      break;
+-    }
++    case llvm::Triple::ppc64:
+     case llvm::Triple::ppc64le:
+       ABIName = "elfv2";
+       break;
diff --git a/srcpkgs/llvm12/template b/srcpkgs/llvm12/template
index 7b361bbbf5bc..274b57183654 100644
--- a/srcpkgs/llvm12/template
+++ b/srcpkgs/llvm12/template
@@ -43,6 +43,12 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
+_enabled_projects="clang;lld"
+
+subpackages+=" clang12 libclang12 libclang12-cpp libllvm12 lld12 lld12-devel"
+
+configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+
 post_patch() {
 	# update config.guess for better platform detection
 	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
@@ -73,8 +79,10 @@ pre_configure() {
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
 			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
 		make ${makejobs} -C utils/TableGen
+		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
 		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
+		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
 		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
 		cd ../..
 	fi
@@ -117,6 +125,69 @@ do_install() {
 	fi
 }
 
+clang12_package() {
+	conflicts="clang"
+	lib32disabled=yes
+	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
+	 libclang12-${version}_${revision}"
+	short_desc+=" - C language family frontend"
+	homepage="https://clang.llvm.org/"
+	pkg_install() {
+		vmove usr/include/clang
+		vmove usr/include/clang-c
+		vmove "usr/bin/*clang*"
+		vmove usr/bin/c-index-test
+		vmove usr/lib/clang
+		vmove usr/lib/cmake/clang
+		vmove "usr/lib/libclang*.a"
+		vmove "usr/lib/libclang*.so"
+		vmove usr/share/clang
+		vmove usr/share/doc/clang
+		vmove usr/share/man/man1/clang.1
+	}
+}
+
+libclang12_package() {
+	short_desc+=" - C frontend runtime library"
+	pkg_install() {
+		vmove "usr/lib/libclang.so.*"
+	}
+}
+
+libclang12-cpp_package() {
+	short_desc+=" - C frontend runtime library (C++ interface)"
+	pkg_install() {
+		vmove "usr/lib/libclang-cpp.so.*"
+	}
+}
+
+lld12_package() {
+	conflicts="lld"
+	lib32disabled=yes
+	short_desc+=" - linker"
+	homepage="https://lld.llvm.org"
+	pkg_install() {
+		vmove usr/bin/lld*
+		vmove usr/bin/wasm-ld
+		vmove usr/bin/ld.lld*
+		vmove usr/bin/ld64.lld*
+		vmove usr/share/doc/lld
+	}
+}
+
+lld12-devel_package() {
+	conflicts="lld-devel"
+	lib32disabled=yes
+	short_desc+=" - linker - development files"
+	homepage="https://lld.llvm.org"
+	depends="lld12>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include/lld
+		vmove usr/lib/cmake/lld
+		vmove "usr/lib/liblld*a"
+	}
+}
+
 libllvm12_package() {
 	short_desc+=" - runtime library"
 	pkg_install() {

From fb3f7f07c61afb3b3ee36f33886d8061aee71d3b Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 05/27] chromium: update for llvm14

---
 srcpkgs/chromium/template | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/srcpkgs/chromium/template b/srcpkgs/chromium/template
index 0dce8772fdb8..8b604a349229 100644
--- a/srcpkgs/chromium/template
+++ b/srcpkgs/chromium/template
@@ -2,7 +2,7 @@
 pkgname=chromium
 # See https://chromiumdash.appspot.com/releases?platform=Linux for the latest version
 version=101.0.4951.41
-revision=1
+revision=2
 archs="i686* x86_64* aarch64* armv7l* ppc64le*"
 short_desc="Google's attempt at creating a safer, faster, and more stable browser"
 maintainer="Duncaen <duncaen@voidlinux.org>"
@@ -20,7 +20,7 @@ desc_option_debug="Build with debug symbols"
 desc_option_js_optimize="Optimize the JS used for Chromium's UI"
 desc_option_pipewire="Enable support for screen sharing for WebRTC via PipeWire"
 
-hostmakedepends="$(vopt_if clang "clang lld llvm12") python python3 pkgconf perl gperf bison ninja nodejs hwids
+hostmakedepends="$(vopt_if clang "clang lld llvm14") python python3 pkgconf perl gperf bison ninja nodejs hwids
  libatomic-devel libevent-devel libglib-devel $(vopt_if js_optimize openjdk) wayland-devel libepoxy-devel"
 makedepends="libpng-devel gtk+-devel gtk+3-devel nss-devel pciutils-devel
  libXi-devel libgcrypt-devel libgnome-keyring-devel cups-devel elfutils-devel
@@ -266,12 +266,6 @@ do_configure() {
 		'disable_fieldtrial_testing_config=true'
 
 		'is_official_build=true'
-
-		# segfaults with llvm-12.0.1
-		'is_cfi=false'
-		'use_thin_lto=false'
-		'use_cfi_icall=false'
-		'chrome_pgo_phase=0'
 	)
 
 	if [ "$CROSS_BUILD" ]; then

From 6f92edb94778a692d5bce81aa2a994b9375e187e Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 06/27] ghdl: update for llvm14

---
 srcpkgs/ghdl/patches/{llvm12.patch => llvm.patch} | 2 ++
 srcpkgs/ghdl/template                             | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)
 rename srcpkgs/ghdl/patches/{llvm12.patch => llvm.patch} (82%)

diff --git a/srcpkgs/ghdl/patches/llvm12.patch b/srcpkgs/ghdl/patches/llvm.patch
similarity index 82%
rename from srcpkgs/ghdl/patches/llvm12.patch
rename to srcpkgs/ghdl/patches/llvm.patch
index 8d2f76bfda06..9201816ae053 100644
--- a/srcpkgs/ghdl/patches/llvm12.patch
+++ b/srcpkgs/ghdl/patches/llvm.patch
@@ -7,6 +7,8 @@ index c1c1a6d..dad7c38 100755
         check_version 10.0 $llvm_version ||
         check_version 11.0 $llvm_version ||
 +       check_version 12.0 $llvm_version ||
++       check_version 13.0 $llvm_version ||
++       check_version 14.0 $llvm_version ||
         false; then
      echo "Debugging is enabled with llvm $llvm_version"
    else
diff --git a/srcpkgs/ghdl/template b/srcpkgs/ghdl/template
index e756d8c3cd87..9ca1169b22bd 100644
--- a/srcpkgs/ghdl/template
+++ b/srcpkgs/ghdl/template
@@ -7,7 +7,7 @@
 pkgname=ghdl
 reverts="20181129_1"
 version=1.0.0
-revision=1
+revision=2
 build_style=configure
 configure_args="--prefix=/usr --srcdir=.. --incdir=lib/ghdl/include"
 makedepends="zlib-devel"

From b6203c7eac1b53b9a80c673bfa8b0c569deb7733 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 07/27] qt5: rebuild for llvm14

---
 srcpkgs/qt5/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index ee788fad2019..25f15583a42d 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -3,7 +3,7 @@ pkgname=qt5
 version=5.15.3+20220222
 # commit fcca82ca40a5d8a02a4ddd90846d070f2c58cfad
 # base repo: https://invent.kde.org/qt/qt/qt5
-revision=3
+revision=4
 build_style=meta
 hostmakedepends="cmake clang flex perl glib-devel pkg-config
  python re2c ruby which"

From c4663a9c394dc5d48de96e3646887027ea17118b Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 08/27] tilix: rebuild for llvm14

---
 srcpkgs/tilix/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/tilix/template b/srcpkgs/tilix/template
index d8f014bc78c5..ac1bf7dd3bdd 100644
--- a/srcpkgs/tilix/template
+++ b/srcpkgs/tilix/template
@@ -1,7 +1,7 @@
 # Template file for 'tilix'
 pkgname=tilix
 version=1.9.4
-revision=3
+revision=4
 build_style=meson
 configure_args="-Db_lto=false"
 hostmakedepends="automake gettext-devel gdk-pixbuf glib-devel ldc po4a pkg-config

From 43875514f850c36f6112a13e77491a2ad5726f82 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 09/27] shiboken2: rebuild for llvm14

---
 srcpkgs/shiboken2/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/shiboken2/template b/srcpkgs/shiboken2/template
index b56613229c13..ab9d2c4cb8f9 100644
--- a/srcpkgs/shiboken2/template
+++ b/srcpkgs/shiboken2/template
@@ -1,7 +1,7 @@
 # Template file for 'shiboken2'
 pkgname=shiboken2
 version=5.15.2
-revision=4
+revision=5
 _pkgname="pyside-setup-opensource-src-${version}"
 wrksrc="${_pkgname/%5.14.2.1/5.14.2}"
 build_wrksrc="sources/shiboken2"

From a5fa6c1dbd26f1858929081fc9998f569c2ee6e8 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 10/27] gnome-builder: rebuild for llvm14

---
 srcpkgs/gnome-builder/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/gnome-builder/template b/srcpkgs/gnome-builder/template
index 93559b21774f..5a5a51893ae8 100644
--- a/srcpkgs/gnome-builder/template
+++ b/srcpkgs/gnome-builder/template
@@ -1,7 +1,7 @@
 # Template file for 'gnome-builder'
 pkgname=gnome-builder
 version=41.3
-revision=1
+revision=2
 build_style=meson
 build_helper=qemu
 configure_args="-Dhelp=true -Dnetwork_tests=false"

From 2afc9ac533b8aea0598ffca1ca646a9c5330ef55 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 11/27] bcc: rebuild for llvm14

---
 srcpkgs/bcc/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/bcc/template b/srcpkgs/bcc/template
index 54509b63d5a7..2cfa0a2977d0 100644
--- a/srcpkgs/bcc/template
+++ b/srcpkgs/bcc/template
@@ -1,7 +1,7 @@
 # Template file for 'bcc'
 pkgname=bcc
 version=0.24.0
-revision=1
+revision=2
 wrksrc="bcc"
 build_style=cmake
 configure_args="-DREVISION=${version} -DENABLE_LLVM_SHARED=1"

From dd1e06a1508d22944bdc7771cc6093d031b5e5c0 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 12/27] mesa: rebuild for llvm14

---
 srcpkgs/mesa/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/mesa/template b/srcpkgs/mesa/template
index c90500de7416..8f08262fb135 100644
--- a/srcpkgs/mesa/template
+++ b/srcpkgs/mesa/template
@@ -1,7 +1,7 @@
 # Template file for 'mesa'
 pkgname=mesa
 version=21.3.7
-revision=1
+revision=2
 build_style=meson
 configure_args="-Dglvnd=true -Dshared-glapi=enabled -Dgbm=enabled -Degl=enabled
  -Dosmesa=true -Dgles1=enabled -Dgles2=enabled -Dglx=dri -Ddri3=enabled

From b257c3076a77f5bbf4dd3d9e7691e1c0ac530051 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 13/27] juCi++: rebuild for llvm14

---
 srcpkgs/juCi++/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/juCi++/template b/srcpkgs/juCi++/template
index 1a7604b44a00..5103324dec20 100644
--- a/srcpkgs/juCi++/template
+++ b/srcpkgs/juCi++/template
@@ -1,7 +1,7 @@
 # Template file for 'juCi++'
 pkgname=juCi++
 version=1.6.2
-revision=2
+revision=3
 _libclangmm_commit="b342f4dd6de4fe509a692a4b4fcfc7e24aae9590"
 _tiny_commit="c9c8bf810ddad8cd17882b9a9ee628a690e779f5"
 wrksrc="jucipp-v${version}"

From 1900de5d7dac6b9c2a2bbc73608aa30d3e06a34b Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 14/27] codelite: rebuild for llvm14

---
 srcpkgs/codelite/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/codelite/template b/srcpkgs/codelite/template
index 3a993a2c0cfb..24e2c879dd45 100644
--- a/srcpkgs/codelite/template
+++ b/srcpkgs/codelite/template
@@ -1,7 +1,7 @@
 # Template file for 'codelite'
 pkgname=codelite
 version=15.0.6
-revision=1
+revision=2
 build_style=cmake
 build_helper=cmake-wxWidgets-gtk3
 configure_args="-DWITH_PCH=0 -DWITH_WX_CONFIG=wx-config-gtk3

From 169acc39cff060ea26358d2dae55be7269bad0cc Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 15/27] ccls: rebuild for llvm14

---
 srcpkgs/ccls/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/ccls/template b/srcpkgs/ccls/template
index fbb7c6847bc1..40aba3b55bfe 100644
--- a/srcpkgs/ccls/template
+++ b/srcpkgs/ccls/template
@@ -1,7 +1,7 @@
 # Template file for 'ccls'
 pkgname=ccls
 version=0.20210330
-revision=2
+revision=3
 build_style=cmake
 hostmakedepends="clang-tools-extra"
 makedepends="llvm ncurses-devel rapidjson zlib-devel clang-tools-extra"

From 11e02ab441b3788a20063df0c26cb19a08ab634b Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 16/27] clazy: rebuild for llvm14

---
 srcpkgs/clazy/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/clazy/template b/srcpkgs/clazy/template
index 11f3bab55aef..f81de08ab836 100644
--- a/srcpkgs/clazy/template
+++ b/srcpkgs/clazy/template
@@ -1,7 +1,7 @@
 # Template file for 'clazy'
 pkgname=clazy
 version=1.11
-revision=1
+revision=2
 build_style=cmake
 build_helper=qemu
 hostmakedepends="llvm"

From 6e3a591c8ea85a2ea3098ee40f7387345e86a1b3 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 17/27] bpftrace: rebuild for llvm14

---
 srcpkgs/bpftrace/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/bpftrace/template b/srcpkgs/bpftrace/template
index 28ab3c626399..eb2480d2230e 100644
--- a/srcpkgs/bpftrace/template
+++ b/srcpkgs/bpftrace/template
@@ -1,7 +1,7 @@
 # Template file for 'bpftrace'
 pkgname=bpftrace
 version=0.14.1
-revision=1
+revision=2
 archs="x86_64* aarch64* ppc64*"
 build_style=cmake
 configure_args="-DBUILD_TESTING=OFF"  # needs root to run

From 9ea5f9123f0c01b1bb792bd39bebf61577b1a2de Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 18/27] rtags: rebuild for llvm14

---
 srcpkgs/rtags/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/rtags/template b/srcpkgs/rtags/template
index b496a1b0e721..9b161e690d76 100644
--- a/srcpkgs/rtags/template
+++ b/srcpkgs/rtags/template
@@ -1,7 +1,7 @@
 # Template file for 'rtags'
 pkgname=rtags
 version=2.38
-revision=5
+revision=6
 build_style=cmake
 # Don't run tests in do_install, please.
 configure_args="-DSKIP_CTEST=TRUE"

From 306fcd20351cac9619b1718b4979dcc5ab34b949 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:07:19 +0200
Subject: [PATCH 19/27] beignet: remove package

---
 srcpkgs/beignet/patches/cl_uint.patch         |  22 -
 ...419a0008e38ef2d9d255d9e9c74e9fba084b.patch | 134 ---
 srcpkgs/beignet/patches/llvm06.patch          |  33 -
 srcpkgs/beignet/patches/llvm08.patch          |  56 --
 srcpkgs/beignet/patches/llvm09.patch          | 111 ---
 srcpkgs/beignet/patches/llvm10.patch          | 347 -------
 srcpkgs/beignet/patches/llvm11.patch          | 937 ------------------
 srcpkgs/beignet/patches/llvm12.patch          | 115 ---
 srcpkgs/beignet/patches/musl.patch            |  11 -
 srcpkgs/beignet/template                      |  22 -
 srcpkgs/beignet/update                        |   1 -
 srcpkgs/removed-packages/template             |   3 +-
 12 files changed, 2 insertions(+), 1790 deletions(-)
 delete mode 100644 srcpkgs/beignet/patches/cl_uint.patch
 delete mode 100644 srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm06.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm08.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm09.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm10.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm11.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm12.patch
 delete mode 100644 srcpkgs/beignet/patches/musl.patch
 delete mode 100644 srcpkgs/beignet/template
 delete mode 100644 srcpkgs/beignet/update

diff --git a/srcpkgs/beignet/patches/cl_uint.patch b/srcpkgs/beignet/patches/cl_uint.patch
deleted file mode 100644
index 86ba00f04e95..000000000000
--- a/srcpkgs/beignet/patches/cl_uint.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/src/cl_api_kernel.c	2017-09-22 10:05:22.000000000 +0200
-+++ b/src/cl_api_kernel.c	2020-03-24 18:27:40.186485887 +0100
-@@ -151,7 +151,7 @@
-         fixed_local_sz[0] = 16;
-         fixed_local_sz[1] = 1;
-       } else {
--        uint j, maxDimSize = 64 /* from 64? */, maxGroupSize = 256; //MAX_WORK_GROUP_SIZE may too large
-+        cl_uint j, maxDimSize = 64 /* from 64? */, maxGroupSize = 256; //MAX_WORK_GROUP_SIZE may too large
-         size_t realGroupSize = 1;
-         for (i = 0; i < work_dim; i++) {
-           for (j = maxDimSize; j > 1; j--) {
---- a/src/cl_enqueue.c	2017-09-22 10:05:22.000000000 +0200
-+++ b/src/cl_enqueue.c	2020-03-24 18:30:12.031479833 +0100
-@@ -494,7 +494,7 @@
- cl_int cl_enqueue_svm_free(enqueue_data *data, cl_int status) {
-   int i;
-   void **pointers = data->pointers;
--  uint num_svm_ptrs = data->size;
-+  cl_uint num_svm_ptrs = data->size;
-   cl_int err = CL_SUCCESS;
- 
-   if (status != CL_COMPLETE)
diff --git a/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch b/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
deleted file mode 100644
index 8de9e6e2f093..000000000000
--- a/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
+++ /dev/null
@@ -1,134 +0,0 @@
-From e1b2419a0008e38ef2d9d255d9e9c74e9fba084b Mon Sep 17 00:00:00 2001
-From: "Rebecca N. Palmer" <rebecca_palmer@zoho.com>
-Date: Sat, 21 Jul 2018 20:05:54 +0100
-Subject: Add preliminary LLVM 7 support
-
-This is preliminary because LLVM 7 has not been released yet:
-it was tested with the snapshot from Debian experimental (svn336894).
-
-1.Change linking order, as clangCodeGen now links to clangFrontend
-2.Pass references not pointers to WriteBitcodeToFile and CloneModule
-3.Add the headers that LoopSimplifyID, LCSSAID and
-some create*Pass have moved to
-4.Define our DEBUG whether or not we just undefined LLVM's
-(theirs is now LLVM_DEBUG, but we never actually use it)
-
-Signed-off-by: Rebecca N. Palmer <rebecca_palmer@zoho.com>
-Reviewed-by: Yang Rong <rong.r.yang@intel.com>
----
- CMake/FindLLVM.cmake                     | 2 +-
- backend/src/backend/gen_program.cpp      | 8 ++++++++
- backend/src/backend/program.cpp          | 4 ++++
- backend/src/llvm/ExpandLargeIntegers.cpp | 2 +-
- backend/src/llvm/llvm_bitcode_link.cpp   | 4 ++++
- backend/src/llvm/llvm_includes.hpp       | 4 ++++
- 6 files changed, 22 insertions(+), 2 deletions(-)
-
-diff --git a/CMake/FindLLVM.cmake b/CMake/FindLLVM.cmake
-index 5457f24..f882589 100644
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -113,10 +113,10 @@ macro(add_one_lib name)
- endmacro()
- 
- #Assume clang lib path same as llvm lib path
-+add_one_lib("clangCodeGen")
- add_one_lib("clangFrontend")
- add_one_lib("clangSerialization")
- add_one_lib("clangDriver")
--add_one_lib("clangCodeGen")
- add_one_lib("clangSema")
- add_one_lib("clangStaticAnalyzerFrontend")
- add_one_lib("clangStaticAnalyzerCheckers")
-diff --git a/backend/src/backend/gen_program.cpp b/backend/src/backend/gen_program.cpp
-index 274c99c..4159234 100644
---- a/backend/src/backend/gen_program.cpp
-+++ b/backend/src/backend/gen_program.cpp
-@@ -454,7 +454,11 @@ namespace gbe {
- #ifdef GBE_COMPILER_AVAILABLE
-       std::string str;
-       llvm::raw_string_ostream OS(str);
-+#if LLVM_VERSION_MAJOR >= 7
-+      llvm::WriteBitcodeToFile(*((llvm::Module*)prog->module), OS);
-+#else
-       llvm::WriteBitcodeToFile((llvm::Module*)prog->module, OS);
-+#endif
-       std::string& bin_str = OS.str();
-       int llsz = bin_str.size();
-       *binary = (char *)malloc(sizeof(char) * (llsz+1) );
-@@ -545,7 +549,11 @@ namespace gbe {
-                                     &modRef);
-         src = llvm::unwrap(modRef);
-       }
-+#if LLVM_VERSION_MAJOR >= 7
-+      llvm::Module* clone = llvm::CloneModule(*src).release();
-+#else
-       llvm::Module* clone = llvm::CloneModule(src).release();
-+#endif
-       if (LLVMLinkModules2(wrap(dst), wrap(clone))) {
- #elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-       if (LLVMLinkModules(wrap(dst), wrap(src), LLVMLinkerPreserveSource_Removed, &errMsg)) {
-diff --git a/backend/src/backend/program.cpp b/backend/src/backend/program.cpp
-index c37c595..b36f7b4 100644
---- a/backend/src/backend/program.cpp
-+++ b/backend/src/backend/program.cpp
-@@ -794,7 +794,11 @@ namespace gbe {
-       llvm::raw_fd_ostream ostream (dumpSPIRBinaryName.c_str(),
-                                     err, llvm::sys::fs::F_None);
-       if (!err)
-+#if LLVM_VERSION_MAJOR<7
-         llvm::WriteBitcodeToFile(*out_module, ostream);
-+#else
-+        llvm::WriteBitcodeToFile(**out_module, ostream);
-+#endif
-     }
- #endif
-     return true;
-diff --git a/backend/src/llvm/ExpandLargeIntegers.cpp b/backend/src/llvm/ExpandLargeIntegers.cpp
-index 8515dc1..4aec44e 100644
---- a/backend/src/llvm/ExpandLargeIntegers.cpp
-+++ b/backend/src/llvm/ExpandLargeIntegers.cpp
-@@ -99,8 +99,8 @@ using namespace llvm;
- 
- #ifdef DEBUG
-   #undef DEBUG
--  #define DEBUG(...)
- #endif
-+#define DEBUG(...)
- // Break instructions up into no larger than 64-bit chunks.
- static const unsigned kChunkBits = 64;
- static const unsigned kChunkBytes = kChunkBits / CHAR_BIT;
-diff --git a/backend/src/llvm/llvm_bitcode_link.cpp b/backend/src/llvm/llvm_bitcode_link.cpp
-index ef56e4c..4c3e20e 100644
---- a/backend/src/llvm/llvm_bitcode_link.cpp
-+++ b/backend/src/llvm/llvm_bitcode_link.cpp
-@@ -340,7 +340,11 @@ namespace gbe
-     /* We use beignet's bitcode as dst because it will have a lot of
-        lazy functions which will not be loaded. */
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 39
-+#if LLVM_VERSION_MAJOR >= 7
-+    llvm::Module * linked_module = llvm::CloneModule(*(llvm::Module*)mod).release();
-+#else
-     llvm::Module * linked_module = llvm::CloneModule((llvm::Module*)mod).release();
-+#endif
-     if(LLVMLinkModules2(wrap(clonedLib), wrap(linked_module))) {
- #else
-     char* errorMsg;
-diff --git a/backend/src/llvm/llvm_includes.hpp b/backend/src/llvm/llvm_includes.hpp
-index 184553a..ffccf02 100644
---- a/backend/src/llvm/llvm_includes.hpp
-+++ b/backend/src/llvm/llvm_includes.hpp
-@@ -89,6 +89,10 @@
- #include "llvm/CodeGen/IntrinsicLowering.h"
- 
- #include "llvm/Transforms/Scalar.h"
-+#if LLVM_VERSION_MAJOR >= 7
-+#include "llvm/Transforms/Utils.h"
-+#include "llvm/Transforms/InstCombine/InstCombine.h"
-+#endif
- #include "llvm/MC/MCAsmInfo.h"
- #include "llvm/MC/MCContext.h"
- #include "llvm/MC/MCInstrInfo.h"
--- 
-cgit v1.1
-
diff --git a/srcpkgs/beignet/patches/llvm06.patch b/srcpkgs/beignet/patches/llvm06.patch
deleted file mode 100644
index 3389e66c82df..000000000000
--- a/srcpkgs/beignet/patches/llvm06.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-Source: Arch Linux
-Upstream: unknown
-Reason: fixes llvm6 compilation
-
---- a/backend/src/llvm/llvm_to_gen.cpp	2017-10-24 09:04:48.000000000 +0300
-+++ b/backend/src/llvm/llvm_to_gen.cpp	2018-03-16 16:08:54.669963824 +0200
-@@ -322,7 +322,11 @@ namespace gbe
-     DataLayout DL(&mod);
-     
-     gbeDiagnosticContext dc;
-+#if LLVM_VERSION_MAJOR >= 6
-+    mod.getContext().setDiagnosticHandlerCallBack(&gbeDiagnosticHandler,&dc);
-+#else
-     mod.getContext().setDiagnosticHandler(&gbeDiagnosticHandler,&dc);
-+#endif
- 
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-     mod.setDataLayout(DL);
---- a/backend/src/llvm/llvm_unroll.cpp	2017-10-24 09:04:48.000000000 +0300
-+++ b/backend/src/llvm/llvm_unroll.cpp	2018-03-16 16:09:47.736403557 +0200
-@@ -205,7 +205,9 @@ namespace gbe {
-           if (parentTripCount != 0 && currTripCount * parentTripCount > 32) {
-             //Don't change the unrollID if doesn't force unroll.
-             //setUnrollID(parentL, false);
--#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-+#if LLVM_VERSION_MAJOR >= 6
-+            loopInfo.erase(parentL);
-+#elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-             loopInfo.markAsRemoved(parentL);
- #else
-             LPM.deleteLoopFromQueue(parentL);
-Only in Beignet-1.3.2-Source: build
-
diff --git a/srcpkgs/beignet/patches/llvm08.patch b/srcpkgs/beignet/patches/llvm08.patch
deleted file mode 100644
index a0c5e7a7c4f7..000000000000
--- a/srcpkgs/beignet/patches/llvm08.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 75c152599a7c1739e6dadcdb9b377acf7e44d9cf Mon Sep 17 00:00:00 2001
-From: Jan Beich <jbeich@FreeBSD.org>
-Date: Wed, 30 Jan 2019 12:42:34 +0000
-Subject: [PATCH] lang/beignet: unbreak with llvm80
-
-Regressed by https://github.com/llvm/llvm-project/commit/721d95713a9e
-
-unable to load /usr/local/lib/beignet//libgbeinterp.so which is part of the driver, please check!
-ld-elf.so.1: /usr/local/lib/beignet//libgbeinterp.so: Undefined symbol "_ZN4llvm24DisableABIBreakingChecksE"
-
-Regressed by https://github.com/llvm/llvm-project/commit/4a2d58e16acc
-
-backend/src/llvm/llvm_gen_backend.cpp:3076:5: error:
-      unknown type name 'TerminatorInst'
-    TerminatorInst *term = bb->getTerminator();
-    ^
-backend/src/llvm/llvm_gen_backend.cpp:3083:5: error:
-      unknown type name 'TerminatorInst'
-    TerminatorInst *term = bb->getTerminator();
-    ^
-
---- a/backend/src/CMakeLists.txt	2017-09-22 08:05:22 UTC
-+++ b/backend/src/CMakeLists.txt
-@@ -168,6 +168,7 @@ add_dependencies(gbe beignet_bitcode)
- endif (NOT (USE_STANDALONE_GBE_COMPILER STREQUAL "true"))
- 
- add_library(gbeinterp SHARED gbe_bin_interpreter.cpp)
-+target_link_libraries(gbeinterp ${LLVM_MODULE_LIBS})
- 
- if (LLVM_VERSION_NODOT VERSION_EQUAL 34)
-   find_library(TERMINFO NAMES tinfo ncurses)
---- a/backend/src/llvm/llvm_gen_backend.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -3073,14 +3073,22 @@ namespace gbe
- 
- 
-   static unsigned getChildNo(BasicBlock *bb) {
-+#if LLVM_VERSION_MAJOR < 8
-     TerminatorInst *term = bb->getTerminator();
-+#else
-+    Instruction *term = bb->getTerminator();
-+#endif
-     return term->getNumSuccessors();
-   }
- 
-   // return NULL if index out-range of children number
-   static BasicBlock *getChildPossible(BasicBlock *bb, unsigned index) {
- 
-+#if LLVM_VERSION_MAJOR < 8
-     TerminatorInst *term = bb->getTerminator();
-+#else
-+    Instruction *term = bb->getTerminator();
-+#endif
-     unsigned childNo = term->getNumSuccessors();
-     BasicBlock *child = NULL;
-     if(index < childNo) {
diff --git a/srcpkgs/beignet/patches/llvm09.patch b/srcpkgs/beignet/patches/llvm09.patch
deleted file mode 100644
index acaeceabb6dd..000000000000
--- a/srcpkgs/beignet/patches/llvm09.patch
+++ /dev/null
@@ -1,111 +0,0 @@
-Source: FreeBSD + q66
-
-Mostly FreeBSD other than FindLLVM.cmake changes.
-Linking against clang-cpp does not work for us.
-
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -140,6 +140,7 @@ add_one_lib("clangStaticAnalyzerCore")
- add_one_lib("clangAnalysis")
- add_one_lib("clangEdit")
- add_one_lib("clangAST")
-+add_one_lib("clangASTMatchers")
- add_one_lib("clangParse")
- add_one_lib("clangSema")
- add_one_lib("clangLex")
---- a/backend/src/llvm/llvm_intrinsic_lowering.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_intrinsic_lowering.cpp
-@@ -77,7 +77,11 @@ namespace gbe {
-         std::vector<Type *> ParamTys;
-         for (Value** I = ArgBegin; I != ArgEnd; ++I)
-           ParamTys.push_back((*I)->getType());
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+        FunctionCallee FCache = M->getOrInsertFunction(NewFn,
-+#else
-         Constant* FCache = M->getOrInsertFunction(NewFn,
-+#endif
-                                         FunctionType::get(RetTy, ParamTys, false));
- 
-         IRBuilder<> Builder(CI->getParent(), BasicBlock::iterator(CI));
---- a/backend/src/llvm/llvm_sampler_fix.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp
-@@ -82,7 +82,11 @@ namespace gbe {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-           Module *M = I->getParent()->getParent()->getParent();
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+          FunctionCallee samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#endif
- #else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType(), nullptr);
- #endif
-@@ -124,7 +128,11 @@ namespace gbe {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-           Module *M = I->getParent()->getParent()->getParent();
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+          FunctionCallee samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#endif
- #else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType(), nullptr);
- #endif
---- a/backend/src/llvm/llvm_profiling.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_profiling.cpp
-@@ -163,10 +163,18 @@ namespace gbe
-       // __gen_ocl_store_timestamp(int nth, int type);
-       Value *Args[2] = {ConstantInt::get(intTy, pointNum++), ConstantInt::get(intTy, profilingType)};
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+      builder->CreateCall(module->getOrInsertFunction(
-+#else
-       builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-+#endif
-               "__gen_ocl_calc_timestamp", Type::getVoidTy(module->getContext()),
-               IntegerType::getInt32Ty(module->getContext()),
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+              IntegerType::getInt32Ty(module->getContext())),
-+#else
-               IntegerType::getInt32Ty(module->getContext()))),
-+#endif
-               ArrayRef<Value*>(Args));
- #else
-       builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-@@ -185,10 +193,18 @@ namespace gbe
-     Value *Args2[2] = {profilingBuf, ConstantInt::get(intTy, profilingType)};
- 
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+    builder->CreateCall(module->getOrInsertFunction(
-+#else
-     builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-+#endif
-             "__gen_ocl_store_profiling", Type::getVoidTy(module->getContext()),
-             ptrTy,
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+            IntegerType::getInt32Ty(module->getContext())),
-+#else
-             IntegerType::getInt32Ty(module->getContext()))),
-+#endif
-             ArrayRef<Value*>(Args2));
- #else
-     builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
---- a/backend/src/llvm/llvm_device_enqueue.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_device_enqueue.cpp
-@@ -398,8 +398,13 @@ namespace gbe {
-               std::vector<Type *> ParamTys;
-               for (Value** iter = args.begin(); iter != args.end(); ++iter)
-                 ParamTys.push_back((*iter)->getType());
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+              CallInst* newCI = builder.CreateCall(mod->getOrInsertFunction(
-+                              "__gen_enqueue_kernel_slm", FunctionType::get(intTy, ParamTys, false)), args);
-+#else
-               CallInst* newCI = builder.CreateCall(cast<llvm::Function>(mod->getOrInsertFunction(
-                               "__gen_enqueue_kernel_slm", FunctionType::get(intTy, ParamTys, false))), args);
-+#endif
-               CI->replaceAllUsesWith(newCI);
-               deadInsnSet.insert(CI);
-             }
diff --git a/srcpkgs/beignet/patches/llvm10.patch b/srcpkgs/beignet/patches/llvm10.patch
deleted file mode 100644
index 8aafe48a240d..000000000000
--- a/srcpkgs/beignet/patches/llvm10.patch
+++ /dev/null
@@ -1,347 +0,0 @@
-diff --git CMake/FindLLVM.cmake CMake/FindLLVM.cmake
-index 0a59e47..6e90923 100644
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -104,28 +104,16 @@ string(REGEX REPLACE " *\n" "" LLVM_SYSTEM_LIBS ${LLVM_SYSTEM_LIBS_ORIG})
- endif (LLVM_SYSTEM_LIBS_ORIG)
- endif (LLVM_VERSION_NODOT VERSION_GREATER 34)
- 
-+#something harmless because whitespace at start is an error
-+set(CLANG_LIBRARIES "-ldl")
- macro(add_one_lib name)
-   FIND_LIBRARY(CLANG_LIB
-     NAMES ${name}
-     PATHS ${LLVM_LIBRARY_DIR} NO_DEFAULT_PATH)
--  set(CLANG_LIBRARIES ${CLANG_LIBRARIES} ${CLANG_LIB})
-+  set(CLANG_LIBRARIES "${CLANG_LIBRARIES} ${CLANG_LIB}")
-+  message(STATUS "clanglibs name ${name} this ${CLANG_LIB} all ${CLANG_LIBRARIES} ")
- 	unset(CLANG_LIB CACHE)
- endmacro()
- 
- #Assume clang lib path same as llvm lib path
--add_one_lib("clangCodeGen")
--add_one_lib("clangFrontend")
--add_one_lib("clangSerialization")
--add_one_lib("clangDriver")
--add_one_lib("clangSema")
--add_one_lib("clangStaticAnalyzerFrontend")
--add_one_lib("clangStaticAnalyzerCheckers")
--add_one_lib("clangStaticAnalyzerCore")
--add_one_lib("clangAnalysis")
--add_one_lib("clangEdit")
--add_one_lib("clangAST")
--add_one_lib("clangASTMatchers")
--add_one_lib("clangParse")
--add_one_lib("clangSema")
--add_one_lib("clangLex")
--add_one_lib("clangBasic")
-+add_one_lib("clang-cpp")
-diff --git CMakeLists.txt CMakeLists.txt
-index c11acbb..08f427d 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -79,7 +79,7 @@ elseif (COMPILER STREQUAL "CLANG")
- elseif (COMPILER STREQUAL "ICC")
-   set (CMAKE_C_CXX_FLAGS "${CMAKE_C_CXX_FLAGS}  -wd2928 -Wall -fPIC -fstrict-aliasing -fp-model fast -msse4.1 -Wl,-E")
- endif ()
--set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
-+set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof")
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
- set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
- set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
-diff --git backend/src/backend/program.cpp backend/src/backend/program.cpp
-index b36f7b4..e666031 100644
---- a/backend/src/backend/program.cpp
-+++ b/backend/src/backend/program.cpp
-@@ -694,9 +694,9 @@ namespace gbe {
- #endif
-                 );
- 
-+    llvm::cl::ResetAllOptionOccurrences();
-     clang::CompilerInvocation::CreateFromArgs(*CI,
--                                              &args[0],
--                                              &args[0] + args.size(),
-+                                              clang::ArrayRef<const char*>(args),
-                                               Diags);
-     // Create the compiler instance
-     clang::CompilerInstance Clang;
-@@ -1242,8 +1242,7 @@ EXTEND_QUOTE:
-       // Create the compiler invocation
-       std::unique_ptr<clang::CompilerInvocation> CI(new clang::CompilerInvocation);
-       return clang::CompilerInvocation::CreateFromArgs(*CI,
--                                                       &args[0],
--                                                       &args[0] + args.size(),
-+                                                       clang::ArrayRef<const char*>(args),
-                                                        Diags);
-     }
- #endif
-diff --git backend/src/llvm/llvm_gen_backend.cpp backend/src/llvm/llvm_gen_backend.cpp
-index c6fc30d..82441d8 100644
---- a/backend/src/llvm/llvm_gen_backend.cpp
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -575,10 +575,12 @@ namespace gbe
-         has_errors(false),
-         legacyMode(true)
-     {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-       initializeLoopInfoWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeLoopInfoPass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-       pass = PASS_EMIT_REGISTERS;
-     }
-diff --git backend/src/llvm/llvm_gen_backend.hpp backend/src/llvm/llvm_gen_backend.hpp
-index b4715b1..8e74f7a 100644
---- a/backend/src/llvm/llvm_gen_backend.hpp
-+++ b/backend/src/llvm/llvm_gen_backend.hpp
-@@ -130,10 +130,10 @@ namespace gbe
-   llvm::FunctionPass *createGenPass(ir::Unit &unit);
- 
-   /*! Remove the GEP instructions */
--  llvm::BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit);
-+  llvm::FunctionPass *createRemoveGEPPass(const ir::Unit &unit);
- 
-   /*! Merge load/store if possible */
--  llvm::BasicBlockPass *createLoadStoreOptimizationPass();
-+  llvm::FunctionPass *createLoadStoreOptimizationPass();
- 
-   /*! Scalarize all vector op instructions */
-   llvm::FunctionPass* createScalarizePass();
-@@ -141,7 +141,7 @@ namespace gbe
-   llvm::ModulePass* createBarrierNodupPass(bool);
- 
-   /*! Convert the Intrinsic call to gen function */
--  llvm::BasicBlockPass *createIntrinsicLoweringPass();
-+  llvm::FunctionPass *createIntrinsicLoweringPass();
- 
-   /*! Passer the printf function call. */
-   llvm::FunctionPass* createPrintfParserPass(ir::Unit &unit);
-diff --git backend/src/llvm/llvm_intrinsic_lowering.cpp backend/src/llvm/llvm_intrinsic_lowering.cpp
-index 94f0ce6..b5539e9 100644
---- a/backend/src/llvm/llvm_intrinsic_lowering.cpp
-+++ b/backend/src/llvm/llvm_intrinsic_lowering.cpp
-@@ -29,12 +29,12 @@
- using namespace llvm;
- 
- namespace gbe {
--    class InstrinsicLowering : public BasicBlockPass
-+    class InstrinsicLowering : public FunctionPass
-     {
-     public:
-       static char ID;
-       InstrinsicLowering() :
--        BasicBlockPass(ID) {}
-+        FunctionPass(ID) {}
- 
-       void getAnalysisUsage(AnalysisUsage &AU) const {
- 
-@@ -93,9 +93,9 @@ namespace gbe {
-         CI->eraseFromParent();
-         return NewCI;
-       }
--      virtual bool runOnBasicBlock(BasicBlock &BB)
-+      virtual bool runOnFunction(Function &F)
-       {
--        bool changedBlock = false;
-+        for (BasicBlock &BB : F) {
-         Module *M = BB.getParent()->getParent();
- 
-         DataLayout TD(M);
-@@ -159,13 +159,14 @@ namespace gbe {
-             }
-           }
-         }
--        return changedBlock;
-+        }
-+        return true;
-       }
-     };
- 
-     char InstrinsicLowering::ID = 0;
- 
--    BasicBlockPass *createIntrinsicLoweringPass() {
-+    FunctionPass *createIntrinsicLoweringPass() {
-       return new InstrinsicLowering();
-     }
- } // end namespace
-diff --git backend/src/llvm/llvm_loadstore_optimization.cpp backend/src/llvm/llvm_loadstore_optimization.cpp
-index 5aa38be..e314302 100644
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
-@@ -26,13 +26,13 @@
- 
- using namespace llvm;
- namespace gbe {
--  class GenLoadStoreOptimization : public BasicBlockPass {
-+  class GenLoadStoreOptimization : public FunctionPass {
- 
-   public:
-     static char ID;
-     ScalarEvolution *SE;
-     const DataLayout *TD;
--    GenLoadStoreOptimization() : BasicBlockPass(ID) {}
-+    GenLoadStoreOptimization() : FunctionPass(ID) {}
- 
-     void getAnalysisUsage(AnalysisUsage &AU) const {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-@@ -45,7 +45,9 @@ namespace gbe {
-       AU.setPreservesCFG();
-     }
- 
--    virtual bool runOnBasicBlock(BasicBlock &BB) {
-+    virtual bool runOnFunction(Function &F) {
-+        bool changedAnyBlock = false;
-+        for (BasicBlock &BB : F) {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-       SE = &getAnalysis<ScalarEvolutionWrapperPass>().getSE();
- #else
-@@ -59,7 +61,9 @@ namespace gbe {
-       #else
-         TD = getAnalysisIfAvailable<DataLayout>();
-       #endif
--      return optimizeLoadStore(BB);
-+           changedAnyBlock = optimizeLoadStore(BB) | changedAnyBlock;
-+        }
-+        return changedAnyBlock;
-     }
-     Type    *getValueType(Value *insn);
-     Value   *getPointerOperand(Value *I);
-@@ -148,7 +152,7 @@ namespace gbe {
-       values.push_back(merged[i]);
-     }
-     LoadInst *ld = cast<LoadInst>(merged[0]);
--    unsigned align = ld->getAlignment();
-+    MaybeAlign align = ld->getAlign();
-     unsigned addrSpace = ld->getPointerAddressSpace();
-     // insert before first load
-     Builder.SetInsertPoint(ld);
-@@ -231,7 +235,7 @@ namespace gbe {
- 
-     unsigned addrSpace = st->getPointerAddressSpace();
- 
--    unsigned align = st->getAlignment();
-+    MaybeAlign align = st->getAlign();
-     // insert before the last store
-     Builder.SetInsertPoint(merged[size-1]);
- 
-@@ -325,7 +329,7 @@ namespace gbe {
-     return changed;
-   }
- 
--  BasicBlockPass *createLoadStoreOptimizationPass() {
-+  FunctionPass *createLoadStoreOptimizationPass() {
-     return new GenLoadStoreOptimization();
-   }
- };
-diff --git backend/src/llvm/llvm_passes.cpp backend/src/llvm/llvm_passes.cpp
-index 10752a3..b8f2282 100644
---- a/backend/src/llvm/llvm_passes.cpp
-+++ b/backend/src/llvm/llvm_passes.cpp
-@@ -37,7 +37,7 @@
- #include "sys/map.hpp"
- 
- using namespace llvm;
--
-+template class cfg::Update<BasicBlock *>;
- namespace gbe
- {
-   bool isKernelFunction(const llvm::Function &F) {
-@@ -219,13 +219,13 @@ namespace gbe
-     return offset;
-   }
- 
--  class GenRemoveGEPPasss : public BasicBlockPass
-+  class GenRemoveGEPPasss : public FunctionPass
-   {
- 
-    public:
-     static char ID;
-     GenRemoveGEPPasss(const ir::Unit &unit) :
--      BasicBlockPass(ID),
-+      FunctionPass(ID),
-       unit(unit) {}
-     const ir::Unit &unit;
-     void getAnalysisUsage(AnalysisUsage &AU) const {
-@@ -242,16 +242,18 @@ namespace gbe
- 
-     bool simplifyGEPInstructions(GetElementPtrInst* GEPInst);
- 
--    virtual bool runOnBasicBlock(BasicBlock &BB)
-+    virtual bool runOnFunction(Function &F)
-     {
--      bool changedBlock = false;
-+      bool changedAnyBlock = false;
-+        for (BasicBlock &BB : F) {
-       iplist<Instruction>::iterator I = BB.getInstList().begin();
-       for (auto nextI = I, E = --BB.getInstList().end(); I != E; I = nextI) {
-         iplist<Instruction>::iterator I = nextI++;
-         if(GetElementPtrInst* gep = dyn_cast<GetElementPtrInst>(&*I))
--          changedBlock = (simplifyGEPInstructions(gep) || changedBlock);
-+          changedAnyBlock = (simplifyGEPInstructions(gep) | changedAnyBlock);
-       }
--      return changedBlock;
-+        }
-+      return changedAnyBlock;
-     }
-   };
- 
-@@ -367,7 +369,7 @@ namespace gbe
-     return true;
-   }
- 
--  BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit) {
-+  FunctionPass *createRemoveGEPPass(const ir::Unit &unit) {
-     return new GenRemoveGEPPasss(unit);
-   }
- } /* namespace gbe */
-diff --git backend/src/llvm/llvm_sampler_fix.cpp backend/src/llvm/llvm_sampler_fix.cpp
-index 2a097c8..863be6d 100644
---- a/backend/src/llvm/llvm_sampler_fix.cpp
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp
-@@ -33,10 +33,12 @@ namespace gbe {
-   class SamplerFix : public FunctionPass {
-   public:
-     SamplerFix() : FunctionPass(ID) {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
-       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-     }
- 
-diff --git backend/src/llvm/llvm_scalarize.cpp backend/src/llvm/llvm_scalarize.cpp
-index e9a2a66..e9d2ee4 100644
---- a/backend/src/llvm/llvm_scalarize.cpp
-+++ b/backend/src/llvm/llvm_scalarize.cpp
-@@ -96,10 +96,12 @@ namespace gbe {
- 
-     Scalarize() : FunctionPass(ID)
-     {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
-       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-     }
- 
-diff --git utests/CMakeLists.txt utests/CMakeLists.txt
-index 300d87a..64179c7 100644
---- a/utests/CMakeLists.txt
-+++ b/utests/CMakeLists.txt
-@@ -26,8 +26,8 @@ if (NOT NOT_BUILD_STAND_ALONE_UTEST)
-   # Threads
-   Find_Package(Threads)
- 
--  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
--  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
-+  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof -ffloat-store -fno-strict-aliasing")
-+  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS} -ffloat-store -fno-strict-aliasing") #compiler_{degrees,radians,function_argument2} use equality comparison of floats, compiler_long_bitcast uses aliasing
-   set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
-   set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
-   set (CMAKE_CXX_FLAGS_MINSIZEREL     "-Os -DNDEBUG -DGBE_DEBUG=0")
diff --git a/srcpkgs/beignet/patches/llvm11.patch b/srcpkgs/beignet/patches/llvm11.patch
deleted file mode 100644
index 2c3a4278943c..000000000000
--- a/srcpkgs/beignet/patches/llvm11.patch
+++ /dev/null
@@ -1,937 +0,0 @@
-Source: Snektron
-
-There were a few changes required for LLVM 11:
-* llvm::StringRef requires .str(), implicit conversion was removed
-* llvm::CallSite was removed, but the required methods are available on llvm::CallInst
-* VectorTyID was split into FixedVectorTyID and ScalableVectorTyID, FixedVectorTyID was used
-* CallInst::getCalledValue() was renamed to CallInst::getCalledOperand()
-* Implicit conversion from MaybeAlign to Align was removed, so MaybeAlign::valueOrOne was used instead.
-
---- a/backend/src/llvm/StripAttributes.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/StripAttributes.cpp	2020-11-09 19:04:19.641897141 +0100
-@@ -107,9 +107,8 @@
-        BB != E; ++BB) {
-     for (BasicBlock::iterator Inst = BB->begin(), E = BB->end();
-          Inst != E; ++Inst) {
--      CallSite Call(&*Inst);
--      if (Call)
--        Call.setCallingConv(CallingConv::C);
-+      if (CallInst* callInst = dyn_cast<CallInst>(&*Inst))
-+        callInst->setCallingConv(CallingConv::C);
-     }
-   }
-
---- a/backend/src/llvm/llvm_bitcode_link.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_bitcode_link.cpp	2020-11-09 17:04:09.633753428 +0100
-@@ -98,7 +98,7 @@
-         if (callFunc && callFunc->getIntrinsicID() != 0)
-           continue;
-
--        std::string fnName = call->getCalledValue()->stripPointerCasts()->getName();
-+        std::string fnName = call->getCalledOperand()->stripPointerCasts()->getName().str();
-
-         if (!MFS.insert(fnName).second) {
-           continue;
---- a/backend/src/llvm/llvm_device_enqueue.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_device_enqueue.cpp	2020-11-09 19:01:49.201915008 +0100
-@@ -45,7 +45,7 @@
-       return NULL;
-
-     /* This is a fake, to check the function bitcast is for block or not */
--    std::string fnName = Fn->getName();
-+    std::string fnName = Fn->getName().str();
-     if(fnName.find("_invoke") == std::string::npos)
-       return NULL;
-
-@@ -119,18 +119,18 @@
-       ParamTys.push_back(ty);
-     }
-     FunctionType* NewFT = FunctionType::get(Fn->getReturnType(), ParamTys, false);
--    Function* NewFn = Function::Create(NewFT, Function::ExternalLinkage, Fn->getName());
-+    Function* NewFn = Function::Create(NewFT, Function::ExternalLinkage, Fn->getName().str());
-     SmallVector<ReturnInst*, 8> Returns;
-
-     Function::arg_iterator NewFnArgIt = NewFn->arg_begin();
-     for (Function::arg_iterator I = Fn->arg_begin(), E = Fn->arg_end(); I != E; ++I) {
--      std::string ArgName = I->getName();
-+      std::string ArgName = I->getName().str();
-       NewFnArgIt->setName(ArgName);
-       VMap[&*I] = &(*NewFnArgIt++);
-     }
-     CloneFunctionInto(NewFn, Fn, VMap, /*ModuleLevelChanges=*/true, Returns);
-
--    Fn->setName("__d" + Fn->getName());
-+    Fn->setName("__d" + Fn->getName().str());
-     mod->getFunctionList().push_back(NewFn);
-     //mod->getOrInsertFunction(NewFn->getName(), NewFn->getFunctionType(),
-     //                         NewFn->getAttributes());
-@@ -147,7 +147,7 @@
-       argTypeNames.push_back(llvm::MDString::get(Context, "char*"));
-       argBaseTypeNames.push_back(llvm::MDString::get(Context, "char*"));
-       argTypeQuals.push_back(llvm::MDString::get(Context, ""));
--      argNames.push_back(llvm::MDString::get(Context, I->getName()));
-+      argNames.push_back(llvm::MDString::get(Context, I->getName().str()));
-     }
-
-     //If run to here, llvm version always > 3.9, add the version check just for build.
-@@ -198,7 +198,7 @@
-            * invoke pointer to store the index in the unit's block functions index.*/
-           Function *Fn = dyn_cast<Function>(bt->getOperand(0));
-
--          std::string fnName = Fn->getName();
-+          std::string fnName = Fn->getName().str();
-           int index = -1;
-           for(size_t i=0; i<unit.blockFuncs.size(); i++) {
-             if(unit.blockFuncs[i] == fnName) {
-@@ -241,7 +241,7 @@
-             //unnamed call function, parse the use to find the define of called function
-             SmallVector<Value*, 16> args(CI->op_begin(), CI->op_end()-1);
-
--            Value *v = CI->getCalledValue();
-+            Value *v = CI->getCalledOperand();
-             BitCastInst* bt = dyn_cast<BitCastInst>(v);
-             if(bt == NULL)
-               continue;
-@@ -316,7 +316,7 @@
-                   ConstantExpr *expr = dyn_cast<ConstantExpr>(c->getOperand(3));
-                   BitCastInst *bt = dyn_cast<BitCastInst>(expr->getAsInstruction());
-                   Function* f = dyn_cast<Function>(bt->getOperand(0));
--                  blocks[v] = f->getName();
-+                  blocks[v] = f->getName().str();
-                 }
-               }
-
-@@ -332,7 +332,7 @@
-           } else {
-             //handle enqueue_kernel function call
-             Function *fn = CI->getCalledFunction();
--            if (fn->getName().find("enqueue_kernel") == std::string::npos)
-+            if (fn->getName().str().find("enqueue_kernel") == std::string::npos)
-               continue;
-
-             //block parameter's index, 3 or 6
-@@ -361,7 +361,7 @@
-                   ConstantExpr *expr = dyn_cast<ConstantExpr>(c->getOperand(3));
-                   BitCastInst *bt = dyn_cast<BitCastInst>(expr->getAsInstruction());
-                   Function* f = dyn_cast<Function>(bt->getOperand(0));
--                  blocks[v] = f->getName();
-+                  blocks[v] = f->getName().str();
-                 }
-               }
-             } else if(isa<AllocaInst>(block)) {
---- a/backend/src/llvm/llvm_gen_backend.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_gen_backend.cpp	2020-11-09 18:33:50.919114327 +0100
-@@ -376,7 +376,7 @@
-           GBE_ASSERT(index == 0);
-           return this->_newScalar(value, key, type, index, uniform);
-           break;
--        case Type::VectorTyID:
-+        case Type::FixedVectorTyID:
-         {
-           auto vectorType = cast<VectorType>(type);
-           auto elementType = vectorType->getElementType();
-@@ -743,20 +743,20 @@
- #undef DECL_VISIT_FN
-
-     // Emit rounding instructions from gen native function
--    void emitRoundingCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode);
-+    void emitRoundingCallInst(CallInst &I, ir::Opcode opcode);
-     // Emit unary instructions from gen native function
--    void emitUnaryCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode, ir::Type = ir::TYPE_FLOAT);
-+    void emitUnaryCallInst(CallInst &I, ir::Opcode opcode, ir::Type = ir::TYPE_FLOAT);
-     // Emit unary instructions from gen native function
--    void emitAtomicInst(CallInst &I, CallSite &CS, ir::AtomicOps opcode);
-+    void emitAtomicInst(CallInst &I, ir::AtomicOps opcode);
-     // Emit workgroup instructions
--    void emitWorkGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode);
-+    void emitWorkGroupInst(CallInst &I, ir::WorkGroupOps opcode);
-     // Emit subgroup instructions
--    void emitSubGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode);
-+    void emitSubGroupInst(CallInst &I, ir::WorkGroupOps opcode);
-     // Emit subgroup instructions
--    void emitBlockReadWriteMemInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
--    void emitBlockReadWriteImageInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-+    void emitBlockReadWriteMemInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-+    void emitBlockReadWriteImageInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-
--    uint8_t appendSampler(CallSite::arg_iterator AI);
-+    uint8_t appendSampler(User::op_iterator AI);
-     uint8_t getImageID(CallInst &I);
-
-     // These instructions are not supported at all
-@@ -1320,13 +1320,13 @@
- #endif
-
-       if(typeNameNode) {
--        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
-+        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-       }
-       if(typeBaseNameNode) {
--        llvmInfo.typeBaseName= (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString();
-+        llvmInfo.typeBaseName= (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString().str();
-       }
--      llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
--      llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString();
-+      llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-+      llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString().str();
-       bool isImage = llvmInfo.isImageType();
-       bool isPipe = llvmInfo.isPipeType();
-       if (I->getType()->isPointerTy() || isImage || isPipe) {
-@@ -1531,7 +1531,7 @@
-             EltTy = getEltType(EltTy, TypeIndex);
-         }
-
--        ir::Constant cc = unit.getConstantSet().getConstant(pointer->getName());
-+        ir::Constant cc = unit.getConstantSet().getConstant(pointer->getName().str());
-         unsigned int defOffset = cc.getOffset();
-         relocs.push_back(ir::RelocEntry(offset, defOffset + constantOffset));
-
-@@ -1546,7 +1546,7 @@
-       return;
-     }
-     if (isa<GlobalVariable>(c)) {
--      ir::Constant cc = unit.getConstantSet().getConstant(c->getName());
-+      ir::Constant cc = unit.getConstantSet().getConstant(c->getName().str());
-       unsigned int defOffset = cc.getOffset();
-
-       relocs.push_back(ir::RelocEntry(offset, defOffset));
-@@ -1609,7 +1609,7 @@
-           }
-           break;
-         }
--      case Type::TypeID::VectorTyID:
-+      case Type::TypeID::FixedVectorTyID:
-         {
-           const ConstantDataSequential *cds = dyn_cast<ConstantDataSequential>(c);
-           const VectorType *vecTy = cast<VectorType>(type);
-@@ -1936,7 +1936,7 @@
-       case Type::PointerTyID:
-         regTranslator.newScalar(value, key, 0, uniform);
-         break;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         auto vectorType = cast<VectorType>(type);
-         const uint32_t elemNum = vectorType->getNumElements();
-@@ -2395,7 +2395,7 @@
- #endif
-         }
-         if(typeNameNode) {
--          llvmInfo.typeName = (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
-+          llvmInfo.typeName = (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-           //LLVM 3.9 image's type name include access qual, don't match OpenCL spec, erase them.
-           std::vector<std::string> filters = {"__read_only ", "__write_only "};
-           for (uint32_t i = 0; i < filters.size(); i++) {
-@@ -2406,16 +2406,16 @@
-           }
-         }
-         if(typeBaseNameNode){
--          llvmInfo.typeBaseName = (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString();
-+          llvmInfo.typeBaseName = (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString().str();
-         }
-         if(accessQualNode) {
--          llvmInfo.accessQual = (cast<MDString>(accessQualNode->getOperand(opID)))->getString();
-+          llvmInfo.accessQual = (cast<MDString>(accessQualNode->getOperand(opID)))->getString().str();
-         }
-         if(typeQualNode) {
--          llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString();
-+          llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString().str();
-         }
-         if(argNameNode){
--          llvmInfo.argName = (cast<MDString>(argNameNode->getOperand(opID)))->getString();
-+          llvmInfo.argName = (cast<MDString>(argNameNode->getOperand(opID)))->getString().str();
-         }
-
-         // function arguments are uniform values.
-@@ -3010,7 +3010,7 @@
-         } else {
-           this->newRegister(const_cast<GlobalVariable*>(&v));
-           ir::Register reg = regTranslator.getScalar(const_cast<GlobalVariable*>(&v), 0);
--          ir::Constant &con = unit.getConstantSet().getConstant(v.getName());
-+          ir::Constant &con = unit.getConstantSet().getConstant(v.getName().str());
-           if (!legacyMode) {
-             ir::Register regload = ctx.reg(getFamily(getType(ctx, v.getType())));
-             ctx.LOADI(getType(ctx, v.getType()), regload, ctx.newIntegerImmediate(con.getOffset(), getType(ctx, v.getType())));
-@@ -3212,7 +3212,7 @@
-         GBE_ASSERTM(false, "Unsupported calling convention");
-     }
-
--    ctx.startFunction(F.getName());
-+    ctx.startFunction(F.getName().str());
-
-     ir::Function &fn = ctx.getFunction();
-     this->regTranslator.clear();
-@@ -3810,9 +3810,9 @@
-
-   void GenWriter::regAllocateCallInst(CallInst &I) {
-     Value *dst = &I;
--    Value *Callee = I.getCalledValue();
-+    Value *Callee = I.getCalledOperand();
-     GBE_ASSERT(ctx.getFunction().getProfile() == ir::PROFILE_OCL);
--    GBE_ASSERT(isa<InlineAsm>(I.getCalledValue()) == false);
-+    GBE_ASSERT(isa<InlineAsm>(I.getCalledOperand()) == false);
-     if(I.getNumArgOperands()) GBE_ASSERT(I.hasStructRetAttr() == false);
-
-     // We only support a small number of intrinsics right now
-@@ -3870,7 +3870,7 @@
-       }
-     }
-     // Get the name of the called function and handle it
--    const std::string fnName = Callee->stripPointerCasts()->getName();
-+    const std::string fnName = Callee->stripPointerCasts()->getName().str();
-     auto genIntrinsicID = intrinsicMap.find(fnName);
-     switch (genIntrinsicID) {
-       case GEN_OCL_GET_GROUP_ID0:
-@@ -4166,7 +4166,7 @@
-     };
-   }
-
--  void GenWriter::emitRoundingCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode) {
-+  void GenWriter::emitRoundingCallInst(CallInst &I, ir::Opcode opcode) {
-     if (I.getType()->isHalfTy()) {
-       const ir::Register src = this->getRegister(I.getOperand(0));
-       const ir::Register srcFloat = ctx.reg(ir::FAMILY_DWORD);
-@@ -4177,14 +4177,14 @@
-       ctx.F32TO16(ir::TYPE_U16, ir::TYPE_FLOAT, dst, dstFloat);
-     } else {
-       GBE_ASSERT(I.getType()->isFloatTy());
--      this->emitUnaryCallInst(I,CS,opcode);
-+      this->emitUnaryCallInst(I,opcode);
-     }
-   }
-
--  void GenWriter::emitUnaryCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
-+  void GenWriter::emitUnaryCallInst(CallInst &I, ir::Opcode opcode, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--    CallSite::arg_iterator AE = CS.arg_end();
-+    User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-     GBE_ASSERT(AI != AE);
-     const ir::Register src = this->getRegister(*AI);
-@@ -4293,9 +4293,9 @@
-     this->emitAtomicInstHelper(opcode, type, dst, llvmPtr, payloadTuple);
-   }
-
--  void GenWriter::emitAtomicInst(CallInst &I, CallSite &CS, ir::AtomicOps opcode) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitAtomicInst(CallInst &I, ir::AtomicOps opcode) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-     Value *llvmPtr = *AI;
-     ir::AddressSpace addrSpace = addressSpaceLLVMToGen(llvmPtr->getType()->getPointerAddressSpace());
-@@ -4348,7 +4348,7 @@
-     }
-   }
-
--  void GenWriter::emitWorkGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode) {
-+  void GenWriter::emitWorkGroupInst(CallInst &I, ir::WorkGroupOps opcode) {
-     ir::Function &f = ctx.getFunction();
-
-     if (f.getwgBroadcastSLM() < 0 && opcode == ir::WORKGROUP_OP_BROADCAST) {
-@@ -4378,8 +4378,8 @@
-       GBE_ASSERT(f.gettidMapSLM() >= 0);
-     }
-
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     if (opcode == ir::WORKGROUP_OP_ALL || opcode == ir::WORKGROUP_OP_ANY) {
-@@ -4391,14 +4391,14 @@
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], 3);
-       ctx.WORKGROUP(opcode, (uint32_t)f.gettidMapSLM(), getRegister(&I), srcTuple, 3, ir::TYPE_S32);
-     } else if (opcode == ir::WORKGROUP_OP_BROADCAST) {
--      int argNum = CS.arg_size();
-+      int argNum = I.arg_size();
-       std::vector<ir::Register> src(argNum);
-       for (int i = 0; i < argNum; i++) {
-         src[i] = this->getRegister(*(AI++));
-       }
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], argNum);
-       ctx.WORKGROUP(ir::WORKGROUP_OP_BROADCAST, (uint32_t)f.getwgBroadcastSLM(), getRegister(&I), srcTuple, argNum,
--          getType(ctx, (*CS.arg_begin())->getType()));
-+          getType(ctx, (*I.arg_begin())->getType()));
-     } else {
-       ConstantInt *sign = dyn_cast<ConstantInt>(AI);
-       GBE_ASSERT(sign);
-@@ -4423,9 +4423,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitSubGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitSubGroupInst(CallInst &I, ir::WorkGroupOps opcode) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     if (opcode == ir::WORKGROUP_OP_ALL || opcode == ir::WORKGROUP_OP_ANY) {
-@@ -4435,7 +4435,7 @@
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], 1);
-       ctx.SUBGROUP(opcode, getRegister(&I), srcTuple, 1, ir::TYPE_S32);
-     } else if (opcode == ir::WORKGROUP_OP_BROADCAST) {
--      int argNum = CS.arg_size();
-+      int argNum = I.arg_size();
-       GBE_ASSERT(argNum == 2);
-       std::vector<ir::Register> src(argNum);
-       for (int i = 0; i < argNum; i++) {
-@@ -4443,7 +4443,7 @@
-       }
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], argNum);
-       ctx.SUBGROUP(ir::WORKGROUP_OP_BROADCAST, getRegister(&I), srcTuple, argNum,
--          getType(ctx, (*CS.arg_begin())->getType()));
-+          getType(ctx, (*I.arg_begin())->getType()));
-     } else {
-       ConstantInt *sign = dyn_cast<ConstantInt>(AI);
-       GBE_ASSERT(sign);
-@@ -4466,9 +4466,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitBlockReadWriteMemInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitBlockReadWriteMemInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     Value *llvmPtr = *(AI++);
-@@ -4522,9 +4522,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitBlockReadWriteImageInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitBlockReadWriteImageInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     const uint8_t imageID = getImageID(I);
-@@ -4557,7 +4557,7 @@
-
-   /* append a new sampler. should be called before any reference to
-    * a sampler_t value. */
--  uint8_t GenWriter::appendSampler(CallSite::arg_iterator AI) {
-+  uint8_t GenWriter::appendSampler(User::op_iterator AI) {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-     CallInst *TC = dyn_cast<CallInst>(*AI);
-     Constant *CPV = TC ? dyn_cast<Constant>(TC->getOperand(0)) : NULL;
-@@ -4595,10 +4595,9 @@
-         const ir::Function &fn = ctx.getFunction();
-
-         // Get the function arguments
--        CallSite CS(&I);
--        CallSite::arg_iterator AI = CS.arg_begin();
-+        User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--        CallSite::arg_iterator AE = CS.arg_end();
-+        User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-         switch (F->getIntrinsicID()) {
-           case Intrinsic::stacksave:
-@@ -4764,17 +4763,17 @@
-             ctx.MAD(srcType, dst, src0, src1, src2);
-           }
-           break;
--          case Intrinsic::sqrt: this->emitUnaryCallInst(I,CS,ir::OP_SQR); break;
--          case Intrinsic::ceil: this->emitRoundingCallInst(I,CS,ir::OP_RNDU); break;
--          case Intrinsic::trunc: this->emitRoundingCallInst(I,CS,ir::OP_RNDZ); break;
--          case Intrinsic::rint: this->emitRoundingCallInst(I,CS,ir::OP_RNDE); break;
--          case Intrinsic::floor: this->emitRoundingCallInst(I,CS,ir::OP_RNDD); break;
--          case Intrinsic::sin: this->emitUnaryCallInst(I,CS,ir::OP_SIN); break;
--          case Intrinsic::cos: this->emitUnaryCallInst(I,CS,ir::OP_COS); break;
--          case Intrinsic::log2: this->emitUnaryCallInst(I,CS,ir::OP_LOG); break;
--          case Intrinsic::exp2: this->emitUnaryCallInst(I,CS,ir::OP_EXP); break;
-+          case Intrinsic::sqrt: this->emitUnaryCallInst(I,ir::OP_SQR); break;
-+          case Intrinsic::ceil: this->emitRoundingCallInst(I,ir::OP_RNDU); break;
-+          case Intrinsic::trunc: this->emitRoundingCallInst(I,ir::OP_RNDZ); break;
-+          case Intrinsic::rint: this->emitRoundingCallInst(I,ir::OP_RNDE); break;
-+          case Intrinsic::floor: this->emitRoundingCallInst(I,ir::OP_RNDD); break;
-+          case Intrinsic::sin: this->emitUnaryCallInst(I,ir::OP_SIN); break;
-+          case Intrinsic::cos: this->emitUnaryCallInst(I,ir::OP_COS); break;
-+          case Intrinsic::log2: this->emitUnaryCallInst(I,ir::OP_LOG); break;
-+          case Intrinsic::exp2: this->emitUnaryCallInst(I,ir::OP_EXP); break;
-           case Intrinsic::bswap:
--            this->emitUnaryCallInst(I,CS,ir::OP_BSWAP, getUnsignedType(ctx, I.getType())); break;
-+            this->emitUnaryCallInst(I,ir::OP_BSWAP, getUnsignedType(ctx, I.getType())); break;
-           case Intrinsic::pow:
-           {
-             const ir::Register src0 = this->getRegister(*AI); ++AI;
-@@ -4794,21 +4793,20 @@
-         }
-       } else {
-         // Get the name of the called function and handle it
--        Value *Callee = I.getCalledValue();
--        const std::string fnName = Callee->stripPointerCasts()->getName();
-+        Value *Callee = I.getCalledOperand();
-+        const std::string fnName = Callee->stripPointerCasts()->getName().str();
-         auto genIntrinsicID = intrinsicMap.find(fnName);
-
-         // Get the function arguments
--        CallSite CS(&I);
--        CallSite::arg_iterator AI = CS.arg_begin();
-+        User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--        CallSite::arg_iterator AE = CS.arg_end();
-+        User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-
-         switch (genIntrinsicID) {
--          case GEN_OCL_FBH: this->emitUnaryCallInst(I,CS,ir::OP_FBH, ir::TYPE_U32); break;
--          case GEN_OCL_FBL: this->emitUnaryCallInst(I,CS,ir::OP_FBL, ir::TYPE_U32); break;
--          case GEN_OCL_CBIT: this->emitUnaryCallInst(I,CS,ir::OP_CBIT, getUnsignedType(ctx, (*AI)->getType())); break;
-+          case GEN_OCL_FBH: this->emitUnaryCallInst(I,ir::OP_FBH, ir::TYPE_U32); break;
-+          case GEN_OCL_FBL: this->emitUnaryCallInst(I,ir::OP_FBL, ir::TYPE_U32); break;
-+          case GEN_OCL_CBIT: this->emitUnaryCallInst(I,ir::OP_CBIT, getUnsignedType(ctx, (*AI)->getType())); break;
-           case GEN_OCL_ABS:
-           {
-             const ir::Register src = this->getRegister(*AI);
-@@ -4915,8 +4913,8 @@
-             ctx.REGION(dst, src, x.getIntegerValue());
-             break;
-           }
--          case GEN_OCL_RSQ: this->emitUnaryCallInst(I,CS,ir::OP_RSQ); break;
--          case GEN_OCL_RCP: this->emitUnaryCallInst(I,CS,ir::OP_RCP); break;
-+          case GEN_OCL_RSQ: this->emitUnaryCallInst(I,ir::OP_RSQ); break;
-+          case GEN_OCL_RCP: this->emitUnaryCallInst(I,ir::OP_RCP); break;
-           case GEN_OCL_FORCE_SIMD8: ctx.setSimdWidth(8); break;
-           case GEN_OCL_FORCE_SIMD16: ctx.setSimdWidth(16); break;
-           case GEN_OCL_LBARRIER: ctx.SYNC(ir::syncLocalBarrier); break;
-@@ -4947,31 +4945,31 @@
-             break;
-           }
-           case GEN_OCL_ATOMIC_ADD0:
--          case GEN_OCL_ATOMIC_ADD1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_ADD); break;
-+          case GEN_OCL_ATOMIC_ADD1: this->emitAtomicInst(I,ir::ATOMIC_OP_ADD); break;
-           case GEN_OCL_ATOMIC_SUB0:
--          case GEN_OCL_ATOMIC_SUB1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_SUB); break;
-+          case GEN_OCL_ATOMIC_SUB1: this->emitAtomicInst(I,ir::ATOMIC_OP_SUB); break;
-           case GEN_OCL_ATOMIC_AND0:
--          case GEN_OCL_ATOMIC_AND1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_AND); break;
-+          case GEN_OCL_ATOMIC_AND1: this->emitAtomicInst(I,ir::ATOMIC_OP_AND); break;
-           case GEN_OCL_ATOMIC_OR0:
--          case GEN_OCL_ATOMIC_OR1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_OR); break;
-+          case GEN_OCL_ATOMIC_OR1: this->emitAtomicInst(I,ir::ATOMIC_OP_OR); break;
-           case GEN_OCL_ATOMIC_XOR0:
--          case GEN_OCL_ATOMIC_XOR1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_XOR); break;
-+          case GEN_OCL_ATOMIC_XOR1: this->emitAtomicInst(I,ir::ATOMIC_OP_XOR); break;
-           case GEN_OCL_ATOMIC_XCHG0:
--          case GEN_OCL_ATOMIC_XCHG1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_XCHG); break;
-+          case GEN_OCL_ATOMIC_XCHG1: this->emitAtomicInst(I,ir::ATOMIC_OP_XCHG); break;
-           case GEN_OCL_ATOMIC_INC0:
--          case GEN_OCL_ATOMIC_INC1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_INC); break;
-+          case GEN_OCL_ATOMIC_INC1: this->emitAtomicInst(I,ir::ATOMIC_OP_INC); break;
-           case GEN_OCL_ATOMIC_DEC0:
--          case GEN_OCL_ATOMIC_DEC1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_DEC); break;
-+          case GEN_OCL_ATOMIC_DEC1: this->emitAtomicInst(I,ir::ATOMIC_OP_DEC); break;
-           case GEN_OCL_ATOMIC_UMIN0:
--          case GEN_OCL_ATOMIC_UMIN1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_UMIN); break;
-+          case GEN_OCL_ATOMIC_UMIN1: this->emitAtomicInst(I,ir::ATOMIC_OP_UMIN); break;
-           case GEN_OCL_ATOMIC_UMAX0:
--          case GEN_OCL_ATOMIC_UMAX1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_UMAX); break;
-+          case GEN_OCL_ATOMIC_UMAX1: this->emitAtomicInst(I,ir::ATOMIC_OP_UMAX); break;
-           case GEN_OCL_ATOMIC_IMIN0:
--          case GEN_OCL_ATOMIC_IMIN1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_IMIN); break;
-+          case GEN_OCL_ATOMIC_IMIN1: this->emitAtomicInst(I,ir::ATOMIC_OP_IMIN); break;
-           case GEN_OCL_ATOMIC_IMAX0:
--          case GEN_OCL_ATOMIC_IMAX1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_IMAX); break;
-+          case GEN_OCL_ATOMIC_IMAX1: this->emitAtomicInst(I,ir::ATOMIC_OP_IMAX); break;
-           case GEN_OCL_ATOMIC_CMPXCHG0:
--          case GEN_OCL_ATOMIC_CMPXCHG1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_CMPXCHG); break;
-+          case GEN_OCL_ATOMIC_CMPXCHG1: this->emitAtomicInst(I,ir::ATOMIC_OP_CMPXCHG); break;
-           case GEN_OCL_GET_IMAGE_WIDTH:
-           case GEN_OCL_GET_IMAGE_HEIGHT:
-           case GEN_OCL_GET_IMAGE_DEPTH:
-@@ -5429,48 +5427,48 @@
-             ctx.WAIT();
-             break;
-           }
--          case GEN_OCL_WORK_GROUP_ALL: this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_ALL); break;
--          case GEN_OCL_WORK_GROUP_ANY: this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_ANY); break;
-+          case GEN_OCL_WORK_GROUP_ALL: this->emitWorkGroupInst(I, ir::WORKGROUP_OP_ALL); break;
-+          case GEN_OCL_WORK_GROUP_ANY: this->emitWorkGroupInst(I, ir::WORKGROUP_OP_ANY); break;
-           case GEN_OCL_WORK_GROUP_BROADCAST:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_BROADCAST); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_BROADCAST); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_ADD); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_MAX); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_MIN); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-           case GEN_OCL_SUB_GROUP_BROADCAST:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_BROADCAST); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_BROADCAST); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_ADD); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_MAX); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_MIN); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-           case GEN_OCL_LRP:
-           {
-             const ir::Register dst  = this->getRegister(&I);
-@@ -5484,69 +5482,69 @@
-             break;
-           }
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, false, 1); break;
-+            this->emitBlockReadWriteMemInst(I, false, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, false, 2); break;
-+            this->emitBlockReadWriteMemInst(I, false, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, false, 4); break;
-+            this->emitBlockReadWriteMemInst(I, false, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, false, 8); break;
-+            this->emitBlockReadWriteMemInst(I, false, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, true, 1); break;
-+            this->emitBlockReadWriteMemInst(I, true, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, true, 2); break;
-+            this->emitBlockReadWriteMemInst(I, true, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, true, 4); break;
-+            this->emitBlockReadWriteMemInst(I, true, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, true, 8); break;
-+            this->emitBlockReadWriteMemInst(I, true, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, false, 1); break;
-+            this->emitBlockReadWriteImageInst(I, false, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, false, 2); break;
-+            this->emitBlockReadWriteImageInst(I, false, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, false, 4); break;
-+            this->emitBlockReadWriteImageInst(I, false, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, false, 8); break;
-+            this->emitBlockReadWriteImageInst(I, false, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, true, 1); break;
-+            this->emitBlockReadWriteImageInst(I, true, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, true, 2); break;
-+            this->emitBlockReadWriteImageInst(I, true, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, true, 4); break;
-+            this->emitBlockReadWriteImageInst(I, true, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, true, 8); break;
-+            this->emitBlockReadWriteImageInst(I, true, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, false, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, false, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, false, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, false, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, true, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, true, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, true, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, true, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, false, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, false, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, false, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, false, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, true, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, true, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, true, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, true, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 8, ir::TYPE_U16); break;
-           case GEN_OCL_GET_PIPE:
-           case GEN_OCL_MAKE_RID:
-           case GEN_OCL_GET_RID:
---- a/backend/src/llvm/llvm_includes.hpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_includes.hpp	2020-11-09 19:00:09.955926795 +0100
-@@ -103,7 +103,6 @@
-
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
- #include "llvm/IR/Mangler.h"
--#include "llvm/IR/CallSite.h"
- #include "llvm/IR/CFG.h"
- #include "llvm/IR/InstVisitor.h"
- #include "llvm/IR/IRPrintingPasses.h"
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-11-09 19:10:37.141852308 +0100
-@@ -160,7 +160,7 @@
-     Value *vecPtr = Builder.CreateBitCast(ld->getPointerOperand(),
-                                         PointerType::get(vecTy, addrSpace));
-     LoadInst *vecValue = Builder.CreateLoad(vecPtr);
--    vecValue->setAlignment(align);
-+    vecValue->setAlignment(align.valueOrOne());
-
-     for (unsigned i = 0; i < size; ++i) {
-       Value *S = Builder.CreateExtractElement(vecValue, Builder.getInt32(i));
-@@ -251,7 +251,7 @@
-       return;
-     Value *newPtr = Builder.CreateBitCast(stPointer, PointerType::get(vecTy, addrSpace));
-     StoreInst *newST = Builder.CreateStore(parent, newPtr);
--    newST->setAlignment(align);
-+    newST->setAlignment(align.valueOrOne());
-   }
-
-   // Find the safe iterator we can point to. If reorder happens, we need to
---- a/backend/src/llvm/llvm_passes.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_passes.cpp	2020-11-09 18:48:55.997006837 +0100
-@@ -95,7 +95,7 @@
-   {
-     switch (Ty->getTypeID()) {
-       case Type::VoidTyID: NOT_SUPPORTED;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         const VectorType* VecTy = cast<VectorType>(Ty);
-         uint32_t elemNum = VecTy->getNumElements();
-@@ -138,7 +138,7 @@
-       case Type::HalfTyID:    return 16;
-       case Type::FloatTyID:   return 32;
-       case Type::DoubleTyID:  return 64;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         const VectorType* VecTy = cast<VectorType>(Ty);
-         uint32_t numElem = VecTy->getNumElements();
-@@ -184,10 +184,12 @@
-     Type *elementType = NULL;
-     if (PointerType* ptrType = dyn_cast<PointerType>(eltTy))
-       elementType = ptrType->getElementType();
--    else if(SequentialType * seqType = dyn_cast<SequentialType>(eltTy))
--      elementType = seqType->getElementType();
--    else if(CompositeType * compTy= dyn_cast<CompositeType>(eltTy))
--      elementType = compTy->getTypeAtIndex(index);
-+    else if (ArrayType * arrType = dyn_cast<ArrayType>(eltTy))
-+      elementType = arrType->getElementType();
-+    else if(VectorType * vecType = dyn_cast<VectorType>(eltTy))
-+      elementType = vecType->getElementType();
-+    else if(StructType * structType = dyn_cast<StructType>(eltTy))
-+      elementType = structType->getTypeAtIndex(index);
-     GBE_ASSERT(elementType);
-     return elementType;
-   }
---- a/backend/src/llvm/llvm_printf_parser.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_printf_parser.cpp	2020-11-09 18:57:52.618943105 +0100
-@@ -323,8 +323,7 @@
-
-   bool PrintfParser::parseOnePrintfInstruction(CallInst * call)
-   {
--    CallSite CS(call);
--    CallSite::arg_iterator CI_FMT = CS.arg_begin();
-+    User::op_iterator CI_FMT = call->arg_begin();
-     int param_num = 0;
-
-     llvm::Constant* arg0 = dyn_cast<llvm::ConstantExpr>(*CI_FMT);
-@@ -341,7 +340,7 @@
-       return false;
-     }
-
--    std::string fmt = fmt_arg->getAsCString();
-+    std::string fmt = fmt_arg->getAsCString().str();
-     if (fmt.size() == 0)
-       return false;
-
-@@ -437,8 +436,8 @@
-         if ( callFunc->getIntrinsicID() != 0)
-           continue;
-
--        Value *Callee = call->getCalledValue();
--        const std::string fnName = Callee->getName();
-+        Value *Callee = call->getCalledOperand();
-+        const std::string fnName = Callee->getName().str();
-
-         if (fnName != "__gen_ocl_printf_stub" && fnName != "__gen_ocl_puts_stub")
-           continue;
-@@ -582,7 +581,7 @@
-             if (!fmt_arg || !fmt_arg->isCString()) {
-               return false;
-             }
--            slot.state.str = fmt_arg->getAsCString();
-+            slot.state.str = fmt_arg->getAsCString().str();
-             return true;
-           }
-           case PRINTF_CONVERSION_P: {
-@@ -595,10 +594,10 @@
-
-         break;
-
--      case Type::VectorTyID: {
--        Type* vect_type = arg->getType();
--        Type* elt_type = vect_type->getVectorElementType();
--        int vec_num = vect_type->getVectorNumElements();
-+      case Type::FixedVectorTyID: {
-+        VectorType* vect_type = dyn_cast<VectorType>(arg->getType());
-+        Type* elt_type = vect_type->getElementType();
-+        int vec_num = vect_type->getNumElements();
-         bool sign = false;
-
-         if (vec_num != slot.state.vector_n) {
---- a/backend/src/llvm/llvm_profiling.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_profiling.cpp	2020-11-09 18:59:50.120929150 +0100
-@@ -35,7 +35,6 @@
- #include "llvm/IR/IRBuilder.h"
-
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
--#include "llvm/IR/CallSite.h"
- #include "llvm/IR/CFG.h"
- #else
- #include "llvm/Support/CallSite.h"
---- a/backend/src/llvm/llvm_sampler_fix.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp	2020-11-09 17:01:09.407774832 +0100
-@@ -45,8 +45,8 @@
-     bool visitCallInst(CallInst *I) {
-       if(!I)
-         return false;
--      Value *Callee = I->getCalledValue();
--      const std::string fnName = Callee->getName();
-+      Value *Callee = I->getCalledOperand();
-+      const std::string fnName = Callee->getName().str();
-       bool changed = false;
-       Type *boolTy = IntegerType::get(I->getContext(), 1);
-       Type *i32Ty = IntegerType::get(I->getContext(), 32);
-@@ -59,7 +59,7 @@
-         Value *needFixVal;
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-         CallInst *init = dyn_cast<CallInst>(I->getOperand(0));
--        if (init && init->getCalledValue()->getName().compare("__translate_sampler_initializer"))
-+        if (init && init->getCalledOperand()->getName().compare("__translate_sampler_initializer"))
-         {
-           const ConstantInt *ci = dyn_cast<ConstantInt>(init->getOperand(0));
-           uint32_t samplerInt = ci->getZExtValue();
-@@ -113,7 +113,7 @@
-         Value *needFixVal;
-  #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-         CallInst *init = dyn_cast<CallInst>(I->getOperand(0));
--        if (init && init->getCalledValue()->getName().compare("__translate_sampler_initializer"))
-+        if (init && init->getCalledOperand()->getName().compare("__translate_sampler_initializer"))
-         {
-           const ConstantInt *ci = dyn_cast<ConstantInt>(init->getOperand(0));
-           uint32_t samplerInt = ci->getZExtValue();
---- a/backend/src/llvm/llvm_scalarize.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_scalarize.cpp	2020-11-09 18:51:16.888990104 +0100
-@@ -178,7 +178,7 @@
-       if(!type)
-         return type;
-       switch(type->getTypeID()) {
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       case Type::ArrayTyID:
-         return GetBasicType(type->getContainedType(0));
-       default:
-@@ -188,7 +188,7 @@
-     }
-
-     int GetComponentCount(const Type* type)  {
--      if (type && type->getTypeID() == Type::VectorTyID)
-+      if (type && type->getTypeID() == Type::FixedVectorTyID)
-         return llvm::dyn_cast<VectorType>(type)->getNumElements();
-       else
-         return 1;
-@@ -652,13 +652,12 @@
-           break;
-         }
-       } else {
--        Value *Callee = call->getCalledValue();
--        const std::string fnName = Callee->getName();
-+        Value *Callee = call->getCalledOperand();
-+        const std::string fnName = Callee->getName().str();
-         auto genIntrinsicID = intrinsicMap.find(fnName);
-
-         // Get the function arguments
--        CallSite CS(call);
--        CallSite::arg_iterator CI = CS.arg_begin() + 1;
-+        User::op_iterator CI = call->arg_begin() + 1;
-
-         switch (genIntrinsicID) {
-           case GEN_OCL_NOT_FOUND:
-@@ -729,7 +728,7 @@
-             extractFromVector(call);
-             break;
-           case GEN_OCL_PRINTF:
--            for (; CI != CS.arg_end(); ++CI)
-+            for (; CI != call->arg_end(); ++CI)
-               if ((*CI)->getType()->isVectorTy())
-                 *CI = InsertToVector(call, *CI);
-             break;
diff --git a/srcpkgs/beignet/patches/llvm12.patch b/srcpkgs/beignet/patches/llvm12.patch
deleted file mode 100644
index 6f8ab005c148..000000000000
--- a/srcpkgs/beignet/patches/llvm12.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-diff --git backend/src/llvm/ExpandLargeIntegers.cpp backend/src/llvm/ExpandLargeIntegers.cpp
-index 8515dc13..27080380 100644
---- a/backend/src/llvm/ExpandLargeIntegers.cpp
-+++ b/backend/src/llvm/ExpandLargeIntegers.cpp
-@@ -328,7 +328,7 @@ static Value *buildVectorOrScalar(ConversionState &State, IRBuilder<> &IRB, Smal
-     // splited, that's why these temporary values should be erased.
-     bool KeepInsert = isLegalBitSize(ElemTy->getPrimitiveSizeInBits() * ElemNo);
-     for (unsigned i = 0; i < ElemNo; ++i) {
--      Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo));
-+      Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo, false));
-       Value *idx = ConstantInt::get(IntTy, i);
-       vec = IRB.CreateInsertElement(tmp, Elements[i], idx);
-       if (!KeepInsert && !isa<Constant>(vec)) {
-@@ -373,7 +373,7 @@ static void unifyElementType(IRBuilder<> &IRB, SmallVector<Value *, 16> &Src, Sm
-       assert((Size % MinWidth) == 0);
- 
-       if (Size > MinWidth) {
--        VectorType *VecTy = VectorType::get(ElemTy, Size/MinWidth);
-+        VectorType *VecTy = VectorType::get(ElemTy, Size/MinWidth, false);
-         Value *Casted = IRB.CreateBitCast(Src[i], VecTy);
-         for (unsigned j = 0; j < Size/MinWidth; j++)
-           Dst.push_back(IRB.CreateExtractElement(Casted, ConstantInt::get(IntTy, j)));
-@@ -462,7 +462,7 @@ static void convertInstruction(Instruction *Inst, ConversionState &State,
-       unsigned ElemNo = Unified.size();
-       Type *ElemTy = Unified[0]->getType();
-       for (unsigned i = 0; i < ElemNo; ++i) {
--        Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo));
-+        Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo, false));
-         Value *idx = ConstantInt::get(IntTy, i);
-         vec = IRB.CreateInsertElement(tmp, Unified[i], idx);
-       }
-diff --git backend/src/llvm/llvm_gen_backend.cpp backend/src/llvm/llvm_gen_backend.cpp
-index c93d89cc..64d5b0e5 100644
---- a/backend/src/llvm/llvm_gen_backend.cpp
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -304,7 +304,7 @@ namespace gbe
-       TYPESIZEVEC(long,8)
-       TYPESIZEVEC(unsigned long,8)
-       else{
--        StructType *StrTy = M->getTypeByName("struct."+name);
-+        StructType *StrTy = StructType::getTypeByName(M->getContext(), "struct."+name);
-         if(StrTy)
-           return getTypeByteSize(unit,StrTy);
-       }
-diff --git backend/src/llvm/llvm_loadstore_optimization.cpp backend/src/llvm/llvm_loadstore_optimization.cpp
-index 5aa38bef..6b5c1bad 100644
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
-@@ -152,7 +152,7 @@ namespace gbe {
-     unsigned addrSpace = ld->getPointerAddressSpace();
-     // insert before first load
-     Builder.SetInsertPoint(ld);
--    VectorType *vecTy = VectorType::get(ld->getType(), size);
-+    VectorType *vecTy = VectorType::get(ld->getType(), size, false);
-     Value *vecPtr = Builder.CreateBitCast(ld->getPointerOperand(),
-                                         PointerType::get(vecTy, addrSpace));
-     LoadInst *vecValue = Builder.CreateLoad(vecPtr);
-@@ -236,7 +236,7 @@ namespace gbe {
-     Builder.SetInsertPoint(merged[size-1]);
- 
-     Type *dataTy = st->getValueOperand()->getType();
--    VectorType *vecTy = VectorType::get(dataTy, size);
-+    VectorType *vecTy = VectorType::get(dataTy, size, false);
-     Value * parent = UndefValue::get(vecTy);
-     for(unsigned i = 0; i < size; i++) {
-       parent = Builder.CreateInsertElement(parent, values[i], ConstantInt::get(IntegerType::get(st->getContext(), 32), i));
-diff --git backend/src/llvm/llvm_printf_parser.cpp backend/src/llvm/llvm_printf_parser.cpp
-index 6bb7c52a..af459cd2 100644
---- a/backend/src/llvm/llvm_printf_parser.cpp
-+++ b/backend/src/llvm/llvm_printf_parser.cpp
-@@ -630,7 +630,7 @@ error:
-             if (elt_type != elt_dst_type) {
-               Value *II = NULL;
-               for (int i = 0; i < vec_num; i++) {
--                Value *vec = II ? II : UndefValue::get(VectorType::get(elt_dst_type, vec_num));
-+                Value *vec = II ? II : UndefValue::get(VectorType::get(elt_dst_type, vec_num, false));
-                 Value *cv = ConstantInt::get(Type::getInt32Ty(elt_type->getContext()), i);
-                 Value *org = builder->CreateExtractElement(arg, cv);
-                 Value *cvt = builder->CreateIntCast(org, elt_dst_type, sign);
-@@ -658,7 +658,7 @@ error:
-             if (elt_type->getTypeID() != Type::FloatTyID) {
-               Value *II = NULL;
-               for (int i = 0; i < vec_num; i++) {
--                Value *vec = II ? II : UndefValue::get(VectorType::get(Type::getFloatTy(elt_type->getContext()), vec_num));
-+                Value *vec = II ? II : UndefValue::get(VectorType::get(Type::getFloatTy(elt_type->getContext()), vec_num, false));
-                 Value *cv = ConstantInt::get(Type::getInt32Ty(elt_type->getContext()), i);
-                 Value *org = builder->CreateExtractElement(arg, cv);
-                 Value* cvt  = builder->CreateFPCast(org, Type::getFloatTy(module->getContext()));
-diff --git backend/src/llvm/llvm_to_gen.cpp backend/src/llvm/llvm_to_gen.cpp
-index 7f7deffe..9e8ccc67 100644
---- a/backend/src/llvm/llvm_to_gen.cpp
-+++ b/backend/src/llvm/llvm_to_gen.cpp
-@@ -358,7 +358,7 @@ namespace gbe
-     passes.add(createScalarReplAggregatesPass(64, true, -1, -1, 64));
- #endif
-     passes.add(createLoadStoreOptimizationPass());
--    passes.add(createConstantPropagationPass());
-+    //passes.add(createConstantPropagationPass());
-     passes.add(createPromoteMemoryToRegisterPass());
-     if(optLevel > 0)
-       passes.add(createGVNPass());                 // Remove redundancies
-@@ -367,11 +367,11 @@ namespace gbe
-     passes.add(createScalarizePass());             // Expand all vector ops
-     passes.add(createExpandLargeIntegersPass());   // legalize large integer operation
-     passes.add(createInstructionCombiningPass());  // legalize will generate some silly instructions
--    passes.add(createConstantPropagationPass());   // propagate constant after scalarize/legalize
-+    //passes.add(createConstantPropagationPass());   // propagate constant after scalarize/legalize
-     passes.add(createExpandConstantExprPass());    // constant prop may generate ConstantExpr
-     passes.add(createPromoteIntegersPass());       // align integer size to power of two
-     passes.add(createRemoveGEPPass(unit));         // Constant prop may generate gep
--    passes.add(createDeadInstEliminationPass());   // Remove simplified instructions
-+    //passes.add(createDeadInstEliminationPass());   // Remove simplified instructions
-     passes.add(createCFGSimplificationPass());     // Merge & remove BBs
-     passes.add(createLowerSwitchPass());           // simplify cfg will generate switch-case instruction
-     if (profiling) {
diff --git a/srcpkgs/beignet/patches/musl.patch b/srcpkgs/beignet/patches/musl.patch
deleted file mode 100644
index cefafbb65588..000000000000
--- a/srcpkgs/beignet/patches/musl.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/backend/src/backend/gen/gen_mesa_disasm.c
-+++ b/backend/src/backend/gen/gen_mesa_disasm.c
-@@ -1137,7 +1137,7 @@ static uint32_t __conv_half_to_float(uint16_t h)
-       // Adjust mantissa so it's normalized (and keep
-       // track of exponent adjustment)
-       int e = -1;
--      uint m = i.mantissa;
-+      unsigned int m = i.mantissa;
-       do {
-         e++;
-         m <<= 1;
diff --git a/srcpkgs/beignet/template b/srcpkgs/beignet/template
deleted file mode 100644
index dce6bbb7ae24..000000000000
--- a/srcpkgs/beignet/template
+++ /dev/null
@@ -1,22 +0,0 @@
-# Template file for 'beignet'
-pkgname=beignet
-version=1.3.2
-revision=10
-archs="i686* x86_64*"
-wrksrc="Beignet-${version}-Source"
-build_style=cmake
-hostmakedepends="clang llvm pkg-config"
-makedepends="MesaLib-devel libedit-devel libffi-devel ocl-icd-devel zlib-devel
- libXfixes-devel"
-depends="ocl-icd"
-short_desc="Beignet GPGPU System for Intel GPUs"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://www.freedesktop.org/wiki/Software/Beignet/"
-distfiles="https://01.org/sites/default/files/${pkgname}-${version}-source.tar.gz"
-checksum=c555edba149de23243965a703f39f79fa06f15bcff5a3762b5544b0925010b43
-
-post_install() {
-	# remove CL headers, we do use opencl-headers instead.
-	rm -r ${DESTDIR}/usr/include
-}
diff --git a/srcpkgs/beignet/update b/srcpkgs/beignet/update
deleted file mode 100644
index ca41e0afe60c..000000000000
--- a/srcpkgs/beignet/update
+++ /dev/null
@@ -1 +0,0 @@
-site="https://01.org/beignet/downloads"
diff --git a/srcpkgs/removed-packages/template b/srcpkgs/removed-packages/template
index 65516dfa921c..b6f2efa5e415 100644
--- a/srcpkgs/removed-packages/template
+++ b/srcpkgs/removed-packages/template
@@ -1,7 +1,7 @@
 # Template file for 'removed-packages'
 pkgname=removed-packages
 version=0.1
-revision=69
+revision=70
 build_style=meta
 short_desc="Uninstalls packages removed from repository"
 maintainer="Piotr Wójcik <chocimier@tlen.pl>"
@@ -25,6 +25,7 @@ replaces="
  atom<=1.44.0_1
  avogadro-devel<=1.2.0_8
  avogadro<=1.2.0_8
+ beignet<=1.3.2_10
  bokken<=1.8_3
  bomi<=0.9.11_17
  burp-client<=1.4.40_13

From 805c9f964e67e1df015b33bfeb375d74b61a7ca3 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 20/27] ldc: rebuild for llvm14

---
 srcpkgs/ldc/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/ldc/template b/srcpkgs/ldc/template
index a27280dde3b8..e21bc6555e38 100644
--- a/srcpkgs/ldc/template
+++ b/srcpkgs/ldc/template
@@ -1,7 +1,7 @@
 # Template file for 'ldc'
 pkgname=ldc
 version=1.28.0
-revision=1
+revision=2
 wrksrc="ldc-${version}-src"
 build_style=cmake
 configure_args="

From 36f1b316767e14d1ae2c0227f3c02aa5c9269b29 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 22:31:25 +0200
Subject: [PATCH 21/27] ldc: update to 1.29.0.

---
 srcpkgs/ldc/template | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/srcpkgs/ldc/template b/srcpkgs/ldc/template
index e21bc6555e38..1d72a8805eb6 100644
--- a/srcpkgs/ldc/template
+++ b/srcpkgs/ldc/template
@@ -1,7 +1,7 @@
 # Template file for 'ldc'
 pkgname=ldc
-version=1.28.0
-revision=2
+version=1.29.0
+revision=1
 wrksrc="ldc-${version}-src"
 build_style=cmake
 configure_args="
@@ -11,7 +11,7 @@ configure_args="
  -DBASH_COMPLETION_COMPLETIONSDIR=/usr/share/bash-completion
  -DC_SYSTEM_LIBS='unwind;m;pthread;rt;dl'"
 conf_files="/etc/ldc2.conf"
-hostmakedepends="dmd llvm12 perl pkg-config"
+hostmakedepends="dmd llvm14 perl pkg-config"
 makedepends="libcurl-devel libffi-devel ncurses-devel zlib-devel
  llvm-libunwind-devel"
 depends="ldc-runtime llvm-libunwind-devel"
@@ -22,7 +22,7 @@ license="BSD-3-Clause, BSL-1.0"
 homepage="https://wiki.dlang.org/LDC"
 changelog="https://raw.githubusercontent.com/ldc-developers/ldc/master/CHANGELOG.md"
 distfiles="https://github.com/ldc-developers/ldc/releases/download/v${version}/ldc-${version}-src.tar.gz"
-checksum=17fee8bb535bcb8cda0a45947526555c46c045f302a7349cc8711b254e54cf09
+checksum=d0c066eb965467625d9c5e75c00c583451b9ffa363601f9e37275ca8a8aea140
 nopie=yes
 nocross="dmd compilation fails on cross"
 # tests timeout on musl; also require unpackaged python3-lit

From 0ef0fb032d358668a8044bd3088ad0a20548c465 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 22/27] include-what-you-use: update to 0.18.

---
 srcpkgs/include-what-you-use/template | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/include-what-you-use/template b/srcpkgs/include-what-you-use/template
index b13bb7ee56af..297669f60459 100644
--- a/srcpkgs/include-what-you-use/template
+++ b/srcpkgs/include-what-you-use/template
@@ -1,6 +1,6 @@
 # Template file for 'include-what-you-use'
 pkgname=include-what-you-use
-version=0.16
+version=0.18
 revision=1
 wrksrc="${pkgname}"
 build_style=cmake
@@ -12,7 +12,7 @@ maintainer="Leah Neukirchen <leah@vuxu.org>"
 license="NCSA"
 homepage="https://include-what-you-use.org/"
 distfiles="https://include-what-you-use.org/downloads/${pkgname}-${version}.src.tar.gz"
-checksum=8d6fc9b255343bc1e5ec459e39512df1d51c60e03562985e0076036119ff5a1c
+checksum=9102fc8419294757df86a89ce6ec305f8d90a818d1f2598a139d15eb1894b8f3
 python_version=3
 
 post_install() {

From 88a34b3f474600f4e2b740ea802eb99c6920b76c Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:18:24 +0200
Subject: [PATCH 23/27] SPIRV-LLVM-Translator: update to 14.0.0.

---
 common/shlibs                          |  1 +
 srcpkgs/SPIRV-LLVM-Translator/template | 11 ++++++-----
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/common/shlibs b/common/shlibs
index 36bab1d3d999..5d06c2381fed 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -981,6 +981,7 @@ libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
 libLLVM-14.so libllvm14-14.0.3_1
+libLLVMSPIRVLib.so.14 SPIRV-LLVM-Translator-14.0.0_1
 libisofs.so.6 libisofs-0.6.24_1
 libmpack.so.0 libmpack-1.0.5_1
 libGeoIP.so.1 libgeoip-1.4.8_1
diff --git a/srcpkgs/SPIRV-LLVM-Translator/template b/srcpkgs/SPIRV-LLVM-Translator/template
index 2504cabed367..2277d062d992 100644
--- a/srcpkgs/SPIRV-LLVM-Translator/template
+++ b/srcpkgs/SPIRV-LLVM-Translator/template
@@ -1,19 +1,20 @@
 # Template file for 'SPIRV-LLVM-Translator'
 pkgname=SPIRV-LLVM-Translator
-version=12.0.0
+version=14.0.0
 revision=1
 build_style=cmake
 make_build_args="llvm-spirv"
-configure_args="-Wno-dev -DLLVM_LINK_LLVM_DYLIB=ON -DCMAKE_SKIP_RPATH=ON
- -DLLVM_SPIRV_INCLUDE_TESTS=OFF -DBUILD_SHARED_LIBS=ON"
+configure_args="-DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release
+ -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_SKIP_RPATH=ON -DLLVM_INCLUDE_TESTS=OFF
+ -DLLVM_LINK_LLVM_DYLIB=ON -DLLVM_EXTERNAL_LIT=/usr/bin/lit -Wno-dev -DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=/usr/include/spirv/ "
 hostmakedepends="clang clang-tools-extra llvm"
-makedepends="llvm"
+makedepends="llvm SPIRV-Headers"
 short_desc="API and commands for processing SPIR-V modules"
 maintainer="Orphaned <orphan@voidlinux.org>"
 license="NCSA"
 homepage="https://github.com/KhronosGroup/SPIRV-LLVM-Translator"
 distfiles="https://github.com/KhronosGroup/${pkgname}/archive/refs/tags/v${version}.tar.gz"
-checksum=6e4fad04203f25fcde4c308c53e9f59bd05a390978992db3212d4b63aff62108
+checksum=1afc52bb4e39aeb9b5b69324a201c81bd986364f347b559995eff6fd6f013318
 make_check=no
 
 post_install() {

From e1d2ef11efb22ed4f3168b64d960f10ec44a3b8d Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:35:43 +0200
Subject: [PATCH 24/27] ispc: update to 1.17.0.

---
 .../ispc/patches/cmake-build-type-none.patch  |   18 -
 srcpkgs/ispc/patches/llvm12-001.patch         |   57 -
 srcpkgs/ispc/patches/llvm12-002.patch         |  923 --------
 srcpkgs/ispc/patches/llvm12-003.patch         | 1504 ------------
 srcpkgs/ispc/patches/llvm12-004.patch         |   34 -
 srcpkgs/ispc/patches/llvm12-005.patch         |  372 ---
 srcpkgs/ispc/patches/llvm12-006.patch         |  126 -
 srcpkgs/ispc/patches/llvm12-007.patch         |  160 --
 srcpkgs/ispc/patches/llvm12-008.patch         |  149 --
 srcpkgs/ispc/patches/llvm12-009.patch         | 2109 -----------------
 srcpkgs/ispc/template                         |    6 +-
 11 files changed, 3 insertions(+), 5455 deletions(-)
 delete mode 100644 srcpkgs/ispc/patches/cmake-build-type-none.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-001.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-002.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-003.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-004.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-005.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-006.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-007.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-008.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-009.patch

diff --git a/srcpkgs/ispc/patches/cmake-build-type-none.patch b/srcpkgs/ispc/patches/cmake-build-type-none.patch
deleted file mode 100644
index 411e353c7314..000000000000
--- a/srcpkgs/ispc/patches/cmake-build-type-none.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Index: ispc-1.15.0/CMakeLists.txt
-===================================================================
---- ispc-1.15.0.orig/CMakeLists.txt
-+++ ispc-1.15.0/CMakeLists.txt
-@@ -157,13 +157,6 @@ set(OUTPUT_RELEASE Release/bin)
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin )
- 
- if(CMAKE_BUILD_TYPE)
--    # Validate build type
--    set(CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo")
--
--    string(FIND "${CONFIGURATION_TYPES}" "${CMAKE_BUILD_TYPE}" MATCHED_CONFIG)
--    if (${MATCHED_CONFIG} EQUAL -1)
--         message(FATAL_ERROR "CMAKE_BUILD_TYPE (${CMAKE_BUILD_TYPE}) allows only the following values: ${CONFIGURATION_TYPES}")
--    endif()
- else(NOT CMAKE_BUILD_TYPE)
-     set(CMAKE_BUILD_TYPE "Release")
-     message(STATUS "Build type not specified: Use Release by default.")
diff --git a/srcpkgs/ispc/patches/llvm12-001.patch b/srcpkgs/ispc/patches/llvm12-001.patch
deleted file mode 100644
index 5f2d3f5a409e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-001.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 1c0f89dccb774f216c7f6e76a99ee907a1e641cb Mon Sep 17 00:00:00 2001
-From: Dmitry Babokin <dmitry.y.babokin@intel.com>
-Date: Tue, 22 Dec 2020 17:03:59 -0800
-Subject: [PATCH] Fix to work with LLVM trunk after llvm/llvm-project@41c3b2713
-
----
- src/ctx.cpp | 18 ++++++++++++------
- 1 file changed, 12 insertions(+), 6 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 6fbb8b9cf..977e9d222 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1473,11 +1473,15 @@ void FunctionEmitContext::AddDebugPos(llvm::Value *value, const SourcePos *pos,
-     llvm::Instruction *inst = llvm::dyn_cast<llvm::Instruction>(value);
-     if (inst != NULL && m->diBuilder) {
-         SourcePos p = pos ? *pos : currentPos;
--        if (p.first_line != 0)
-+        if (p.first_line != 0) {
-             // If first_line == 0, then we're in the middle of setting up
-             // the standard library or the like; don't add debug positions
-             // for those functions
--            inst->setDebugLoc(llvm::DebugLoc::get(p.first_line, p.first_column, scope ? scope : GetDIScope()));
-+            scope = scope ? scope : GetDIScope();
-+            llvm::DebugLoc diLoc =
-+                llvm::DILocation::get(scope->getContext(), p.first_line, p.first_column, scope, nullptr, false);
-+            inst->setDebugLoc(diLoc);
-+        }
-     }
- }
- 
-@@ -1518,9 +1522,10 @@ void FunctionEmitContext::EmitVariableDebugInfo(Symbol *sym) {
-     llvm::DILocalVariable *var = m->diBuilder->createAutoVariable(
-         scope, sym->name, sym->pos.GetDIFile(), sym->pos.first_line, diType, true /* preserve through opts */);
- 
-+    llvm::DebugLoc diLoc =
-+        llvm::DILocation::get(scope->getContext(), sym->pos.first_line, sym->pos.first_column, scope, nullptr, false);
-     llvm::Instruction *declareInst =
--        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(),
--                                    llvm::DebugLoc::get(sym->pos.first_line, sym->pos.first_column, scope), bblock);
-+        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(), diLoc, bblock);
-     AddDebugPos(declareInst, &sym->pos, scope);
- }
- 
-@@ -1535,9 +1540,10 @@ void FunctionEmitContext::EmitFunctionParameterDebugInfo(Symbol *sym, int argNum
-         m->diBuilder->createParameterVariable(scope, sym->name, argNum + 1, sym->pos.GetDIFile(), sym->pos.first_line,
-                                               diType, true /* preserve through opts */, flags);
- 
-+    llvm::DebugLoc diLoc =
-+        llvm::DILocation::get(scope->getContext(), sym->pos.first_line, sym->pos.first_column, scope, nullptr, false);
-     llvm::Instruction *declareInst =
--        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(),
--                                    llvm::DebugLoc::get(sym->pos.first_line, sym->pos.first_column, scope), bblock);
-+        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(), diLoc, bblock);
-     AddDebugPos(declareInst, &sym->pos, scope);
- }
- 
diff --git a/srcpkgs/ispc/patches/llvm12-002.patch b/srcpkgs/ispc/patches/llvm12-002.patch
deleted file mode 100644
index 0903f30da10d..000000000000
--- a/srcpkgs/ispc/patches/llvm12-002.patch
+++ /dev/null
@@ -1,923 +0,0 @@
-From 0597a79d084c014780136da906afe21d15e982cb Mon Sep 17 00:00:00 2001
-From: DeepakRajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Tue, 5 Jan 2021 13:53:30 -0800
-Subject: [PATCH] Remove LLVM 8.0 and LLVM 9.0. (#1966)
-
----
- .appveyor.yml                        |  3 --
- .travis.yml                          |  7 ---
- CMakeLists.txt                       | 12 ++----
- src/ast.cpp                          |  4 --
- src/ctx.cpp                          | 30 -------------
- src/gen/GlobalsLocalization.cpp      |  4 --
- src/ispc.cpp                         | 20 ---------
- src/ispc.h                           |  3 +-
- src/ispc_version.h                   |  4 +-
- src/main.cpp                         | 13 ------
- src/module.cpp                       | 27 ------------
- src/module.h                         |  2 -
- src/opt.cpp                          | 64 ++--------------------------
- src/type.cpp                         | 10 ++---
- tests/lit-tests/1771.ispc            |  1 -
- tests/lit-tests/1844.ispc            |  3 --
- tests/lit-tests/1926.ispc            |  2 -
- tests/lit-tests/cpus_x86.ispc        |  2 +
- tests/lit-tests/cpus_x86_llvm10.ispc | 11 -----
- tests/lit-tests/lit.cfg              |  5 ---
- 20 files changed, 14 insertions(+), 213 deletions(-)
- delete mode 100644 tests/lit-tests/cpus_x86_llvm10.ispc
-
-diff --git a/.appveyor.yml b/.appveyor.yml
-index 451a7b3e0..7945cca2a 100644
---- a/.appveyor.yml
-+++ b/.appveyor.yml
-@@ -41,8 +41,6 @@ environment:
-       LLVM_VERSION: latest
-     - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
-       LLVM_VERSION: 10.0
--    - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
--      LLVM_VERSION: 9.0
- 
- for:
- -
-@@ -62,7 +60,6 @@ for:
-         if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2019" ( (set generator="Visual Studio 16") & (set vsversion=2019))
-         set LLVM_TAR=llvm-11.0.0-win.vs2019-Release+Asserts-x86.arm.wasm.7z
-         if "%LLVM_VERSION%"=="10.0" (set LLVM_TAR=llvm-10.0.1-win.vs2019-Release+Asserts-x86.arm.wasm.zip)
--        if "%LLVM_VERSION%"=="9.0" (set LLVM_TAR=llvm-9.0.1-win.vs2017-Release+Asserts-x86.arm.wasm.zip)
-   install:
-     - ps: choco install --no-progress winflexbison3 wget 7zip
-     - cmd: |-
-diff --git a/.travis.yml b/.travis.yml
-index 2e96017a6..3a6b85264 100644
---- a/.travis.yml
-+++ b/.travis.yml
-@@ -108,13 +108,6 @@ jobs:
-         - LLVM_TAR=llvm-10.0.1-ubuntu16.04-Release+Asserts-x86.arm.wasm.tar.xz
-         - LLVM_REPO=https://github.com/dbabokin/llvm-project
-         - ISPC_HOME=$TRAVIS_BUILD_DIR
--    # LLVM 9.0 + Ubuntu 16.04: build, lit tests, examples (build + run), benchmarks (build + trial run)
--    - <<: *my_tag
--      env:
--        - LLVM_VERSION=9.0 OS=Ubuntu16.04
--        - LLVM_TAR=llvm-9.0.1-ubuntu16.04-Release+Asserts-x86.arm.wasm.tar.xz
--        - LLVM_REPO=https://github.com/dbabokin/llvm-project
--        - ISPC_HOME=$TRAVIS_BUILD_DIR
-     # WASM enabled build
-     # LLVM 11.0 + Ubuntu 16.04: build, lit tests, examples (build), benchmarks (build + trial run)
-     - <<: *my_tag
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 5fa863fcf..a6b3ed251 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -241,10 +241,8 @@ if (X86_ENABLED)
-         avx2-i8x32 avx2-i16x16
-         avx2-i32x4 avx2-i32x8 avx2-i32x16 avx2-i64x4
-         avx512knl-i32x16
--        avx512skx-i32x16 avx512skx-i32x8)
--    if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "10.0.0")
--        list(APPEND ISPC_TARGETS avx512skx-i8x64 avx512skx-i16x32)
--    endif()
-+        avx512skx-i32x16 avx512skx-i32x8
-+        avx512skx-i8x64 avx512skx-i16x32)
- endif()
- if (ARM_ENABLED)
-     list(APPEND ISPC_TARGETS neon-i8x16 neon-i16x8 neon-i32x4 neon-i32x8)
-@@ -259,11 +257,7 @@ if (WASM_ENABLED)
- endif()
- 
- set(CLANG_LIBRARY_LIST clangFrontend clangDriver clangSerialization clangParse clangSema clangAnalysis clangAST clangBasic clangEdit clangLex)
--set(LLVM_COMPONENTS engine ipo bitreader bitwriter instrumentation linker option)
--
--if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "10.0.0")
--    list(APPEND LLVM_COMPONENTS frontendopenmp)
--endif()
-+set(LLVM_COMPONENTS engine ipo bitreader bitwriter instrumentation linker option frontendopenmp)
- 
- if (X86_ENABLED)
-     list(APPEND LLVM_COMPONENTS x86)
-diff --git a/src/ast.cpp b/src/ast.cpp
-index 20f75a29c..5a43c4854 100644
---- a/src/ast.cpp
-+++ b/src/ast.cpp
-@@ -44,9 +44,7 @@
- #include "sym.h"
- #include "util.h"
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/TimeProfiler.h>
--#endif
- ///////////////////////////////////////////////////////////////////////////
- // ASTNode
- 
-@@ -62,9 +60,7 @@ void AST::AddFunction(Symbol *sym, Stmt *code) {
- }
- 
- void AST::GenerateIR() {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope TimeScope("GenerateIR");
--#endif
-     for (unsigned int i = 0; i < functions.size(); ++i)
-         functions[i]->GenerateIR();
- }
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 977e9d222..42c4ea09d 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -309,21 +309,13 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym, llvm::F
-             char buf[256];
-             snprintf(buf, sizeof(buf), "__off_all_on_mask_%s", g->target->GetISAString());
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_8_0
--            llvm::Constant *offFunc = m->module->getOrInsertFunction(buf, LLVMTypes::VoidType);
--#else // LLVM 9.0+
-             llvm::FunctionCallee offFuncCallee = m->module->getOrInsertFunction(buf, LLVMTypes::VoidType);
-             llvm::Constant *offFunc = llvm::cast<llvm::Constant>(offFuncCallee.getCallee());
--#endif
-             AssertPos(currentPos, llvm::isa<llvm::Function>(offFunc));
-             llvm::BasicBlock *offBB = llvm::BasicBlock::Create(*g->ctx, "entry", (llvm::Function *)offFunc, 0);
-             llvm::StoreInst *inst = new llvm::StoreInst(LLVMMaskAllOff, globalAllOnMaskPtr, offBB);
-             if (g->opt.forceAlignedMemory) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-                 inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-             }
-             llvm::ReturnInst::Create(*g->ctx, offBB);
-         }
-@@ -2288,11 +2280,7 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
- #endif
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-     }
- 
-     AddDebugPos(inst);
-@@ -2431,11 +2419,7 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-                 // vs the proper alignment in practice.)
-                 int align = 1;
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                inst->setAlignment(align);
--#else // LLVM 10.0+
-                 inst->setAlignment(llvm::MaybeAlign(align).valueOrOne());
--#endif
-             }
- 
-             AddDebugPos(inst);
-@@ -2649,11 +2633,7 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-         align = g->target->getNativeVectorAlignment();
- 
-     if (align != 0) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(align);
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(align).valueOrOne());
--#endif
-     }
-     // Don't add debugging info to alloca instructions
-     return inst;
-@@ -2926,11 +2906,7 @@ void FunctionEmitContext::StoreInst(llvm::Value *value, llvm::Value *ptr, const
-     llvm::StoreInst *inst = new llvm::StoreInst(value, ptr, bblock);
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-     }
- 
- #ifdef ISPC_GENX_ENABLED
-@@ -3025,16 +3001,10 @@ void FunctionEmitContext::MemcpyInst(llvm::Value *dest, llvm::Value *src, llvm::
-     }
-     if (align == NULL)
-         align = LLVMInt32(1);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_8_0
--    llvm::Constant *mcFunc =
--        m->module->getOrInsertFunction("llvm.memcpy.p0i8.p0i8.i64", LLVMTypes::VoidType, LLVMTypes::VoidPointerType,
--                                       LLVMTypes::VoidPointerType, LLVMTypes::Int64Type, LLVMTypes::BoolType);
--#else // LLVM 9.0+
-     llvm::FunctionCallee mcFuncCallee =
-         m->module->getOrInsertFunction("llvm.memcpy.p0i8.p0i8.i64", LLVMTypes::VoidType, LLVMTypes::VoidPointerType,
-                                        LLVMTypes::VoidPointerType, LLVMTypes::Int64Type, LLVMTypes::BoolType);
-     llvm::Constant *mcFunc = llvm::cast<llvm::Constant>(mcFuncCallee.getCallee());
--#endif
-     AssertPos(currentPos, mcFunc != NULL);
-     AssertPos(currentPos, llvm::isa<llvm::Function>(mcFunc));
- 
-diff --git a/src/gen/GlobalsLocalization.cpp b/src/gen/GlobalsLocalization.cpp
-index 193a66289..a176e9462 100644
---- a/src/gen/GlobalsLocalization.cpp
-+++ b/src/gen/GlobalsLocalization.cpp
-@@ -470,11 +470,7 @@ void GlobalsLocalization::LocalizeGlobals(LocalizationInfo &LI) {
-         Instruction &FirstI = *Fn->getEntryBlock().begin();
-         Type *ElemTy = GV->getType()->getElementType();
-         AllocaInst *Alloca = new AllocaInst(ElemTy, 0, GV->getName() + ".local", &FirstI);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        Alloca->setAlignment(GV->getAlignment());
--#else // LLVM 10.0+
-         Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()));
--#endif
-         if (!isa<UndefValue>(GV->getInitializer()))
-             new StoreInst(GV->getInitializer(), Alloca, &FirstI);
- 
-diff --git a/src/ispc.cpp b/src/ispc.cpp
-index e2d0f206e..fac5233f7 100644
---- a/src/ispc.cpp
-+++ b/src/ispc.cpp
-@@ -272,9 +272,7 @@ typedef enum {
-     CPU_Silvermont,
- 
-     CPU_ICX,
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     CPU_TGL,
--#endif
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-     CPU_ADL,
-     CPU_SPR,
-@@ -365,10 +363,8 @@ class AllCPUs {
- 
-         names[CPU_ICX].push_back("icelake-server");
-         names[CPU_ICX].push_back("icx");
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         names[CPU_TGL].push_back("tigerlake");
-         names[CPU_TGL].push_back("tgl");
--#endif
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-         names[CPU_ADL].push_back("alderlake");
-         names[CPU_ADL].push_back("adl");
-@@ -411,11 +407,9 @@ class AllCPUs {
-         compat[CPU_ADL] = Set(CPU_ADL, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont,
-                               CPU_SandyBridge, CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_None);
- #endif
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         compat[CPU_TGL] =
-             Set(CPU_TGL, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont, CPU_SandyBridge,
-                 CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_SKX, CPU_ICL, CPU_ICX, CPU_None);
--#endif
-         compat[CPU_ICX] = Set(CPU_ICX, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont,
-                               CPU_SandyBridge, CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_SKX, CPU_ICL, CPU_None);
- 
-@@ -556,9 +550,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-         case CPU_SPR:
- #endif
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         case CPU_TGL:
--#endif
-         case CPU_ICX:
-         case CPU_ICL:
-         case CPU_SKX:
-@@ -916,7 +908,6 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         }
-         break;
-     case ISPCTarget::avx512skx_i8x64:
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0 // LLVM 10.0+
-         // This target is enabled only for LLVM 10.0 and later
-         // because LLVM requires a number of fixes, which are
-         // committed to LLVM 11.0 and can be applied to 10.0, but not
-@@ -937,12 +928,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         this->m_hasVecPrefetch = false;
-         CPUfromISA = CPU_SKX;
-         break;
--#else
--        unsupported_target = true;
--        break;
--#endif
-     case ISPCTarget::avx512skx_i16x32:
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0 // LLVM 10.0+
-         // This target is enabled only for LLVM 10.0 and later
-         // because LLVM requires a number of fixes, which are
-         // committed to LLVM 11.0 and can be applied to 10.0, but not
-@@ -963,10 +949,6 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         this->m_hasVecPrefetch = false;
-         CPUfromISA = CPU_SKX;
-         break;
--#else
--        unsupported_target = true;
--        break;
--#endif
- #ifdef ISPC_ARM_ENABLED
-     case ISPCTarget::neon_i8x16:
-         this->m_isa = Target::NEON;
-@@ -1662,11 +1644,9 @@ Globals::Globals() {
-     isMultiTargetCompilation = false;
-     errorLimit = -1;
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     enableTimeTrace = false;
-     // set default granularity to 500.
-     timeTraceGranularity = 500;
--#endif
-     target = NULL;
-     ctx = new llvm::LLVMContext;
- 
-diff --git a/src/ispc.h b/src/ispc.h
-index e25d8830e..de357a21c 100644
---- a/src/ispc.h
-+++ b/src/ispc.h
-@@ -695,13 +695,12 @@ struct Globals {
- 
-     /* Number of errors to show in ISPC. */
-     int errorLimit;
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-+
-     /* When true, enable compile time tracing. */
-     bool enableTimeTrace;
- 
-     /* When compile time tracing is enabled, set time granularity. */
-     int timeTraceGranularity;
--#endif
- };
- 
- enum {
-diff --git a/src/ispc_version.h b/src/ispc_version.h
-index d781347fd..434b2d678 100644
---- a/src/ispc_version.h
-+++ b/src/ispc_version.h
-@@ -44,13 +44,11 @@
- 
- #define ISPC_LLVM_VERSION (LLVM_VERSION_MAJOR * 10000 + LLVM_VERSION_MINOR * 100)
- 
--#define ISPC_LLVM_8_0 80000
--#define ISPC_LLVM_9_0 90000
- #define ISPC_LLVM_10_0 100000
- #define ISPC_LLVM_11_0 110000
- #define ISPC_LLVM_12_0 120000
- 
--#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_8_0
-+#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_10_0
- #define LATEST_SUPPORTED_LLVM ISPC_LLVM_12_0
- 
- #ifdef __ispc__xstr
-diff --git a/src/main.cpp b/src/main.cpp
-index 8f64330cc..5c920eabc 100644
---- a/src/main.cpp
-+++ b/src/main.cpp
-@@ -55,9 +55,7 @@
- #include <llvm/Support/Signals.h>
- #include <llvm/Support/TargetRegistry.h>
- #include <llvm/Support/TargetSelect.h>
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/ToolOutputFile.h>
--#endif
- 
- #ifdef ISPC_HOST_IS_WINDOWS
- #define strcasecmp stricmp
-@@ -181,11 +179,9 @@ static void lPrintVersion() {
-     snprintf(targetHelp, sizeof(targetHelp), "[--target-os=<os>]\t\t\tSelect target OS.  <os>={%s}",
-              g->target_registry->getSupportedOSes().c_str());
-     PrintWithWordBreaks(targetHelp, 24, TerminalWidth(), stdout);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     printf("    [--time-trace]\t\t\tTurn on time profiler. Generates JSON file based on output filename.\n");
-     printf("    [--time-trace-granularity=<value>\tMinimum time granularity (in microseconds) traced by time "
-            "profiler.\n");
--#endif
-     printf("    [--version]\t\t\t\tPrint ispc version\n");
- #ifdef ISPC_GENX_ENABLED
-     printf("    [--vc-options=<\"-option1 -option2...\">]\t\t\t\tPass additional options to Vector Compiler backend\n");
-@@ -462,7 +458,6 @@ static void setCallingConv(VectorCallStatus vectorCall, Arch arch) {
-     }
- }
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- static void writeCompileTimeFile(const char *outFileName) {
-     llvm::SmallString<128> jsonFileName(outFileName);
-     jsonFileName.append(".json");
-@@ -479,7 +474,6 @@ static void writeCompileTimeFile(const char *outFileName) {
-     of->keep();
-     return;
- }
--#endif
- 
- static std::set<int> ParsingPhases(char *stages, ArgErrors &errorHandler) {
-     constexpr int parsing_limit = 100;
-@@ -791,12 +785,10 @@ int main(int Argc, char *Argv[]) {
-             }
-         } else if (!strncmp(argv[i], "--force-alignment=", 18)) {
-             g->forceAlignment = atoi(argv[i] + 18);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         } else if (!strcmp(argv[i], "--time-trace")) {
-             g->enableTimeTrace = true;
-         } else if (!strncmp(argv[i], "--time-trace-granularity=", 25)) {
-             g->timeTraceGranularity = atoi(argv[i] + 25);
--#endif
-         } else if (!strcmp(argv[i], "--woff") || !strcmp(argv[i], "-woff")) {
-             g->disableWarnings = true;
-             g->emitPerfWarnings = false;
-@@ -1059,7 +1051,6 @@ int main(int Argc, char *Argv[]) {
- 
-     // This needs to happen after the TargetOS is decided.
-     setCallingConv(vectorCall, arch);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     if (g->enableTimeTrace) {
-         llvm::timeTraceProfilerInitialize(g->timeTraceGranularity, "ispc");
-     }
-@@ -1077,9 +1068,5 @@ int main(int Argc, char *Argv[]) {
-         }
-         llvm::timeTraceProfilerCleanup();
-     }
--#else
--    int ret = Module::CompileAndOutput(file, arch, cpu, targets, flags, ot, outFileName, headerFileName, depsFileName,
--                                       depsTargetName, hostStubFileName, devStubFileName);
--#endif
-     return ret;
- }
-diff --git a/src/module.cpp b/src/module.cpp
-index fe7452df1..a85fec77a 100644
---- a/src/module.cpp
-+++ b/src/module.cpp
-@@ -170,9 +170,7 @@ Module::Module(const char *fn) {
-     module->setDataLayout(g->target->getDataLayout()->getStringRepresentation());
- 
-     if (g->generateDebuggingSymbols) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Create Debug Data");
--#endif
-         // To enable debug information on Windows, we have to let llvm know, that
-         // debug information should be emitted in CodeView format.
-         if (g->target_os == TargetOS::windows) {
-@@ -226,10 +224,8 @@ extern YY_BUFFER_STATE yy_create_buffer(FILE *, int);
- extern void yy_delete_buffer(YY_BUFFER_STATE);
- 
- int Module::CompileFile() {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope CompileFileTimeScope(
-         "CompileFile", llvm::StringRef(filename + ("_" + std::string(g->target->GetISAString()))));
--#endif
-     extern void ParserInit();
-     ParserInit();
- 
-@@ -238,18 +234,14 @@ int Module::CompileFile() {
-     // variable 'm' to be initialized and available (which it isn't until
-     // the Module constructor returns...)
-     {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("DefineStdlib");
--#endif
-         DefineStdlib(symbolTable, g->ctx, module, g->includeStdlib);
-     }
- 
-     bool runPreprocessor = g->runCPP;
- 
-     if (runPreprocessor) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Frontend parser");
--#endif
-         if (!IsStdin(filename)) {
-             // Try to open the file first, since otherwise we crash in the
-             // preprocessor if the file doesn't exist.
-@@ -268,9 +260,7 @@ int Module::CompileFile() {
-         yyparse();
-         yy_delete_buffer(strbuf);
-     } else {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Frontend parser");
--#endif
-         // No preprocessor, just open up the file if it's not stdin..
-         FILE *f = NULL;
-         if (IsStdin(filename)) {
-@@ -297,9 +287,7 @@ int Module::CompileFile() {
- 
-     if (diBuilder)
-         diBuilder->finalize();
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope TimeScope("Optimize");
--#endif
-     if (errorCount == 0)
-         Optimize(module, g->opt.level);
- 
-@@ -1243,15 +1231,8 @@ bool Module::writeObjectFileOrAssembly(llvm::TargetMachine *targetMachine, llvm:
-                                        const char *outFileName) {
-     // Figure out if we're generating object file or assembly output, and
-     // set binary output for object files
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    Assert(!g->target->isGenXTarget());
--    llvm::TargetMachine::CodeGenFileType fileType =
--        (outputType == Object) ? llvm::TargetMachine::CGFT_ObjectFile : llvm::TargetMachine::CGFT_AssemblyFile;
--    bool binary = (fileType == llvm::TargetMachine::CGFT_ObjectFile);
--#else // LLVM 10.0+
-     llvm::CodeGenFileType fileType = (outputType == Object) ? llvm::CGFT_ObjectFile : llvm::CGFT_AssemblyFile;
-     bool binary = (fileType == llvm::CGFT_ObjectFile);
--#endif
- 
-     llvm::sys::fs::OpenFlags flags = binary ? llvm::sys::fs::F_None : llvm::sys::fs::F_Text;
- 
-@@ -2219,11 +2200,7 @@ void Module::execPreprocessor(const char *infilename, llvm::raw_string_ostream *
-     inst.setTarget(target);
-     inst.createSourceManager(inst.getFileManager());
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    clang::FrontendInputFile inputFile(infilename, clang::InputKind::Unknown);
--#else // LLVM 10.0+
-     clang::FrontendInputFile inputFile(infilename, clang::InputKind());
--#endif
- 
-     inst.InitializeSourceManager(inputFile);
- 
-@@ -2722,9 +2699,7 @@ int Module::CompileAndOutput(const char *srcFile, Arch arch, const char *cpu, st
- 
-         m = new Module(srcFile);
-         if (m->CompileFile() == 0) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-             llvm::TimeTraceScope TimeScope("Backend");
--#endif
- #ifdef ISPC_GENX_ENABLED
-             if (outputType == Asm || outputType == Object) {
-                 if (g->target->isGenXTarget()) {
-@@ -2855,9 +2830,7 @@ int Module::CompileAndOutput(const char *srcFile, Arch arch, const char *cpu, st
- 
-             m = new Module(srcFile);
-             int compileFileError = m->CompileFile();
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-             llvm::TimeTraceScope TimeScope("Backend");
--#endif
-             if (compileFileError == 0) {
-                 // Create the dispatch module, unless already created;
-                 // in the latter case, just do the checking
-diff --git a/src/module.h b/src/module.h
-index 61d3cfea0..603124d50 100644
---- a/src/module.h
-+++ b/src/module.h
-@@ -43,9 +43,7 @@
- 
- #include <llvm/IR/DebugInfo.h>
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/TimeProfiler.h>
--#endif
- 
- #ifdef ISPC_GENX_ENABLED
- #include "ocl_igc_interface/igc_ocl_device_ctx.h"
-diff --git a/src/opt.cpp b/src/opt.cpp
-index a655a8344..5b1ac7b63 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -66,6 +66,7 @@
- #include <llvm/IR/Instructions.h>
- #include <llvm/IR/IntrinsicInst.h>
- #include <llvm/IR/Intrinsics.h>
-+#include <llvm/IR/IntrinsicsX86.h>
- #include <llvm/IR/LegacyPassManager.h>
- #include <llvm/IR/Module.h>
- #include <llvm/IR/PatternMatch.h>
-@@ -85,9 +86,6 @@
- #include <llvm/Transforms/Scalar/InstSimplifyPass.h>
- #include <llvm/Transforms/Utils.h>
- #include <llvm/Transforms/Utils/BasicBlockUtils.h>
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
--#include <llvm/IR/IntrinsicsX86.h>
--#endif
- 
- #ifdef ISPC_HOST_IS_LINUX
- #include <alloca.h>
-@@ -1003,10 +1001,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
-                 name = LLVMGetName(callInst->getArgOperand(0), "_load");
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                llvm::Instruction *loadInst =
--                    new llvm::LoadInst(castPtr, name, false /* not volatile */, align, (llvm::Instruction *)NULL);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-                 llvm::Instruction *loadInst = new llvm::LoadInst(castPtr, name, false /* not volatile */,
-                                                                  llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
- #else
-@@ -1043,13 +1038,8 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedStore32 ? 4 : 8;
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                llvm::StoreInst *storeInst = new llvm::StoreInst(rvalue, castPtr, (llvm::Instruction *)NULL);
--                storeInst->setAlignment(align);
--#else
-                 llvm::StoreInst *storeInst = new llvm::StoreInst(rvalue, castPtr, (llvm::Instruction *)NULL,
-                                                                  llvm::MaybeAlign(align).valueOrOne());
--#endif
-                 lCopyMetadata(storeInst, callInst);
-                 llvm::ReplaceInstWithInst(callInst, storeInst);
- 
-@@ -1066,9 +1056,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool IntrinsicsOpt::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("IntrinsicsOpt::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -1239,9 +1227,7 @@ bool InstructionSimplifyPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool InstructionSimplifyPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("InstructionSimplifyPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -2974,16 +2960,10 @@ static bool lImproveMaskedStore(llvm::CallInst *callInst) {
- 
-             lvalue = new llvm::BitCastInst(lvalue, ptrType, "lvalue_to_ptr_type", callInst);
-             lCopyMetadata(lvalue, callInst);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--            store =
--                new llvm::StoreInst(rvalue, lvalue, false /* not volatile */,
--                                    g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align);
--#else
-             store = new llvm::StoreInst(
-                 rvalue, lvalue, false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-                     .valueOrOne());
--#endif
-         }
-         if (store != NULL) {
-             lCopyMetadata(store, callInst);
-@@ -3059,11 +3039,7 @@ static bool lImproveMaskedLoad(llvm::CallInst *callInst, llvm::BasicBlock::itera
-         {
-             llvm::Type *ptrType = llvm::PointerType::get(callInst->getType(), 0);
-             ptr = new llvm::BitCastInst(ptr, ptrType, "ptr_cast_for_load", callInst);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--            load = new llvm::LoadInst(ptr, callInst->getName(), false /* not volatile */,
--                                      g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align,
--                                      (llvm::Instruction *)NULL);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-             load = new llvm::LoadInst(
-                 ptr, callInst->getName(), false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-@@ -3129,9 +3105,7 @@ bool ImproveMemoryOpsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ImproveMemoryOpsPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ImproveMemoryOpsPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -3424,9 +3398,7 @@ llvm::Value *lGEPAndLoad(llvm::Value *basePtr, int64_t offset, int align, llvm::
-                          llvm::Type *type) {
-     llvm::Value *ptr = lGEPInst(basePtr, LLVMInt64(offset), "new_base", insertBefore);
-     ptr = new llvm::BitCastInst(ptr, llvm::PointerType::get(type, 0), "ptr_cast", insertBefore);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, align, insertBefore);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-     return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, llvm::MaybeAlign(align), insertBefore);
- #else // LLVM 11.0+
-     return new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-@@ -4135,9 +4107,7 @@ bool GatherCoalescePass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool GatherCoalescePass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("GatherCoalescePass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -4467,9 +4437,7 @@ bool ReplacePseudoMemoryOpsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplacePseudoMemoryOpsPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplacePseudoMemoryOpsPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -4573,9 +4541,7 @@ bool IsCompileTimeConstantPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool IsCompileTimeConstantPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("IsCompileTimeConstantPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5201,9 +5167,7 @@ bool PeepholePass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool PeepholePass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("PeepholePass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5299,9 +5263,7 @@ bool ReplaceStdlibShiftPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceStdlibShiftPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceStdlibShiftPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5399,9 +5361,7 @@ llvm::Instruction *FixBooleanSelectPass::fixSelect(llvm::SelectInst *sel, llvm::
- }
- 
- bool FixBooleanSelectPass::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("FixBooleanSelectPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
- 
-     return modifiedAny;
-@@ -5964,9 +5924,7 @@ bool GenXGatherCoalescing::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool GenXGatherCoalescing::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("GenXGatherCoalescing::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6113,9 +6071,7 @@ bool PromoteToPrivateMemoryPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool PromoteToPrivateMemoryPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("PromoteToPrivateMemoryPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6181,9 +6137,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceLLVMIntrinsics::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceLLVMIntrinsics::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6278,9 +6232,7 @@ bool ReplaceUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceUnsupportedInsts::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceUnsupportedInsts::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6369,9 +6321,7 @@ bool CheckUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool CheckUnsupportedInsts::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("CheckUnsupportedInsts::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6440,9 +6390,7 @@ bool MangleOpenCLBuiltins::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool MangleOpenCLBuiltins::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("MangleOpenCLBuiltins::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6828,9 +6776,7 @@ bool FixAddressSpace::runOnFunction(llvm::Function &F) {
-     // Transformations are correct when the function is not internal.
-     // This is due to address space calculation algorithm.
-     // TODO: problems can be met in case of Stack Calls
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("FixAddressSpace::runOnFunction", F.getName());
--#endif
-     if (F.getLinkage() == llvm::GlobalValue::LinkageTypes::InternalLinkage)
-         return false;
- 
-@@ -6854,9 +6800,7 @@ class DemotePHIs : public llvm::FunctionPass {
- char DemotePHIs::ID = 0;
- 
- bool DemotePHIs::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("DemotePHIs::runOnFunction", F.getName());
--#endif
-     if (F.isDeclaration() || skipFunction(F))
-         return false;
-     std::vector<llvm::Instruction *> WorkList;
-diff --git a/src/type.cpp b/src/type.cpp
-index 688a4e874..fa0cb04db 100644
---- a/src/type.cpp
-+++ b/src/type.cpp
-@@ -1822,14 +1822,10 @@ llvm::DIType *StructType::GetDIType(llvm::DIScope *scope) const {
-     llvm::DIFile *diFile = pos.GetDIFile();
-     llvm::DINamespace *diSpace = pos.GetDINamespace();
-     return m->diBuilder->createStructType(diSpace, GetString(), diFile,
--                                          pos.first_line,          // Line number
--                                          layout->getSizeInBits(), // Size in bits
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                                          layout->getAlignment() * 8, // Alignment in bits
--#else                                                                 // LLVM 10.0+
-+                                          pos.first_line,                     // Line number
-+                                          layout->getSizeInBits(),            // Size in bits
-                                           layout->getAlignment().value() * 8, // Alignment in bits
--#endif
--                                          llvm::DINode::FlagZero, // Flags
-+                                          llvm::DINode::FlagZero,             // Flags
-                                           NULL, elements);
- }
- 
-diff --git a/tests/lit-tests/1771.ispc b/tests/lit-tests/1771.ispc
-index 98064d84d..4feb73dd7 100644
---- a/tests/lit-tests/1771.ispc
-+++ b/tests/lit-tests/1771.ispc
-@@ -5,7 +5,6 @@
- // RUN: %{ispc} %s --target=sse4-i16x8 --emit-asm -o - | FileCheck %s -check-prefix=CHECKSSE4_I16X8
- // RUN: %{ispc} %s --target=sse4-i8x16 --emit-asm -o - | FileCheck %s -check-prefix=CHECKSSE4_I8X16
- 
--// REQUIRES: LLVM_10_0+
- // REQUIRES: X86_ENABLED
- 
- // CHECKAVX2_I32X8: {{[a-z]*xor[a-z]*}}  %xmm0, %xmm0, %xmm0
-diff --git a/tests/lit-tests/1844.ispc b/tests/lit-tests/1844.ispc
-index 793a8866c..189edf4c3 100644
---- a/tests/lit-tests/1844.ispc
-+++ b/tests/lit-tests/1844.ispc
-@@ -6,9 +6,6 @@
- 
- // REQUIRES: X86_ENABLED
- 
--// It doesn't work for anything earlier than 10.0, but it will not be fixed, so don't run.
--// REQUIRES: LLVM_10_0+
--
- extern uniform unsigned int64 var_6;
- extern uniform unsigned int16 var_11;
- extern uniform bool arr_201 [1] [15] [20];
-diff --git a/tests/lit-tests/1926.ispc b/tests/lit-tests/1926.ispc
-index 70f7cc3c2..7921c91a6 100644
---- a/tests/lit-tests/1926.ispc
-+++ b/tests/lit-tests/1926.ispc
-@@ -2,8 +2,6 @@
- // RUN: cat %T/1926.o.json \
- // RUN:   | FileCheck %s
- 
--// REQUIRES: LLVM_10_0+
--
- // CHECK: "traceEvents"
- // CHECK: "detail"
- export uniform int foo(uniform int a[], uniform int count) {
-diff --git a/tests/lit-tests/cpus_x86.ispc b/tests/lit-tests/cpus_x86.ispc
-index 516efdd4c..4d60186f6 100644
---- a/tests/lit-tests/cpus_x86.ispc
-+++ b/tests/lit-tests/cpus_x86.ispc
-@@ -24,6 +24,8 @@
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icl
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icelake-server
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icx
-+//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tigerlake
-+//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tgl
- 
- // REQUIRES: X86_ENABLED
- 
-diff --git a/tests/lit-tests/cpus_x86_llvm10.ispc b/tests/lit-tests/cpus_x86_llvm10.ispc
-deleted file mode 100644
-index ef00000e5..000000000
---- a/tests/lit-tests/cpus_x86_llvm10.ispc
-+++ /dev/null
-@@ -1,11 +0,0 @@
--// The test checks that cpu definitions (including all synonyms) are successfully consumed by compiler.
--
--//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tigerlake
--//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tgl
--
--// REQUIRES: X86_ENABLED
--// REQUIRES: LLVM_10_0+
--
--uniform int i;
--
--void foo() {}
-diff --git a/tests/lit-tests/lit.cfg b/tests/lit-tests/lit.cfg
-index 17016579d..045e69437 100644
---- a/tests/lit-tests/lit.cfg
-+++ b/tests/lit-tests/lit.cfg
-@@ -30,11 +30,6 @@ print("Config:")
- 
- # LLVM version
- llvm_version = LooseVersion(ispc_llvm_version_number)
--if llvm_version >= LooseVersion("10.0.0"):
--    print("LLVM_10_0+: YES")
--    config.available_features.add("LLVM_10_0+")
--else:
--    print("LLVM_10_0+: NO")
- 
- if llvm_version >= LooseVersion("12.0.0"):
-     print("LLVM_12_0+: YES")
diff --git a/srcpkgs/ispc/patches/llvm12-003.patch b/srcpkgs/ispc/patches/llvm12-003.patch
deleted file mode 100644
index 0423afc9e3f9..000000000000
--- a/srcpkgs/ispc/patches/llvm12-003.patch
+++ /dev/null
@@ -1,1504 +0,0 @@
-From 1851d18b213dbad169937076176b2d5509733c76 Mon Sep 17 00:00:00 2001
-From: Deepak Rajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Tue, 12 Jan 2021 22:15:12 -0800
-Subject: [PATCH] fixes #1821 - Removing LLVMGetName() and switching to
- LLVM::Twine.
-
----
- src/ctx.cpp      | 304 ++++++++++++++++++++++-------------------------
- src/ctx.h        |  72 +++++------
- src/expr.cpp     |  36 +++---
- src/llvmutil.cpp |  17 ---
- src/llvmutil.h   |   5 -
- src/opt.cpp      | 103 +++++++++-------
- 6 files changed, 255 insertions(+), 282 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 42c4ea09d..ded524b71 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1020,8 +1020,8 @@ void FunctionEmitContext::EmitCaseLabel(int value, bool checkMask, SourcePos pos
-     llvm::BasicBlock *bbCaseImpl = NULL;
-     if (emitGenXHardwareMask()) {
-         // Create basic block with actual case implementation
--        std::string bbName = bbCase->getName().str() + "_impl";
--        bbCaseImpl = CreateBasicBlock(bbName.c_str(), bbCase);
-+        llvm::Twine bbName = llvm::Twine(bbCase->getName()) + "_impl";
-+        bbCaseImpl = CreateBasicBlock(bbName, bbCase);
-     }
- #endif
- 
-@@ -1185,7 +1185,7 @@ bool FunctionEmitContext::initLabelBBlocks(ASTNode *node, void *data) {
-     if (ctx->labelMap.find(ls->name) != ctx->labelMap.end())
-         Error(ls->pos, "Multiple labels named \"%s\" in function.", ls->name.c_str());
-     else {
--        llvm::BasicBlock *bb = ctx->CreateBasicBlock(ls->name.c_str());
-+        llvm::BasicBlock *bb = ctx->CreateBasicBlock(ls->name);
-         ctx->labelMap[ls->name] = bb;
-     }
-     return true;
-@@ -1299,7 +1299,7 @@ llvm::Value *FunctionEmitContext::Any(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_any"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_any");
- }
- 
- llvm::Value *FunctionEmitContext::All(llvm::Value *mask) {
-@@ -1315,7 +1315,7 @@ llvm::Value *FunctionEmitContext::All(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_all"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_all");
- }
- 
- llvm::Value *FunctionEmitContext::None(llvm::Value *mask) {
-@@ -1331,7 +1331,7 @@ llvm::Value *FunctionEmitContext::None(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_none"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_none");
- }
- 
- llvm::Value *FunctionEmitContext::LaneMask(llvm::Value *v) {
-@@ -1349,7 +1349,7 @@ llvm::Value *FunctionEmitContext::LaneMask(llvm::Value *v) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, v, LLVMGetName(v, "_movmsk"));
-+    return CallInst(fmm, NULL, v, llvm::Twine(v->getName()) + "_movmsk");
- }
- 
- llvm::Value *FunctionEmitContext::MasksAllEqual(llvm::Value *v1, llvm::Value *v2) {
-@@ -1364,11 +1364,12 @@ llvm::Value *FunctionEmitContext::MasksAllEqual(llvm::Value *v1, llvm::Value *v2
- #else
-     if (g->target->getArch() == Arch::wasm32) {
-         llvm::Function *fmm = m->module->getFunction("__wasm_cmp_msk_eq");
--        return CallInst(fmm, NULL, {v1, v2}, LLVMGetName("wasm_cmp_msk_eq", v1, v2));
-+        return CallInst(fmm, NULL, {v1, v2}, ((llvm::Twine("wasm_cmp_msk_eq_") + v1->getName()) + "_") + v2->getName());
-     }
-     llvm::Value *mm1 = LaneMask(v1);
-     llvm::Value *mm2 = LaneMask(v2);
--    return CmpInst(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_EQ, mm1, mm2, LLVMGetName("equal", v1, v2));
-+    return CmpInst(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_EQ, mm1, mm2,
-+                   ((llvm::Twine("equal_") + v1->getName()) + "_") + v2->getName());
- #endif
- }
- 
-@@ -1392,7 +1393,7 @@ llvm::Value *FunctionEmitContext::GetStringPtr(const std::string &str) {
-     return new llvm::BitCastInst(lstrPtr, LLVMTypes::VoidPointerType, "str_void_ptr", bblock);
- }
- 
--llvm::BasicBlock *FunctionEmitContext::CreateBasicBlock(const char *name, llvm::BasicBlock *insertAfter) {
-+llvm::BasicBlock *FunctionEmitContext::CreateBasicBlock(const llvm::Twine &name, llvm::BasicBlock *insertAfter) {
-     llvm::BasicBlock *newBB = llvm::BasicBlock::Create(*g->ctx, name, llvmFunction);
-     if (insertAfter)
-         newBB->moveAfter(insertAfter);
-@@ -1416,14 +1417,15 @@ llvm::Value *FunctionEmitContext::I1VecToBoolVec(llvm::Value *b) {
- 
-         for (unsigned int i = 0; i < at->getNumElements(); ++i) {
-             llvm::Value *elt = ExtractInst(b, i);
--            llvm::Value *sext = SwitchBoolSize(elt, LLVMTypes::BoolVectorStorageType, LLVMGetName(elt, "_to_boolvec"));
-+            llvm::Value *sext =
-+                SwitchBoolSize(elt, LLVMTypes::BoolVectorStorageType, llvm::Twine(elt->getName()) + "_to_boolvec");
-             ret = InsertInst(ret, sext, i);
-         }
-         return ret;
-     } else {
-         // For non-array types, convert to 'LLVMTypes::BoolVectorType' if
-         // necessary.
--        return SwitchBoolSize(b, LLVMTypes::BoolVectorType, LLVMGetName(b, "_to_boolvec"));
-+        return SwitchBoolSize(b, LLVMTypes::BoolVectorType, llvm::Twine(b->getName()) + "_to_boolvec");
-     }
- }
- 
-@@ -1563,7 +1565,7 @@ static int lArrayVectorWidth(llvm::Type *t) {
- }
- 
- llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps inst, llvm::Value *v0, llvm::Value *v1,
--                                                 const char *name) {
-+                                                 const llvm::Twine &name) {
-     if (v0 == NULL || v1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1573,7 +1575,7 @@ llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps in
-     llvm::Type *type = v0->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *bop = llvm::BinaryOperator::Create(inst, v0, v1, name ? name : "", bblock);
-+        llvm::Instruction *bop = llvm::BinaryOperator::Create(inst, v0, v1, name, bblock);
-         AddDebugPos(bop);
-         return bop;
-     } else {
-@@ -1591,7 +1593,7 @@ llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps in
-     }
- }
- 
--llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const char *name) {
-+llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const llvm::Twine &name) {
-     if (v == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1603,14 +1605,14 @@ llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const char *name)
-     llvm::Type *type = v->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *binst = llvm::BinaryOperator::CreateNot(v, name ? name : "not", bblock);
-+        llvm::Instruction *binst = llvm::BinaryOperator::CreateNot(v, name.isTriviallyEmpty() ? "not" : name, bblock);
-         AddDebugPos(binst);
-         return binst;
-     } else {
-         llvm::Value *ret = llvm::UndefValue::get(type);
-         for (int i = 0; i < arraySize; ++i) {
-             llvm::Value *a = ExtractInst(v, i);
--            llvm::Value *op = llvm::BinaryOperator::CreateNot(a, name ? name : "not", bblock);
-+            llvm::Value *op = llvm::BinaryOperator::CreateNot(a, name.isTriviallyEmpty() ? "not" : name, bblock);
-             AddDebugPos(op);
-             ret = InsertInst(ret, op, i);
-         }
-@@ -1638,7 +1640,7 @@ static llvm::Type *lGetMatchingBoolVectorType(llvm::Type *type) {
- }
- 
- llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm::CmpInst::Predicate pred,
--                                          llvm::Value *v0, llvm::Value *v1, const char *name) {
-+                                          llvm::Value *v0, llvm::Value *v1, const llvm::Twine &name) {
-     if (v0 == NULL || v1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1648,7 +1650,8 @@ llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm
-     llvm::Type *type = v0->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *ci = llvm::CmpInst::Create(inst, pred, v0, v1, name ? name : "cmp", bblock);
-+        llvm::Instruction *ci =
-+            llvm::CmpInst::Create(inst, pred, v0, v1, name.isTriviallyEmpty() ? "cmp" : name, bblock);
-         AddDebugPos(ci);
-         return ci;
-     } else {
-@@ -1657,14 +1660,14 @@ llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm
-         for (int i = 0; i < arraySize; ++i) {
-             llvm::Value *a = ExtractInst(v0, i);
-             llvm::Value *b = ExtractInst(v1, i);
--            llvm::Value *op = CmpInst(inst, pred, a, b, name);
-+            llvm::Value *op = CmpInst(inst, pred, a, b, name.isTriviallyEmpty() ? "cmp" : name);
-             ret = InsertInst(ret, op, i);
-         }
-         return ret;
-     }
- }
- 
--llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const char *name) {
-+llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1704,21 +1707,19 @@ llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const char *n
-     return ret;
- }
- 
--llvm::Value *FunctionEmitContext::BitCastInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Value *FunctionEmitContext::BitCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_bitcast");
--
--    llvm::Instruction *inst = new llvm::BitCastInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::BitCastInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_bitcast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const char *name) {
-+llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1728,23 +1729,19 @@ llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const char *n
-         // no-op for varying pointers; they're already vectors of ints
-         return value;
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_ptr2int");
-     llvm::Type *type = LLVMTypes::PointerIntType;
--    llvm::Instruction *inst = new llvm::PtrToIntInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::PtrToIntInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_ptr2int");
--
-     llvm::Type *fromType = value->getType();
-     if (llvm::isa<llvm::VectorType>(fromType)) {
-         // varying pointer
-@@ -1752,27 +1749,26 @@ llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *t
-             // already the right type--done
-             return value;
-         else if (fromType->getScalarSizeInBits() > toType->getScalarSizeInBits())
--            return TruncInst(value, toType, name);
-+            return TruncInst(value, toType,
-+                             name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name);
-         else {
-             AssertPos(currentPos, fromType->getScalarSizeInBits() < toType->getScalarSizeInBits());
--            return ZExtInst(value, toType, name);
-+            return ZExtInst(value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name);
-         }
-     }
- 
--    llvm::Instruction *inst = new llvm::PtrToIntInst(value, toType, name, bblock);
-+    llvm::Instruction *inst = new llvm::PtrToIntInst(
-+        value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_int2ptr");
--
-     llvm::Type *fromType = value->getType();
-     if (llvm::isa<llvm::VectorType>(fromType)) {
-         // varying pointer
-@@ -1780,95 +1776,87 @@ llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *t
-             // done
-             return value;
-         else if (fromType->getScalarSizeInBits() > toType->getScalarSizeInBits())
--            return TruncInst(value, toType, name);
-+            return TruncInst(value, toType,
-+                             name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name);
-         else {
-             AssertPos(currentPos, fromType->getScalarSizeInBits() < toType->getScalarSizeInBits());
--            return ZExtInst(value, toType, name);
-+            return ZExtInst(value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name);
-         }
-     }
- 
--    llvm::Instruction *inst = new llvm::IntToPtrInst(value, toType, name, bblock);
-+    llvm::Instruction *inst = new llvm::IntToPtrInst(
-+        value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::TruncInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::TruncInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_trunc");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::TruncInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::TruncInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_trunc" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
- llvm::Instruction *FunctionEmitContext::CastInst(llvm::Instruction::CastOps op, llvm::Value *value, llvm::Type *type,
--                                                 const char *name) {
-+                                                 const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_cast");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = llvm::CastInst::Create(op, value, type, name, bblock);
-+    llvm::Instruction *inst = llvm::CastInst::Create(
-+        op, value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_cast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::FPCastInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::FPCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_cast");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = llvm::CastInst::CreateFPCast(value, type, name, bblock);
-+    llvm::Instruction *inst = llvm::CastInst::CreateFPCast(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_cast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::SExtInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::SExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_sext");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::SExtInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::SExtInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_sext" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::ZExtInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::ZExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_zext");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::ZExtInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::ZExtInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_zext" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
-@@ -1913,14 +1901,15 @@ llvm::Value *FunctionEmitContext::applyVaryingGEP(llvm::Value *basePtr, llvm::Va
-         scale = SmearUniform(scale);
-         Assert(index != NULL);
-         // offset = index * scale
--        offset = BinaryOperator(llvm::Instruction::Mul, scale, index, LLVMGetName("mul", scale, index));
-+        offset = BinaryOperator(llvm::Instruction::Mul, scale, index,
-+                                ((llvm::Twine("mul_") + scale->getName()) + "_") + index->getName());
-     }
- 
-     // For 64-bit targets, if we've been doing our offset calculations in
-     // 32 bits, we still have to convert to a 64-bit value before we
-     // actually add the offset to the pointer.
-     if (g->target->is32Bit() == false && g->opt.force32BitAddressing == true)
--        offset = SExtInst(offset, LLVMTypes::Int64VectorType, LLVMGetName(offset, "_to_64"));
-+        offset = SExtInst(offset, LLVMTypes::Int64VectorType, llvm::Twine(offset->getName()) + "_to_64");
- 
-     // Smear out the pointer to be varying; either the base pointer or the
-     // index must be varying for this method to be called.
-@@ -1929,7 +1918,7 @@ llvm::Value *FunctionEmitContext::applyVaryingGEP(llvm::Value *basePtr, llvm::Va
-     llvm::Value *varyingPtr = baseIsUniform ? SmearUniform(basePtr) : basePtr;
- 
-     // newPtr = ptr + offset
--    return BinaryOperator(llvm::Instruction::Add, varyingPtr, offset, LLVMGetName(basePtr, "_offset"));
-+    return BinaryOperator(llvm::Instruction::Add, varyingPtr, offset, llvm::Twine(basePtr->getName()) + "_offset");
- }
- 
- void FunctionEmitContext::MatchIntegerTypes(llvm::Value **v0, llvm::Value **v1) {
-@@ -2006,13 +1995,13 @@ llvm::Value *FunctionEmitContext::MakeSlicePointer(llvm::Value *ptr, llvm::Value
-     llvm::StructType *st = llvm::StructType::get(*g->ctx, eltTypes);
- 
-     llvm::Value *ret = llvm::UndefValue::get(st);
--    ret = InsertInst(ret, ptr, 0, LLVMGetName(ret, "_slice_ptr"));
--    ret = InsertInst(ret, offset, 1, LLVMGetName(ret, "_slice_offset"));
-+    ret = InsertInst(ret, ptr, 0, llvm::Twine(ret->getName()) + "_slice_ptr");
-+    ret = InsertInst(ret, offset, 1, llvm::Twine(ret->getName()) + "_slice_offset");
-     return ret;
- }
- 
- llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index, const Type *ptrRefType,
--                                                    const char *name) {
-+                                                    const llvm::Twine &name) {
-     if (basePtr == NULL || index == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2065,8 +2054,8 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
-         // uniform, so just emit the regular LLVM GEP instruction
-         llvm::Value *ind[1] = {index};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&ind[0], &ind[1]);
--        llvm::Instruction *inst =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "gep", bblock);
-+        llvm::Instruction *inst = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                                  name.isTriviallyEmpty() ? "gep" : name, bblock);
-         AddDebugPos(inst);
-         return inst;
-     } else
-@@ -2074,7 +2063,7 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
- }
- 
- llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0, llvm::Value *index1,
--                                                    const Type *ptrRefType, const char *name) {
-+                                                    const Type *ptrRefType, const llvm::Twine &name) {
-     if (basePtr == NULL || index0 == NULL || index1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2114,8 +2103,8 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
-         // uniform, so just emit the regular LLVM GEP instruction
-         llvm::Value *indices[2] = {index0, index1};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&indices[0], &indices[2]);
--        llvm::Instruction *inst =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "gep", bblock);
-+        llvm::Instruction *inst = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                                  name.isTriviallyEmpty() ? "gep" : name, bblock);
-         AddDebugPos(inst);
-         return inst;
-     } else {
-@@ -2138,7 +2127,7 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
- }
- 
- llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int elementNum, const Type *ptrRefType,
--                                                   const char *name, const PointerType **resultPtrType) {
-+                                                   const llvm::Twine &name, const PointerType **resultPtrType) {
-     if (resultPtrType != NULL)
-         AssertPos(currentPos, ptrRefType != NULL);
- 
-@@ -2195,8 +2184,8 @@ llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int
-         // If the pointer is uniform, we can use the regular LLVM GEP.
-         llvm::Value *offsets[2] = {LLVMInt32(0), LLVMInt32(elementNum)};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&offsets[0], &offsets[2]);
--        resultPtr =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "struct_offset", bblock);
-+        resultPtr = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                    name.isTriviallyEmpty() ? "struct_offset" : name, bblock);
-     } else {
-         // Otherwise do the math to find the offset and add it to the given
-         // varying pointers
-@@ -2237,7 +2226,7 @@ llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int
-         return resultPtr;
- }
- 
--llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if ((value == NULL) || (toType == NULL)) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2248,20 +2237,18 @@ llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type
-     llvm::Value *newBool = value;
-     if (g->target->getDataLayout()->getTypeSizeInBits(fromType) >
-         g->target->getDataLayout()->getTypeSizeInBits(toType)) {
--        if (name == NULL)
--            name = LLVMGetName(value, "_switchBool");
--        newBool = TruncInst(value, toType, name);
-+        newBool =
-+            TruncInst(value, toType, name.isTriviallyEmpty() ? (llvm::Twine(value->getName()) + "_switchBool") : name);
-     } else if (g->target->getDataLayout()->getTypeSizeInBits(fromType) <
-                g->target->getDataLayout()->getTypeSizeInBits(toType)) {
--        if (name == NULL)
--            name = LLVMGetName(value, "_switchBool");
--        newBool = SExtInst(value, toType, name);
-+        newBool =
-+            SExtInst(value, toType, name.isTriviallyEmpty() ? (llvm::Twine(value->getName()) + "_switchBool") : name);
-     }
- 
-     return newBool;
- }
- 
--llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, const char *name) {
-+llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, const llvm::Twine &name) {
-     if (ptr == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2270,13 +2257,13 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
-     llvm::PointerType *pt = llvm::dyn_cast<llvm::PointerType>(ptr->getType());
-     AssertPos(currentPos, pt != NULL);
- 
--    if (name == NULL)
--        name = LLVMGetName(ptr, "_load");
--
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    llvm::LoadInst *inst = new llvm::LoadInst(pt->getPointerElementType(), ptr, name, bblock);
-+    llvm::LoadInst *inst =
-+        new llvm::LoadInst(pt->getPointerElementType(), ptr,
-+                           name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name, bblock);
- #else
--    llvm::LoadInst *inst = new llvm::LoadInst(ptr, name, bblock);
-+    llvm::LoadInst *inst =
-+        new llvm::LoadInst(ptr, name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name, bblock);
- #endif
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
-@@ -2307,8 +2294,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
- static llvm::Value *lFinalSliceOffset(FunctionEmitContext *ctx, llvm::Value *ptr, const PointerType **ptrType) {
-     Assert(CastType<PointerType>(*ptrType) != NULL);
- 
--    llvm::Value *slicePtr = ctx->ExtractInst(ptr, 0, LLVMGetName(ptr, "_ptr"));
--    llvm::Value *sliceOffset = ctx->ExtractInst(ptr, 1, LLVMGetName(ptr, "_offset"));
-+    llvm::Value *slicePtr = ctx->ExtractInst(ptr, 0, llvm::Twine(ptr->getName()) + "_ptr");
-+    llvm::Value *sliceOffset = ctx->ExtractInst(ptr, 1, llvm::Twine(ptr->getName()) + "_offset");
- 
-     // slicePtr should be a pointer to an soa-width wide array of the
-     // final atomic/enum/pointer type
-@@ -2327,14 +2314,14 @@ static llvm::Value *lFinalSliceOffset(FunctionEmitContext *ctx, llvm::Value *ptr
-         slicePtr = ctx->BitCastInst(slicePtr, (*ptrType)->LLVMType(g->ctx));
- 
-     // And finally index based on the slice offset
--    return ctx->GetElementPtrInst(slicePtr, sliceOffset, *ptrType, LLVMGetName(slicePtr, "_final_gep"));
-+    return ctx->GetElementPtrInst(slicePtr, sliceOffset, *ptrType, llvm::Twine(slicePtr->getName()) + "_final_gep");
- }
- 
- /** Utility routine that loads from a uniform pointer to soa<> data,
-     returning a regular uniform (non-SOA result).
-  */
- llvm::Value *FunctionEmitContext::loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType,
--                                                     const char *name) {
-+                                                     const llvm::Twine &name) {
-     const Type *unifType = ptrType->GetBaseType()->GetAsUniformType();
- 
-     const CollectionType *ct = CastType<CollectionType>(ptrType->GetBaseType());
-@@ -2363,7 +2350,7 @@ llvm::Value *FunctionEmitContext::loadUniformFromSOA(llvm::Value *ptr, llvm::Val
- }
- 
- llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrRefType,
--                                           const char *name, bool one_elem) {
-+                                           const llvm::Twine &name, bool one_elem) {
-     if (ptr == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2371,9 +2358,6 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
- 
-     AssertPos(currentPos, ptrRefType != NULL && mask != NULL);
- 
--    if (name == NULL)
--        name = LLVMGetName(ptr, "_load");
--
-     const PointerType *ptrType;
-     const Type *elType;
-     if (CastType<ReferenceType>(ptrRefType) != NULL) {
-@@ -2393,7 +2377,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
- 
-     if (ptrType->IsUniformType()) {
-         if (ptrType->IsSlice()) {
--            return loadUniformFromSOA(ptr, mask, ptrType, name);
-+            return loadUniformFromSOA(ptr, mask, ptrType,
-+                                      name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name);
-         } else {
-             // FIXME: same issue as above load inst regarding alignment...
-             //
-@@ -2405,11 +2390,15 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-             const AtomicType *atomicType = CastType<AtomicType>(ptrType->GetBaseType());
- 
- #if ISPC_LLVM_VERSION <= ISPC_LLVM_10_0
--            llvm::LoadInst *inst = new llvm::LoadInst(ptr, name, false /* not volatile */, bblock);
-+            llvm::LoadInst *inst =
-+                new llvm::LoadInst(ptr, name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name,
-+                                   false /* not volatile */, bblock);
- #else // LLVM 11.0+
-             llvm::PointerType *ptr_type = llvm::dyn_cast<llvm::PointerType>(ptr->getType());
-             llvm::LoadInst *inst =
--                new llvm::LoadInst(ptr_type->getPointerElementType(), ptr, name, false /* not volatile */, bblock);
-+                new llvm::LoadInst(ptr_type->getPointerElementType(), ptr,
-+                                   name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name,
-+                                   false /* not volatile */, bblock);
- #endif
- 
-             if (atomicType != NULL && atomicType->IsVaryingType()) {
-@@ -2433,7 +2422,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-     } else {
-         // Otherwise we should have a varying ptr and it's time for a
-         // gather.
--        llvm::Value *gather_result = gather(ptr, ptrType, GetFullMask(), name);
-+        llvm::Value *gather_result = gather(ptr, ptrType, GetFullMask(),
-+                                            name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name);
-         if (!one_elem)
-             return gather_result;
- 
-@@ -2453,19 +2443,19 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-         // We can actually call either one, since both are i32s as far as
-         // LLVM's type system is concerned...
-         llvm::Function *fmm = mm[0]->function;
--        llvm::Value *int_mask = CallInst(fmm, NULL, mask, LLVMGetName(mask, "_movmsk"));
-+        llvm::Value *int_mask = CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_movmsk");
-         std::vector<Symbol *> lz;
-         m->symbolTable->LookupFunction("__count_trailing_zeros_i64", &lz);
-         llvm::Function *flz = lz[0]->function;
--        llvm::Value *elem_idx = CallInst(flz, NULL, int_mask, LLVMGetName(mask, "_clz"));
--        llvm::Value *elem = llvm::ExtractElementInst::Create(gather_result, elem_idx,
--                                                             LLVMGetName(gather_result, "_umasked_elem"), bblock);
-+        llvm::Value *elem_idx = CallInst(flz, NULL, int_mask, llvm::Twine(mask->getName()) + "_clz");
-+        llvm::Value *elem = llvm::ExtractElementInst::Create(
-+            gather_result, elem_idx, llvm::Twine(gather_result->getName()) + "_umasked_elem", bblock);
-         return elem;
-     }
- }
- 
- llvm::Value *FunctionEmitContext::gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask,
--                                         const char *name) {
-+                                         const llvm::Twine &name) {
-     // We should have a varying pointer if we get here...
-     AssertPos(currentPos, ptrType->IsVaryingType());
- 
-@@ -2602,7 +2592,8 @@ void FunctionEmitContext::addGSMetadata(llvm::Value *v, SourcePos pos) {
-     inst->setMetadata("last_column", md);
- }
- 
--llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *name, int align, bool atEntryBlock) {
-+llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const llvm::Twine &name, int align,
-+                                             bool atEntryBlock) {
-     if (llvmType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2615,12 +2606,12 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-         llvm::Instruction *retInst = allocaBlock->getTerminator();
-         AssertPos(currentPos, retInst);
-         unsigned AS = llvmFunction->getParent()->getDataLayout().getAllocaAddrSpace();
--        inst = new llvm::AllocaInst(llvmType, AS, name ? name : "", retInst);
-+        inst = new llvm::AllocaInst(llvmType, AS, name, retInst);
-     } else {
-         // Unless the caller overrode the default and wants it in the
-         // current basic block
-         unsigned AS = llvmFunction->getParent()->getDataLayout().getAllocaAddrSpace();
--        inst = new llvm::AllocaInst(llvmType, AS, name ? name : "", bblock);
-+        inst = new llvm::AllocaInst(llvmType, AS, name, bblock);
-     }
- 
-     // If no alignment was specified but we have an array of a uniform
-@@ -2639,7 +2630,8 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::AllocaInst(const Type *ptrType, const char *name, int align, bool atEntryBlock) {
-+llvm::Value *FunctionEmitContext::AllocaInst(const Type *ptrType, const llvm::Twine &name, int align,
-+                                             bool atEntryBlock) {
-     if (ptrType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3075,66 +3067,59 @@ llvm::Instruction *FunctionEmitContext::BranchInst(llvm::BasicBlock *trueBlock,
-     return b;
- }
- 
--llvm::Value *FunctionEmitContext::ExtractInst(llvm::Value *v, int elt, const char *name) {
-+llvm::Value *FunctionEmitContext::ExtractInst(llvm::Value *v, int elt, const llvm::Twine &name) {
-     if (v == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_extract_%d", elt);
--        name = LLVMGetName(v, buf);
--    }
-     llvm::Instruction *ei = NULL;
-     if (llvm::isa<llvm::VectorType>(v->getType()))
--        ei = llvm::ExtractElementInst::Create(v, LLVMInt32(elt), name, bblock);
-+        ei = llvm::ExtractElementInst::Create(
-+            v, LLVMInt32(elt),
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_extract_") + llvm::Twine(elt)) : name, bblock);
-     else
--        ei = llvm::ExtractValueInst::Create(v, elt, name, bblock);
-+        ei = llvm::ExtractValueInst::Create(
-+            v, elt, name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_extract_") + llvm::Twine(elt)) : name,
-+            bblock);
-     AddDebugPos(ei);
-     return ei;
- }
- 
--llvm::Value *FunctionEmitContext::InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const char *name) {
-+llvm::Value *FunctionEmitContext::InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const llvm::Twine &name) {
-     if (v == NULL || eltVal == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_insert_%d", elt);
--        name = LLVMGetName(v, buf);
--    }
--
-     llvm::Instruction *ii = NULL;
-     if (llvm::isa<llvm::VectorType>(v->getType()))
--        ii = llvm::InsertElementInst::Create(v, eltVal, LLVMInt32(elt), name, bblock);
-+        ii = llvm::InsertElementInst::Create(
-+            v, eltVal, LLVMInt32(elt),
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_insert_") + llvm::Twine(elt)) : name, bblock);
-     else
--        ii = llvm::InsertValueInst::Create(v, eltVal, elt, name, bblock);
-+        ii = llvm::InsertValueInst::Create(
-+            v, eltVal, elt,
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_insert_") + llvm::Twine(elt)) : name, bblock);
-     AddDebugPos(ii);
-     return ii;
- }
- 
--llvm::Value *FunctionEmitContext::ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const char *name) {
-+llvm::Value *FunctionEmitContext::ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask,
-+                                              const llvm::Twine &name) {
-     if (v1 == NULL || v2 == NULL || mask == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_shuffle");
--        name = LLVMGetName(v1, buf);
--    }
--
--    llvm::Instruction *ii = new llvm::ShuffleVectorInst(v1, v2, mask, name, bblock);
-+    llvm::Instruction *ii = new llvm::ShuffleVectorInst(
-+        v1, v2, mask, name.isTriviallyEmpty() ? (llvm::Twine(v1->getName()) + "_shuffle") : name, bblock);
- 
-     AddDebugPos(ii);
-     return ii;
- }
- 
--llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vecType, const char *name) {
-+llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vecType, const llvm::Twine &name) {
-     if (v == NULL || vecType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3148,12 +3133,6 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     Assert(ty && ty->getVectorElementType() == v->getType());
- #endif
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_broadcast");
--        name = LLVMGetName(v, buf);
--    }
--
-     // Generate the following sequence:
-     //   %name_init.i = insertelement <4 x i32> undef, i32 %val, i32 0
-     //   %name.i = shufflevector <4 x i32> %name_init.i, <4 x i32> undef,
-@@ -3163,7 +3142,7 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     llvm::Value *undef2 = llvm::UndefValue::get(vecType);
- 
-     // InsertElement
--    llvm::Twine tw = llvm::Twine(name) + llvm::Twine("_init");
-+    llvm::Twine tw = name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + llvm::Twine("_init");
-     llvm::Value *insert = InsertInst(undef1, v, 0, tw.str().c_str());
- 
-     // ShuffleVector
-@@ -3179,28 +3158,27 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-         llvm::ConstantVector::getSplat(llvm::ElementCount::get(static_cast<unsigned int>(ty->getNumElements()), false),
-                                        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
- #endif
--    llvm::Value *ret = ShuffleInst(insert, undef2, zeroVec, name);
-+    llvm::Value *ret = ShuffleInst(insert, undef2, zeroVec,
-+                                   name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name);
- 
-     return ret;
- }
- 
--llvm::PHINode *FunctionEmitContext::PhiNode(llvm::Type *type, int count, const char *name) {
--    llvm::PHINode *pn = llvm::PHINode::Create(type, count, name ? name : "phi", bblock);
-+llvm::PHINode *FunctionEmitContext::PhiNode(llvm::Type *type, int count, const llvm::Twine &name) {
-+    llvm::PHINode *pn = llvm::PHINode::Create(type, count, name.isTriviallyEmpty() ? "phi" : name, bblock);
-     AddDebugPos(pn);
-     return pn;
- }
- 
- llvm::Instruction *FunctionEmitContext::SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1,
--                                                   const char *name) {
-+                                                   const llvm::Twine &name) {
-     if (test == NULL || val0 == NULL || val1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(test, "_select");
--
--    llvm::Instruction *inst = llvm::SelectInst::Create(test, val0, val1, name, bblock);
-+    llvm::Instruction *inst = llvm::SelectInst::Create(
-+        test, val0, val1, name.isTriviallyEmpty() ? (llvm::Twine(test->getName()) + "_select") : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
-@@ -3226,7 +3204,7 @@ static unsigned int lCalleeArgCount(llvm::Value *callee, const FunctionType *fun
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType,
--                                           const std::vector<llvm::Value *> &args, const char *name) {
-+                                           const std::vector<llvm::Value *> &args, const llvm::Twine &name) {
-     if (func == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3258,9 +3236,9 @@ llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-         llvm::PointerType *func_ptr_type = llvm::dyn_cast<llvm::PointerType>(func->getType());
-         llvm::FunctionType *func_type = llvm::dyn_cast<llvm::FunctionType>(func_ptr_type->getPointerElementType());
--        llvm::CallInst *callinst = llvm::CallInst::Create(func_type, func, argVals, name ? name : "", bblock);
-+        llvm::CallInst *callinst = llvm::CallInst::Create(func_type, func, argVals, name, bblock);
- #else
--        llvm::CallInst *callinst = llvm::CallInst::Create(func, argVals, name ? name : "", bblock);
-+        llvm::CallInst *callinst = llvm::CallInst::Create(func, argVals, name, bblock);
- #endif
- 
-         // We could be dealing with a function pointer in which case this will not be a 'llvm::Function'.
-@@ -3464,14 +3442,14 @@ llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg,
--                                           const char *name) {
-+                                           const llvm::Twine &name) {
-     std::vector<llvm::Value *> args;
-     args.push_back(arg);
-     return CallInst(func, funcType, args, name);
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg0,
--                                           llvm::Value *arg1, const char *name) {
-+                                           llvm::Value *arg1, const llvm::Twine &name) {
-     std::vector<llvm::Value *> args;
-     args.push_back(arg0);
-     args.push_back(arg1);
-diff --git a/src/ctx.h b/src/ctx.h
-index 6e5ad74ba..48b3bb826 100644
---- a/src/ctx.h
-+++ b/src/ctx.h
-@@ -302,7 +302,7 @@ class FunctionEmitContext {
-     llvm::Value *GetStringPtr(const std::string &str);
- 
-     /** Create a new basic block with given name */
--    llvm::BasicBlock *CreateBasicBlock(const char *name, llvm::BasicBlock *insertAfter = NULL);
-+    llvm::BasicBlock *CreateBasicBlock(const llvm::Twine &name, llvm::BasicBlock *insertAfter = NULL);
- 
-     /** Given a vector with element type i1, return a vector of type
-         LLVMTypes::BoolVectorType.  This method handles the conversion for
-@@ -380,33 +380,33 @@ class FunctionEmitContext {
-         this also handles applying the given operation to the vector
-         elements. */
-     llvm::Value *BinaryOperator(llvm::Instruction::BinaryOps inst, llvm::Value *v0, llvm::Value *v1,
--                                const char *name = NULL);
-+                                const llvm::Twine &name = "");
- 
-     /** Emit the "not" operator.  Like BinaryOperator(), this also handles
-         a VectorType-based operand. */
--    llvm::Value *NotOperator(llvm::Value *v, const char *name = NULL);
-+    llvm::Value *NotOperator(llvm::Value *v, const llvm::Twine &name = "");
- 
-     /** Emit a comparison instruction.  If the operands are VectorTypes,
-         then a value for the corresponding boolean VectorType is
-         returned. */
-     llvm::Value *CmpInst(llvm::Instruction::OtherOps inst, llvm::CmpInst::Predicate pred, llvm::Value *v0,
--                         llvm::Value *v1, const char *name = NULL);
-+                         llvm::Value *v1, const llvm::Twine &name = "");
- 
-     /** Given a scalar value, return a vector of the same type (or an
-         array, for pointer types). */
--    llvm::Value *SmearUniform(llvm::Value *value, const char *name = NULL);
-+    llvm::Value *SmearUniform(llvm::Value *value, const llvm::Twine &name = "");
- 
--    llvm::Value *BitCastInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Value *PtrToIntInst(llvm::Value *value, const char *name = NULL);
--    llvm::Value *PtrToIntInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Value *IntToPtrInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+    llvm::Value *BitCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Value *PtrToIntInst(llvm::Value *value, const llvm::Twine &name = "");
-+    llvm::Value *PtrToIntInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Value *IntToPtrInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
- 
--    llvm::Instruction *TruncInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+    llvm::Instruction *TruncInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-     llvm::Instruction *CastInst(llvm::Instruction::CastOps op, llvm::Value *value, llvm::Type *type,
--                                const char *name = NULL);
--    llvm::Instruction *FPCastInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Instruction *SExtInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Instruction *ZExtInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+                                const llvm::Twine &name = "");
-+    llvm::Instruction *FPCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Instruction *SExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Instruction *ZExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
- 
-     /** Given two integer-typed values (but possibly one vector and the
-         other not, and or of possibly-different bit-widths), update their
-@@ -426,9 +426,9 @@ class FunctionEmitContext {
-         pointers.  The underlying type of the base pointer must be provided
-         via the ptrType parameter */
-     llvm::Value *GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index, const Type *ptrType,
--                                   const char *name = NULL);
-+                                   const llvm::Twine &name = "");
-     llvm::Value *GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0, llvm::Value *index1, const Type *ptrType,
--                                   const char *name = NULL);
-+                                   const llvm::Twine &name = "");
- 
-     /** This method returns a new pointer that represents offsetting the
-         given base pointer to point at the given element number of the
-@@ -436,26 +436,26 @@ class FunctionEmitContext {
-         pointer must be a pointer to a structure type.  The ptrType gives
-         the type of the pointer, though it may be NULL if the base pointer
-         is uniform. */
--    llvm::Value *AddElementOffset(llvm::Value *basePtr, int elementNum, const Type *ptrType, const char *name = NULL,
--                                  const PointerType **resultPtrType = NULL);
-+    llvm::Value *AddElementOffset(llvm::Value *basePtr, int elementNum, const Type *ptrType,
-+                                  const llvm::Twine &name = "", const PointerType **resultPtrType = NULL);
- 
-     /** Bool is stored as i8 and <WIDTH x i8> but represented in IR as i1 and
-      * <WIDTH x MASK>. This is a helper function to match bool size at storage
-      * interface. */
--    llvm::Value *SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const char *name = NULL);
-+    llvm::Value *SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name = "");
-     /** Load from the memory location(s) given by lvalue, using the given
-         mask.  The lvalue may be varying, in which case this corresponds to
-         a gather from the multiple memory locations given by the array of
-         pointer values given by the lvalue.  If the lvalue is not varying,
-         then both the mask pointer and the type pointer may be NULL. */
--    llvm::Value *LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrType, const char *name = NULL,
-+    llvm::Value *LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrType, const llvm::Twine &name = "",
-                           bool one_elem = false);
- 
-     /* Load from memory location(s) given.
-      * 'type' needs to be provided when storage type is different from IR type. For example,
-      * 'unform bool' is 'i1' in IR but stored as 'i8'.
-      * Otherwise leave this as NULL. */
--    llvm::Value *LoadInst(llvm::Value *ptr, const Type *type = NULL, const char *name = NULL);
-+    llvm::Value *LoadInst(llvm::Value *ptr, const Type *type = NULL, const llvm::Twine &name = "");
- 
-     /** Emits an alloca instruction to allocate stack storage for the given
-         type.  If a non-zero alignment is specified, the object is also
-@@ -463,7 +463,8 @@ class FunctionEmitContext {
-         instruction is added at the start of the function in the entry
-         basic block; if it should be added to the current basic block, then
-         the atEntryBlock parameter should be false. */
--    llvm::Value *AllocaInst(llvm::Type *llvmType, const char *name = NULL, int align = 0, bool atEntryBlock = true);
-+    llvm::Value *AllocaInst(llvm::Type *llvmType, const llvm::Twine &name = "", int align = 0,
-+                            bool atEntryBlock = true);
- 
-     /** Emits an alloca instruction to allocate stack storage for the given
-         type.  If a non-zero alignment is specified, the object is also
-@@ -474,7 +475,7 @@ class FunctionEmitContext {
-         This implementation is preferred when possible. It is needed when
-         storage type is different from IR type. For example,
-         'unform bool' is 'i1' in IR but stored as 'i8'. */
--    llvm::Value *AllocaInst(const Type *ptrType, const char *name = NULL, int align = 0, bool atEntryBlock = true);
-+    llvm::Value *AllocaInst(const Type *ptrType, const llvm::Twine &name = "", int align = 0, bool atEntryBlock = true);
- 
-     /** Standard store instruction; for this variant, the lvalue must be a
-         single pointer, not a varying lvalue.
-@@ -502,39 +503,41 @@ class FunctionEmitContext {
-     /** This convenience method maps to an llvm::ExtractElementInst if the
-         given value is a llvm::VectorType, and to an llvm::ExtractValueInst
-         otherwise. */
--    llvm::Value *ExtractInst(llvm::Value *v, int elt, const char *name = NULL);
-+    llvm::Value *ExtractInst(llvm::Value *v, int elt, const llvm::Twine &name = "");
- 
-     /** This convenience method maps to an llvm::InsertElementInst if the
-         given value is a llvm::VectorType, and to an llvm::InsertValueInst
-         otherwise. */
--    llvm::Value *InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const char *name = NULL);
-+    llvm::Value *InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const llvm::Twine &name = "");
- 
-     /** This convenience method maps to an llvm::ShuffleVectorInst. */
--    llvm::Value *ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const char *name = NULL);
-+    llvm::Value *ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const llvm::Twine &name = "");
- 
-     /** This convenience method to generate broadcast pattern. It takes a value
-         and a vector type. Type of the value must match element type of the
-         vector. */
--    llvm::Value *BroadcastValue(llvm::Value *v, llvm::Type *vecType, const char *name = NULL);
-+    llvm::Value *BroadcastValue(llvm::Value *v, llvm::Type *vecType, const llvm::Twine &name = "");
- 
--    llvm::PHINode *PhiNode(llvm::Type *type, int count, const char *name = NULL);
--    llvm::Instruction *SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1, const char *name = NULL);
-+    llvm::PHINode *PhiNode(llvm::Type *type, int count, const llvm::Twine &name = "");
-+    llvm::Instruction *SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1,
-+                                  const llvm::Twine &name = "");
- 
-     /** Emits IR to do a function call with the given arguments.  If the
-         function type is a varying function pointer type, its full type
-         must be provided in funcType.  funcType can be NULL if func is a
-         uniform function pointer. */
-     llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, const std::vector<llvm::Value *> &args,
--                          const char *name = NULL);
-+                          const llvm::Twine &name = "");
- 
-     /** This is a convenience method that issues a call instruction to a
-         function that takes just a single argument. */
--    llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg, const char *name = NULL);
-+    llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg,
-+                          const llvm::Twine &name = "");
- 
-     /** This is a convenience method that issues a call instruction to a
-         function that takes two arguments. */
-     llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg0, llvm::Value *arg1,
--                          const char *name = NULL);
-+                          const llvm::Twine &name = "");
- 
-     /** Launch an asynchronous task to run the given function, passing it
-         he given argument values. */
-@@ -756,9 +759,10 @@ class FunctionEmitContext {
-     void maskedStore(llvm::Value *value, llvm::Value *ptr, const Type *ptrType, llvm::Value *mask);
-     void storeUniformToSOA(llvm::Value *value, llvm::Value *ptr, llvm::Value *mask, const Type *valueType,
-                            const PointerType *ptrType);
--    llvm::Value *loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType, const char *name);
-+    llvm::Value *loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType,
-+                                    const llvm::Twine &name = "");
- 
--    llvm::Value *gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask, const char *name);
-+    llvm::Value *gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask, const llvm::Twine &name = "");
- 
-     llvm::Value *addVaryingOffsetsIfNeeded(llvm::Value *ptr, const Type *ptrType);
- };
-diff --git a/src/expr.cpp b/src/expr.cpp
-index 80cc3020a..6d38d1889 100644
---- a/src/expr.cpp
-+++ b/src/expr.cpp
-@@ -1021,11 +1021,11 @@ static llvm::Value *lEmitNegate(Expr *arg, SourcePos pos, FunctionEmitContext *c
-     ctx->SetDebugPos(pos);
-     if (type->IsFloatType()) {
-         llvm::Value *zero = llvm::ConstantFP::getZeroValueForNegation(type->LLVMType(g->ctx));
--        return ctx->BinaryOperator(llvm::Instruction::FSub, zero, argVal, LLVMGetName(argVal, "_negate"));
-+        return ctx->BinaryOperator(llvm::Instruction::FSub, zero, argVal, llvm::Twine(argVal->getName()) + "_negate");
-     } else {
-         llvm::Value *zero = lLLVMConstantValue(type, g->ctx, 0.);
-         AssertPos(pos, type->IsIntType());
--        return ctx->BinaryOperator(llvm::Instruction::Sub, zero, argVal, LLVMGetName(argVal, "_negate"));
-+        return ctx->BinaryOperator(llvm::Instruction::Sub, zero, argVal, llvm::Twine(argVal->getName()) + "_negate");
-     }
- }
- 
-@@ -1047,11 +1047,11 @@ llvm::Value *UnaryExpr::GetValue(FunctionEmitContext *ctx) const {
-         return lEmitNegate(expr, pos, ctx);
-     case LogicalNot: {
-         llvm::Value *argVal = expr->GetValue(ctx);
--        return ctx->NotOperator(argVal, LLVMGetName(argVal, "_logicalnot"));
-+        return ctx->NotOperator(argVal, llvm::Twine(argVal->getName()) + "_logicalnot");
-     }
-     case BitNot: {
-         llvm::Value *argVal = expr->GetValue(ctx);
--        return ctx->NotOperator(argVal, LLVMGetName(argVal, "_bitnot"));
-+        return ctx->NotOperator(argVal, llvm::Twine(argVal->getName()) + "_bitnot");
-     }
-     default:
-         FATAL("logic error");
-@@ -1518,7 +1518,8 @@ static llvm::Value *lEmitBinaryArith(BinaryExpr::Op op, llvm::Value *value0, llv
-             return NULL;
-         }
- 
--        return ctx->BinaryOperator(inst, value0, value1, LLVMGetName(opName, value0, value1));
-+        return ctx->BinaryOperator(inst, value0, value1,
-+                                   (((llvm::Twine(opName) + "_") + value0->getName()) + "_") + value1->getName());
-     }
- }
- 
-@@ -1563,7 +1564,7 @@ static llvm::Value *lEmitBinaryCmp(BinaryExpr::Op op, llvm::Value *e0Val, llvm::
-     }
- 
-     llvm::Value *cmp = ctx->CmpInst(isFloatOp ? llvm::Instruction::FCmp : llvm::Instruction::ICmp, pred, e0Val, e1Val,
--                                    LLVMGetName(opName, e0Val, e1Val));
-+                                    (((llvm::Twine(opName) + "_") + e0Val->getName()) + "_") + e1Val->getName());
-     // This is a little ugly: CmpInst returns i1 values, but we use vectors
-     // of i32s for varying bool values; type convert the result here if
-     // needed.
-@@ -4177,7 +4178,7 @@ static llvm::Value *lConvertToSlicePointer(FunctionEmitContext *ctx, llvm::Value
-     // offsets
-     llvm::Value *result = llvm::Constant::getNullValue(sliceStructType);
-     // And replace the pointer in the struct with the given pointer
--    return ctx->InsertInst(result, ptr, 0, LLVMGetName(ptr, "_slice"));
-+    return ctx->InsertInst(result, ptr, 0, llvm::Twine(ptr->getName()) + "_slice");
- }
- 
- /** If the given array index is a compile time constant, check to see if it
-@@ -4258,8 +4259,8 @@ llvm::Value *IndexExpr::GetLValue(FunctionEmitContext *ctx) const {
-         // Convert to a slice pointer if we're indexing into SOA data
-         basePtrValue = lConvertPtrToSliceIfNeeded(ctx, basePtrValue, &baseExprType);
- 
--        llvm::Value *ptr =
--            ctx->GetElementPtrInst(basePtrValue, indexValue, baseExprType, LLVMGetName(basePtrValue, "_offset"));
-+        llvm::Value *ptr = ctx->GetElementPtrInst(basePtrValue, indexValue, baseExprType,
-+                                                  llvm::Twine(basePtrValue->getName()) + "_offset");
-         return lAddVaryingOffsetsIfNeeded(ctx, ptr, GetLValueType());
-     }
- 
-@@ -4290,8 +4291,8 @@ llvm::Value *IndexExpr::GetLValue(FunctionEmitContext *ctx) const {
-     ctx->SetDebugPos(pos);
- 
-     // And do the actual indexing calculation..
--    llvm::Value *ptr =
--        ctx->GetElementPtrInst(basePtr, LLVMInt32(0), indexValue, basePtrType, LLVMGetName(basePtr, "_offset"));
-+    llvm::Value *ptr = ctx->GetElementPtrInst(basePtr, LLVMInt32(0), indexValue, basePtrType,
-+                                              llvm::Twine(basePtr->getName()) + "_offset");
-     return lAddVaryingOffsetsIfNeeded(ctx, ptr, GetLValueType());
- }
- 
-@@ -4788,15 +4789,14 @@ llvm::Value *VectorMemberExpr::GetValue(FunctionEmitContext *ctx) const {
-         for (size_t i = 0; i < identifier.size(); ++i) {
-             char idStr[2] = {identifier[i], '\0'};
-             llvm::Value *elementPtr =
--                ctx->AddElementOffset(basePtr, indices[i], basePtrType, LLVMGetName(basePtr, idStr));
-+                ctx->AddElementOffset(basePtr, indices[i], basePtrType, llvm::Twine(basePtr->getName()) + idStr);
-             llvm::Value *elementValue = ctx->LoadInst(elementPtr, elementMask, elementPtrType);
- 
--            const char *resultName = LLVMGetName(resultPtr, idStr);
--            llvm::Value *ptmp = ctx->AddElementOffset(resultPtr, i, NULL, resultName);
-+            llvm::Value *ptmp = ctx->AddElementOffset(resultPtr, i, NULL, llvm::Twine(resultPtr->getName()) + idStr);
-             ctx->StoreInst(elementValue, ptmp, elementPtrType, expr->GetType()->IsUniformType());
-         }
- 
--        return ctx->LoadInst(resultPtr, memberType, LLVMGetName(basePtr, "_swizzle"));
-+        return ctx->LoadInst(resultPtr, memberType, llvm::Twine(basePtr->getName()) + "_swizzle");
-     }
- }
- 
-@@ -4932,7 +4932,7 @@ llvm::Value *MemberExpr::GetValue(FunctionEmitContext *ctx) const {
- 
-     ctx->SetDebugPos(pos);
-     std::string suffix = std::string("_") + identifier;
--    return ctx->LoadInst(lvalue, mask, lvalueType, LLVMGetName(lvalue, suffix.c_str()));
-+    return ctx->LoadInst(lvalue, mask, lvalueType, llvm::Twine(lvalue->getName()) + suffix);
- }
- 
- const Type *MemberExpr::GetType() const { return NULL; }
-@@ -6502,7 +6502,7 @@ static llvm::Value *lTypeConvAtomic(FunctionEmitContext *ctx, llvm::Value *exprV
-                 // does for everyone else...
-                 Assert(cast);
-                 cast = ctx->SwitchBoolSize(cast, LLVMTypes::BoolVectorType->getElementType(),
--                                           LLVMGetName(cast, "to_i_bool"));
-+                                           llvm::Twine(cast->getName()) + "to_i_bool");
-             }
-         } else {
-             // fromType->IsVaryingType())
-@@ -8246,7 +8246,7 @@ llvm::Value *NewExpr::GetValue(FunctionEmitContext *ctx) const {
-         // pointer of the return type and to run the code for initializers,
-         // if present.
-         llvm::Type *ptrType = retType->LLVMType(g->ctx);
--        ptrValue = ctx->BitCastInst(ptrValue, ptrType, LLVMGetName(ptrValue, "_cast_ptr"));
-+        ptrValue = ctx->BitCastInst(ptrValue, ptrType, llvm::Twine(ptrValue->getName()) + "_cast_ptr");
- 
-         if (initExpr != NULL)
-             InitSymbol(ptrValue, allocType, initExpr, ctx, pos);
-diff --git a/src/llvmutil.cpp b/src/llvmutil.cpp
-index 970175dbf..d0becb9f5 100644
---- a/src/llvmutil.cpp
-+++ b/src/llvmutil.cpp
-@@ -1605,23 +1605,6 @@ llvm::Value *LLVMShuffleVectors(llvm::Value *v1, llvm::Value *v2, int32_t shuf[]
-     return new llvm::ShuffleVectorInst(v1, v2, vec, "shuffle", insertBefore);
- }
- 
--const char *LLVMGetName(llvm::Value *v, const char *s) {
--    if (v == NULL)
--        return s;
--    std::string ret = std::string(v->getName());
--    ret += s;
--    return strdup(ret.c_str());
--}
--
--const char *LLVMGetName(const char *op, llvm::Value *v1, llvm::Value *v2) {
--    std::string r = op;
--    r += "_";
--    r += v1->getName().str();
--    r += "_";
--    r += v2->getName().str();
--    return strdup(r.c_str());
--}
--
- #ifdef ISPC_GENX_ENABLED
- bool lIsSVMLoad(llvm::Instruction *inst) {
-     Assert(inst);
-diff --git a/src/llvmutil.h b/src/llvmutil.h
-index 42cce4d83..07d089bb4 100644
---- a/src/llvmutil.h
-+++ b/src/llvmutil.h
-@@ -328,11 +328,6 @@ extern llvm::Value *LLVMConcatVectors(llvm::Value *v1, llvm::Value *v2, llvm::In
- extern llvm::Value *LLVMShuffleVectors(llvm::Value *v1, llvm::Value *v2, int32_t shuf[], int shufSize,
-                                        llvm::Instruction *insertBefore);
- 
--/** Utility routines to concat strings with the names of existing values to
--    create meaningful new names for instruction values.
--*/
--extern const char *LLVMGetName(llvm::Value *v, const char *);
--extern const char *LLVMGetName(const char *op, llvm::Value *v1, llvm::Value *v2);
- #ifdef ISPC_GENX_ENABLED
- enum AddressSpace { Local, Global, External };
- 
-diff --git a/src/opt.cpp b/src/opt.cpp
-index 5b1ac7b63..9d6cae058 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -257,7 +257,7 @@ static bool lGetSourcePosFromMetadata(const llvm::Instruction *inst, SourcePos *
-     return true;
- }
- 
--static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, const char *name,
-+static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[2] = {arg0, arg1};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[2]);
-@@ -265,21 +265,22 @@ static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llv
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    const char *name, llvm::Instruction *insertBefore = NULL) {
-+                                    const llvm::Twine &name, llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[3] = {arg0, arg1, arg2};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[3]);
-     return llvm::CallInst::Create(func, newArgArray, name, insertBefore);
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, const char *name, llvm::Instruction *insertBefore = NULL) {
-+                                    llvm::Value *arg3, const llvm::Twine &name,
-+                                    llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[4] = {arg0, arg1, arg2, arg3};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[4]);
-     return llvm::CallInst::Create(func, newArgArray, name, insertBefore);
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, llvm::Value *arg4, const char *name,
-+                                    llvm::Value *arg3, llvm::Value *arg4, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[5] = {arg0, arg1, arg2, arg3, arg4};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[5]);
-@@ -287,7 +288,7 @@ static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llv
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, llvm::Value *arg4, llvm::Value *arg5, const char *name,
-+                                    llvm::Value *arg3, llvm::Value *arg4, llvm::Value *arg5, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[6] = {arg0, arg1, arg2, arg3, arg4, arg5};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[6]);
-@@ -991,23 +992,24 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 llvm::Type *returnType = callInst->getType();
-                 Assert(llvm::isa<llvm::VectorType>(returnType));
-                 // cast the i8 * to the appropriate type
--                const char *name = LLVMGetName(callInst->getArgOperand(0), "_cast");
--                llvm::Value *castPtr = new llvm::BitCastInst(callInst->getArgOperand(0),
--                                                             llvm::PointerType::get(returnType, 0), name, callInst);
-+                llvm::Value *castPtr =
-+                    new llvm::BitCastInst(callInst->getArgOperand(0), llvm::PointerType::get(returnType, 0),
-+                                          llvm::Twine(callInst->getArgOperand(0)->getName()) + "_cast", callInst);
-                 lCopyMetadata(castPtr, callInst);
-                 int align;
-                 if (g->opt.forceAlignedMemory)
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
--                name = LLVMGetName(callInst->getArgOperand(0), "_load");
- #if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
--                llvm::Instruction *loadInst = new llvm::LoadInst(castPtr, name, false /* not volatile */,
--                                                                 llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
-+                llvm::Instruction *loadInst =
-+                    new llvm::LoadInst(castPtr, llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load",
-+                                       false /* not volatile */, llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
- #else
-                 llvm::Instruction *loadInst = new llvm::LoadInst(
--                    llvm::dyn_cast<llvm::PointerType>(castPtr->getType())->getPointerElementType(), castPtr, name,
--                    false /* not volatile */, llvm::MaybeAlign(align).valueOrOne(), (llvm::Instruction *)NULL);
-+                    llvm::dyn_cast<llvm::PointerType>(castPtr->getType())->getPointerElementType(), castPtr,
-+                    llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load", false /* not volatile */,
-+                    llvm::MaybeAlign(align).valueOrOne(), (llvm::Instruction *)NULL);
- #endif
-                 lCopyMetadata(loadInst, callInst);
-                 llvm::ReplaceInstWithInst(callInst, loadInst);
-@@ -1028,9 +1030,9 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 // all lanes storing, so replace with a regular store
-                 llvm::Value *rvalue = callInst->getArgOperand(2);
-                 llvm::Type *storeType = rvalue->getType();
--                const char *name = LLVMGetName(callInst->getArgOperand(0), "_ptrcast");
--                llvm::Value *castPtr = new llvm::BitCastInst(callInst->getArgOperand(0),
--                                                             llvm::PointerType::get(storeType, 0), name, callInst);
-+                llvm::Value *castPtr =
-+                    new llvm::BitCastInst(callInst->getArgOperand(0), llvm::PointerType::get(storeType, 0),
-+                                          llvm::Twine(callInst->getArgOperand(0)->getName()) + "_ptrcast", callInst);
-                 lCopyMetadata(castPtr, callInst);
- 
-                 int align;
-@@ -1339,8 +1341,8 @@ static llvm::Value *lGetBasePointer(llvm::Value *v, llvm::Instruction *insertBef
-         if (t == NULL) {
-             return NULL;
-         } else {
--            return llvm::CastInst::Create(ci->getOpcode(), t, ci->getType()->getScalarType(), LLVMGetName(t, "_cast"),
--                                          insertBefore);
-+            return llvm::CastInst::Create(ci->getOpcode(), t, ci->getType()->getScalarType(),
-+                                          llvm::Twine(t->getName()) + "_cast", insertBefore);
-         }
-     }
- 
-@@ -1583,13 +1585,13 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-         if (co == NULL)
-             *constOffset = NULL;
-         else
--            *constOffset =
--                llvm::CastInst::Create(cast->getOpcode(), co, cast->getType(), LLVMGetName(co, "_cast"), insertBefore);
-+            *constOffset = llvm::CastInst::Create(cast->getOpcode(), co, cast->getType(),
-+                                                  llvm::Twine(co->getName()) + "_cast", insertBefore);
-         if (vo == NULL)
-             *variableOffset = NULL;
-         else
--            *variableOffset =
--                llvm::CastInst::Create(cast->getOpcode(), vo, cast->getType(), LLVMGetName(vo, "_cast"), insertBefore);
-+            *variableOffset = llvm::CastInst::Create(cast->getOpcode(), vo, cast->getType(),
-+                                                     llvm::Twine(vo->getName()) + "_cast", insertBefore);
-         return;
-     }
- 
-@@ -1608,16 +1610,18 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-             else if (c1 == NULL || llvm::isa<llvm::ConstantAggregateZero>(c1))
-                 *constOffset = c0;
-             else
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, c0, c1, LLVMGetName("add", c0, c1),
--                                                            insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, c0, c1, ((llvm::Twine("add_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
- 
-             if (v0 == NULL || llvm::isa<llvm::ConstantAggregateZero>(v0))
-                 *variableOffset = v1;
-             else if (v1 == NULL || llvm::isa<llvm::ConstantAggregateZero>(v1))
-                 *variableOffset = v0;
-             else
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, v0, v1,
--                                                               LLVMGetName("add", v0, v1), insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, v0, v1, ((llvm::Twine("add_") + v0->getName()) + "_") + v1->getName(),
-+                    insertBefore);
-             return;
-         } else if (bop->getOpcode() == llvm::Instruction::Shl) {
-             lExtractConstantOffset(op0, &c0, &v0, insertBefore);
-@@ -1633,10 +1637,12 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-                 *constOffset = vec;
-                 *variableOffset = NULL;
-             } else {
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Shl, c0, c1, LLVMGetName("shl", c0, c1),
--                                                            insertBefore);
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Shl, v0, c1,
--                                                               LLVMGetName("shl", v0, c1), insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Shl, c0, c1, ((llvm::Twine("shl_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Shl, v0, c1, ((llvm::Twine("shl_") + v0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-             }
-             return;
-         } else if (bop->getOpcode() == llvm::Instruction::Mul) {
-@@ -1648,25 +1654,30 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-             // Note that the first term is a constant and the last three are
-             // variable.
-             if (c0 != NULL && c1 != NULL)
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, c1, LLVMGetName("mul", c0, c1),
--                                                            insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Mul, c0, c1, ((llvm::Twine("mul_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-             else
-                 *constOffset = NULL;
- 
-             llvm::Value *va = NULL, *vb = NULL, *vc = NULL;
-             if (v0 != NULL && c1 != NULL)
--                va = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, c1, LLVMGetName("mul", v0, c1),
-+                va = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, c1,
-+                                                  ((llvm::Twine("mul_") + v0->getName()) + "_") + c1->getName(),
-                                                   insertBefore);
-             if (c0 != NULL && v1 != NULL)
--                vb = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, v1, LLVMGetName("mul", c0, v1),
-+                vb = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, v1,
-+                                                  ((llvm::Twine("mul_") + c0->getName()) + "_") + v1->getName(),
-                                                   insertBefore);
-             if (v0 != NULL && v1 != NULL)
--                vc = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, v1, LLVMGetName("mul", v0, v1),
-+                vc = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, v1,
-+                                                  ((llvm::Twine("mul_") + v0->getName()) + "_") + v1->getName(),
-                                                   insertBefore);
- 
-             llvm::Value *vab = NULL;
-             if (va != NULL && vb != NULL)
--                vab = llvm::BinaryOperator::Create(llvm::Instruction::Add, va, vb, LLVMGetName("add", va, vb),
-+                vab = llvm::BinaryOperator::Create(llvm::Instruction::Add, va, vb,
-+                                                   ((llvm::Twine("add_") + va->getName()) + "_") + vb->getName(),
-                                                    insertBefore);
-             else if (va != NULL)
-                 vab = va;
-@@ -1674,8 +1685,9 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-                 vab = vb;
- 
-             if (vab != NULL && vc != NULL)
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, vab, vc,
--                                                               LLVMGetName("add", vab, vc), insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, vab, vc, ((llvm::Twine("add_") + vab->getName()) + "_") + vc->getName(),
-+                    insertBefore);
-             else if (vab != NULL)
-                 *variableOffset = vab;
-             else
-@@ -1943,7 +1955,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-             // all zeros (i.e. a ConstantAggregateZero, but just in case,
-             // do the more general check with lVectorIs32BitInts().
-             variableOffset = new llvm::TruncInst(variableOffset, LLVMTypes::Int32VectorType,
--                                                 LLVMGetName(variableOffset, "_trunc"), insertBefore);
-+                                                 llvm::Twine(variableOffset->getName()) + "_trunc", insertBefore);
-         else
-             return false;
-     }
-@@ -1952,7 +1964,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-         if (lVectorIs32BitInts(constOffset)) {
-             // Truncate them so we have a 32-bit vector type for them.
-             constOffset = new llvm::TruncInst(constOffset, LLVMTypes::Int32VectorType,
--                                              LLVMGetName(constOffset, "_trunc"), insertBefore);
-+                                              llvm::Twine(constOffset->getName()) + "_trunc", insertBefore);
-         } else {
-             // FIXME: otherwise we just assume that all constant offsets
-             // can actually always fit into 32-bits...  (This could be
-@@ -1963,7 +1975,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-             // llvm::ConstantFoldInstruction() doesn't seem to be doing
-             // enough for us in some cases if we call it from here.
-             constOffset = new llvm::TruncInst(constOffset, LLVMTypes::Int32VectorType,
--                                              LLVMGetName(constOffset, "_trunc"), insertBefore);
-+                                              llvm::Twine(constOffset->getName()) + "_trunc", insertBefore);
-         }
-     }
- 
-@@ -2012,8 +2024,8 @@ static bool lOffsets32BitSafe(llvm::Value **offsetPtr, llvm::Instruction *insert
- 
-         // Alternatively, offset could be a sequence of adds terminating
-         // in safe constant vectors or a SExt.
--        *offsetPtr =
--            new llvm::TruncInst(offset, LLVMTypes::Int32VectorType, LLVMGetName(offset, "_trunc"), insertBefore);
-+        *offsetPtr = new llvm::TruncInst(offset, LLVMTypes::Int32VectorType, llvm::Twine(offset->getName()) + "_trunc",
-+                                         insertBefore);
-         return true;
-     } else
-         return false;
-@@ -2229,7 +2241,8 @@ static bool lGSToGSBaseOffsets(llvm::CallInst *callInst) {
-     }
-     // Cast the base pointer to a void *, since that's what the
-     // __pseudo_*_base_offsets_* functions want.
--    basePtr = new llvm::IntToPtrInst(basePtr, LLVMTypes::VoidPointerType, LLVMGetName(basePtr, "_2void"), callInst);
-+    basePtr = new llvm::IntToPtrInst(basePtr, LLVMTypes::VoidPointerType, llvm::Twine(basePtr->getName()) + "_2void",
-+                                     callInst);
-     lCopyMetadata(basePtr, callInst);
-     llvm::Function *gatherScatterFunc = info->baseOffsetsFunc;
- 
-@@ -2803,7 +2816,7 @@ static bool lGSToLoadStore(llvm::CallInst *callInst) {
-                 lCopyMetadata(ptr, callInst);
-                 Debug(pos, "Transformed gather to unaligned vector load!");
-                 llvm::Instruction *newCall =
--                    lCallInst(gatherInfo->loadMaskedFunc, ptr, mask, LLVMGetName(ptr, "_masked_load"));
-+                    lCallInst(gatherInfo->loadMaskedFunc, ptr, mask, llvm::Twine(ptr->getName()) + "_masked_load");
-                 lCopyMetadata(newCall, callInst);
-                 llvm::ReplaceInstWithInst(callInst, newCall);
-                 return true;
diff --git a/srcpkgs/ispc/patches/llvm12-004.patch b/srcpkgs/ispc/patches/llvm12-004.patch
deleted file mode 100644
index 3a94d8443a5e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-004.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From c03a5142444476a1caa5c2ba7fa2d92d7793d6f1 Mon Sep 17 00:00:00 2001
-From: Deepak Rajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Mon, 25 Jan 2021 09:22:49 -0800
-Subject: [PATCH] Fixing build on llvm trunk.
-
----
- src/ctx.cpp | 7 +++----
- 1 file changed, 3 insertions(+), 4 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index ded524b71..b60e6fe84 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1020,8 +1020,7 @@ void FunctionEmitContext::EmitCaseLabel(int value, bool checkMask, SourcePos pos
-     llvm::BasicBlock *bbCaseImpl = NULL;
-     if (emitGenXHardwareMask()) {
-         // Create basic block with actual case implementation
--        llvm::Twine bbName = llvm::Twine(bbCase->getName()) + "_impl";
--        bbCaseImpl = CreateBasicBlock(bbName, bbCase);
-+        bbCaseImpl = CreateBasicBlock(llvm::Twine(bbCase->getName()) + "_impl", bbCase);
-     }
- #endif
- 
-@@ -3142,8 +3141,8 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     llvm::Value *undef2 = llvm::UndefValue::get(vecType);
- 
-     // InsertElement
--    llvm::Twine tw = name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + llvm::Twine("_init");
--    llvm::Value *insert = InsertInst(undef1, v, 0, tw.str().c_str());
-+    llvm::Value *insert =
-+        InsertInst(undef1, v, 0, name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + "_init");
- 
-     // ShuffleVector
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
diff --git a/srcpkgs/ispc/patches/llvm12-005.patch b/srcpkgs/ispc/patches/llvm12-005.patch
deleted file mode 100644
index e3e96b00abfa..000000000000
--- a/srcpkgs/ispc/patches/llvm12-005.patch
+++ /dev/null
@@ -1,372 +0,0 @@
-From c1d0a51bf8416d42144de9e2bdd59825eaeff1ac Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Fri, 8 Jan 2021 14:13:49 -0800
-Subject: [PATCH] LLVM 11 support for gen code
-
----
- src/ctx.cpp                     |  13 ++-
- src/gen/GlobalsLocalization.cpp |   9 +-
- src/opt.cpp                     | 143 ++++++++++++++++++++++++--------
- 3 files changed, 124 insertions(+), 41 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index b60e6fe84..2a72e6837 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1,5 +1,5 @@
- /*
--  Copyright (c) 2010-2020, Intel Corporation
-+  Copyright (c) 2010-2021, Intel Corporation
-   All rights reserved.
- 
-   Redistribution and use in source and binary forms, with or without
-@@ -3685,8 +3685,17 @@ llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::
-     AssertPos(currentPos, llvm::isa<llvm::VectorType>(value->getType()));
-     llvm::VectorType *vt = llvm::dyn_cast<llvm::VectorType>(value->getType());
-     if (defaults == NULL) {
--        defaults = llvm::ConstantVector::getSplat(value->getType()->getVectorNumElements(),
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+        defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-+                                                  llvm::Constant::getNullValue(vt->getElementType()));
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+        defaults = llvm::ConstantVector::getSplat({static_cast<unsigned int>(vt->getNumElements()), false},
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
-+#else
-+        defaults = llvm::ConstantVector::getSplat(
-+            llvm::ElementCount::get(static_cast<unsigned int>(vt->getNumElements()), false),
-+            llvm::Constant::getNullValue(vt->getElementType()));
-+#endif
-     }
- 
-     auto Fn = llvm::GenXIntrinsic::getGenXDeclaration(m->module, llvm::GenXIntrinsic::genx_simdcf_predicate,
-diff --git a/src/gen/GlobalsLocalization.cpp b/src/gen/GlobalsLocalization.cpp
-index a176e9462..41f3b00e2 100644
---- a/src/gen/GlobalsLocalization.cpp
-+++ b/src/gen/GlobalsLocalization.cpp
-@@ -1,5 +1,5 @@
- /*
--  Copyright (c) 2014, 2016-2020, Intel Corporation
-+  Copyright (c) 2014, 2016-2021, Intel Corporation
-   All rights reserved.
- 
-   Redistribution and use in source and binary forms, with or without
-@@ -53,8 +53,10 @@
- #include <llvm/GenXIntrinsics/GenXIntrOpts.h>
- #include <llvm/GenXIntrinsics/GenXIntrinsics.h>
- #include <llvm/GenXIntrinsics/GenXMetadata.h>
--#include <llvm/IR/CFG.h>
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
- #include <llvm/IR/CallSite.h>
-+#endif
-+#include <llvm/IR/CFG.h>
- #include <llvm/IR/DebugInfo.h>
- #include <llvm/IR/Dominators.h>
- #include <llvm/IR/Function.h>
-@@ -470,7 +472,8 @@ void GlobalsLocalization::LocalizeGlobals(LocalizationInfo &LI) {
-         Instruction &FirstI = *Fn->getEntryBlock().begin();
-         Type *ElemTy = GV->getType()->getElementType();
-         AllocaInst *Alloca = new AllocaInst(ElemTy, 0, GV->getName() + ".local", &FirstI);
--        Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()));
-+        Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()).valueOrOne());
-+
-         if (!isa<UndefValue>(GV->getInitializer()))
-             new StoreInst(GV->getInitializer(), Alloca, &FirstI);
- 
-diff --git a/src/opt.cpp b/src/opt.cpp
-index d58d77f73..1789b8476 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -2899,15 +2899,17 @@ static llvm::Function *lGenXMaskedInt8Inst(llvm::Instruction *inst, bool isStore
- static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::Instruction *inst) {
-     Assert(g->target->isGenXTarget());
-     Assert(llvm::isa<llvm::VectorType>(val->getType()));
--    Assert(llvm::isPowerOf2_32(val->getType()->getVectorNumElements()));
--    Assert(val->getType()->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-+
-+    llvm::VectorType *valVecType = llvm::dyn_cast<llvm::VectorType>(val->getType());
-+    Assert(llvm::isPowerOf2_32(valVecType->getNumElements()));
-+    Assert(valVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
- 
-     // The data write of svm store must have a size that is a power of two from 16 to 128
-     // bytes. However for int8 type and simd width = 8, the data write size is 8.
-     // So we use masked store function here instead of svm store which process int8 type
-     // correctly.
--    if (val->getType()->getPrimitiveSizeInBits() / 8 < 16) {
--        Assert(val->getType()->getScalarType() == LLVMTypes::Int8Type);
-+    if (valVecType->getPrimitiveSizeInBits() / 8 < 16) {
-+        Assert(valVecType->getScalarType() == LLVMTypes::Int8Type);
-         if (llvm::Function *maskedFunc = lGenXMaskedInt8Inst(inst, true))
-             return llvm::dyn_cast<llvm::CallInst>(lCallInst(maskedFunc, ptr, val, LLVMMaskAllOn, ""));
-         else {
-@@ -2923,15 +2925,17 @@ static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::
- 
- static llvm::CallInst *lGenXLoadInst(llvm::Value *ptr, llvm::Type *retType, llvm::Instruction *inst) {
-     Assert(llvm::isa<llvm::VectorType>(retType));
--    Assert(llvm::isPowerOf2_32(retType->getVectorNumElements()));
--    Assert(retType->getPrimitiveSizeInBits());
--    Assert(retType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-+
-+    llvm::VectorType *retVecType = llvm::dyn_cast<llvm::VectorType>(retType);
-+    Assert(llvm::isPowerOf2_32(retVecType->getNumElements()));
-+    Assert(retVecType->getPrimitiveSizeInBits());
-+    Assert(retVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-     // The data read of svm load must have a size that is a power of two from 16 to 128
-     // bytes. However for int8 type and simd width = 8, the data read size is 8.
-     // So we use masked load function here instead of svm load which process int8 type
-     // correctly.
--    if (retType->getPrimitiveSizeInBits() / 8 < 16) {
--        Assert(retType->getScalarType() == LLVMTypes::Int8Type);
-+    if (retVecType->getPrimitiveSizeInBits() / 8 < 16) {
-+        Assert(retVecType->getScalarType() == LLVMTypes::Int8Type);
-         if (llvm::Function *maskedFunc = lGenXMaskedInt8Inst(inst, false))
-             return llvm::dyn_cast<llvm::CallInst>(lCallInst(maskedFunc, ptr, LLVMMaskAllOn, ""));
-         else {
-@@ -5622,15 +5626,24 @@ static bool lVectorizeGEPs(llvm::Value *ptr, std::vector<PtrUse> &ptrUses, std::
-         llvm::PtrToIntInst *ptrToInt =
-             new llvm::PtrToIntInst(ptr, LLVMTypes::Int64Type, "vectorized_ptrtoint", insertBefore);
-         llvm::Instruction *addr = llvm::BinaryOperator::CreateAdd(ptrToInt, offset, "vectorized_address", insertBefore);
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        llvm::Type *retType = llvm::FixedVectorType::get(scalar_type, reqSize / t_size);
-+#else
-         llvm::Type *retType = llvm::VectorType::get(scalar_type, reqSize / t_size);
-+#endif
-         llvm::Function *fn = llvm::GenXIntrinsic::getGenXDeclaration(
-             m->module, llvm::GenXIntrinsic::genx_svm_block_ld_unaligned, {retType, addr->getType()});
-         llvm::Instruction *ld = llvm::CallInst::Create(fn, {addr}, "vectorized_ld", insertBefore);
- 
-         if (loadingPtr) {
-             // Cast int to ptr via inttoptr
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            ld = new llvm::IntToPtrInst(ld, llvm::FixedVectorType::get(originalType, reqSize / t_size),
-+                                        "vectorized_inttoptr", insertBefore);
-+#else
-             ld = new llvm::IntToPtrInst(ld, llvm::VectorType::get(originalType, reqSize / t_size),
-                                         "vectorized_inttoptr", insertBefore);
-+#endif
-         }
- 
-         // Scalar extracts for all loaded elements
-@@ -6160,19 +6173,34 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-         llvm::Instruction *inst = &*I;
-         if (llvm::CallInst *ci = llvm::dyn_cast<llvm::CallInst>(inst)) {
-             llvm::Function *func = ci->getCalledFunction();
--            if (func && func->getName() == "llvm.trap") {
-+            if (func && func->getName().equals("llvm.trap")) {
-                 llvm::Type *argTypes[] = {LLVMTypes::Int1VectorType, LLVMTypes::Int16VectorType};
-                 // Description of parameters for genx_raw_send_noresult can be found in target-genx.ll
-                 auto Fn = +llvm::GenXIntrinsic::getGenXDeclaration(
-                     m->module, llvm::GenXIntrinsic::genx_raw_send_noresult, argTypes);
-                 llvm::SmallVector<llvm::Value *, 8> Args;
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 0));
--                Args.push_back(llvm::ConstantVector::getSplat(g->target->getNativeVectorWidth(),
--                                                              llvm::ConstantInt::getTrue(*g->ctx)));
-+                Args.push_back(llvm::ConstantVector::getSplat(
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+                    g->target->getNativeVectorWidth(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+                    {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
-+#else // LLVM 12.0+
-+                    llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-+#endif
-+                    llvm::ConstantInt::getTrue(*g->ctx)));
-+
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 39));
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 33554448));
-                 llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
--                    g->target->getNativeVectorWidth(), llvm::Constant::getNullValue(llvm::Type::getInt16Ty(*g->ctx)));
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+                    g->target->getNativeVectorWidth(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+                    {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
-+#else // LLVM 12.0+
-+                    llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-+#endif
-+                    llvm::Constant::getNullValue(llvm::Type::getInt16Ty(*g->ctx)));
-                 Args.push_back(zeroMask);
- 
-                 llvm::Instruction *newInst = llvm::CallInst::Create(Fn, Args, ci->getName());
-@@ -6181,7 +6209,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     modifiedAny = true;
-                     goto restart;
-                 }
--            } else if (func && func->getName() == "llvm.assume") {
-+            } else if (func && func->getName().equals("llvm.assume")) {
-                 ci->eraseFromParent();
-                 modifiedAny = true;
-                 goto restart;
-@@ -6335,7 +6363,7 @@ bool CheckUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 continue;
-             for (int i = 0; i < unsupportedFuncs.size(); i++) {
-                 std::smatch match;
--                std::string funcName = func->getName();
-+                std::string funcName = func->getName().str();
-                 if (std::regex_match(funcName, match, unsupportedFuncs[i])) {
-                     // We found unsupported function. Generate error and stop compilation.
-                     SourcePos pos;
-@@ -6418,12 +6446,14 @@ bool MangleOpenCLBuiltins::runOnBasicBlock(llvm::BasicBlock &bb) {
-             if (func->getName().startswith("__spirv_ocl")) {
-                 std::string mangledName;
-                 llvm::Type *retType = func->getReturnType();
--                std::string funcName = func->getName();
-+                std::string funcName = func->getName().str();
-                 std::vector<llvm::Type *> ArgTy;
-                 // spirv OpenCL builtins are used for double types only
--                Assert(retType->isVectorTy() && retType->getVectorElementType()->isDoubleTy() ||
-+                Assert(retType->isVectorTy() &&
-+                           llvm::dyn_cast<llvm::VectorType>(retType)->getElementType()->isDoubleTy() ||
-                        retType->isSingleValueType() && retType->isDoubleTy());
--                if (retType->isVectorTy() && retType->getVectorElementType()->isDoubleTy()) {
-+                if (retType->isVectorTy() &&
-+                    llvm::dyn_cast<llvm::VectorType>(retType)->getElementType()->isDoubleTy()) {
-                     ArgTy.push_back(LLVMTypes::DoubleVectorType);
-                     // _DvWIDTH suffix is used in target file to differentiate scalar
-                     // and vector versions of intrinsics. Here we remove this
-@@ -6511,8 +6541,15 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- 
-     // Cast offsets to int64
-     Offsets = new llvm::ZExtInst(
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        Offsets,
-+        llvm::FixedVectorType::get(LLVMTypes::Int64Type,
-+                                   llvm::dyn_cast<llvm::VectorType>(Offsets->getType())->getNumElements()),
-+        "svm_offset_zext", InsertBefore);
-+#else
-         Offsets, llvm::VectorType::get(LLVMTypes::Int64Type, Offsets->getType()->getVectorNumElements()),
-         "svm_offset_zext", InsertBefore);
-+#endif
- 
-     if (!llvm::isa<llvm::ConstantPointerNull>(Ptr)) {
-         // Cast ptr to int64
-@@ -6520,13 +6557,31 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- 
-         // Vectorize ptr
-         llvm::Value *undefInsertValue =
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            llvm::UndefValue::get(llvm::FixedVectorType::get(
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+#else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
-+#endif
-         address = llvm::InsertElementInst::Create(undefInsertValue, address, LLVMInt32(0), "svm_ptr_iei", InsertBefore);
-         llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+            {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
-+#else
-+        llvm::ElementCount::get(
-+                                llvm::dyn_cast<llvm::FixedVectorType>(addressType->getNumElements(), false),
-+#endif
-             llvm::Constant::getNullValue(llvm::Type::getInt32Ty(InsertBefore->getContext())));
-+
-         llvm::Value *undefShuffleValue =
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            llvm::UndefValue::get(llvm::FixedVectorType::get(
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+#else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
-+#endif
-         address = new llvm::ShuffleVectorInst(address, undefShuffleValue, zeroVec, "svm_ptr_svi", InsertBefore);
- 
-         // Calculate address
-@@ -6553,9 +6608,12 @@ llvm::Instruction *FixAddressSpace::processVectorLoad(llvm::LoadInst *LI) {
-     if (retType->getScalarType()->isPointerTy()) {
-         isPtrLoad = true;
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        retType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(retType)->getNumElements());
-+#else
-         retType = llvm::VectorType::get(scalarType, retType->getVectorNumElements());
-+#endif
-     }
--
-     llvm::Instruction *res = lGenXLoadInst(ptr, retType, llvm::dyn_cast<llvm::Instruction>(LI));
-     Assert(res);
- 
-@@ -6580,11 +6638,16 @@ llvm::Instruction *FixAddressSpace::processSVMVectorLoad(llvm::Instruction *CI)
-     ptr = new llvm::IntToPtrInst(ptr, llvm::PointerType::get(retType, 0), CI->getName() + "_inttoptr", CI);
-     llvm::Instruction *loadInst = NULL;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    loadInst = new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), loadInst,
--                                  CI->getName(), (llvm::Instruction *)NULL);
-+    loadInst = new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-+                                  CI->getName(), false /* not volatile */,
-+                                  llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne(),
-+                                  (llvm::Instruction *)NULL);
- #else
--    loadInst = new llvm::LoadInst(ptr, CI->getName(), (llvm::Instruction *)NULL);
-+    loadInst = new llvm::LoadInst(ptr, CI->getName(), false,
-+                                  llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne(),
-+                                  (llvm::Instruction *)NULL);
- #endif
-+
-     Assert(loadInst);
-     return loadInst;
- }
-@@ -6606,7 +6669,11 @@ llvm::Instruction *FixAddressSpace::processVectorStore(llvm::StoreInst *SI) {
-     // Note: it doesn't look like a normal case for GenX target
-     if (valType->getScalarType()->isPointerTy()) {
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        valType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(valType)->getNumElements());
-+#else
-         valType = llvm::VectorType::get(scalarType, valType->getVectorNumElements());
-+#endif
-         val = new llvm::PtrToIntInst(val, valType, "svm_st_val_ptrtoint", SI);
-     }
- 
-@@ -6631,12 +6698,8 @@ llvm::Instruction *FixAddressSpace::processSVMVectorStore(llvm::Instruction *CI)
-     ptr = new llvm::IntToPtrInst(ptr, llvm::PointerType::get(valType, 0), CI->getName() + "_inttoptr", CI);
- 
-     llvm::Instruction *storeInst = NULL;
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    loadInst = new llvm::StoreInst(val, llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(),
--                                   storeInst, CI->getName(), (llvm::Instruction *)NULL);
--#else
--    storeInst = new llvm::StoreInst(val, ptr, (llvm::Instruction *)NULL);
--#endif
-+    storeInst = new llvm::StoreInst(val, ptr, (llvm::Instruction *)NULL,
-+                                    llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
-     Assert(storeInst);
-     return storeInst;
- }
-@@ -6645,15 +6708,18 @@ llvm::Instruction *FixAddressSpace::createInt8WrRegion(llvm::Value *Val, llvm::V
-     int width = g->target->getVectorWidth();
- 
-     llvm::Value *Args[8];
--
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Args[0] = llvm::UndefValue::get(llvm::FixedVectorType::get(LLVMTypes::Int8Type, width * 4)); // old value
-+#else
-     Args[0] = llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int8Type, width * 4)); // old value
--    Args[1] = Val;                                                                          // value to store
--    Args[2] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);                              // vstride
--    Args[3] = llvm::ConstantInt::get(LLVMTypes::Int32Type, width);                          // width
--    Args[4] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 4);                              // stride
--    Args[5] = llvm::ConstantInt::get(LLVMTypes::Int16Type, 0);                              // offsets
--    Args[6] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);                              // parent width (ignored)
--    Args[7] = Mask;                                                                         // mask
-+#endif
-+    Args[1] = Val;                                                 // value to store
-+    Args[2] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);     // vstride
-+    Args[3] = llvm::ConstantInt::get(LLVMTypes::Int32Type, width); // width
-+    Args[4] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 4);     // stride
-+    Args[5] = llvm::ConstantInt::get(LLVMTypes::Int16Type, 0);     // offsets
-+    Args[6] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);     // parent width (ignored)
-+    Args[7] = Mask;                                                // mask
- 
-     llvm::Type *Tys[4];
- 
-@@ -6708,7 +6774,12 @@ llvm::Instruction *FixAddressSpace::processGatherScatterPrivate(llvm::CallInst *
-         return NULL;
- 
-     llvm::Value *address = calculateGatherScatterAddress(ptr, offsets, CI);
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    llvm::Type *i8VecType = llvm::FixedVectorType::get(LLVMTypes::Int8Type, width * 4);
-+#else
-     llvm::Type *i8VecType = llvm::VectorType::get(LLVMTypes::Int8Type, width * 4);
-+#endif
-+
-     bool isInt8 = (value->getType()->getScalarType() == LLVMTypes::Int8Type);
- 
-     Assert(address && "Bad gather/scatter address!");
diff --git a/srcpkgs/ispc/patches/llvm12-006.patch b/srcpkgs/ispc/patches/llvm12-006.patch
deleted file mode 100644
index a829ea48391e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-006.patch
+++ /dev/null
@@ -1,126 +0,0 @@
-From bb3f493d1fbd45c79e1d9dee67a0430ba313eaad Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 19 Jan 2021 11:07:33 -0800
-Subject: [PATCH] Fixed ifdefs for LLVM_11
-
----
- src/ctx.cpp |  6 +++---
- src/opt.cpp | 18 +++++++++---------
- 2 files changed, 12 insertions(+), 12 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 2a72e6837..527a02f30 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1691,7 +1691,7 @@ llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const llvm::T
-     if (llvm::Constant *const_val = llvm::dyn_cast<llvm::Constant>(value)) {
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         ret = llvm::ConstantVector::getSplat(g->target->getVectorWidth(), const_val);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-         ret =
-             llvm::ConstantVector::getSplat({static_cast<unsigned int>(g->target->getVectorWidth()), false}, const_val);
- #else // LLVM 12.0+
-@@ -3148,7 +3148,7 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-     llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
-         vecType->getVectorNumElements(), llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-     llvm::Constant *zeroVec =
-         llvm::ConstantVector::getSplat({static_cast<unsigned int>(ty->getNumElements()), false},
-                                        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
-@@ -3688,7 +3688,7 @@ llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-         defaults = llvm::ConstantVector::getSplat({static_cast<unsigned int>(vt->getNumElements()), false},
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
- #else
-diff --git a/src/opt.cpp b/src/opt.cpp
-index 1789b8476..3ff191a0a 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -1045,7 +1045,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                 llvm::Instruction *loadInst =
-                     new llvm::LoadInst(castPtr, llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load",
-                                        false /* not volatile */, llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
-@@ -1472,7 +1472,7 @@ static llvm::Value *lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offse
-                     llvm::Value *zeroMask =
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                         llvm::ConstantVector::getSplat(cv->getType()->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                         llvm::ConstantVector::getSplat(
-                             {llvm::dyn_cast<llvm::VectorType>(cv->getType())->getNumElements(), false},
- #else // LLVM 12.0+
-@@ -1495,7 +1495,7 @@ static llvm::Value *lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offse
-                         llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                             bop_var_type->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                             {llvm::dyn_cast<llvm::VectorType>(bop_var_type)->getNumElements(), false},
- #else // LLVM 12.0+
-                             llvm::ElementCount::get(
-@@ -2803,7 +2803,7 @@ static bool lGSToLoadStore(llvm::CallInst *callInst) {
-             llvm::Value *zeroMask =
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                 llvm::ConstantVector::getSplat(callInst->getType()->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                 llvm::ConstantVector::getSplat(
-                     {llvm::dyn_cast<llvm::VectorType>(callInst->getType())->getNumElements(), false},
- 
-@@ -3100,7 +3100,7 @@ static bool lImproveMaskedLoad(llvm::CallInst *callInst, llvm::BasicBlock::itera
-         {
-             llvm::Type *ptrType = llvm::PointerType::get(callInst->getType(), 0);
-             ptr = new llvm::BitCastInst(ptr, ptrType, "ptr_cast_for_load", callInst);
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             load = new llvm::LoadInst(
-                 ptr, callInst->getName(), false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-@@ -3459,7 +3459,7 @@ llvm::Value *lGEPAndLoad(llvm::Value *basePtr, int64_t offset, int align, llvm::
-                          llvm::Type *type) {
-     llvm::Value *ptr = lGEPInst(basePtr, LLVMInt64(offset), "new_base", insertBefore);
-     ptr = new llvm::BitCastInst(ptr, llvm::PointerType::get(type, 0), "ptr_cast", insertBefore);
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-     return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, llvm::MaybeAlign(align), insertBefore);
- #else // LLVM 11.0+
-     return new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-@@ -6183,7 +6183,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 Args.push_back(llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                     g->target->getNativeVectorWidth(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                     {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
- #else // LLVM 12.0+
-                     llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-@@ -6195,7 +6195,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                     g->target->getNativeVectorWidth(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                     {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
- #else // LLVM 12.0+
-                     llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-@@ -6567,7 +6567,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
-         llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-             {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
- #else
-         llvm::ElementCount::get(
diff --git a/srcpkgs/ispc/patches/llvm12-007.patch b/srcpkgs/ispc/patches/llvm12-007.patch
deleted file mode 100644
index 1b975f896c7e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-007.patch
+++ /dev/null
@@ -1,160 +0,0 @@
-From 62f5a6c37bf26fc25a7cf81868052d3472874610 Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 23 Mar 2021 23:07:30 -0700
-Subject: [PATCH] Do not generate function mask when it is not required
-
----
- src/ctx.cpp                    | 39 ++++++++++++++-------
- tests/lit-tests/full_mask.ispc | 63 ++++++++++++++++++++++++++++++++++
- 2 files changed, 90 insertions(+), 12 deletions(-)
- create mode 100644 tests/lit-tests/full_mask.ispc
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 527a02f30..9e775fc5c 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -231,10 +231,18 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym, llvm::F
-     internalMaskPointer = AllocaInst(LLVMTypes::MaskType, "internal_mask_memory");
-     StoreInst(LLVMMaskAllOn, internalMaskPointer);
- 
--    functionMaskValue = LLVMMaskAllOn;
--
--    fullMaskPointer = AllocaInst(LLVMTypes::MaskType, "full_mask_memory");
--    StoreInst(LLVMMaskAllOn, fullMaskPointer);
-+    // If the function doesn't have __mask in parameters, there is no need to
-+    // have function mask
-+    if ((func->GetType()->isExported &&
-+         (lf->getFunctionType()->getNumParams() == func->GetType()->GetNumParameters())) ||
-+        (func->GetType()->isUnmasked) || (func->GetType()->isTask)) {
-+        functionMaskValue = NULL;
-+        fullMaskPointer = NULL;
-+    } else {
-+        functionMaskValue = LLVMMaskAllOn;
-+        fullMaskPointer = AllocaInst(LLVMTypes::MaskType, "full_mask_memory");
-+        StoreInst(LLVMMaskAllOn, fullMaskPointer);
-+    }
- 
-     blockEntryMask = NULL;
-     breakLanesPtr = continueLanesPtr = NULL;
-@@ -389,20 +397,26 @@ llvm::BasicBlock *FunctionEmitContext::GetCurrentBasicBlock() { return bblock; }
- 
- void FunctionEmitContext::SetCurrentBasicBlock(llvm::BasicBlock *bb) { bblock = bb; }
- 
--llvm::Value *FunctionEmitContext::GetFunctionMask() { return functionMaskValue; }
-+llvm::Value *FunctionEmitContext::GetFunctionMask() { return fullMaskPointer ? functionMaskValue : LLVMMaskAllOn; }
- 
- llvm::Value *FunctionEmitContext::GetInternalMask() { return LoadInst(internalMaskPointer, NULL, "load_mask"); }
- 
- llvm::Value *FunctionEmitContext::GetFullMask() {
--    return BinaryOperator(llvm::Instruction::And, GetInternalMask(), functionMaskValue, "internal_mask&function_mask");
-+    return fullMaskPointer ? BinaryOperator(llvm::Instruction::And, GetInternalMask(), functionMaskValue,
-+                                            "internal_mask&function_mask")
-+                           : GetInternalMask();
- }
- 
--llvm::Value *FunctionEmitContext::GetFullMaskPointer() { return fullMaskPointer; }
-+llvm::Value *FunctionEmitContext::GetFullMaskPointer() {
-+    return fullMaskPointer ? fullMaskPointer : internalMaskPointer;
-+}
- 
- void FunctionEmitContext::SetFunctionMask(llvm::Value *value) {
--    functionMaskValue = value;
--    if (bblock != NULL)
--        StoreInst(GetFullMask(), fullMaskPointer);
-+    if (fullMaskPointer != NULL) {
-+        functionMaskValue = value;
-+        if (bblock != NULL)
-+            StoreInst(GetFullMask(), fullMaskPointer);
-+    }
- }
- 
- void FunctionEmitContext::SetBlockEntryMask(llvm::Value *value) { blockEntryMask = value; }
-@@ -410,7 +424,8 @@ void FunctionEmitContext::SetBlockEntryMask(llvm::Value *value) { blockEntryMask
- void FunctionEmitContext::SetInternalMask(llvm::Value *value) {
-     StoreInst(value, internalMaskPointer);
-     // kludge so that __mask returns the right value in ispc code.
--    StoreInst(GetFullMask(), fullMaskPointer);
-+    if (fullMaskPointer)
-+        StoreInst(GetFullMask(), fullMaskPointer);
- }
- 
- void FunctionEmitContext::SetInternalMaskAnd(llvm::Value *oldMask, llvm::Value *test) {
-@@ -1265,7 +1280,7 @@ void FunctionEmitContext::CurrentLanesReturned(Expr *expr, bool doCoherenceCheck
-         // lanes have returned
-         if (doCoherenceCheck) {
-             // if newReturnedLanes == functionMaskValue, get out of here!
--            llvm::Value *cmp = MasksAllEqual(functionMaskValue, newReturnedLanes);
-+            llvm::Value *cmp = MasksAllEqual(GetFunctionMask(), newReturnedLanes);
-             llvm::BasicBlock *bDoReturn = CreateBasicBlock("do_return");
-             llvm::BasicBlock *bNoReturn = CreateBasicBlock("no_return");
-             BranchInst(bDoReturn, bNoReturn, cmp);
-diff --git a/tests/lit-tests/full_mask.ispc b/tests/lit-tests/full_mask.ispc
-new file mode 100644
-index 000000000..ac0b0bca3
---- /dev/null
-+++ b/tests/lit-tests/full_mask.ispc
-@@ -0,0 +1,63 @@
-+// RUN: %{ispc} %s -DISPC_EXPORT --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_EXPORT %s
-+
-+// RUN: %{ispc} %s -DISPC_UNMASKED --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_UNMASKED %s
-+
-+// RUN: %{ispc} %s -DISPC_NOQUALIF --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_NOQUALIF %s
-+
-+// RUN: %{ispc} %s -DISPC_TASK --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_TASK %s
-+
-+struct Parameters {
-+    float *vout;
-+    int param;
-+};
-+
-+#ifdef ISPC_EXPORT
-+// CHECK_ISPC_EXPORT: define void @simple_export___
-+// CHECK_ISPC_EXPORT: %full_mask_memory = alloca
-+// CHECK_ISPC_EXPORT: define void @simple_export(
-+// CHECK_ISPC_EXPORT-NOT: %full_mask_memory = alloca
-+export void simple_export(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_UNMASKED
-+// CHECK_ISPC_UNMASKED: define void @simple_unmasked
-+// CHECK_ISPC_UNMASKED-NOT: %full_mask_memory = alloca
-+unmasked void simple_unmasked(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_NOQUALIF
-+// CHECK_ISPC_NOQUALIF: define void @simple
-+// CHECK_ISPC_NOQUALIF: %full_mask_memory = alloca
-+void simple(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_TASK
-+
-+// CHECK_ISPC_TASK: define void @simple_task
-+// CHECK_ISPC_TASK-NOT: %full_mask_memory = alloca
-+// CHECK_ISPC_TASK: define void @simple_entry_point__
-+// CHECK_ISPC_TASK: %full_mask_memory = alloca
-+// CHECK_ISPC_TASK: define void @simple_entry_point(
-+// CHECK_ISPC_TASK-NOT: %full_mask_memory = alloca
-+task void simple_task(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+export void simple_entry_point(void *uniform parameters, uniform int dim0, uniform int dim1, uniform int dim2) {
-+    launch[dim0, dim1, dim2] simple_task(parameters);
-+}
-+#endif
-\ No newline at end of file
diff --git a/srcpkgs/ispc/patches/llvm12-008.patch b/srcpkgs/ispc/patches/llvm12-008.patch
deleted file mode 100644
index c8413d8b7887..000000000000
--- a/srcpkgs/ispc/patches/llvm12-008.patch
+++ /dev/null
@@ -1,149 +0,0 @@
-From afad14227d9204a3c8a626ca608f5b43c3218fe9 Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 4 May 2021 11:43:52 -0700
-Subject: [PATCH] Fixed ISPC gen build for LLVM12
-
----
- src/ctx.cpp |  4 ++++
- src/opt.cpp | 43 +++++++++++++++++++++++++++++--------------
- 2 files changed, 33 insertions(+), 14 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 0c7050591..f7dc06939 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -3738,7 +3738,11 @@ llvm::Value *FunctionEmitContext::GenXSimdCFAny(llvm::Value *value) {
- 
- llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::Value *defaults) {
-     AssertPos(currentPos, llvm::isa<llvm::VectorType>(value->getType()));
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    llvm::FixedVectorType *vt = llvm::dyn_cast<llvm::FixedVectorType>(value->getType());
-+#else
-     llvm::VectorType *vt = llvm::dyn_cast<llvm::VectorType>(value->getType());
-+#endif
-     if (defaults == NULL) {
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-diff --git a/src/opt.cpp b/src/opt.cpp
-index cea4afa23..4e33d6b1a 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -2916,9 +2916,13 @@ static llvm::Function *lGenXMaskedInt8Inst(llvm::Instruction *inst, bool isStore
- 
- static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::Instruction *inst) {
-     Assert(g->target->isGenXTarget());
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Assert(llvm::isa<llvm::FixedVectorType>(val->getType()));
-+    llvm::FixedVectorType *valVecType = llvm::dyn_cast<llvm::FixedVectorType>(val->getType());
-+#else
-     Assert(llvm::isa<llvm::VectorType>(val->getType()));
--
-     llvm::VectorType *valVecType = llvm::dyn_cast<llvm::VectorType>(val->getType());
-+#endif
-     Assert(llvm::isPowerOf2_32(valVecType->getNumElements()));
-     Assert(valVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
- 
-@@ -2942,9 +2946,13 @@ static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::
- }
- 
- static llvm::CallInst *lGenXLoadInst(llvm::Value *ptr, llvm::Type *retType, llvm::Instruction *inst) {
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Assert(llvm::isa<llvm::FixedVectorType>(retType));
-+    llvm::FixedVectorType *retVecType = llvm::dyn_cast<llvm::FixedVectorType>(retType);
-+#else
-     Assert(llvm::isa<llvm::VectorType>(retType));
--
-     llvm::VectorType *retVecType = llvm::dyn_cast<llvm::VectorType>(retType);
-+#endif
-     Assert(llvm::isPowerOf2_32(retVecType->getNumElements()));
-     Assert(retVecType->getPrimitiveSizeInBits());
-     Assert(retVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-@@ -5485,8 +5493,13 @@ static void lCreateBlockLDUse(llvm::Instruction *currInst, std::vector<llvm::Ext
-         } else if (auto gather = lGetPseudoGather(llvm::dyn_cast<llvm::Instruction>(ui->getUser()))) {
-             // Collect idxs from gather and fix users
-             llvm::Value *res = llvm::UndefValue::get(gather->getType());
--            for (unsigned i = 0, end = llvm::dyn_cast<llvm::VectorType>(res->getType())->getNumElements(); i < end;
--                 ++i) {
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            for (unsigned i = 0, end = llvm::dyn_cast<llvm::FixedVectorType>(res->getType())->getNumElements(); i < end;
-+                 ++i)
-+#else
-+            for (unsigned i = 0, end = llvm::dyn_cast<llvm::VectorType>(res->getType())->getNumElements(); i < end; ++i)
-+#endif
-+            {
-                 // Get element via IEI
-                 res = llvm::InsertElementInst::Create(res, EEIs[ptrUse.idxs[curr_idx++]],
-                                                       llvm::ConstantInt::get(LLVMTypes::Int32Type, i),
-@@ -5522,10 +5535,11 @@ static bool lVectorizeGEPs(llvm::Value *ptr, std::vector<PtrUse> &ptrUses, std::
- 
-     // Adjust values for vector load
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    if (auto vecTy = llvm::dyn_cast<llvm::FixedVectorType>(type)) {
-+    if (auto vecTy = llvm::dyn_cast<llvm::FixedVectorType>(type))
- #else
--    if (auto vecTy = llvm::dyn_cast<llvm::VectorType>(type)) {
-+    if (auto vecTy = llvm::dyn_cast<llvm::VectorType>(type))
- #endif
-+    {
-         // Get single element size
-         t_size /= vecTy->getNumElements();
-         // Get single element type
-@@ -6477,7 +6491,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-         Offsets,
-         llvm::FixedVectorType::get(LLVMTypes::Int64Type,
--                                   llvm::dyn_cast<llvm::VectorType>(Offsets->getType())->getNumElements()),
-+                                   llvm::dyn_cast<llvm::FixedVectorType>(Offsets->getType())->getNumElements()),
-         "svm_offset_zext", InsertBefore);
- #else
-         Offsets, llvm::VectorType::get(LLVMTypes::Int64Type, Offsets->getType()->getVectorNumElements()),
-@@ -6492,7 +6506,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
-         llvm::Value *undefInsertValue =
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-             llvm::UndefValue::get(llvm::FixedVectorType::get(
--                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements()));
- #else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
- #endif
-@@ -6501,17 +6515,16 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
- #elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
--            {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
-+            {llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements(), false},
- #else
--        llvm::ElementCount::get(
--                                llvm::dyn_cast<llvm::FixedVectorType>(addressType->getNumElements(), false),
-+            llvm::ElementCount::get(llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements(), false),
- #endif
-             llvm::Constant::getNullValue(llvm::Type::getInt32Ty(InsertBefore->getContext())));
- 
-         llvm::Value *undefShuffleValue =
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-             llvm::UndefValue::get(llvm::FixedVectorType::get(
--                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements()));
- #else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
- #endif
-@@ -6542,7 +6555,8 @@ llvm::Instruction *FixAddressSpace::processVectorLoad(llvm::LoadInst *LI) {
-         isPtrLoad = true;
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--        retType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(retType)->getNumElements());
-+        retType =
-+            llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::FixedVectorType>(retType)->getNumElements());
- #else
-         retType = llvm::VectorType::get(scalarType, retType->getVectorNumElements());
- #endif
-@@ -6604,7 +6618,8 @@ llvm::Instruction *FixAddressSpace::processVectorStore(llvm::StoreInst *SI) {
-     if (valType->getScalarType()->isPointerTy()) {
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--        valType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(valType)->getNumElements());
-+        valType =
-+            llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::FixedVectorType>(valType)->getNumElements());
- #else
-         valType = llvm::VectorType::get(scalarType, valType->getVectorNumElements());
- #endif
diff --git a/srcpkgs/ispc/patches/llvm12-009.patch b/srcpkgs/ispc/patches/llvm12-009.patch
deleted file mode 100644
index d3ea67828582..000000000000
--- a/srcpkgs/ispc/patches/llvm12-009.patch
+++ /dev/null
@@ -1,2109 +0,0 @@
-From 97b13c32132e2704a5e3e7b2eae49d854d087e3e Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 4 May 2021 11:31:55 -0700
-Subject: [PATCH] Updated builtins-cm* for switch to LLVM12
-
----
- builtins/builtins-cm-32.ll | 234 ++++++++++++++++++-------------------
- builtins/builtins-cm-64.ll | 232 ++++++++++++++++++------------------
- 2 files changed, 233 insertions(+), 233 deletions(-)
-
-diff --git a/builtins/builtins-cm-32.ll b/builtins/builtins-cm-32.ll
-index 32debf32e..481bbdc48 100644
---- a/builtins/builtins-cm-32.ll
-+++ b/builtins/builtins-cm-32.ll
-@@ -557,7 +557,7 @@ $_ZN13VaryingWriter12WriteVecElemIPvEEvv = comdat any
- @.str.10 = private unnamed_addr constant [5 x i8] c"%08X\00", align 1
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -618,7 +618,7 @@ define internal <1 x i8> @_ZN7details13__impl_divremILi1EEEu2CMvbT__cS1_S1_u2CMv
- declare <1 x i8> @llvm.genx.rdregioni.v1i8.v1i8.i16(<1 x i8>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -634,7 +634,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -680,7 +680,7 @@ define internal <2 x i8> @_ZN7details13__impl_divremILi2EEEu2CMvbT__cS1_S1_u2CMv
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -818,7 +818,7 @@ define internal <16 x i8> @_ZN7details13__impl_divremILi16EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -864,7 +864,7 @@ define internal <32 x i8> @_ZN7details13__impl_divremILi32EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -890,7 +890,7 @@ define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -904,7 +904,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -918,7 +918,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -932,7 +932,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -946,7 +946,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -960,7 +960,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -974,7 +974,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1058,7 +1058,7 @@ define internal <1 x i16> @_ZN7details13__impl_divremILi1EEEu2CMvbT__sS1_S1_u2CM
- declare <1 x i16> @llvm.genx.rdregioni.v1i16.v1i16.i16(<1 x i16>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1074,7 +1074,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1143,7 +1143,7 @@ define internal <2 x i16> @_ZN7details13__impl_divremILi2EEEu2CMvbT__sS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1350,7 +1350,7 @@ define internal <16 x i16> @_ZN7details13__impl_divremILi16EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1419,7 +1419,7 @@ define internal <32 x i16> @_ZN7details13__impl_divremILi32EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1445,7 +1445,7 @@ define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 si
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1459,7 +1459,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1473,7 +1473,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1487,7 +1487,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -1501,7 +1501,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -1515,7 +1515,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1529,7 +1529,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1730,7 +1730,7 @@ define internal <1 x i32> @_ZN7details13__impl_divremILi1EEEu2CMvbT__iS1_S1_u2CM
- declare <1 x i32> @llvm.genx.rdregioni.v1i32.v1i32.i16(<1 x i32>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1746,7 +1746,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -1932,7 +1932,7 @@ define internal <2 x i32> @_ZN7details13__impl_divremILi2EEEu2CMvbT__iS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2490,7 +2490,7 @@ define internal <16 x i32> @_ZN7details13__impl_divremILi16EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2676,7 +2676,7 @@ define internal <32 x i32> @_ZN7details13__impl_divremILi32EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2702,7 +2702,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2716,7 +2716,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -2730,7 +2730,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2744,7 +2744,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -2758,7 +2758,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -2772,7 +2772,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2786,7 +2786,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2844,7 +2844,7 @@ define internal <1 x i8> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2860,7 +2860,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -2906,7 +2906,7 @@ define internal <2 x i8> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3044,7 +3044,7 @@ define internal <16 x i8> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3090,7 +3090,7 @@ define internal <32 x i8> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3116,7 +3116,7 @@ define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3130,7 +3130,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -3144,7 +3144,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3158,7 +3158,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -3172,7 +3172,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -3186,7 +3186,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3200,7 +3200,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3278,7 +3278,7 @@ define internal <1 x i16> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3294,7 +3294,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3360,7 +3360,7 @@ define internal <2 x i16> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3558,7 +3558,7 @@ define internal <16 x i16> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3624,7 +3624,7 @@ define internal <32 x i16> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3650,7 +3650,7 @@ define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 ze
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3664,7 +3664,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3678,7 +3678,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3692,7 +3692,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -3706,7 +3706,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -3720,7 +3720,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3734,7 +3734,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3892,7 +3892,7 @@ define internal <1 x i32> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3908,7 +3908,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4054,7 +4054,7 @@ define internal <2 x i32> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4492,7 +4492,7 @@ define internal <16 x i32> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4638,7 +4638,7 @@ define internal <32 x i32> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4664,7 +4664,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4678,7 +4678,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4692,7 +4692,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4706,7 +4706,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -4720,7 +4720,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -4734,7 +4734,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4748,7 +4748,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-+define internal void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-   %8 = alloca i8*, align 4
-   %9 = alloca i8*, align 4
-   %10 = alloca i32, align 4
-@@ -4988,7 +4988,7 @@ define internal void @_ZN7details16_cm_print_formatILi128EEEv15cm_surfaceindexju
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i32) #26 !dbg !117 {
-+define internal void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i32) #26 !dbg !117 {
-   %10 = alloca i32, align 4
-   %11 = alloca i8*, align 4
-   %12 = alloca i32, align 4
-@@ -5069,7 +5069,7 @@ define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i3
-   %67 = load i64, i64* %13, align 8, !dbg !159, !tbaa !19
-   %68 = load <5 x i32>, <5 x i32>* %21, align 32, !dbg !160, !tbaa !7
-   call void @_ZN13VaryingWriterC2ERjRPKjiyu2CMvb5_i(%class.VaryingWriter* %23, i32* dereferenceable(4) %19, i32** dereferenceable(4) %14, i32 %66, i64 %67, <5 x i32> %68), !dbg !161
--  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval align 32 %22, %class.VaryingWriter* byval align 32 %23), !dbg !162
-+  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval(%class.UniformWriter) align 32 %22, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %23), !dbg !162
-   br label %70, !dbg !163
- 
- ; <label>:70:                                     ; preds = %60
-@@ -5187,7 +5187,7 @@ define internal <5 x i32> @_Z17get_auxiliary_strv() #28 comdat !dbg !178 {
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %class.VaryingWriter* byval align 32) #25 comdat !dbg !191 {
-+define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !191 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %class.VaryingWriter, align 32
-@@ -5196,7 +5196,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %8 = bitcast %class.UniformWriter* %5 to i8*, !dbg !196
-   %9 = bitcast %class.UniformWriter* %1 to i8*, !dbg !196
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %8, i8* align 32 %9, i32 64, i1 false), !dbg !196, !tbaa.struct !197
--  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval align 32 %5), !dbg !198
-+  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5), !dbg !198
-   br i1 %10, label %16, label %11, !dbg !199
- 
- ; <label>:11:                                     ; preds = %3
-@@ -5204,7 +5204,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %13 = bitcast %class.VaryingWriter* %6 to i8*, !dbg !201
-   %14 = bitcast %class.VaryingWriter* %2 to i8*, !dbg !201
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %13, i8* align 32 %14, i32 64, i1 false), !dbg !201, !tbaa.struct !197
--  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval align 32 %6), !dbg !202
-+  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %6), !dbg !202
-   br label %16, !dbg !199
- 
- ; <label>:16:                                     ; preds = %11, %3
-@@ -5279,7 +5279,7 @@ define internal void @_ZN13VaryingWriterC2ERjRPKjiyu2CMvb5_i(%class.VaryingWrite
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @__num_cores() #29 !dbg !236 {
-+define internal i32 @__num_cores() #29 !dbg !236 {
-   ret i32 -1, !dbg !237
- }
- 
-@@ -8860,7 +8860,7 @@ declare dso_local void @_ZN7details37__cm_intrinsic_impl_svm_scatter_writeIiLi1E
- declare void @llvm.genx.svm.scatter.v1i1.v1i64.v1i32(<1 x i1>, i32, <1 x i64>, <1 x i32>) #27
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval align 32) #25 comdat !dbg !1645 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32) #25 comdat !dbg !1645 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.UniformWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8869,7 +8869,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
-   %7 = bitcast %class.UniformWriter* %4 to i8*, !dbg !1647
-   %8 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1647
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %7, i8* align 32 %8, i32 64, i1 false), !dbg !1647, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %5), !dbg !1648
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval(%class.UniformWriter) align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %5), !dbg !1648
-   ret i1 %9, !dbg !1649
- }
- 
-@@ -8877,7 +8877,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
- declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture readonly, i32, i1) #32
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval align 32) #25 comdat !dbg !1650 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !1650 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.VaryingWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -8886,12 +8886,12 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWrite
-   %7 = bitcast %class.VaryingWriter* %4 to i8*, !dbg !1652
-   %8 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !1652
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %7, i8* align 32 %8, i32 64, i1 false), !dbg !1652, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %5), !dbg !1653
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %5), !dbg !1653
-   ret i1 %9, !dbg !1654
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1655 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1655 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8914,7 +8914,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %22 = bitcast %class.UniformWriter* %5 to i8*, !dbg !1657
-   %23 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1657
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %22, i8* align 32 %23, i32 64, i1 false), !dbg !1657, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %6), !dbg !1658
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %6), !dbg !1658
-   br i1 %24, label %60, label %25, !dbg !1659
- 
- ; <label>:25:                                     ; preds = %3
-@@ -8922,7 +8922,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %27 = bitcast %class.UniformWriter* %7 to i8*, !dbg !1661
-   %28 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1661
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %27, i8* align 32 %28, i32 64, i1 false), !dbg !1661, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %8), !dbg !1662
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval(%class.UniformWriter) align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %8), !dbg !1662
-   br i1 %29, label %60, label %30, !dbg !1663
- 
- ; <label>:30:                                     ; preds = %25
-@@ -8930,7 +8930,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %32 = bitcast %class.UniformWriter* %9 to i8*, !dbg !1665
-   %33 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1665
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %32, i8* align 32 %33, i32 64, i1 false), !dbg !1665, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %10), !dbg !1666
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval(%class.UniformWriter) align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %10), !dbg !1666
-   br i1 %34, label %60, label %35, !dbg !1667
- 
- ; <label>:35:                                     ; preds = %30
-@@ -8938,7 +8938,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %37 = bitcast %class.UniformWriter* %11 to i8*, !dbg !1669
-   %38 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1669
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %37, i8* align 32 %38, i32 64, i1 false), !dbg !1669, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %12), !dbg !1670
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval(%class.UniformWriter) align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %12), !dbg !1670
-   br i1 %39, label %60, label %40, !dbg !1671
- 
- ; <label>:40:                                     ; preds = %35
-@@ -8946,7 +8946,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %42 = bitcast %class.UniformWriter* %13 to i8*, !dbg !1673
-   %43 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1673
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %42, i8* align 32 %43, i32 64, i1 false), !dbg !1673, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %14), !dbg !1674
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval(%class.UniformWriter) align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %14), !dbg !1674
-   br i1 %44, label %60, label %45, !dbg !1675
- 
- ; <label>:45:                                     ; preds = %40
-@@ -8954,7 +8954,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %47 = bitcast %class.UniformWriter* %15 to i8*, !dbg !1677
-   %48 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1677
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %47, i8* align 32 %48, i32 64, i1 false), !dbg !1677, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %16), !dbg !1678
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval(%class.UniformWriter) align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %16), !dbg !1678
-   br i1 %49, label %60, label %50, !dbg !1679
- 
- ; <label>:50:                                     ; preds = %45
-@@ -8962,7 +8962,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %52 = bitcast %class.UniformWriter* %17 to i8*, !dbg !1681
-   %53 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1681
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %52, i8* align 32 %53, i32 64, i1 false), !dbg !1681, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %18), !dbg !1682
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval(%class.UniformWriter) align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %18), !dbg !1682
-   br i1 %54, label %60, label %55, !dbg !1683
- 
- ; <label>:55:                                     ; preds = %50
-@@ -8970,7 +8970,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %57 = bitcast %class.UniformWriter* %19 to i8*, !dbg !1685
-   %58 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1685
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %57, i8* align 32 %58, i32 64, i1 false), !dbg !1685, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %20), !dbg !1686
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval(%class.UniformWriter) align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %20), !dbg !1686
-   br label %60, !dbg !1683
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -8979,7 +8979,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1688 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1688 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9005,7 +9005,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1697 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1697 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9031,7 +9031,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1706 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1706 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9057,7 +9057,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1715 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1715 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9083,7 +9083,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1724 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1724 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9109,7 +9109,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1733 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1733 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9135,7 +9135,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1742 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1742 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9161,7 +9161,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1751 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1751 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9984,7 +9984,7 @@ define internal i32 @_ZN7details18_cm_print_type_oclIPvEENS_18SHADER_PRINTF_TYPE
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2055 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2055 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.VaryingWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -10007,7 +10007,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %22 = bitcast %class.VaryingWriter* %5 to i8*, !dbg !2057
-   %23 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2057
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %22, i8* align 32 %23, i32 64, i1 false), !dbg !2057, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %6), !dbg !2058
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %6), !dbg !2058
-   br i1 %24, label %60, label %25, !dbg !2059
- 
- ; <label>:25:                                     ; preds = %3
-@@ -10015,7 +10015,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %27 = bitcast %class.VaryingWriter* %7 to i8*, !dbg !2061
-   %28 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2061
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %27, i8* align 32 %28, i32 64, i1 false), !dbg !2061, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %8), !dbg !2062
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %8), !dbg !2062
-   br i1 %29, label %60, label %30, !dbg !2063
- 
- ; <label>:30:                                     ; preds = %25
-@@ -10023,7 +10023,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %32 = bitcast %class.VaryingWriter* %9 to i8*, !dbg !2065
-   %33 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2065
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %32, i8* align 32 %33, i32 64, i1 false), !dbg !2065, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %10), !dbg !2066
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %10), !dbg !2066
-   br i1 %34, label %60, label %35, !dbg !2067
- 
- ; <label>:35:                                     ; preds = %30
-@@ -10031,7 +10031,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %37 = bitcast %class.VaryingWriter* %11 to i8*, !dbg !2069
-   %38 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2069
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %37, i8* align 32 %38, i32 64, i1 false), !dbg !2069, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %12), !dbg !2070
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %12), !dbg !2070
-   br i1 %39, label %60, label %40, !dbg !2071
- 
- ; <label>:40:                                     ; preds = %35
-@@ -10039,7 +10039,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %42 = bitcast %class.VaryingWriter* %13 to i8*, !dbg !2073
-   %43 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2073
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %42, i8* align 32 %43, i32 64, i1 false), !dbg !2073, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %14), !dbg !2074
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %14), !dbg !2074
-   br i1 %44, label %60, label %45, !dbg !2075
- 
- ; <label>:45:                                     ; preds = %40
-@@ -10047,7 +10047,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %47 = bitcast %class.VaryingWriter* %15 to i8*, !dbg !2077
-   %48 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2077
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %47, i8* align 32 %48, i32 64, i1 false), !dbg !2077, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %16), !dbg !2078
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %16), !dbg !2078
-   br i1 %49, label %60, label %50, !dbg !2079
- 
- ; <label>:50:                                     ; preds = %45
-@@ -10055,7 +10055,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %52 = bitcast %class.VaryingWriter* %17 to i8*, !dbg !2081
-   %53 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2081
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %52, i8* align 32 %53, i32 64, i1 false), !dbg !2081, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %18), !dbg !2082
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %18), !dbg !2082
-   br i1 %54, label %60, label %55, !dbg !2083
- 
- ; <label>:55:                                     ; preds = %50
-@@ -10063,7 +10063,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %57 = bitcast %class.VaryingWriter* %19 to i8*, !dbg !2085
-   %58 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2085
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %57, i8* align 32 %58, i32 64, i1 false), !dbg !2085, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %20), !dbg !2086
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %20), !dbg !2086
-   br label %60, !dbg !2083
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -10072,7 +10072,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2088 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2088 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10098,7 +10098,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2097 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2097 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10124,7 +10124,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2106 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2106 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10150,7 +10150,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2115 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2115 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10176,7 +10176,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2124 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2124 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10202,7 +10202,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2133 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2133 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10228,7 +10228,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2142 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2142 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10254,7 +10254,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2151 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2151 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-diff --git a/builtins/builtins-cm-64.ll b/builtins/builtins-cm-64.ll
-index 39a2dd8be..375d01bed 100644
---- a/builtins/builtins-cm-64.ll
-+++ b/builtins/builtins-cm-64.ll
-@@ -557,7 +557,7 @@ $_ZN13VaryingWriter12WriteVecElemIPvEEvv = comdat any
- @.str.10 = private unnamed_addr constant [8 x i8] c"%016llX\00", align 1
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -618,7 +618,7 @@ define internal <1 x i8> @_ZN7details13__impl_divremILi1EEEu2CMvbT__cS1_S1_u2CMv
- declare <1 x i8> @llvm.genx.rdregioni.v1i8.v1i8.i16(<1 x i8>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -634,7 +634,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -680,7 +680,7 @@ define internal <2 x i8> @_ZN7details13__impl_divremILi2EEEu2CMvbT__cS1_S1_u2CMv
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -818,7 +818,7 @@ define internal <16 x i8> @_ZN7details13__impl_divremILi16EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -864,7 +864,7 @@ define internal <32 x i8> @_ZN7details13__impl_divremILi32EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -890,7 +890,7 @@ define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -904,7 +904,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -918,7 +918,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -932,7 +932,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -946,7 +946,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -960,7 +960,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -974,7 +974,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1058,7 +1058,7 @@ define internal <1 x i16> @_ZN7details13__impl_divremILi1EEEu2CMvbT__sS1_S1_u2CM
- declare <1 x i16> @llvm.genx.rdregioni.v1i16.v1i16.i16(<1 x i16>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1074,7 +1074,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1143,7 +1143,7 @@ define internal <2 x i16> @_ZN7details13__impl_divremILi2EEEu2CMvbT__sS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1350,7 +1350,7 @@ define internal <16 x i16> @_ZN7details13__impl_divremILi16EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1419,7 +1419,7 @@ define internal <32 x i16> @_ZN7details13__impl_divremILi32EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1445,7 +1445,7 @@ define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 si
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1459,7 +1459,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1473,7 +1473,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1487,7 +1487,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -1501,7 +1501,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -1515,7 +1515,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1529,7 +1529,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1730,7 +1730,7 @@ define internal <1 x i32> @_ZN7details13__impl_divremILi1EEEu2CMvbT__iS1_S1_u2CM
- declare <1 x i32> @llvm.genx.rdregioni.v1i32.v1i32.i16(<1 x i32>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1746,7 +1746,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -1932,7 +1932,7 @@ define internal <2 x i32> @_ZN7details13__impl_divremILi2EEEu2CMvbT__iS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2490,7 +2490,7 @@ define internal <16 x i32> @_ZN7details13__impl_divremILi16EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2676,7 +2676,7 @@ define internal <32 x i32> @_ZN7details13__impl_divremILi32EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2702,7 +2702,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2716,7 +2716,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -2730,7 +2730,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2744,7 +2744,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -2758,7 +2758,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -2772,7 +2772,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2786,7 +2786,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2844,7 +2844,7 @@ define internal <1 x i8> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2860,7 +2860,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -2906,7 +2906,7 @@ define internal <2 x i8> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3044,7 +3044,7 @@ define internal <16 x i8> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3090,7 +3090,7 @@ define internal <32 x i8> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3116,7 +3116,7 @@ define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3130,7 +3130,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -3144,7 +3144,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3158,7 +3158,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -3172,7 +3172,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -3186,7 +3186,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3200,7 +3200,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3278,7 +3278,7 @@ define internal <1 x i16> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3294,7 +3294,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3360,7 +3360,7 @@ define internal <2 x i16> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3558,7 +3558,7 @@ define internal <16 x i16> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3624,7 +3624,7 @@ define internal <32 x i16> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3650,7 +3650,7 @@ define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 ze
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3664,7 +3664,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3678,7 +3678,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3692,7 +3692,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -3706,7 +3706,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -3720,7 +3720,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3734,7 +3734,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3892,7 +3892,7 @@ define internal <1 x i32> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3908,7 +3908,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4054,7 +4054,7 @@ define internal <2 x i32> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4492,7 +4492,7 @@ define internal <16 x i32> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4638,7 +4638,7 @@ define internal <32 x i32> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4664,7 +4664,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4678,7 +4678,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4692,7 +4692,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4706,7 +4706,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -4720,7 +4720,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -4734,7 +4734,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4748,7 +4748,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-+define internal void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-   %8 = alloca i8*, align 8
-   %9 = alloca i8*, align 8
-   %10 = alloca i32, align 4
-@@ -5070,7 +5070,7 @@ define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i3
-   %67 = load i64, i64* %13, align 8, !dbg !159, !tbaa !19
-   %68 = load <5 x i32>, <5 x i32>* %21, align 32, !dbg !160, !tbaa !7
-   call void @_ZN13VaryingWriterC2ERyRPKjiyu2CMvb5_i(%class.VaryingWriter* %23, i64* dereferenceable(8) %19, i32** dereferenceable(8) %14, i32 %66, i64 %67, <5 x i32> %68), !dbg !161
--  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval align 32 %22, %class.VaryingWriter* byval align 32 %23), !dbg !162
-+  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval(%class.UniformWriter) align 32 %22, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %23), !dbg !162
-   br label %70, !dbg !163
- 
- ; <label>:70:                                     ; preds = %60
-@@ -5188,7 +5188,7 @@ define internal <5 x i32> @_Z17get_auxiliary_strv() #28 comdat !dbg !178 {
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %class.VaryingWriter* byval align 32) #25 comdat !dbg !191 {
-+define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !191 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %class.VaryingWriter, align 32
-@@ -5197,7 +5197,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %8 = bitcast %class.UniformWriter* %5 to i8*, !dbg !196
-   %9 = bitcast %class.UniformWriter* %1 to i8*, !dbg !196
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %8, i8* align 32 %9, i64 64, i1 false), !dbg !196, !tbaa.struct !197
--  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval align 32 %5), !dbg !198
-+  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5), !dbg !198
-   br i1 %10, label %16, label %11, !dbg !199
- 
- ; <label>:11:                                     ; preds = %3
-@@ -5205,7 +5205,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %13 = bitcast %class.VaryingWriter* %6 to i8*, !dbg !201
-   %14 = bitcast %class.VaryingWriter* %2 to i8*, !dbg !201
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %13, i8* align 32 %14, i64 64, i1 false), !dbg !201, !tbaa.struct !197
--  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval align 32 %6), !dbg !202
-+  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %6), !dbg !202
-   br label %16, !dbg !199
- 
- ; <label>:16:                                     ; preds = %11, %3
-@@ -5280,7 +5280,7 @@ define internal void @_ZN13VaryingWriterC2ERyRPKjiyu2CMvb5_i(%class.VaryingWrite
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @__num_cores() #29 !dbg !236 {
-+define internal i32 @__num_cores() #29 !dbg !236 {
-   ret i32 -1, !dbg !237
- }
- 
-@@ -8870,7 +8870,7 @@ declare dso_local void @_ZN7details37__cm_intrinsic_impl_svm_scatter_writeIiLi1E
- declare void @llvm.genx.svm.scatter.v1i1.v1i64.v1i32(<1 x i1>, i32, <1 x i64>, <1 x i32>) #27
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval align 32) #25 comdat !dbg !1645 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32) #25 comdat !dbg !1645 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.UniformWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8879,7 +8879,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
-   %7 = bitcast %class.UniformWriter* %4 to i8*, !dbg !1647
-   %8 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1647
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %7, i8* align 32 %8, i64 64, i1 false), !dbg !1647, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %5), !dbg !1648
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval(%class.UniformWriter) align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %5), !dbg !1648
-   ret i1 %9, !dbg !1649
- }
- 
-@@ -8887,7 +8887,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
- declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1) #32
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval align 32) #25 comdat !dbg !1650 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !1650 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.VaryingWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -8896,12 +8896,12 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWrite
-   %7 = bitcast %class.VaryingWriter* %4 to i8*, !dbg !1652
-   %8 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !1652
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %7, i8* align 32 %8, i64 64, i1 false), !dbg !1652, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %5), !dbg !1653
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %5), !dbg !1653
-   ret i1 %9, !dbg !1654
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1655 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1655 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8924,7 +8924,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %22 = bitcast %class.UniformWriter* %5 to i8*, !dbg !1657
-   %23 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1657
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %22, i8* align 32 %23, i64 64, i1 false), !dbg !1657, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %6), !dbg !1658
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %6), !dbg !1658
-   br i1 %24, label %60, label %25, !dbg !1659
- 
- ; <label>:25:                                     ; preds = %3
-@@ -8932,7 +8932,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %27 = bitcast %class.UniformWriter* %7 to i8*, !dbg !1661
-   %28 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1661
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %27, i8* align 32 %28, i64 64, i1 false), !dbg !1661, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %8), !dbg !1662
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval(%class.UniformWriter) align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %8), !dbg !1662
-   br i1 %29, label %60, label %30, !dbg !1663
- 
- ; <label>:30:                                     ; preds = %25
-@@ -8940,7 +8940,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %32 = bitcast %class.UniformWriter* %9 to i8*, !dbg !1665
-   %33 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1665
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %32, i8* align 32 %33, i64 64, i1 false), !dbg !1665, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %10), !dbg !1666
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval(%class.UniformWriter) align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %10), !dbg !1666
-   br i1 %34, label %60, label %35, !dbg !1667
- 
- ; <label>:35:                                     ; preds = %30
-@@ -8948,7 +8948,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %37 = bitcast %class.UniformWriter* %11 to i8*, !dbg !1669
-   %38 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1669
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %37, i8* align 32 %38, i64 64, i1 false), !dbg !1669, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %12), !dbg !1670
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval(%class.UniformWriter) align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %12), !dbg !1670
-   br i1 %39, label %60, label %40, !dbg !1671
- 
- ; <label>:40:                                     ; preds = %35
-@@ -8956,7 +8956,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %42 = bitcast %class.UniformWriter* %13 to i8*, !dbg !1673
-   %43 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1673
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %42, i8* align 32 %43, i64 64, i1 false), !dbg !1673, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %14), !dbg !1674
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval(%class.UniformWriter) align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %14), !dbg !1674
-   br i1 %44, label %60, label %45, !dbg !1675
- 
- ; <label>:45:                                     ; preds = %40
-@@ -8964,7 +8964,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %47 = bitcast %class.UniformWriter* %15 to i8*, !dbg !1677
-   %48 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1677
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %47, i8* align 32 %48, i64 64, i1 false), !dbg !1677, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %16), !dbg !1678
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval(%class.UniformWriter) align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %16), !dbg !1678
-   br i1 %49, label %60, label %50, !dbg !1679
- 
- ; <label>:50:                                     ; preds = %45
-@@ -8972,7 +8972,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %52 = bitcast %class.UniformWriter* %17 to i8*, !dbg !1681
-   %53 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1681
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %52, i8* align 32 %53, i64 64, i1 false), !dbg !1681, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %18), !dbg !1682
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval(%class.UniformWriter) align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %18), !dbg !1682
-   br i1 %54, label %60, label %55, !dbg !1683
- 
- ; <label>:55:                                     ; preds = %50
-@@ -8980,7 +8980,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %57 = bitcast %class.UniformWriter* %19 to i8*, !dbg !1685
-   %58 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1685
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %57, i8* align 32 %58, i64 64, i1 false), !dbg !1685, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %20), !dbg !1686
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval(%class.UniformWriter) align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %20), !dbg !1686
-   br label %60, !dbg !1683
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -8989,7 +8989,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1688 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1688 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9015,7 +9015,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1697 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1697 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9041,7 +9041,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1706 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1706 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9067,7 +9067,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1715 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1715 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9093,7 +9093,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1724 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1724 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9119,7 +9119,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1733 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1733 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9145,7 +9145,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1742 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1742 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9171,7 +9171,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1751 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1751 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10013,7 +10013,7 @@ define internal i32 @_ZN7details18_cm_print_type_oclIPvEENS_18SHADER_PRINTF_TYPE
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2061 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2061 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.VaryingWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -10036,7 +10036,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %22 = bitcast %class.VaryingWriter* %5 to i8*, !dbg !2063
-   %23 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2063
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %22, i8* align 32 %23, i64 64, i1 false), !dbg !2063, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %6), !dbg !2064
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %6), !dbg !2064
-   br i1 %24, label %60, label %25, !dbg !2065
- 
- ; <label>:25:                                     ; preds = %3
-@@ -10044,7 +10044,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %27 = bitcast %class.VaryingWriter* %7 to i8*, !dbg !2067
-   %28 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2067
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %27, i8* align 32 %28, i64 64, i1 false), !dbg !2067, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %8), !dbg !2068
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %8), !dbg !2068
-   br i1 %29, label %60, label %30, !dbg !2069
- 
- ; <label>:30:                                     ; preds = %25
-@@ -10052,7 +10052,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %32 = bitcast %class.VaryingWriter* %9 to i8*, !dbg !2071
-   %33 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2071
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %32, i8* align 32 %33, i64 64, i1 false), !dbg !2071, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %10), !dbg !2072
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %10), !dbg !2072
-   br i1 %34, label %60, label %35, !dbg !2073
- 
- ; <label>:35:                                     ; preds = %30
-@@ -10060,7 +10060,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %37 = bitcast %class.VaryingWriter* %11 to i8*, !dbg !2075
-   %38 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2075
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %37, i8* align 32 %38, i64 64, i1 false), !dbg !2075, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %12), !dbg !2076
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %12), !dbg !2076
-   br i1 %39, label %60, label %40, !dbg !2077
- 
- ; <label>:40:                                     ; preds = %35
-@@ -10068,7 +10068,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %42 = bitcast %class.VaryingWriter* %13 to i8*, !dbg !2079
-   %43 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2079
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %42, i8* align 32 %43, i64 64, i1 false), !dbg !2079, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %14), !dbg !2080
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %14), !dbg !2080
-   br i1 %44, label %60, label %45, !dbg !2081
- 
- ; <label>:45:                                     ; preds = %40
-@@ -10076,7 +10076,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %47 = bitcast %class.VaryingWriter* %15 to i8*, !dbg !2083
-   %48 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2083
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %47, i8* align 32 %48, i64 64, i1 false), !dbg !2083, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %16), !dbg !2084
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %16), !dbg !2084
-   br i1 %49, label %60, label %50, !dbg !2085
- 
- ; <label>:50:                                     ; preds = %45
-@@ -10084,7 +10084,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %52 = bitcast %class.VaryingWriter* %17 to i8*, !dbg !2087
-   %53 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2087
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %52, i8* align 32 %53, i64 64, i1 false), !dbg !2087, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %18), !dbg !2088
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %18), !dbg !2088
-   br i1 %54, label %60, label %55, !dbg !2089
- 
- ; <label>:55:                                     ; preds = %50
-@@ -10092,7 +10092,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %57 = bitcast %class.VaryingWriter* %19 to i8*, !dbg !2091
-   %58 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2091
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %57, i8* align 32 %58, i64 64, i1 false), !dbg !2091, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %20), !dbg !2092
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %20), !dbg !2092
-   br label %60, !dbg !2089
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -10101,7 +10101,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2094 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2094 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10127,7 +10127,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2103 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2103 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10153,7 +10153,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2112 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2112 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10179,7 +10179,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2121 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2121 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10205,7 +10205,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2130 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2130 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10231,7 +10231,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2139 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2139 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10257,7 +10257,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2148 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2148 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10283,7 +10283,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2157 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2157 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
diff --git a/srcpkgs/ispc/template b/srcpkgs/ispc/template
index 9c3acb42a9cf..3a85ff2605af 100644
--- a/srcpkgs/ispc/template
+++ b/srcpkgs/ispc/template
@@ -1,7 +1,7 @@
 # Template file for 'ispc'
 pkgname=ispc
-version=1.15.0
-revision=2
+version=1.17.0
+revision=1
 archs="x86_64*"
 build_style=cmake
 configure_args="-DISPC_NO_DUMPS=ON -DARM_ENABLED=OFF"
@@ -12,7 +12,7 @@ maintainer="Andrea Brancaleoni <abc@pompel.me>"
 license="BSD-3-Clause"
 homepage="https://ispc.github.io"
 distfiles="https://github.com/ispc/ispc/archive/v${version}.tar.gz"
-checksum=2658ff00dc045ac9fcefbf6bd26dffaf723b059a942a27df91bbb61bc503a285
+checksum=37fb1055d6c6b232e112d8d50145d726824ed4d8da93a7396315dceba6c76e62
 nocross=yes
 nopie=yes
 

From 68de383fa4ac75743dc82204d842519ffee09d60 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Tue, 3 May 2022 01:20:03 +0200
Subject: [PATCH 25/27] llvm14: switch to runtimes build.

https://reviews.llvm.org/rGac7031b2b2fa
https://reviews.llvm.org/D110338#3022952
---
 srcpkgs/llvm14/template | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
index 3e7e6ab2c00b..e731aa76130a 100644
--- a/srcpkgs/llvm14/template
+++ b/srcpkgs/llvm14/template
@@ -51,7 +51,8 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
-_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
+_enabled_projects="clang;clang-tools-extra;lld"
+_enabled_runtimes="compiler-rt;libcxx;libcxxabi;libunwind"
 
 _lldb_enable=yes
 _libomp_enable=no
@@ -67,9 +68,8 @@ esac
 
 subpackages="clang-tools-extra"
 
-# must go before clang
 if [ "$_libomp_enable" = "yes" ]; then
-	_enabled_projects+=";openmp"
+	_enabled_runtimes+=";openmp"
 	subpackages+=" libomp libomp-devel"
 	# because of cmake nonsense referencing libomptarget.so.*
 	depends+=" libomp>=${version}_${revision}"
@@ -88,6 +88,7 @@ fi
 subpackages+=" lld lld-devel"
 
 configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+configure_args+=" -DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}"
 
 post_patch() {
 	if [ "$_lldb_enable" = "yes" ]; then
@@ -156,7 +157,8 @@ pre_configure() {
 		CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
 			CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
-			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
+			-DLLVM_ENABLE_PROJECTS=${_enabled_projects} \
+			-DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}
 		make ${makejobs} -C utils/TableGen
 		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen

From 8185eecfc1818ccb9fb08fb264c90d9aa84d8144 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 14:07:14 +0200
Subject: [PATCH 26/27] zig: fix build.

---
 srcpkgs/zig/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/zig/template b/srcpkgs/zig/template
index 728c5a64e9df..c175de62c5f7 100644
--- a/srcpkgs/zig/template
+++ b/srcpkgs/zig/template
@@ -5,7 +5,7 @@ revision=2
 archs="x86_64* aarch64*"
 build_style=cmake
 make_cmd=make
-makedepends="clang llvm12 lld-devel"
+makedepends="clang12 llvm12 lld12-devel"
 short_desc="Programming language designed for robustness, optimality, and clarity"
 maintainer="Isaac Freund <mail@isaacfreund.com>"
 license="MIT"

From 5b6f7d9adaef839b73d8428455cac9b308efbcab Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 03:39:58 +0200
Subject: [PATCH 27/27] llvm14: fix build.

---
 common/shlibs                                 |  5 +-
 .../llvm14/files/llvm-Config-llvm-config.h    |  9 +++
 srcpkgs/llvm14/template                       | 65 ++++++++++++-------
 3 files changed, 55 insertions(+), 24 deletions(-)
 create mode 100644 srcpkgs/llvm14/files/llvm-Config-llvm-config.h

diff --git a/common/shlibs b/common/shlibs
index 5d06c2381fed..7c3e511b6f00 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -976,7 +976,7 @@ libconfuse.so.2 confuse-3.2.1_1
 libclang.so.12 libclang12-12.0.0_1
 libclang-cpp.so.12 libclang12-cpp-12.0.0_1
 liblldb.so.14 lldb-14.0.3_1
-libclang.so.14 libclang-14.0.3_1
+libclang.so.13 libclang-14.0.3_1
 libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
@@ -4179,7 +4179,8 @@ libomptarget.rtl.amdgpu.so libomp-14.0.3_1
 libomptarget.rtl.cuda.so libomp-14.0.3_1
 libomptarget.rtl.x86_64.so libomp-14.0.3_1
 libarcher.so libomp-14.0.3_1
-libomptarget.so libomp-14.0.3_1
+libompd.so libomp-devel-14.0.3_1
+libomptarget.so libomp-devel-14.0.3_1
 liblldbIntelFeatures.so.14 lldb-14.0.3_1
 libLTO.so.14 llvm14-14.0.3_1
 libRemarks.so.14 llvm14-14.0.3_1
diff --git a/srcpkgs/llvm14/files/llvm-Config-llvm-config.h b/srcpkgs/llvm14/files/llvm-Config-llvm-config.h
new file mode 100644
index 000000000000..2fa08c9be696
--- /dev/null
+++ b/srcpkgs/llvm14/files/llvm-Config-llvm-config.h
@@ -0,0 +1,9 @@
+#include <bits/wordsize.h>
+
+#if __WORDSIZE == 32
+#include "llvm-config-32.h"
+#elif __WORDSIZE == 64
+#include "llvm-config-64.h"
+#else
+#error "Unknown word size"
+#endif
diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
index e731aa76130a..f3242f0549a2 100644
--- a/srcpkgs/llvm14/template
+++ b/srcpkgs/llvm14/template
@@ -15,6 +15,7 @@ configure_args="
  -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
  -DLIBOMP_ENABLE_SHARED=YES
  -DLIBOMP_INSTALL_ALIASES=NO
+ -DCOMPILER_RT_DEFAULT_TARGET_ONLY=YES
  -DLLVM_INCLUDE_DOCS=YES
  -DLLVM_BUILD_DOCS=YES
  -DLLVM_ENABLE_SPHINX=YES
@@ -38,6 +39,7 @@ distfiles="https://github.com/llvm/llvm-project/releases/download/llvmorg-${vers
 checksum=44d3e7a784d5cf805e72853bb03f218bd1058d448c03ca883dabbebc99204e0c
 lib32disabled=yes
 python_version=3
+nopie_files="/usr/bin/llvm-omp-device-info"
 
 if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
 	configure_args+=" -DLIBCXX_HAS_MUSL_LIBC=YES"
@@ -90,6 +92,33 @@ subpackages+=" lld lld-devel"
 configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
 configure_args+=" -DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}"
 
+case "$XBPS_TARGET_MACHINE" in
+	i686) _trp="i686-pc-linux-gnu";;
+	i686-musl) _trp="i686-linux-musl";;
+	x86_64) _trp="x86_64-unknown-linux-gnu";;
+	x86_64-musl) _trp="x86_64-linux-musl";;
+	armv5tel) _trp="arm-linux-gnueabi";;
+	armv5tel-musl) _trp="arm-linux-musleabi";;
+	armv6l) _trp="arm-linux-gnueabihf";;
+	armv7l) _trp="armv7l-linux-gnueabihf";;
+	armv6l-musl) _trp="arm-linux-musleabihf";;
+	armv7l-musl) _trp="armv7l-linux-musleabihf";;
+	aarch64) _trp="aarch64-linux-gnu";;
+	aarch64-musl) _trp="aarch64-linux-musl";;
+	ppc) _trp="powerpc-linux-gnu";;
+	ppc-musl) _trp="powerpc-linux-musl";;
+	ppcle) _trp="powerpcle-linux-gnu";;
+	ppcle-musl) _trp="powerpcle-linux-musl";;
+	ppc64le) _trp="powerpc64le-linux-gnu";;
+	ppc64le-musl) _trp="powerpc64le-linux-musl";;
+	ppc64) _trp="powerpc64-linux-gnu";;
+	ppc64-musl) _trp="powerpc64-linux-musl";;
+	mips-musl) _trp="mips-linux-musl";;
+	mipshf-musl) _trp="mips-linux-muslhf";;
+	mipsel-musl) _trp="mipsel-linux-musl";;
+	mipselhf-musl) _trp="mipsel-linux-muslhf";;
+esac
+
 post_patch() {
 	if [ "$_lldb_enable" = "yes" ]; then
 		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
@@ -136,8 +165,7 @@ post_patch() {
 }
 
 pre_configure() {
-	local triplet
-
+	local triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
 	# Vastly reduce size of debugging symbols:
 	CFLAGS=${CFLAGS/ -g/ -g1}
 	CXXFLAGS=${CXXFLAGS/ -g/ -g1}
@@ -180,8 +208,6 @@ pre_configure() {
 		riscv64*) _arch="RISCV64";;
 	esac
 
-	triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
-
 	configure_args+=" -DLLVM_TARGET_ARCH=${_arch}"
 	configure_args+=" -DLLVM_HOST_TRIPLE=${triplet}"
 	configure_args+=" -DLLVM_DEFAULT_TARGET_TRIPLE=${triplet}"
@@ -251,7 +277,7 @@ clang-tools-extra_package() {
 		vmove "usr/lib/libclangQuery*"
 		vmove "usr/lib/libclangTidy*"
 		vmove "usr/share/clang/*tidy*"
-		vmove usr/share/doc/clang-tools
+		vmove usr/share/doc/LLVM/clang-tools
 		vmove usr/share/man/man1/extraclangtools.1
 		vmove usr/share/man/man1/diagtool.1
 	}
@@ -273,7 +299,7 @@ clang_package() {
 		vmove "usr/lib/libclang*.a"
 		vmove "usr/lib/libclang*.so"
 		vmove usr/share/clang
-		vmove usr/share/doc/clang
+		vmove usr/share/doc/LLVM/clang
 		vmove usr/share/man/man1/clang.1
 	}
 }
@@ -301,7 +327,7 @@ lld_package() {
 		vmove usr/bin/wasm-ld
 		vmove usr/bin/ld.lld*
 		vmove usr/bin/ld64.lld*
-		vmove usr/share/doc/lld
+		vmove usr/share/doc/LLVM/lld
 	}
 }
 
@@ -342,7 +368,7 @@ lldb-devel_package() {
 llvm-libunwind_package() {
 	short_desc+=" - libunwind"
 	pkg_install() {
-		vmove "usr/lib/libunwind.so.*"
+		vmove "usr/lib/${_trp}/libunwind.so.*"
 	}
 }
 
@@ -351,18 +377,17 @@ llvm-libunwind-devel_package() {
 	depends="llvm-libunwind>=${version}_${revision}"
 	conflicts="libunwind-devel>=0"
 	pkg_install() {
-		vmove usr/lib/libunwind.so
-		vmove usr/lib/libunwind.a
+		vmove usr/lib/${_trp}/libunwind.so
+		vmove usr/lib/${_trp}/libunwind.a
 		vmove "usr/include/*unwind*"
 		vmove usr/include/mach-o
-		vmove usr/share/doc/libunwind
 	}
 }
 
 libcxxabi_package() {
 	short_desc+=" - low level support for libc++"
 	pkg_install() {
-		vmove "usr/lib/libc++abi.so.*"
+		vmove "usr/lib/${_trp}/libc++abi.so.*"
 	}
 }
 
@@ -370,8 +395,8 @@ libcxxabi-devel_package() {
 	short_desc+=" - low level support for libc++ - development files"
 	depends="libcxxabi>=${version}_${revision}"
 	pkg_install() {
-		vmove usr/lib/libc++abi.so
-		vmove usr/lib/libc++abi.a
+		vmove usr/lib/${_trp}/libc++abi.so
+		vmove usr/lib/${_trp}/libc++abi.a
 		vmove "usr/include/*cxxabi*"
 	}
 }
@@ -379,7 +404,7 @@ libcxxabi-devel_package() {
 libcxx_package() {
 	short_desc+=" - C++ standard library"
 	pkg_install() {
-		vmove "usr/lib/libc++.so.*"
+		vmove "usr/lib/${_trp}/libc++.so.*"
 	}
 }
 
@@ -387,11 +412,10 @@ libcxx-devel_package() {
 	short_desc+=" - C++ standard library - development files"
 	depends="libcxx>=${version}_${revision}"
 	pkg_install() {
-		vmove usr/lib/libc++.so
-		vmove usr/lib/libc++.a
-		vmove usr/lib/libc++experimental.a
+		vmove usr/lib/${_trp}/libc++.so
+		vmove usr/lib/${_trp}/libc++.a
+		vmove usr/lib/${_trp}/libc++experimental.a
 		vmove usr/include/c++
-		vmove usr/share/doc/libcxx
 	}
 }
 
@@ -401,7 +425,6 @@ libomp_package() {
 		vmove usr/lib/libomp.so
 		vmove "usr/lib/libomptarget.rtl.*.so"
 		vmove usr/lib/libarcher.so
-		vmove "usr/lib/libomp*.so.*"
 	}
 }
 
@@ -413,8 +436,6 @@ libomp-devel_package() {
 		vmove "usr/lib/libarcher*"
 		vmove "usr/include/omp*.h"
 		vmove "usr/lib/clang/${version}/include/omp*.h"
-		vmove usr/share/man/man1/llvmopenmp.1
-		vmove usr/share/doc/openmp
 	}
 }
 

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (20 preceding siblings ...)
  2022-05-23  1:20 ` prez
@ 2022-05-23  1:56 ` prez
  2022-05-23  1:56 ` Llvm14 prez
                   ` (47 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-05-23  1:56 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 869 bytes --]

New comment by prez on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1134083433

Comment:
>I can definitely try to help here. @prez What is missing currently in your pr ?

I just rebased this - Testing, including on architectures other than x86_64 glibc, and building all the non-llvm packages that were touched in this PR (all the llvm stuff builds fine). For example, `ldc` fails to build at the moment:

```
[133/178] Linking C shared library lib/libdruntime-ldc-debug-shared.so.2.0.99
FAILED: lib/libdruntime-ldc-debug-shared.so.2.0.99 
/usr/bin/ld: cannot find -lunwind
```

But given that the maintainer left llvm to rot for half a year, then came in here to tell me what I'm doing is wrong, only to disappear again, maybe some prayers for the future of llvm on this distro would be appropriate as well. 

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (21 preceding siblings ...)
  2022-05-23  1:56 ` Llvm14 prez
@ 2022-05-23  1:56 ` prez
  2022-05-23  8:34 ` Llvm14 q66
                   ` (46 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-05-23  1:56 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 864 bytes --]

New comment by prez on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1134083433

Comment:
>I can definitely try to help here. @prez What is missing currently in your pr ?

I just rebased this - Testing, including on architectures other than x86_64 glibc, and building all the non-llvm packages that were touched in this PR (all the llvm stuff builds fine). For example, `ldc` fails to build at the moment:

```
[133/178] Linking C shared library lib/libdruntime-ldc-debug-shared.so.2.0.99
FAILED: lib/libdruntime-ldc-debug-shared.so.2.0.99 
/usr/bin/ld: cannot find -lunwind
```

But given that the maintainer left llvm to rot for a year, then came in here to tell me what I'm doing is wrong, only to disappear again, maybe some prayers for the future of llvm on this distro would be appropriate as well. 

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (22 preceding siblings ...)
  2022-05-23  1:56 ` Llvm14 prez
@ 2022-05-23  8:34 ` q66
  2022-05-23 11:45 ` Llvm14 prez
                   ` (45 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: q66 @ 2022-05-23  8:34 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 634 bytes --]

New comment by q66 on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1134359393

Comment:
it can't find unwind because your PR changed things to use multiarch-style paths with triplet in the path like I mentioned before

so you need to fix that (i.e. patch around it)

also, excuse me but if what it takes to get low level toolchain changes into the distro (be it llvm, gcc or whatever) fully depends on myself alone and without my effort nothing moves forward, then you can't place any blame on me, because this is a foss project and I can't be expected to always be around forever

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (23 preceding siblings ...)
  2022-05-23  8:34 ` Llvm14 q66
@ 2022-05-23 11:45 ` prez
  2022-05-23 13:41 ` Llvm14 q66
                   ` (44 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-05-23 11:45 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1137 bytes --]

New comment by prez on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1134570101

Comment:
>it can't find unwind because your PR changed things to use multiarch-style paths with triplet in the path like I mentioned before

Thanks for the hint. I would appreciate if you could go into detail on where you would patch this, but what I can do for now is fix the install location.

>also, excuse me but if what it takes to get low level toolchain changes into the distro (be it llvm, gcc or whatever) fully depends on myself alone and without my effort nothing moves forward, then you can't place any blame on me, because this is a foss project and I can't be expected to always be around forever

I'm not blaming you, in fact I'm grateful work the work you've done over the years. But could you please fill us in on your plans? As I said, llvm12 is over a year old now, and you're in the maintainer field of this package. 
Do you plan to not touch this anymore? Should I remove you from the maintainer field? Should I drop the ppc patches, which seemingly only you cared about? Thanks.

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (24 preceding siblings ...)
  2022-05-23 11:45 ` Llvm14 prez
@ 2022-05-23 13:41 ` q66
  2022-05-23 13:50 ` Llvm14 prez
                   ` (43 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: q66 @ 2022-05-23 13:41 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 662 bytes --]

New comment by q66 on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1134696219

Comment:
you can probably adapt relevant patches from https://github.com/chimera-linux/cports/tree/master/main/llvm/patches

i have no plans right now, but I never intended to be a sole maintainer of the toolchain

i dunno where you got the idea that only i care about the patches, because if that was the case my life would have been a whole lot easier, but in any case we do not drop patches unless they are known not to be relevant anymore; it is the responsibility of the person doing the update work to rebase them as needed

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (25 preceding siblings ...)
  2022-05-23 13:41 ` Llvm14 q66
@ 2022-05-23 13:50 ` prez
  2022-05-23 13:51 ` Llvm14 prez
                   ` (42 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-05-23 13:50 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 720 bytes --]

New comment by prez on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1134705648

Comment:
> you can probably adapt relevant patches from https://github.com/chimera-linux/cports/tree/master/main/llvm/patches

https://github.com/chimera-linux/cports/blob/master/main/llvm/patches/0005-disable-mutliarch-layout-on-musl-in-clang.patch
https://github.com/chimera-linux/cports/blob/master/main/llvm/patches/0008-disable-multiarch-locations-for-libunwind-libc-libc-.patch
https://github.com/chimera-linux/cports/blob/master/main/llvm/patches/999-build-runtimes-crt.patch

Would these 3 be sufficient/the right ones to get rid of the multiarch locations in a runtime build?

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (26 preceding siblings ...)
  2022-05-23 13:50 ` Llvm14 prez
@ 2022-05-23 13:51 ` prez
  2022-05-23 15:34 ` Llvm14 q66
                   ` (41 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-05-23 13:51 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 721 bytes --]

New comment by prez on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1134705648

Comment:
> you can probably adapt relevant patches from https://github.com/chimera-linux/cports/tree/master/main/llvm/patches

https://github.com/chimera-linux/cports/blob/master/main/llvm/patches/0005-disable-mutliarch-layout-on-musl-in-clang.patch
https://github.com/chimera-linux/cports/blob/master/main/llvm/patches/0008-disable-multiarch-locations-for-libunwind-libc-libc-.patch
https://github.com/chimera-linux/cports/blob/master/main/llvm/patches/999-build-runtimes-crt.patch

Would these 3 be sufficient/the right ones to get rid of the multiarch locations in a runtimes build?

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (27 preceding siblings ...)
  2022-05-23 13:51 ` Llvm14 prez
@ 2022-05-23 15:34 ` q66
  2022-05-25  1:22 ` [PR PATCH] [Updated] Llvm14 prez
                   ` (40 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: q66 @ 2022-05-23 15:34 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 427 bytes --]

New comment by q66 on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1134827093

Comment:
you don't need the last one at all (it's needed for systems that are built with llvm without gcc and bootstrap themselves)

the first one is not strictly needed for the installation location but it's still a good idea to take it

the second one should probably fix the actual locations

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: [PR PATCH] [Updated] Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (28 preceding siblings ...)
  2022-05-23 15:34 ` Llvm14 q66
@ 2022-05-25  1:22 ` prez
  2022-05-25  1:23 ` Llvm14 prez
                   ` (39 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-05-25  1:22 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 488 bytes --]

There is an updated pull request by prez against master on the void-packages repository

https://github.com/prez/void-packages llvm
https://github.com/void-linux/void-packages/pull/36962

Llvm14
Supersedes https://github.com/void-linux/void-packages/pull/36229, https://github.com/void-linux/void-packages/pull/34800 - thank you @motorto and @DBLouis.

Updated patches, ping @q66 .

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/36962.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-llvm-36962.patch --]
[-- Type: text/x-diff, Size: 544640 bytes --]

From db3b5c9ab542812207a6eb3a3768da28e926a6ce Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:15:06 +0200
Subject: [PATCH 01/26] New package: llvm14-14.0.3

---
 common/shlibs                                 |  16 +-
 srcpkgs/clang                                 |   2 +-
 srcpkgs/clang-analyzer                        |   2 +-
 srcpkgs/clang-tools-extra                     |   2 +-
 srcpkgs/libclang                              |   2 +-
 srcpkgs/libclang-cpp                          |   2 +-
 srcpkgs/libcxx                                |   2 +-
 srcpkgs/libcxx-devel                          |   2 +-
 srcpkgs/libcxxabi                             |   2 +-
 srcpkgs/libcxxabi-devel                       |   2 +-
 srcpkgs/libllvm14                             |   1 +
 srcpkgs/libomp                                |   2 +-
 srcpkgs/libomp-devel                          |   2 +-
 srcpkgs/lld                                   |   2 +-
 srcpkgs/lld-devel                             |   2 +-
 srcpkgs/lldb                                  |   2 +-
 srcpkgs/lldb-devel                            |   2 +-
 srcpkgs/llvm-libunwind                        |   2 +-
 srcpkgs/llvm-libunwind-devel                  |   2 +-
 .../patches/clang-002-add-musl-triples.patch  | 110 +++++
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 +
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ++
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 ++
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 +++
 srcpkgs/llvm14/patches/libcxx-musl.patch      |  26 ++
 srcpkgs/llvm14/patches/libcxx-ppc.patch       |  22 +
 .../llvm14/patches/libcxx-ssp-nonshared.patch |  11 +
 srcpkgs/llvm14/patches/libcxxabi-dl.patch     |  25 ++
 srcpkgs/llvm14/patches/lldb-musl.patch        |  31 ++
 srcpkgs/llvm14/patches/llvm-001-musl.patch    |  57 +++
 .../patches/llvm-002-musl-ppc64-elfv2.patch   |  30 ++
 .../patches/llvm-003-ppc-secureplt.patch      |  11 +
 .../patches/llvm-004-override-opt.patch       |  18 +
 .../llvm14/patches/llvm-005-ppc-bigpic.patch  |  36 ++
 .../patches/llvm-006-aarch64-mf_exec.patch    |  25 ++
 srcpkgs/llvm14/template                       | 424 ++++++++++++++++++
 srcpkgs/llvm14/update                         |   3 +
 37 files changed, 1018 insertions(+), 20 deletions(-)
 create mode 120000 srcpkgs/libllvm14
 create mode 100644 srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
 create mode 100644 srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
 create mode 100644 srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
 create mode 100644 srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-ppc.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxxabi-dl.patch
 create mode 100644 srcpkgs/llvm14/patches/lldb-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-001-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-004-override-opt.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
 create mode 100644 srcpkgs/llvm14/template
 create mode 100644 srcpkgs/llvm14/update

diff --git a/common/shlibs b/common/shlibs
index 058109664658..0ca5d7d5d6f9 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -973,11 +973,12 @@ libuchardet.so.0 uchardet-0.0.6_1
 libgtksourceviewmm-3.0.so.0 gtksourceviewmm-3.2.0_1
 libyajl.so.2 yajl-2.0.1_1
 libconfuse.so.2 confuse-3.2.1_1
-liblldb.so.12 lldb-12.0.0_1
-libclang.so.12 libclang-12.0.0_1
-libclang-cpp.so.12 libclang-cpp-12.0.0_1
+liblldb.so.14 lldb-14.0.3_1
+libclang.so.14 libclang-14.0.3_1
+libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
+libLLVM-14.so libllvm14-14.0.3_1
 libisofs.so.6 libisofs-0.6.24_1
 libmpack.so.0 libmpack-1.0.5_1
 libGeoIP.so.1 libgeoip-1.4.8_1
@@ -4170,3 +4171,12 @@ libThread.so root-6.24.06_1
 libTMVA.so root-6.24.06_1
 libMathCore.so root-6.24.06_1
 liblowdown.so lowdown-0.11.2_1
+libomp.so libomp-14.0.3_1
+libomptarget.rtl.amdgpu.so libomp-14.0.3_1
+libomptarget.rtl.cuda.so libomp-14.0.3_1
+libomptarget.rtl.x86_64.so libomp-14.0.3_1
+libarcher.so libomp-14.0.3_1
+libomptarget.so libomp-14.0.3_1
+liblldbIntelFeatures.so.14 lldb-14.0.3_1
+libLTO.so.14 llvm14-14.0.3_1
+libRemarks.so.14 llvm14-14.0.3_1
diff --git a/srcpkgs/clang b/srcpkgs/clang
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang
+++ b/srcpkgs/clang
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/clang-analyzer b/srcpkgs/clang-analyzer
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang-analyzer
+++ b/srcpkgs/clang-analyzer
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/clang-tools-extra b/srcpkgs/clang-tools-extra
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang-tools-extra
+++ b/srcpkgs/clang-tools-extra
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libclang b/srcpkgs/libclang
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libclang
+++ b/srcpkgs/libclang
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libclang-cpp b/srcpkgs/libclang-cpp
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libclang-cpp
+++ b/srcpkgs/libclang-cpp
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxx b/srcpkgs/libcxx
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxx
+++ b/srcpkgs/libcxx
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxx-devel b/srcpkgs/libcxx-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxx-devel
+++ b/srcpkgs/libcxx-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxxabi b/srcpkgs/libcxxabi
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxxabi
+++ b/srcpkgs/libcxxabi
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxxabi-devel b/srcpkgs/libcxxabi-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxxabi-devel
+++ b/srcpkgs/libcxxabi-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libllvm14 b/srcpkgs/libllvm14
new file mode 120000
index 000000000000..1d42ed7632a6
--- /dev/null
+++ b/srcpkgs/libllvm14
@@ -0,0 +1 @@
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libomp b/srcpkgs/libomp
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libomp
+++ b/srcpkgs/libomp
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libomp-devel b/srcpkgs/libomp-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libomp-devel
+++ b/srcpkgs/libomp-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lld b/srcpkgs/lld
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lld
+++ b/srcpkgs/lld
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lld-devel b/srcpkgs/lld-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lld-devel
+++ b/srcpkgs/lld-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lldb b/srcpkgs/lldb
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lldb
+++ b/srcpkgs/lldb
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lldb-devel b/srcpkgs/lldb-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lldb-devel
+++ b/srcpkgs/lldb-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm-libunwind b/srcpkgs/llvm-libunwind
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/llvm-libunwind
+++ b/srcpkgs/llvm-libunwind
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm-libunwind-devel b/srcpkgs/llvm-libunwind-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/llvm-libunwind-devel
+++ b/srcpkgs/llvm-libunwind-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
new file mode 100644
index 000000000000..7b640e102bed
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
@@ -0,0 +1,110 @@
+--- a/clang/lib/Driver/ToolChains/Gnu.cpp
++++ b/clang/lib/Driver/ToolChains/Gnu.cpp
+@@ -2083,7 +2083,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
+                                              "armv7hl-redhat-linux-gnueabi",
+                                              "armv6hl-suse-linux-gnueabi",
+-                                             "armv7hl-suse-linux-gnueabi"};
++                                             "armv7hl-suse-linux-gnueabi",
++                                             "armv7l-linux-gnueabihf"};
+   static const char *const ARMebLibDirs[] = {"/lib"};
+   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi"};
+   static const char *const ARMebHFTriples[] = {
+@@ -2151,8 +2152,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
+   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
+   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
+-                                             "powerpcle-unknown-linux-gnu",
+-                                             "powerpcle-linux-musl"};
++                                             "powerpcle-unknown-linux-gnu"};
+
+   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
+   static const char *const PPC64Triples[] = {
+@@ -2231,6 +2231,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+     return;
+   }
+
++  if (TargetTriple.isMusl()) {
++    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
++    static const char *const ARMHFMuslTriples[] = {
++        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
++    };
++    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
++    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
++    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
++    static const char *const MIPSMuslTriples[] = {
++        "mips-linux-musl", "mipsel-linux-musl",
++        "mipsel-linux-muslhf", "mips-linux-muslhf"
++    };
++    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
++    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
++    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
++    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
++
++    switch (TargetTriple.getArch()) {
++    case llvm::Triple::aarch64:
++      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      break;
++    case llvm::Triple::arm:
++      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
++      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
++        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
++      } else {
++        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
++      }
++      break;
++    case llvm::Triple::x86_64:
++      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      break;
++    case llvm::Triple::x86:
++      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      break;
++    case llvm::Triple::mips:
++      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
++      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
++      break;
++    case llvm::Triple::ppc:
++      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      break;
++    case llvm::Triple::ppcle:
++      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      break;
++    case llvm::Triple::ppc64:
++      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      break;
++    case llvm::Triple::ppc64le:
++      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      break;
++    default:
++      break;
++    }
++    TripleAliases.push_back(TargetTriple.str());
++    if (TargetTriple.str() != BiarchTriple.str())
++      BiarchTripleAliases.push_back(BiarchTriple.str());
++    return;
++  }
++
+   // Android targets should not use GNU/Linux tools or libraries.
+   if (TargetTriple.isAndroid()) {
+     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
new file mode 100644
index 000000000000..47128af79b7f
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
@@ -0,0 +1,13 @@
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -490,10 +490,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+     Loader = "ld.so.1";
+     break;
+   case llvm::Triple::ppc64:
+-    LibDir = "lib64";
+-    Loader =
+-        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
+-    break;
+   case llvm::Triple::ppc64le:
+     LibDir = "lib64";
+     Loader =
diff --git a/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
new file mode 100644
index 000000000000..21fc8003c5f1
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
@@ -0,0 +1,48 @@
+--- a/clang/lib/Basic/Targets/PPC.h
++++ b/clang/lib/Basic/Targets/PPC.h
+@@ -415,11 +415,10 @@ public:
+       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
+     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
+       DataLayout = "e-m:e-i64:64-n32:64";
+-      ABI = "elfv2";
+     } else {
+       DataLayout = "E-m:e-i64:64-n32:64";
+-      ABI = "elfv1";
+     }
++    ABI = "elfv2";
+ 
+     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
+       LongDoubleWidth = LongDoubleAlign = 64;
+--- a/clang/lib/CodeGen/TargetInfo.cpp
++++ b/clang/lib/CodeGen/TargetInfo.cpp
+@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
+       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
+ 
+     if (Triple.isOSBinFormatELF()) {
+-      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
+-      if (getTarget().getABI() == "elfv2")
+-        Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      if (getTarget().getABI() == "elfv1")
++        Kind = PPC64_SVR4_ABIInfo::ELFv1;
+       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
+ 
+       return SetCGInfo(
+--- a/clang/lib/Driver/ToolChains/Clang.cpp
++++ b/clang/lib/Driver/ToolChains/Clang.cpp
+@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
+   const llvm::Triple &T = getToolChain().getTriple();
+   if (T.isOSBinFormatELF()) {
+     switch (getToolChain().getArch()) {
+-    case llvm::Triple::ppc64: {
+-      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
+-          T.isOSOpenBSD() || T.isMusl())
+-        ABIName = "elfv2";
+-      else
+-        ABIName = "elfv1";
+-      break;
+-    }
++    case llvm::Triple::ppc64:
+     case llvm::Triple::ppc64le:
+       ABIName = "elfv2";
+       break;
diff --git a/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch b/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
new file mode 100644
index 000000000000..4135bfd4486a
--- /dev/null
+++ b/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
@@ -0,0 +1,35 @@
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
+@@ -74,6 +74,10 @@
+ #include <sys/utsname.h>
+ #endif
+
++#if SANITIZER_LINUX && defined(__powerpc__)
++#include <asm/ptrace.h>
++#endif
++
+ #if SANITIZER_LINUX && !SANITIZER_ANDROID
+ #include <sys/personality.h>
+ #endif
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
+@@ -92,7 +92,7 @@
+ # include <utime.h>
+ # include <sys/ptrace.h>
+ #    if defined(__mips64) || defined(__aarch64__) || defined(__arm__) || \
+-        defined(__hexagon__) || SANITIZER_RISCV64
++        defined(__hexagon__) || defined(__powerpc__) || SANITIZER_RISCV64
+ #      include <asm/ptrace.h>
+ #      ifdef __arm__
+ typedef struct user_fpregs elf_fpregset_t;
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
+@@ -31,7 +31,7 @@
+ #include <sys/types.h> // for pid_t
+ #include <sys/uio.h> // for iovec
+ #include <elf.h> // for NT_PRSTATUS
+-#if (defined(__aarch64__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
++#if (defined(__aarch64__) || defined(__powerpc__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
+ // GLIBC 2.20+ sys/user does not include asm/ptrace.h
+ # include <asm/ptrace.h>
+ #endif
diff --git a/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch b/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
new file mode 100644
index 000000000000..d0b61c80c897
--- /dev/null
+++ b/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
@@ -0,0 +1,62 @@
+--- a/compiler-rt/lib/xray/xray_powerpc64.inc
++++ b/compiler-rt/lib/xray/xray_powerpc64.inc
+@@ -12,7 +12,13 @@
+ 
+ #include <cstdint>
+ #include <mutex>
++#ifdef __GLIBC__
+ #include <sys/platform/ppc.h>
++#else
++#include <cctype>
++#include <cstring>
++#include <cstdlib>
++#endif
+ 
+ #include "xray_defs.h"
+ 
+@@ -20,13 +26,45 @@ namespace __xray {
+ 
+ ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
+   CPU = 0;
++#ifdef __GLIBC__
+   return __ppc_get_timebase();
++#else
++  return __builtin_ppc_get_timebase();
++#endif
+ }
+ 
+ inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
+   static std::mutex M;
+   std::lock_guard<std::mutex> Guard(M);
++#ifdef __GLIBC__
+   return __ppc_get_timebase_freq();
++#else
++  /* FIXME: a less dirty implementation? */
++  static uint64_t base;
++  if (!base) {
++    FILE *f = fopen("/proc/cpuinfo", "rb");
++    if (f) {
++      ssize_t nr;
++      /* virtually always big enough to hold the line */
++      char buf[512];
++      while (fgets(buf, sizeof(buf), f)) {
++        char *ret = strstr(buf, "timebase");
++        if (!ret) {
++          continue;
++        }
++        ret += sizeof("timebase") - 1;
++        ret = strchr(ret, ':');
++        if (!ret) {
++          continue;
++        }
++        base = strtoul(ret + 1, nullptr, 10);
++        break;
++      }
++      fclose(f);
++    }
++  }
++  return base;
++#endif
+ }
+ 
+ inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
diff --git a/srcpkgs/llvm14/patches/libcxx-musl.patch b/srcpkgs/llvm14/patches/libcxx-musl.patch
new file mode 100644
index 000000000000..bbd31ffc2cb1
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-musl.patch
@@ -0,0 +1,26 @@
+--- a/libcxx/include/locale
++++ b/libcxx/include/locale
+@@ -742,7 +742,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
+         typename remove_reference<decltype(errno)>::type __save_errno = errno;
+         errno = 0;
+         char *__p2;
++#if defined(__linux__) && !defined(__GLIBC__)
++        long long __ll = strtoll(__a, &__p2, __base);
++#else
+         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
++#endif
+         typename remove_reference<decltype(errno)>::type __current_errno = errno;
+         if (__current_errno == 0)
+             errno = __save_errno;
+@@ -782,7 +786,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
+         typename remove_reference<decltype(errno)>::type __save_errno = errno;
+         errno = 0;
+         char *__p2;
++#if defined(__linux__) && !defined(__GLIBC__)
++        unsigned long long __ll = strtoull(__a, &__p2, __base);
++#else
+         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
++#endif
+         typename remove_reference<decltype(errno)>::type __current_errno = errno;
+         if (__current_errno == 0)
+             errno = __save_errno;
diff --git a/srcpkgs/llvm14/patches/libcxx-ppc.patch b/srcpkgs/llvm14/patches/libcxx-ppc.patch
new file mode 100644
index 000000000000..7a92f8004e1c
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-ppc.patch
@@ -0,0 +1,22 @@
+This ensures `is_iec559` is defined correctly under all long double ABIs,
+including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__`
+is not defined on gcc.
+
+--- a/libcxx/include/limits
++++ b/libcxx/include/limits
+@@ -426,8 +426,14 @@ protected:
+     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
+     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
+ 
+-#if (defined(__ppc__) || defined(__ppc64__))
++#if defined(__powerpc__) || defined(__powerpc64__)
++#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__)
++    /* IEEE 754 quadruple or double precision */
++    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
++#else
++    /* 128-bit IBM double-double */
+     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
++#endif
+ #else
+     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
+ #endif
diff --git a/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch b/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
new file mode 100644
index 000000000000..70292beb2fcd
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
@@ -0,0 +1,11 @@
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -769,6 +769,8 @@ function(cxx_link_system_libraries target)
+     target_link_libraries(${target} PRIVATE atomic)
+   endif()
+ 
++#ssp  target_link_libraries(${target} PRIVATE ssp_nonshared)
++
+   if (MINGW)
+     target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
+   endif()
diff --git a/srcpkgs/llvm14/patches/libcxxabi-dl.patch b/srcpkgs/llvm14/patches/libcxxabi-dl.patch
new file mode 100644
index 000000000000..3a15f9db8c98
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxxabi-dl.patch
@@ -0,0 +1,25 @@
+Also link to -ldl to prevent undefined references.
+
+--- a/libcxxabi/src/CMakeLists.txt
++++ b/libcxxabi/src/CMakeLists.txt
+@@ -73,6 +73,7 @@
+   endif()
+ 
+   add_library_flags_if(LIBCXXABI_HAS_C_LIB c)
++  add_library_flags_if(LIBCXXABI_HAS_C_LIB dl)
+ endif()
+ 
+ if (LIBCXXABI_USE_LLVM_UNWINDER)
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -745,6 +745,10 @@
+     target_link_libraries(${target} PRIVATE m)
+   endif()
+ 
++  if (LIBCXX_HAS_C_LIB)
++    target_link_libraries(${target} PRIVATE dl)
++  endif()
++
+   if (LIBCXX_HAS_RT_LIB)
+     target_link_libraries(${target} PRIVATE rt)
+   endif()
diff --git a/srcpkgs/llvm14/patches/lldb-musl.patch b/srcpkgs/llvm14/patches/lldb-musl.patch
new file mode 100644
index 000000000000..601c0d138523
--- /dev/null
+++ b/srcpkgs/llvm14/patches/lldb-musl.patch
@@ -0,0 +1,31 @@
+--- a/lldb/source/Plugins/Process/Linux/Procfs.h
++++ b/lldb/source/Plugins/Process/Linux/Procfs.h
+@@ -10,21 +10,12 @@
+ // sys/procfs.h on Android/Linux for all supported architectures.
+ 
+ #include <sys/ptrace.h>
++#include <asm/ptrace.h>
+ 
+-#ifdef __ANDROID__
+-#if defined(__arm64__) || defined(__aarch64__)
+-typedef unsigned long elf_greg_t;
+-typedef elf_greg_t
+-    elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
+-typedef struct user_fpsimd_state elf_fpregset_t;
+-#ifndef NT_FPREGSET
+-#define NT_FPREGSET NT_PRFPREG
+-#endif // NT_FPREGSET
+-#elif defined(__mips__)
+-#ifndef NT_FPREGSET
+-#define NT_FPREGSET NT_PRFPREG
+-#endif // NT_FPREGSET
+-#endif
+-#else // __ANDROID__
++#if !defined(__GLIBC__) && defined(__powerpc__)
++#define pt_regs musl_pt_regs
++#include <sys/procfs.h>
++#undef pt_regs
++#else
+ #include <sys/procfs.h>
+-#endif // __ANDROID__
++#endif
diff --git a/srcpkgs/llvm14/patches/llvm-001-musl.patch b/srcpkgs/llvm14/patches/llvm-001-musl.patch
new file mode 100644
index 000000000000..f2a3f8d62813
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-001-musl.patch
@@ -0,0 +1,57 @@
+From faca3fbd15d0c3108493c3c54cd93138e049ac43 Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe@gmail.com>
+Date: Tue, 8 Sep 2015 22:03:02 +0200
+Subject: [PATCH 3/3] musl
+
+---
+ include/llvm/Analysis/TargetLibraryInfo.h | 9 +++++++++
+ lib/Support/DynamicLibrary.cpp            | 2 +-
+ lib/Support/Unix/Signals.inc              | 6 +++---
+ utils/unittest/googletest/src/gtest.cc    | 1 +
+ 5 files changed, 17 insertions(+), 6 deletions(-)
+
+diff --git a/include/llvm/Analysis/TargetLibraryInfo.h b/include/llvm/Analysis/TargetLibraryInfo.h
+index 34a8a1e3..1214ece5 100644
+--- a/llvm/include/llvm/Analysis/TargetLibraryInfo.h
++++ b/llvm/include/llvm/Analysis/TargetLibraryInfo.h
+@@ -18,6 +18,15 @@
+ #include "llvm/IR/PassManager.h"
+ #include "llvm/Pass.h"
+ 
++#undef fopen64
++#undef fseeko64
++#undef fstat64
++#undef fstatvfs64
++#undef ftello64
++#undef lstat64
++#undef stat64
++#undef tmpfile64
++
+ namespace llvm {
+ template <typename T> class ArrayRef;
+ class Triple;
+diff --git a/lib/Support/Unix/DynamicLibrary.inc b/lib/Support/Unix/DynamicLibrary.inc
+index a2a37996..2f86c470 100644
+--- a/llvm/lib/Support/Unix/DynamicLibrary.inc
++++ b/llvm/lib/Support/Unix/DynamicLibrary.inc
+@@ -102,7 +102,7 @@ static void *DoSearch(const char* SymbolName) {
+ 
+ // This macro returns the address of a well-known, explicit symbol
+ #define EXPLICIT_SYMBOL(SYM) \
+-   if (!strcmp(SymbolName, #SYM)) return &SYM
++   if (!strcmp(SymbolName, #SYM)) return (void *)&SYM
+ 
+ // Under glibc we have a weird situation. The stderr/out/in symbols are both
+ // macros and global variables because of standards requirements. So, we
+diff --git a/utils/unittest/googletest/src/gtest.cc b/utils/unittest/googletest/src/gtest.cc
+index d882ab2e..f1fb12d0 100644
+--- a/llvm/utils/unittest/googletest/src/gtest.cc
++++ b/llvm/utils/unittest/googletest/src/gtest.cc
+@@ -128,6 +128,7 @@
+ 
+ #if GTEST_CAN_STREAM_RESULTS_
+ # include <arpa/inet.h>  // NOLINT
++# include <sys/socket.h>  // NOLINT
+ # include <netdb.h>  // NOLINT
+ # include <sys/socket.h>  // NOLINT
+ # include <sys/types.h>  // NOLINT
diff --git a/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch b/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
new file mode 100644
index 000000000000..0071d964bd37
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
@@ -0,0 +1,30 @@
+This patches LLVM to use ELFv2 on ppc64 unconditionally unless overridden. We
+need this because unlike most distros we use ELFv2 for both glibc and musl
+on big endian ppc64.
+
+diff --git a/lib/Target/PowerPC/PPCTargetMachine.cpp b/lib/Target/PowerPC/PPCTargetMachine.cpp
+index 0634833e..b7cbc2e7 100644
+--- a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
++++ b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
+@@ -222,9 +222,8 @@ static PPCTargetMachine::PPCABI computeTargetABI(const Triple &TT,
+ 
+   switch (TT.getArch()) {
+   case Triple::ppc64le:
+-    return PPCTargetMachine::PPC_ABI_ELFv2;
+   case Triple::ppc64:
+-    return PPCTargetMachine::PPC_ABI_ELFv1;
++    return PPCTargetMachine::PPC_ABI_ELFv2;
+   default:
+     return PPCTargetMachine::PPC_ABI_UNKNOWN;
+   }
+diff --git a/test/CodeGen/PowerPC/ppc64-elf-abi.ll b/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+index 8b1cf6b5..296a2afa 100644
+--- a/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
++++ b/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+@@ -1,4 +1,5 @@
+-; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv1
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-musl < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv1 < %s | FileCheck %s -check-prefix=CHECK-ELFv1
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv2 < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
diff --git a/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch b/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
new file mode 100644
index 000000000000..b5d15974375d
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
@@ -0,0 +1,11 @@
+--- a/llvm/lib/Target/PowerPC/PPCSubtarget.cpp
++++ b/llvm/lib/Target/PowerPC/PPCSubtarget.cpp
+@@ -165,7 +165,7 @@ void PPCSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) {
+ 
+   if ((TargetTriple.isOSFreeBSD() && TargetTriple.getOSMajorVersion() >= 13) ||
+       TargetTriple.isOSNetBSD() || TargetTriple.isOSOpenBSD() ||
+-      TargetTriple.isMusl())
++      isTargetLinux())
+     SecurePlt = true;
+ 
+   if (HasSPE && IsPPC64)
diff --git a/srcpkgs/llvm14/patches/llvm-004-override-opt.patch b/srcpkgs/llvm14/patches/llvm-004-override-opt.patch
new file mode 100644
index 000000000000..51d0e4b31b32
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-004-override-opt.patch
@@ -0,0 +1,18 @@
+This allows us to override the optimization level as not all platforms can
+deal with -O3.
+
+--- a/llvm/CMakeLists.txt
++++ b/llvm/CMakeLists.txt
+@@ -918,6 +918,12 @@ if( MINGW AND NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" )
+   llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "-O2")
+ endif()
+ 
++set(VOID_CXX_OPT_FLAGS "" CACHE STRING "Optimization level to use")
++
++if (NOT VOID_CXX_OPT_FLAGS STREQUAL "")
++    llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "${VOID_CXX_OPT_FLAGS}")
++endif()
++
+ # Put this before tblgen. Else we have a circular dependence.
+ add_subdirectory(lib/Demangle)
+ add_subdirectory(lib/Support)
diff --git a/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch b/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
new file mode 100644
index 000000000000..d332687b9d92
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
@@ -0,0 +1,36 @@
+From f3dbdd49c06bfafc1d6138094cf42889c14d38b6 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Sun, 3 Nov 2019 10:57:27 -0600
+Subject: [PATCH] [LLVM][PowerPC] Assume BigPIC if no PIC level is specified
+
+---
+ llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp  | 2 +-
+ llvm/lib/Target/PowerPC/PPCMCInstLower.cpp | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/Target/PowerPC/PPCAsmPrinter.cpp b/lib/Target/PowerPC/PPCAsmPrinter.cpp
+index cce21f32..87ca5f9b 100644
+--- a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
++++ b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
+@@ -520,7 +520,7 @@ void PPCAsmPrinter::EmitTlsCall(const MachineInstr *MI,
+ 
+   // Add 32768 offset to the symbol so we follow up the latest GOT/PLT ABI.
+   if (Kind == MCSymbolRefExpr::VK_PLT && Subtarget->isSecurePlt() &&
+-      M->getPICLevel() == PICLevel::BigPIC)
++      M->getPICLevel() != PICLevel::SmallPIC)
+     TlsRef = MCBinaryExpr::createAdd(
+         TlsRef, MCConstantExpr::create(32768, OutContext), OutContext);
+   const MachineOperand &MO = MI->getOperand(2);
+diff --git a/lib/Target/PowerPC/PPCMCInstLower.cpp b/lib/Target/PowerPC/PPCMCInstLower.cpp
+index 5cc180d7..a5b02565 100644
+--- a/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
++++ b/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
+@@ -117,7 +117,7 @@ static MCOperand GetSymbolRef(const MachineOperand &MO, const MCSymbol *Symbol,
+   const MCExpr *Expr = MCSymbolRefExpr::create(Symbol, RefKind, Ctx);
+   // If -msecure-plt -fPIC, add 32768 to symbol.
+   if (Subtarget->isSecurePlt() && TM.isPositionIndependent() &&
+-      M->getPICLevel() == PICLevel::BigPIC &&
++      M->getPICLevel() != PICLevel::SmallPIC &&
+       MO.getTargetFlags() == PPCII::MO_PLT)
+     Expr =
+         MCBinaryExpr::createAdd(Expr, MCConstantExpr::create(32768, Ctx), Ctx);
diff --git a/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch b/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
new file mode 100644
index 000000000000..a00abd216665
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
@@ -0,0 +1,25 @@
+Fix failures in AllocationTests/MappedMemoryTest.* on aarch64:
+
+    Failing Tests (8):
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.AllocAndRelease/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.DuplicateNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.EnabledWrite/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.MultipleAllocAndRelease/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.SuccessiveNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.UnalignedNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.ZeroNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.ZeroSizeNear/3
+
+Upstream-Issue: https://bugs.llvm.org/show_bug.cgi?id=14278#c10
+
+--- a/llvm/lib/Support/Unix/Memory.inc
++++ b/llvm/lib/Support/Unix/Memory.inc
+@@ -58,7 +58,7 @@ static int getPosixProtectionFlags(unsigned Flags) {
+     return PROT_READ | PROT_WRITE | PROT_EXEC;
+   case llvm::sys::Memory::MF_EXEC:
+ #if (defined(__FreeBSD__) || defined(__POWERPC__) || defined (__ppc__) || \
+-     defined(_POWER) || defined(_ARCH_PPC))
++     defined(_POWER) || defined(_ARCH_PPC) || (defined(__linux__) && defined(__aarch64__)))
+     // On PowerPC, having an executable page that has no read permission
+     // can have unintended consequences.  The function InvalidateInstruction-
+     // Cache uses instructions dcbf and icbi, both of which are treated by
diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
new file mode 100644
index 000000000000..3e7e6ab2c00b
--- /dev/null
+++ b/srcpkgs/llvm14/template
@@ -0,0 +1,424 @@
+# Template file for 'llvm14'
+pkgname=llvm14
+version=14.0.3
+revision=1
+wrksrc="llvm-project-${version}.src"
+build_wrksrc=llvm
+build_style=cmake
+configure_args="
+ -DCMAKE_BUILD_TYPE=Release -Wno-dev
+ -DENABLE_LINKER_BUILD_ID=YES
+ -DLLDB_USE_SYSTEM_SIX=YES
+ -DLIBCXX_CXX_ABI=libcxxabi
+ -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
+ -DLIBCXXABI_USE_LLVM_UNWINDER=YES
+ -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
+ -DLIBOMP_ENABLE_SHARED=YES
+ -DLIBOMP_INSTALL_ALIASES=NO
+ -DLLVM_INCLUDE_DOCS=YES
+ -DLLVM_BUILD_DOCS=YES
+ -DLLVM_ENABLE_SPHINX=YES
+ -DSPHINX_WARNINGS_AS_ERRORS=NO
+ -DLLVM_INSTALL_UTILS=YES
+ -DLLVM_BUILD_LLVM_DYLIB=YES
+ -DLLVM_LINK_LLVM_DYLIB=YES
+ -DLLVM_ENABLE_RTTI=YES
+ -DLLVM_ENABLE_FFI=YES
+ -DLLVM_BINUTILS_INCDIR=/usr/include"
+hostmakedepends="perl python3 zlib-devel libffi-devel swig python3-Sphinx
+ python3-recommonmark python3-sphinx-automodapi"
+makedepends="python3-devel zlib-devel elfutils-devel libffi-devel libedit-devel
+ libxml2-devel binutils-devel libatomic-devel"
+depends="libllvm14>=${version}_${revision}"
+short_desc="Low Level Virtual Machine"
+maintainer="q66 <daniel@octaforge.org>"
+license="Apache-2.0"
+homepage="https://www.llvm.org"
+distfiles="https://github.com/llvm/llvm-project/releases/download/llvmorg-${version}/llvm-project-${version}.src.tar.xz"
+checksum=44d3e7a784d5cf805e72853bb03f218bd1058d448c03ca883dabbebc99204e0c
+lib32disabled=yes
+python_version=3
+
+if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+	configure_args+=" -DLIBCXX_HAS_MUSL_LIBC=YES"
+	makedepends+=" libexecinfo-devel"
+	depends+=" libexecinfo-devel"
+fi
+
+# "operand out of range" assembler failures
+case "$XBPS_TARGET_MACHINE" in
+	ppc64*) ;;
+	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
+esac
+
+_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
+
+_lldb_enable=yes
+_libomp_enable=no
+
+case "$XBPS_TARGET_MACHINE" in
+	ppc64le*) ;;
+	ppc*|i686*) _lldb_enable=no ;;
+esac
+
+case "$XBPS_TARGET_MACHINE" in
+	x86_64*|aarch64*|ppc64*) _libomp_enable=yes;;
+esac
+
+subpackages="clang-tools-extra"
+
+# must go before clang
+if [ "$_libomp_enable" = "yes" ]; then
+	_enabled_projects+=";openmp"
+	subpackages+=" libomp libomp-devel"
+	# because of cmake nonsense referencing libomptarget.so.*
+	depends+=" libomp>=${version}_${revision}"
+fi
+
+subpackages+=" clang clang-analyzer libclang libclang-cpp
+ llvm-libunwind llvm-libunwind-devel libcxx libcxx-devel
+ libcxxabi libcxxabi-devel libllvm14"
+
+if [ "$_lldb_enable" = "yes" ]; then
+	# XXX fails to cross compile due to python
+	_enabled_projects+=";lldb"
+	subpackages+=" lldb lldb-devel"
+fi
+
+subpackages+=" lld lld-devel"
+
+configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+
+post_patch() {
+	if [ "$_lldb_enable" = "yes" ]; then
+		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+			vsed -i 's|__ptrace_request|int|g' \
+				${wrksrc}/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
+		fi
+		# disable docs for lldb as they fail to generate
+		vsed -i '/add_subdirectory(docs)/d' \
+			${wrksrc}/lldb/CMakeLists.txt
+	fi
+
+	# update config.guess for better platform detection
+	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
+		${wrksrc}/llvm/cmake
+
+	# fix linker failures on some archs
+	vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
+		${wrksrc}/libcxxabi/cmake/config-ix.cmake
+	vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
+		${wrksrc}/libcxxabi/cmake/config-ix.cmake
+
+	# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*) ;;
+		ppc*-musl|i686-musl|mips*-musl)
+			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
+				${wrksrc}/libunwind/src/CMakeLists.txt
+			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
+				${wrksrc}/libcxxabi/src/CMakeLists.txt
+			vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
+			;;
+	esac
+
+	case "$XBPS_TARGET_MACHINE" in
+		x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
+			vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
+				${wrksrc}/compiler-rt/CMakeLists.txt
+			;;
+		arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
+			vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
+				${wrksrc}/compiler-rt/cmake/config-ix.cmake
+			;;
+	esac
+}
+
+pre_configure() {
+	local triplet
+
+	# Vastly reduce size of debugging symbols:
+	CFLAGS=${CFLAGS/ -g/ -g1}
+	CXXFLAGS=${CXXFLAGS/ -g/ -g1}
+
+	# since gcc9, the build likes to blow up for ppc32 apparently because
+	# of clang being too large for a 24-bit relative call to the PLT, so
+	# optimize for size instead
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*) ;;
+		mips*-musl|ppc*) configure_args+=" -DVOID_CXX_OPT_FLAGS=-Os" ;;
+	esac
+
+	if [ "$CROSS_BUILD" ]; then
+		msg_normal "Building host tblgen\n"
+		mkdir -p build/HOST
+		cd build/HOST
+		CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
+			CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
+			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
+			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
+		make ${makejobs} -C utils/TableGen
+		make ${makejobs} -C tools/clang/utils/TableGen
+		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
+		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
+		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
+		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
+		cd ../..
+	fi
+
+	case "$XBPS_TARGET_MACHINE" in
+		i686*) _arch="X86";;
+		x86_64*) _arch="X86";;
+		armv5*) _arch="Armv5te";;
+		armv6*) _arch="Armv6";;
+		armv7*) _arch="Armv7";;
+		aarch64*) _arch="AArch64";;
+		mips*) _arch="Mips";;
+		ppc*) _arch="PowerPC";;
+		riscv64*) _arch="RISCV64";;
+	esac
+
+	triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
+
+	configure_args+=" -DLLVM_TARGET_ARCH=${_arch}"
+	configure_args+=" -DLLVM_HOST_TRIPLE=${triplet}"
+	configure_args+=" -DLLVM_DEFAULT_TARGET_TRIPLE=${triplet}"
+}
+
+do_install() {
+	cd build
+	cmake -DCMAKE_INSTALL_PREFIX=${DESTDIR}/usr -P cmake_install.cmake
+
+	# Required for multilib.
+	if [ "$XBPS_TARGET_MACHINE" = "x86_64" ]; then
+		for _header in llvm-config; do
+			mv ${DESTDIR}/usr/include/llvm/Config/${_header}{,-64}.h
+			vinstall ${FILESDIR}/llvm-Config-${_header}.h 644 \
+				usr/include/llvm/Config ${_header}.h
+		done
+	fi
+
+	# Remove llvm-config-host in cross builds.
+	if [ "$CROSS_BUILD" ]; then
+		rm -f ${DESTDIR}/usr/bin/llvm-config-host
+	fi
+
+	# Install libcxxabi headers
+	vinstall ${wrksrc}/libcxxabi/include/__cxxabi_config.h 644 usr/include
+	vinstall ${wrksrc}/libcxxabi/include/cxxabi.h 644 usr/include
+
+	# Install libunwind headers
+	vinstall ${wrksrc}/libunwind/include/__libunwind_config.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/libunwind.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/unwind.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/mach-o/compact_unwind_encoding.h \
+		644 usr/include/mach-o
+}
+
+clang-analyzer_package() {
+	pycompile_dirs="usr/share/scan-view"
+	depends="clang-${version}_${revision} python3 perl"
+	short_desc+=" - A source code analysis framework"
+	homepage="https://clang-analyzer.llvm.org/"
+	pkg_install() {
+		vmove usr/share/man/man1/scan-build.1
+		vmove "/usr/bin/scan-*"
+		vmove "/usr/share/scan-*"
+		vmove "/usr/libexec/*analyzer"
+	}
+}
+
+clang-tools-extra_package() {
+	lib32disabled=yes
+	depends="clang-${version}_${revision} python3"
+	short_desc+=" - Extra Clang tools"
+	homepage="https://clang.llvm.org/extra/"
+	pkg_install() {
+		vmove usr/include/clang-tidy
+		vmove usr/bin/clang-apply-replacements
+		vmove usr/bin/clang-query
+		vmove usr/bin/clang-rename
+		vmove usr/bin/clang-tidy
+		vmove usr/bin/diagtool
+		vmove usr/bin/find-all-symbols
+		vmove usr/bin/hmaptool
+		vmove usr/bin/modularize
+		vmove usr/bin/pp-trace
+		vmove usr/bin/sancov
+		vmove "usr/lib/libclangApplyReplacements*"
+		vmove "usr/lib/libclangQuery*"
+		vmove "usr/lib/libclangTidy*"
+		vmove "usr/share/clang/*tidy*"
+		vmove usr/share/doc/clang-tools
+		vmove usr/share/man/man1/extraclangtools.1
+		vmove usr/share/man/man1/diagtool.1
+	}
+}
+
+clang_package() {
+	lib32disabled=yes
+	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
+	 libclang-${version}_${revision}"
+	short_desc+=" - C language family frontend"
+	homepage="https://clang.llvm.org/"
+	pkg_install() {
+		vmove usr/include/clang
+		vmove usr/include/clang-c
+		vmove "usr/bin/*clang*"
+		vmove usr/bin/c-index-test
+		vmove usr/lib/clang
+		vmove usr/lib/cmake/clang
+		vmove "usr/lib/libclang*.a"
+		vmove "usr/lib/libclang*.so"
+		vmove usr/share/clang
+		vmove usr/share/doc/clang
+		vmove usr/share/man/man1/clang.1
+	}
+}
+
+libclang_package() {
+	short_desc+=" - C frontend runtime library"
+	pkg_install() {
+		vmove "usr/lib/libclang.so.*"
+	}
+}
+
+libclang-cpp_package() {
+	short_desc+=" - C frontend runtime library (C++ interface)"
+	pkg_install() {
+		vmove "usr/lib/libclang-cpp.so.*"
+	}
+}
+
+lld_package() {
+	lib32disabled=yes
+	short_desc+=" - linker"
+	homepage="https://lld.llvm.org"
+	pkg_install() {
+		vmove usr/bin/lld*
+		vmove usr/bin/wasm-ld
+		vmove usr/bin/ld.lld*
+		vmove usr/bin/ld64.lld*
+		vmove usr/share/doc/lld
+	}
+}
+
+lld-devel_package() {
+	lib32disabled=yes
+	short_desc+=" - linker - development files"
+	homepage="https://lld.llvm.org"
+	depends="lld>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include/lld
+		vmove usr/lib/cmake/lld
+		vmove "usr/lib/liblld*a"
+	}
+}
+
+lldb_package() {
+	lib32disabled=yes
+	depends+=" python3-six"
+	short_desc+=" - LLDB debugger"
+	homepage="https://lldb.llvm.org/"
+	pkg_install() {
+		vmove usr/bin/*lldb*
+		vmove usr/lib/liblldb*so.*
+		vmove /usr/lib/python*
+	}
+}
+
+lldb-devel_package() {
+	lib32disabled=yes
+	depends="lldb>=${version}_${revision}"
+	short_desc+=" - LLDB debugger - development files"
+	pkg_install() {
+		vmove usr/include/lldb
+		vmove "usr/lib/liblldb*.so"
+	}
+}
+
+llvm-libunwind_package() {
+	short_desc+=" - libunwind"
+	pkg_install() {
+		vmove "usr/lib/libunwind.so.*"
+	}
+}
+
+llvm-libunwind-devel_package() {
+	short_desc+=" - libunwind - development files"
+	depends="llvm-libunwind>=${version}_${revision}"
+	conflicts="libunwind-devel>=0"
+	pkg_install() {
+		vmove usr/lib/libunwind.so
+		vmove usr/lib/libunwind.a
+		vmove "usr/include/*unwind*"
+		vmove usr/include/mach-o
+		vmove usr/share/doc/libunwind
+	}
+}
+
+libcxxabi_package() {
+	short_desc+=" - low level support for libc++"
+	pkg_install() {
+		vmove "usr/lib/libc++abi.so.*"
+	}
+}
+
+libcxxabi-devel_package() {
+	short_desc+=" - low level support for libc++ - development files"
+	depends="libcxxabi>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/lib/libc++abi.so
+		vmove usr/lib/libc++abi.a
+		vmove "usr/include/*cxxabi*"
+	}
+}
+
+libcxx_package() {
+	short_desc+=" - C++ standard library"
+	pkg_install() {
+		vmove "usr/lib/libc++.so.*"
+	}
+}
+
+libcxx-devel_package() {
+	short_desc+=" - C++ standard library - development files"
+	depends="libcxx>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/lib/libc++.so
+		vmove usr/lib/libc++.a
+		vmove usr/lib/libc++experimental.a
+		vmove usr/include/c++
+		vmove usr/share/doc/libcxx
+	}
+}
+
+libomp_package() {
+	short_desc+=" - Clang OpenMP support library"
+	pkg_install() {
+		vmove usr/lib/libomp.so
+		vmove "usr/lib/libomptarget.rtl.*.so"
+		vmove usr/lib/libarcher.so
+		vmove "usr/lib/libomp*.so.*"
+	}
+}
+
+libomp-devel_package() {
+	short_desc+=" - Clang OpenMP support library - development files"
+	depends="libomp>=${version}_${revision}"
+	pkg_install() {
+		vmove "usr/lib/libomp*.so"
+		vmove "usr/lib/libarcher*"
+		vmove "usr/include/omp*.h"
+		vmove "usr/lib/clang/${version}/include/omp*.h"
+		vmove usr/share/man/man1/llvmopenmp.1
+		vmove usr/share/doc/openmp
+	}
+}
+
+libllvm14_package() {
+	short_desc+=" - runtime library"
+	pkg_install() {
+		vmove "usr/lib/libLLVM-*.so*"
+	}
+}
diff --git a/srcpkgs/llvm14/update b/srcpkgs/llvm14/update
new file mode 100644
index 000000000000..e95cf26b3586
--- /dev/null
+++ b/srcpkgs/llvm14/update
@@ -0,0 +1,3 @@
+site="https://github.com/llvm/llvm-project/releases"
+pattern="llvmorg-\K(\d+.){2}\d+(-rc\d+)?"
+ignore="*-rc*"

From b369d475dbffa9297b1f0744a8d203357ac2bba0 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:16:07 +0200
Subject: [PATCH 02/26] llvm: update to 14.0.3.

---
 srcpkgs/llvm/template | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/llvm/template b/srcpkgs/llvm/template
index a92db6f94f9f..d226c61c734e 100644
--- a/srcpkgs/llvm/template
+++ b/srcpkgs/llvm/template
@@ -1,10 +1,10 @@
 # Template file for 'llvm'
 pkgname=llvm
-version=12.0.0
+version=14.0.3
 revision=1
 build_style=meta
-depends="llvm12"
-replaces="llvm11>=0 llvm10>=0 llvm9>=0 llvm8>=0 llvm7>=0 llvm6.0>=0 llvm3.9>=0"
+depends="llvm14"
+replaces="llvm13>=0 llvm12>=0 llvm11>=0 llvm10>=0 llvm9>=0 llvm8>=0 llvm7>=0 llvm6.0>=0 llvm3.9>=0"
 short_desc="LLVM meta package"
 maintainer="Enno Boland <gottox@voidlinux.org>"
 license="Public Domain"

From fa2829d7ab165c2ba96f717db287b725ff7273d3 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:36:32 +0200
Subject: [PATCH 03/26] llvm12: drop non-llvm components

---
 ...clang-001-fix-unwind-chain-inclusion.patch |  44 ---
 .../patches/clang-002-add-musl-triples.patch  | 110 -------
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 -
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ---
 .../compiler-rt-aarch64-ucontext.patch        |  11 -
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 --
 .../llvm12/patches/compiler-rt-size_t.patch   |  10 -
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 ----
 srcpkgs/llvm12/patches/libcxx-musl.patch      |  26 --
 srcpkgs/llvm12/patches/libcxx-ppc.patch       |  22 --
 .../llvm12/patches/libcxx-ssp-nonshared.patch |  11 -
 srcpkgs/llvm12/patches/libcxxabi-dl.patch     |  25 --
 srcpkgs/llvm12/patches/libunwind-ppc32.patch  |  63 ----
 srcpkgs/llvm12/patches/lldb-musl.patch        |  31 --
 .../llvm12/patches/ppc32-compiler-rt.patch    |  21 --
 srcpkgs/llvm12/template                       | 301 +-----------------
 16 files changed, 1 insertion(+), 832 deletions(-)
 delete mode 100644 srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-size_t.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-ppc.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxxabi-dl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libunwind-ppc32.patch
 delete mode 100644 srcpkgs/llvm12/patches/lldb-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/ppc32-compiler-rt.patch

diff --git a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
deleted file mode 100644
index e4eaa7783e7a..000000000000
--- a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 352974169f0d2b5da3d5321f588f5e3b5941330e Mon Sep 17 00:00:00 2001
-From: Andrea Brancaleoni <miwaxe@gmail.com>
-Date: Tue, 8 Sep 2015 22:14:57 +0200
-Subject: [PATCH 2/7] fix unwind chain inclusion
-
----
- lib/Headers/unwind.h | 9 +++++----
- 1 file changed, 5 insertions(+), 4 deletions(-)
-
-diff --git a/lib/Headers/unwind.h b/lib/Headers/unwind.h
-index 303d792..44e10cc 100644
---- a/clang/lib/Headers/unwind.h
-+++ b/clang/lib/Headers/unwind.h
-@@ -9,9 +9,6 @@
- 
- /* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/
- 
--#ifndef __CLANG_UNWIND_H
--#define __CLANG_UNWIND_H
--
- #if defined(__APPLE__) && __has_include_next(<unwind.h>)
- /* Darwin (from 11.x on) provide an unwind.h. If that's available,
-  * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE,
-@@ -39,6 +36,9 @@
- # endif
- #else
- 
-+#ifndef __CLANG_UNWIND_H
-+#define __CLANG_UNWIND_H
-+
- #include <stdint.h>
- 
- #ifdef __cplusplus
-@@ -322,6 +322,7 @@ _Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *);
- }
- #endif
- 
-+#endif /* __CLANG_UNWIND_H */
-+
- #endif
- 
--#endif /* __CLANG_UNWIND_H */
--- 
-2.5.1
diff --git a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
deleted file mode 100644
index 25688d40dbc2..000000000000
--- a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
+++ /dev/null
@@ -1,110 +0,0 @@
---- a/clang/lib/Driver/ToolChains/Gnu.cpp
-+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
-@@ -2086,7 +2086,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
-                                              "armv7hl-redhat-linux-gnueabi",
-                                              "armv6hl-suse-linux-gnueabi",
--                                             "armv7hl-suse-linux-gnueabi"};
-+                                             "armv7hl-suse-linux-gnueabi",
-+                                             "armv7l-linux-gnueabihf"};
-   static const char *const ARMebLibDirs[] = {"/lib"};
-   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
-                                              "armeb-linux-androideabi"};
-@@ -2153,8 +2154,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
-   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
-   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
--                                             "powerpcle-unknown-linux-gnu",
--                                             "powerpcle-linux-musl"};
-+                                             "powerpcle-unknown-linux-gnu"};
- 
-   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
-   static const char *const PPC64Triples[] = {
-@@ -2235,6 +2235,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-     return;
-   }
- 
-+  if (TargetTriple.isMusl()) {
-+    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
-+    static const char *const ARMHFMuslTriples[] = {
-+        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
-+    };
-+    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
-+    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
-+    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
-+    static const char *const MIPSMuslTriples[] = {
-+        "mips-linux-musl", "mipsel-linux-musl",
-+        "mipsel-linux-muslhf", "mips-linux-muslhf"
-+    };
-+    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
-+    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
-+    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
-+    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
-+
-+    switch (TargetTriple.getArch()) {
-+    case llvm::Triple::aarch64:
-+      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
-+      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
-+      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
-+      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
-+      break;
-+    case llvm::Triple::arm:
-+      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
-+      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
-+        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
-+      } else {
-+        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
-+      }
-+      break;
-+    case llvm::Triple::x86_64:
-+      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-+      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
-+      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-+      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
-+      break;
-+    case llvm::Triple::x86:
-+      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-+      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
-+      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-+      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
-+      break;
-+    case llvm::Triple::mips:
-+      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
-+      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
-+      break;
-+    case llvm::Triple::ppc:
-+      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
-+      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
-+      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
-+      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
-+      break;
-+    case llvm::Triple::ppcle:
-+      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
-+      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
-+      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
-+      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
-+      break;
-+    case llvm::Triple::ppc64:
-+      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
-+      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
-+      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
-+      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
-+      break;
-+    case llvm::Triple::ppc64le:
-+      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
-+      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
-+      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
-+      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
-+      break;
-+    default:
-+      break;
-+    }
-+    TripleAliases.push_back(TargetTriple.str());
-+    if (TargetTriple.str() != BiarchTriple.str())
-+      BiarchTripleAliases.push_back(BiarchTriple.str());
-+    return;
-+  }
-+
-   // Android targets should not use GNU/Linux tools or libraries.
-   if (TargetTriple.isAndroid()) {
-     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
deleted file mode 100644
index 4ad6412d1e6c..000000000000
--- a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/clang/lib/Driver/ToolChains/Linux.cpp
-+++ b/clang/lib/Driver/ToolChains/Linux.cpp
-@@ -504,10 +504,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
-     Loader = "ld.so.1";
-     break;
-   case llvm::Triple::ppc64:
--    LibDir = "lib64";
--    Loader =
--        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
--    break;
-   case llvm::Triple::ppc64le:
-     LibDir = "lib64";
-     Loader =
diff --git a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
deleted file mode 100644
index 21fc8003c5f1..000000000000
--- a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
+++ /dev/null
@@ -1,48 +0,0 @@
---- a/clang/lib/Basic/Targets/PPC.h
-+++ b/clang/lib/Basic/Targets/PPC.h
-@@ -415,11 +415,10 @@ public:
-       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
-     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
-       DataLayout = "e-m:e-i64:64-n32:64";
--      ABI = "elfv2";
-     } else {
-       DataLayout = "E-m:e-i64:64-n32:64";
--      ABI = "elfv1";
-     }
-+    ABI = "elfv2";
- 
-     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
-       LongDoubleWidth = LongDoubleAlign = 64;
---- a/clang/lib/CodeGen/TargetInfo.cpp
-+++ b/clang/lib/CodeGen/TargetInfo.cpp
-@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
-       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
- 
-     if (Triple.isOSBinFormatELF()) {
--      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
--      if (getTarget().getABI() == "elfv2")
--        Kind = PPC64_SVR4_ABIInfo::ELFv2;
-+      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
-+      if (getTarget().getABI() == "elfv1")
-+        Kind = PPC64_SVR4_ABIInfo::ELFv1;
-       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
- 
-       return SetCGInfo(
---- a/clang/lib/Driver/ToolChains/Clang.cpp
-+++ b/clang/lib/Driver/ToolChains/Clang.cpp
-@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
-   const llvm::Triple &T = getToolChain().getTriple();
-   if (T.isOSBinFormatELF()) {
-     switch (getToolChain().getArch()) {
--    case llvm::Triple::ppc64: {
--      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
--          T.isOSOpenBSD() || T.isMusl())
--        ABIName = "elfv2";
--      else
--        ABIName = "elfv1";
--      break;
--    }
-+    case llvm::Triple::ppc64:
-     case llvm::Triple::ppc64le:
-       ABIName = "elfv2";
-       break;
diff --git a/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch b/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
deleted file mode 100644
index 893c059d7b8d..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp.orig
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-@@ -1799,7 +1799,7 @@
- 
- static bool Aarch64GetESR(ucontext_t *ucontext, u64 *esr) {
-   static const u32 kEsrMagic = 0x45535201;
--  u8 *aux = ucontext->uc_mcontext.__reserved;
-+  u8 *aux = reinterpret_cast<u8 *>(ucontext->uc_mcontext.__reserved);
-   while (true) {
-     _aarch64_ctx *ctx = (_aarch64_ctx *)aux;
-     if (ctx->size == 0) break;
diff --git a/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch b/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
deleted file mode 100644
index 35f16d24f340..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
+++ /dev/null
@@ -1,35 +0,0 @@
---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-@@ -74,6 +74,10 @@
- #include <sys/utsname.h>
- #endif
- 
-+#if SANITIZER_LINUX && defined(__powerpc__)
-+#include <asm/ptrace.h>
-+#endif
-+
- #if SANITIZER_LINUX && !SANITIZER_ANDROID
- #include <sys/personality.h>
- #endif
---- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
-@@ -92,7 +92,7 @@
- # include <utime.h>
- # include <sys/ptrace.h>
- #if defined(__mips64) || defined(__aarch64__) || defined(__arm__) || \
--    SANITIZER_RISCV64
-+    defined(__powerpc__) || SANITIZER_RISCV64
- #  include <asm/ptrace.h>
- #  ifdef __arm__
- typedef struct user_fpregs elf_fpregset_t;
---- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
-@@ -31,7 +31,7 @@
- #include <sys/types.h> // for pid_t
- #include <sys/uio.h> // for iovec
- #include <elf.h> // for NT_PRSTATUS
--#if (defined(__aarch64__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
-+#if (defined(__aarch64__) || defined(__powerpc__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
- // GLIBC 2.20+ sys/user does not include asm/ptrace.h
- # include <asm/ptrace.h>
- #endif
diff --git a/srcpkgs/llvm12/patches/compiler-rt-size_t.patch b/srcpkgs/llvm12/patches/compiler-rt-size_t.patch
deleted file mode 100644
index 2c63063a5e9e..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-size_t.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/compiler-rt/lib/fuzzer/FuzzerInterceptors.cpp.orig
-+++ b/compiler-rt/lib/fuzzer/FuzzerInterceptors.cpp
-@@ -25,6 +25,7 @@
-   }
- 
- #include <cassert>
-+#include <cstddef>
- #include <cstdint>
- #include <dlfcn.h> // for dlsym()
- 
diff --git a/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch b/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
deleted file mode 100644
index d0b61c80c897..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
+++ /dev/null
@@ -1,62 +0,0 @@
---- a/compiler-rt/lib/xray/xray_powerpc64.inc
-+++ b/compiler-rt/lib/xray/xray_powerpc64.inc
-@@ -12,7 +12,13 @@
- 
- #include <cstdint>
- #include <mutex>
-+#ifdef __GLIBC__
- #include <sys/platform/ppc.h>
-+#else
-+#include <cctype>
-+#include <cstring>
-+#include <cstdlib>
-+#endif
- 
- #include "xray_defs.h"
- 
-@@ -20,13 +26,45 @@ namespace __xray {
- 
- ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
-   CPU = 0;
-+#ifdef __GLIBC__
-   return __ppc_get_timebase();
-+#else
-+  return __builtin_ppc_get_timebase();
-+#endif
- }
- 
- inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
-   static std::mutex M;
-   std::lock_guard<std::mutex> Guard(M);
-+#ifdef __GLIBC__
-   return __ppc_get_timebase_freq();
-+#else
-+  /* FIXME: a less dirty implementation? */
-+  static uint64_t base;
-+  if (!base) {
-+    FILE *f = fopen("/proc/cpuinfo", "rb");
-+    if (f) {
-+      ssize_t nr;
-+      /* virtually always big enough to hold the line */
-+      char buf[512];
-+      while (fgets(buf, sizeof(buf), f)) {
-+        char *ret = strstr(buf, "timebase");
-+        if (!ret) {
-+          continue;
-+        }
-+        ret += sizeof("timebase") - 1;
-+        ret = strchr(ret, ':');
-+        if (!ret) {
-+          continue;
-+        }
-+        base = strtoul(ret + 1, nullptr, 10);
-+        break;
-+      }
-+      fclose(f);
-+    }
-+  }
-+  return base;
-+#endif
- }
- 
- inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
diff --git a/srcpkgs/llvm12/patches/libcxx-musl.patch b/srcpkgs/llvm12/patches/libcxx-musl.patch
deleted file mode 100644
index bbd31ffc2cb1..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-musl.patch
+++ /dev/null
@@ -1,26 +0,0 @@
---- a/libcxx/include/locale
-+++ b/libcxx/include/locale
-@@ -742,7 +742,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
-         typename remove_reference<decltype(errno)>::type __save_errno = errno;
-         errno = 0;
-         char *__p2;
-+#if defined(__linux__) && !defined(__GLIBC__)
-+        long long __ll = strtoll(__a, &__p2, __base);
-+#else
-         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
-+#endif
-         typename remove_reference<decltype(errno)>::type __current_errno = errno;
-         if (__current_errno == 0)
-             errno = __save_errno;
-@@ -782,7 +786,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
-         typename remove_reference<decltype(errno)>::type __save_errno = errno;
-         errno = 0;
-         char *__p2;
-+#if defined(__linux__) && !defined(__GLIBC__)
-+        unsigned long long __ll = strtoull(__a, &__p2, __base);
-+#else
-         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
-+#endif
-         typename remove_reference<decltype(errno)>::type __current_errno = errno;
-         if (__current_errno == 0)
-             errno = __save_errno;
diff --git a/srcpkgs/llvm12/patches/libcxx-ppc.patch b/srcpkgs/llvm12/patches/libcxx-ppc.patch
deleted file mode 100644
index 7a92f8004e1c..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-ppc.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-This ensures `is_iec559` is defined correctly under all long double ABIs,
-including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__`
-is not defined on gcc.
-
---- a/libcxx/include/limits
-+++ b/libcxx/include/limits
-@@ -426,8 +426,14 @@ protected:
-     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
-     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
- 
--#if (defined(__ppc__) || defined(__ppc64__))
-+#if defined(__powerpc__) || defined(__powerpc64__)
-+#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__)
-+    /* IEEE 754 quadruple or double precision */
-+    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
-+#else
-+    /* 128-bit IBM double-double */
-     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
-+#endif
- #else
-     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
- #endif
diff --git a/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch b/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
deleted file mode 100644
index 70292beb2fcd..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/libcxx/CMakeLists.txt
-+++ b/libcxx/CMakeLists.txt
-@@ -769,6 +769,8 @@ function(cxx_link_system_libraries target)
-     target_link_libraries(${target} PRIVATE atomic)
-   endif()
- 
-+#ssp  target_link_libraries(${target} PRIVATE ssp_nonshared)
-+
-   if (MINGW)
-     target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
-   endif()
diff --git a/srcpkgs/llvm12/patches/libcxxabi-dl.patch b/srcpkgs/llvm12/patches/libcxxabi-dl.patch
deleted file mode 100644
index 3a15f9db8c98..000000000000
--- a/srcpkgs/llvm12/patches/libcxxabi-dl.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-Also link to -ldl to prevent undefined references.
-
---- a/libcxxabi/src/CMakeLists.txt
-+++ b/libcxxabi/src/CMakeLists.txt
-@@ -73,6 +73,7 @@
-   endif()
- 
-   add_library_flags_if(LIBCXXABI_HAS_C_LIB c)
-+  add_library_flags_if(LIBCXXABI_HAS_C_LIB dl)
- endif()
- 
- if (LIBCXXABI_USE_LLVM_UNWINDER)
---- a/libcxx/CMakeLists.txt
-+++ b/libcxx/CMakeLists.txt
-@@ -745,6 +745,10 @@
-     target_link_libraries(${target} PRIVATE m)
-   endif()
- 
-+  if (LIBCXX_HAS_C_LIB)
-+    target_link_libraries(${target} PRIVATE dl)
-+  endif()
-+
-   if (LIBCXX_HAS_RT_LIB)
-     target_link_libraries(${target} PRIVATE rt)
-   endif()
diff --git a/srcpkgs/llvm12/patches/libunwind-ppc32.patch b/srcpkgs/llvm12/patches/libunwind-ppc32.patch
deleted file mode 100644
index 74aa7576ecf9..000000000000
--- a/srcpkgs/llvm12/patches/libunwind-ppc32.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-This fixes build at least with gcc9 which does not define `__ppc__`.
-
---- a/libunwind/include/__libunwind_config.h
-+++ b/libunwind/include/__libunwind_config.h
-@@ -49,7 +49,7 @@
- #  define _LIBUNWIND_CONTEXT_SIZE 167
- #  define _LIBUNWIND_CURSOR_SIZE 179
- #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64
--# elif defined(__ppc__)
-+# elif defined(__powerpc__)
- #  define _LIBUNWIND_TARGET_PPC 1
- #  define _LIBUNWIND_CONTEXT_SIZE 117
- #  define _LIBUNWIND_CURSOR_SIZE 124
---- a/libunwind/src/UnwindRegistersRestore.S
-+++ b/libunwind/src/UnwindRegistersRestore.S
-@@ -392,7 +392,7 @@ Lnovec:
-   PPC64_LR(3)
-   bctr
- 
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- 
- DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind13Registers_ppc6jumptoEv)
- //
---- a/libunwind/src/UnwindRegistersSave.S
-+++ b/libunwind/src/UnwindRegistersSave.S
-@@ -554,7 +554,7 @@ DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext)
-   blr
- 
- 
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- 
- //
- // extern int unw_getcontext(unw_context_t* thread_state)
---- a/libunwind/src/config.h
-+++ b/libunwind/src/config.h
-@@ -95,12 +95,12 @@
- #define _LIBUNWIND_BUILD_SJLJ_APIS
- #endif
- 
--#if defined(__i386__) || defined(__x86_64__) || defined(__ppc__) || defined(__ppc64__) || defined(__powerpc64__)
-+#if defined(__i386__) || defined(__x86_64__) || defined(__powerpc__) || defined(__powerpc64__)
- #define _LIBUNWIND_SUPPORT_FRAME_APIS
- #endif
- 
- #if defined(__i386__) || defined(__x86_64__) ||                                \
--    defined(__ppc__) || defined(__ppc64__) || defined(__powerpc64__) ||        \
-+    defined(__powerpc__) || defined(__powerpc64__) ||                          \
-     (!defined(__APPLE__) && defined(__arm__)) ||                               \
-     (defined(__arm64__) || defined(__aarch64__)) ||                            \
-     defined(__mips__)
---- a/libunwind/src/libunwind.cpp
-+++ b/libunwind/src/libunwind.cpp
-@@ -42,7 +42,7 @@ _LIBUNWIND_HIDDEN int __unw_init_local(unw_cursor_t *cursor,
- # define REGISTER_KIND Registers_x86_64
- #elif defined(__powerpc64__)
- # define REGISTER_KIND Registers_ppc64
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- # define REGISTER_KIND Registers_ppc
- #elif defined(__aarch64__)
- # define REGISTER_KIND Registers_arm64
diff --git a/srcpkgs/llvm12/patches/lldb-musl.patch b/srcpkgs/llvm12/patches/lldb-musl.patch
deleted file mode 100644
index 601c0d138523..000000000000
--- a/srcpkgs/llvm12/patches/lldb-musl.patch
+++ /dev/null
@@ -1,31 +0,0 @@
---- a/lldb/source/Plugins/Process/Linux/Procfs.h
-+++ b/lldb/source/Plugins/Process/Linux/Procfs.h
-@@ -10,21 +10,12 @@
- // sys/procfs.h on Android/Linux for all supported architectures.
- 
- #include <sys/ptrace.h>
-+#include <asm/ptrace.h>
- 
--#ifdef __ANDROID__
--#if defined(__arm64__) || defined(__aarch64__)
--typedef unsigned long elf_greg_t;
--typedef elf_greg_t
--    elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
--typedef struct user_fpsimd_state elf_fpregset_t;
--#ifndef NT_FPREGSET
--#define NT_FPREGSET NT_PRFPREG
--#endif // NT_FPREGSET
--#elif defined(__mips__)
--#ifndef NT_FPREGSET
--#define NT_FPREGSET NT_PRFPREG
--#endif // NT_FPREGSET
--#endif
--#else // __ANDROID__
-+#if !defined(__GLIBC__) && defined(__powerpc__)
-+#define pt_regs musl_pt_regs
-+#include <sys/procfs.h>
-+#undef pt_regs
-+#else
- #include <sys/procfs.h>
--#endif // __ANDROID__
-+#endif
diff --git a/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch b/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch
deleted file mode 100644
index 8e0a9a779d1b..000000000000
--- a/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-commit ba4ede595ff9599232f5dd2b4384c243137b53fc
-Author: Daniel Kolesa <daniel@octaforge.org>
-Date:   Tue Jun 22 23:40:54 2021 +0200
-
-    enable compiler-rt support for ppc32
-
-diff --git a/compiler-rt/cmake/base-config-ix.cmake b/compiler-rt/cmake/base-config-ix.cmake
-index 1edab43..5c0c8a2 100644
---- a/compiler-rt/cmake/base-config-ix.cmake
-+++ b/compiler-rt/cmake/base-config-ix.cmake
-@@ -182,9 +182,7 @@ macro(test_targets)
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc64le")
-       test_target_arch(powerpc64le "" "-m64")
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc")
--      if(CMAKE_SYSTEM_NAME MATCHES "AIX")
--        test_target_arch(powerpc "" "-m32")
--      endif()
-+      test_target_arch(powerpc "" "-m32")
-       test_target_arch(powerpc64 "" "-m64")
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "s390x")
-       test_target_arch(s390x "" "")
diff --git a/srcpkgs/llvm12/template b/srcpkgs/llvm12/template
index 7ce18028e4a3..7b361bbbf5bc 100644
--- a/srcpkgs/llvm12/template
+++ b/srcpkgs/llvm12/template
@@ -1,25 +1,17 @@
 # Template file for 'llvm12'
 pkgname=llvm12
 version=12.0.1
-revision=2
+revision=3
 wrksrc="llvm-project-${version}.src"
 build_wrksrc=llvm
 build_style=cmake
 configure_args="
  -DCMAKE_BUILD_TYPE=Release -Wno-dev
  -DENABLE_LINKER_BUILD_ID=YES
- -DLLDB_USE_SYSTEM_SIX=YES
- -DLIBCXX_CXX_ABI=libcxxabi
- -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
- -DLIBCXXABI_USE_LLVM_UNWINDER=YES
- -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
- -DLIBOMP_ENABLE_SHARED=YES
- -DLIBOMP_INSTALL_ALIASES=NO
  -DLLVM_INCLUDE_DOCS=YES
  -DLLVM_BUILD_DOCS=YES
  -DLLVM_ENABLE_SPHINX=YES
  -DSPHINX_WARNINGS_AS_ERRORS=NO
- -DLLVM_INSTALL_UTILS=YES
  -DLLVM_BUILD_LLVM_DYLIB=YES
  -DLLVM_LINK_LLVM_DYLIB=YES
  -DLLVM_ENABLE_RTTI=YES
@@ -51,87 +43,10 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
-_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
-
-_lldb_enable=yes
-_libomp_enable=no
-
-case "$XBPS_TARGET_MACHINE" in
-	ppc64le*) ;;
-	ppc*|i686*) _lldb_enable=no ;;
-esac
-
-case "$XBPS_TARGET_MACHINE" in
-	x86_64*|aarch64*|ppc64*) _libomp_enable=yes;;
-esac
-
-subpackages="clang-tools-extra"
-
-# must go before clang
-if [ "$_libomp_enable" = "yes" ]; then
-	_enabled_projects+=";openmp"
-	subpackages+=" libomp libomp-devel"
-	# because of cmake nonsense referencing libomptarget.so.*
-	depends+=" libomp>=${version}_${revision}"
-fi
-
-subpackages+=" clang clang-analyzer libclang libclang-cpp
- llvm-libunwind llvm-libunwind-devel libcxx libcxx-devel
- libcxxabi libcxxabi-devel libllvm12"
-
-if [ "$_lldb_enable" = "yes" ]; then
-	# XXX fails to cross compile due to python
-	_enabled_projects+=";lldb"
-	subpackages+=" lldb lldb-devel"
-fi
-
-subpackages+=" lld lld-devel"
-
-configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
-
 post_patch() {
-	if [ "$_lldb_enable" = "yes" ]; then
-		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
-			vsed -i 's|__ptrace_request|int|g' \
-				${wrksrc}/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
-		fi
-		# disable docs for lldb as they fail to generate
-		vsed -i '/add_subdirectory(docs)/d' \
-			${wrksrc}/lldb/CMakeLists.txt
-	fi
-
 	# update config.guess for better platform detection
 	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
 		${wrksrc}/llvm/cmake
-
-	# fix linker failures on some archs
-	vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
-		${wrksrc}/libcxxabi/cmake/config-ix.cmake
-	vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
-		${wrksrc}/libcxxabi/cmake/config-ix.cmake
-
-	# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
-	case "$XBPS_TARGET_MACHINE" in
-		ppc64*) ;;
-		ppc*-musl|i686-musl|mips*-musl)
-			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
-				${wrksrc}/libunwind/src/CMakeLists.txt
-			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
-				${wrksrc}/libcxxabi/src/CMakeLists.txt
-			vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
-			;;
-	esac
-
-	case "$XBPS_TARGET_MACHINE" in
-		x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
-			vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
-				${wrksrc}/compiler-rt/CMakeLists.txt
-			;;
-		arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
-			vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
-				${wrksrc}/compiler-rt/cmake/config-ix.cmake
-			;;
-	esac
 }
 
 pre_configure() {
@@ -158,10 +73,8 @@ pre_configure() {
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
 			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
 		make ${makejobs} -C utils/TableGen
-		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
 		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
-		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
 		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
 		cd ../..
 	fi
@@ -202,218 +115,6 @@ do_install() {
 	if [ "$CROSS_BUILD" ]; then
 		rm -f ${DESTDIR}/usr/bin/llvm-config-host
 	fi
-
-	# Install libcxxabi headers
-	vinstall ${wrksrc}/libcxxabi/include/__cxxabi_config.h 644 usr/include
-	vinstall ${wrksrc}/libcxxabi/include/cxxabi.h 644 usr/include
-
-	# Install libunwind headers
-	vinstall ${wrksrc}/libunwind/include/__libunwind_config.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/libunwind.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/unwind.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/mach-o/compact_unwind_encoding.h \
-		644 usr/include/mach-o
-}
-
-clang-analyzer_package() {
-	pycompile_dirs="usr/share/scan-view"
-	depends="clang-${version}_${revision} python3 perl"
-	short_desc+=" - A source code analysis framework"
-	homepage="https://clang-analyzer.llvm.org/"
-	pkg_install() {
-		vmove usr/share/man/man1/scan-build.1
-		vmove "/usr/bin/scan-*"
-		vmove "/usr/share/scan-*"
-		vmove "/usr/libexec/*analyzer"
-	}
-}
-
-clang-tools-extra_package() {
-	lib32disabled=yes
-	depends="clang-${version}_${revision} python3"
-	short_desc+=" - Extra Clang tools"
-	homepage="https://clang.llvm.org/extra/"
-	pkg_install() {
-		vmove usr/include/clang-tidy
-		vmove usr/bin/clang-apply-replacements
-		vmove usr/bin/clang-query
-		vmove usr/bin/clang-rename
-		vmove usr/bin/clang-tidy
-		vmove usr/bin/diagtool
-		vmove usr/bin/find-all-symbols
-		vmove usr/bin/hmaptool
-		vmove usr/bin/modularize
-		vmove usr/bin/pp-trace
-		vmove usr/bin/sancov
-		vmove "usr/lib/libclangApplyReplacements*"
-		vmove "usr/lib/libclangQuery*"
-		vmove "usr/lib/libclangTidy*"
-		vmove "usr/share/clang/*tidy*"
-		vmove usr/share/doc/clang-tools
-		vmove usr/share/man/man1/extraclangtools.1
-		vmove usr/share/man/man1/diagtool.1
-	}
-}
-
-clang_package() {
-	lib32disabled=yes
-	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
-	 libclang-${version}_${revision}"
-	short_desc+=" - C language family frontend"
-	homepage="https://clang.llvm.org/"
-	pkg_install() {
-		vmove usr/include/clang
-		vmove usr/include/clang-c
-		vmove "usr/bin/*clang*"
-		vmove usr/bin/c-index-test
-		vmove usr/lib/clang
-		vmove usr/lib/cmake/clang
-		vmove "usr/lib/libclang*.a"
-		vmove "usr/lib/libclang*.so"
-		vmove usr/share/clang
-		vmove usr/share/doc/clang
-		vmove usr/share/man/man1/clang.1
-	}
-}
-
-libclang_package() {
-	short_desc+=" - C frontend runtime library"
-	pkg_install() {
-		vmove "usr/lib/libclang.so.*"
-	}
-}
-
-libclang-cpp_package() {
-	short_desc+=" - C frontend runtime library (C++ interface)"
-	pkg_install() {
-		vmove "usr/lib/libclang-cpp.so.*"
-	}
-}
-
-lld_package() {
-	lib32disabled=yes
-	short_desc+=" - linker"
-	homepage="https://lld.llvm.org"
-	pkg_install() {
-		vmove usr/bin/lld*
-		vmove usr/bin/wasm-ld
-		vmove usr/bin/ld.lld*
-		vmove usr/bin/ld64.lld*
-		vmove usr/share/doc/lld
-	}
-}
-
-lld-devel_package() {
-	lib32disabled=yes
-	short_desc+=" - linker - development files"
-	homepage="https://lld.llvm.org"
-	depends="lld>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/include/lld
-		vmove usr/lib/cmake/lld
-		vmove "usr/lib/liblld*a"
-	}
-}
-
-lldb_package() {
-	lib32disabled=yes
-	depends+=" python3-six"
-	short_desc+=" - LLDB debugger"
-	homepage="https://lldb.llvm.org/"
-	pkg_install() {
-		vmove usr/bin/*lldb*
-		vmove usr/lib/liblldb*so.*
-		vmove /usr/lib/python*
-	}
-}
-
-lldb-devel_package() {
-	lib32disabled=yes
-	depends="lldb>=${version}_${revision}"
-	short_desc+=" - LLDB debugger - development files"
-	pkg_install() {
-		vmove usr/include/lldb
-		vmove "usr/lib/liblldb*.so"
-	}
-}
-
-llvm-libunwind_package() {
-	short_desc+=" - libunwind"
-	pkg_install() {
-		vmove "usr/lib/libunwind.so.*"
-	}
-}
-
-llvm-libunwind-devel_package() {
-	short_desc+=" - libunwind - development files"
-	depends="llvm-libunwind>=${version}_${revision}"
-	conflicts="libunwind-devel>=0"
-	pkg_install() {
-		vmove usr/lib/libunwind.so
-		vmove usr/lib/libunwind.a
-		vmove "usr/include/*unwind*"
-		vmove usr/include/mach-o
-		vmove usr/share/doc/libunwind
-	}
-}
-
-libcxxabi_package() {
-	short_desc+=" - low level support for libc++"
-	pkg_install() {
-		vmove "usr/lib/libc++abi.so.*"
-	}
-}
-
-libcxxabi-devel_package() {
-	short_desc+=" - low level support for libc++ - development files"
-	depends="libcxxabi>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/lib/libc++abi.so
-		vmove usr/lib/libc++abi.a
-		vmove "usr/include/*cxxabi*"
-	}
-}
-
-libcxx_package() {
-	short_desc+=" - C++ standard library"
-	pkg_install() {
-		vmove "usr/lib/libc++.so.*"
-	}
-}
-
-libcxx-devel_package() {
-	short_desc+=" - C++ standard library - development files"
-	depends="libcxx>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/lib/libc++.so
-		vmove usr/lib/libc++.a
-		vmove usr/lib/libc++experimental.a
-		vmove usr/include/c++
-		vmove usr/share/doc/libcxx
-	}
-}
-
-libomp_package() {
-	short_desc+=" - Clang OpenMP support library"
-	pkg_install() {
-		vmove usr/lib/libomp.so
-		vmove "usr/lib/libomptarget.rtl.*.so"
-		vmove usr/lib/libarcher.so
-		vmove "usr/lib/libomp*.so.*"
-	}
-}
-
-libomp-devel_package() {
-	short_desc+=" - Clang OpenMP support library - development files"
-	depends="libomp>=${version}_${revision}"
-	pkg_install() {
-		vmove "usr/lib/libomp*.so"
-		vmove "usr/lib/libarcher*"
-		vmove "usr/include/omp*.h"
-		vmove "usr/lib/clang/${version}/include/omp*.h"
-		vmove usr/share/man/man1/llvmopenmp.1
-		vmove usr/share/doc/openmp
-	}
 }
 
 libllvm12_package() {

From 9b28478ff94d67c2bf273ba7d4094d2136b2962f Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 14:00:28 +0200
Subject: [PATCH 04/26] New packages: clang12, libclang12, libclang12-cpp,
 lld12, lld12-devel.

---
 common/shlibs                                 |   2 +
 srcpkgs/clang12                               |   1 +
 srcpkgs/libclang12                            |   1 +
 srcpkgs/libclang12-cpp                        |   1 +
 srcpkgs/lld12                                 |   1 +
 srcpkgs/lld12-devel                           |   1 +
 ...clang-001-fix-unwind-chain-inclusion.patch |  44 +++++++
 .../patches/clang-002-add-musl-triples.patch  | 110 ++++++++++++++++++
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 +++
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ++++++++
 srcpkgs/llvm12/template                       |  71 +++++++++++
 11 files changed, 293 insertions(+)
 create mode 120000 srcpkgs/clang12
 create mode 120000 srcpkgs/libclang12
 create mode 120000 srcpkgs/libclang12-cpp
 create mode 120000 srcpkgs/lld12
 create mode 120000 srcpkgs/lld12-devel
 create mode 100644 srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch

diff --git a/common/shlibs b/common/shlibs
index 0ca5d7d5d6f9..36bab1d3d999 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -973,6 +973,8 @@ libuchardet.so.0 uchardet-0.0.6_1
 libgtksourceviewmm-3.0.so.0 gtksourceviewmm-3.2.0_1
 libyajl.so.2 yajl-2.0.1_1
 libconfuse.so.2 confuse-3.2.1_1
+libclang.so.12 libclang12-12.0.0_1
+libclang-cpp.so.12 libclang12-cpp-12.0.0_1
 liblldb.so.14 lldb-14.0.3_1
 libclang.so.14 libclang-14.0.3_1
 libclang-cpp.so.14 libclang-cpp-14.0.3_1
diff --git a/srcpkgs/clang12 b/srcpkgs/clang12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/clang12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/libclang12 b/srcpkgs/libclang12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/libclang12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/libclang12-cpp b/srcpkgs/libclang12-cpp
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/libclang12-cpp
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/lld12 b/srcpkgs/lld12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/lld12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/lld12-devel b/srcpkgs/lld12-devel
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/lld12-devel
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
new file mode 100644
index 000000000000..e4eaa7783e7a
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
@@ -0,0 +1,44 @@
+From 352974169f0d2b5da3d5321f588f5e3b5941330e Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe@gmail.com>
+Date: Tue, 8 Sep 2015 22:14:57 +0200
+Subject: [PATCH 2/7] fix unwind chain inclusion
+
+---
+ lib/Headers/unwind.h | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/lib/Headers/unwind.h b/lib/Headers/unwind.h
+index 303d792..44e10cc 100644
+--- a/clang/lib/Headers/unwind.h
++++ b/clang/lib/Headers/unwind.h
+@@ -9,9 +9,6 @@
+ 
+ /* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/
+ 
+-#ifndef __CLANG_UNWIND_H
+-#define __CLANG_UNWIND_H
+-
+ #if defined(__APPLE__) && __has_include_next(<unwind.h>)
+ /* Darwin (from 11.x on) provide an unwind.h. If that's available,
+  * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE,
+@@ -39,6 +36,9 @@
+ # endif
+ #else
+ 
++#ifndef __CLANG_UNWIND_H
++#define __CLANG_UNWIND_H
++
+ #include <stdint.h>
+ 
+ #ifdef __cplusplus
+@@ -322,6 +322,7 @@ _Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *);
+ }
+ #endif
+ 
++#endif /* __CLANG_UNWIND_H */
++
+ #endif
+ 
+-#endif /* __CLANG_UNWIND_H */
+-- 
+2.5.1
diff --git a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
new file mode 100644
index 000000000000..25688d40dbc2
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
@@ -0,0 +1,110 @@
+--- a/clang/lib/Driver/ToolChains/Gnu.cpp
++++ b/clang/lib/Driver/ToolChains/Gnu.cpp
+@@ -2086,7 +2086,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
+                                              "armv7hl-redhat-linux-gnueabi",
+                                              "armv6hl-suse-linux-gnueabi",
+-                                             "armv7hl-suse-linux-gnueabi"};
++                                             "armv7hl-suse-linux-gnueabi",
++                                             "armv7l-linux-gnueabihf"};
+   static const char *const ARMebLibDirs[] = {"/lib"};
+   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
+                                              "armeb-linux-androideabi"};
+@@ -2153,8 +2154,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
+   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
+   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
+-                                             "powerpcle-unknown-linux-gnu",
+-                                             "powerpcle-linux-musl"};
++                                             "powerpcle-unknown-linux-gnu"};
+ 
+   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
+   static const char *const PPC64Triples[] = {
+@@ -2235,6 +2235,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+     return;
+   }
+ 
++  if (TargetTriple.isMusl()) {
++    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
++    static const char *const ARMHFMuslTriples[] = {
++        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
++    };
++    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
++    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
++    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
++    static const char *const MIPSMuslTriples[] = {
++        "mips-linux-musl", "mipsel-linux-musl",
++        "mipsel-linux-muslhf", "mips-linux-muslhf"
++    };
++    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
++    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
++    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
++    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
++
++    switch (TargetTriple.getArch()) {
++    case llvm::Triple::aarch64:
++      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      break;
++    case llvm::Triple::arm:
++      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
++      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
++        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
++      } else {
++        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
++      }
++      break;
++    case llvm::Triple::x86_64:
++      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      break;
++    case llvm::Triple::x86:
++      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      break;
++    case llvm::Triple::mips:
++      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
++      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
++      break;
++    case llvm::Triple::ppc:
++      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      break;
++    case llvm::Triple::ppcle:
++      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      break;
++    case llvm::Triple::ppc64:
++      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      break;
++    case llvm::Triple::ppc64le:
++      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      break;
++    default:
++      break;
++    }
++    TripleAliases.push_back(TargetTriple.str());
++    if (TargetTriple.str() != BiarchTriple.str())
++      BiarchTripleAliases.push_back(BiarchTriple.str());
++    return;
++  }
++
+   // Android targets should not use GNU/Linux tools or libraries.
+   if (TargetTriple.isAndroid()) {
+     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
new file mode 100644
index 000000000000..4ad6412d1e6c
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
@@ -0,0 +1,13 @@
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -504,10 +504,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+     Loader = "ld.so.1";
+     break;
+   case llvm::Triple::ppc64:
+-    LibDir = "lib64";
+-    Loader =
+-        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
+-    break;
+   case llvm::Triple::ppc64le:
+     LibDir = "lib64";
+     Loader =
diff --git a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
new file mode 100644
index 000000000000..21fc8003c5f1
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
@@ -0,0 +1,48 @@
+--- a/clang/lib/Basic/Targets/PPC.h
++++ b/clang/lib/Basic/Targets/PPC.h
+@@ -415,11 +415,10 @@ public:
+       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
+     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
+       DataLayout = "e-m:e-i64:64-n32:64";
+-      ABI = "elfv2";
+     } else {
+       DataLayout = "E-m:e-i64:64-n32:64";
+-      ABI = "elfv1";
+     }
++    ABI = "elfv2";
+ 
+     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
+       LongDoubleWidth = LongDoubleAlign = 64;
+--- a/clang/lib/CodeGen/TargetInfo.cpp
++++ b/clang/lib/CodeGen/TargetInfo.cpp
+@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
+       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
+ 
+     if (Triple.isOSBinFormatELF()) {
+-      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
+-      if (getTarget().getABI() == "elfv2")
+-        Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      if (getTarget().getABI() == "elfv1")
++        Kind = PPC64_SVR4_ABIInfo::ELFv1;
+       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
+ 
+       return SetCGInfo(
+--- a/clang/lib/Driver/ToolChains/Clang.cpp
++++ b/clang/lib/Driver/ToolChains/Clang.cpp
+@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
+   const llvm::Triple &T = getToolChain().getTriple();
+   if (T.isOSBinFormatELF()) {
+     switch (getToolChain().getArch()) {
+-    case llvm::Triple::ppc64: {
+-      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
+-          T.isOSOpenBSD() || T.isMusl())
+-        ABIName = "elfv2";
+-      else
+-        ABIName = "elfv1";
+-      break;
+-    }
++    case llvm::Triple::ppc64:
+     case llvm::Triple::ppc64le:
+       ABIName = "elfv2";
+       break;
diff --git a/srcpkgs/llvm12/template b/srcpkgs/llvm12/template
index 7b361bbbf5bc..274b57183654 100644
--- a/srcpkgs/llvm12/template
+++ b/srcpkgs/llvm12/template
@@ -43,6 +43,12 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
+_enabled_projects="clang;lld"
+
+subpackages+=" clang12 libclang12 libclang12-cpp libllvm12 lld12 lld12-devel"
+
+configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+
 post_patch() {
 	# update config.guess for better platform detection
 	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
@@ -73,8 +79,10 @@ pre_configure() {
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
 			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
 		make ${makejobs} -C utils/TableGen
+		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
 		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
+		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
 		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
 		cd ../..
 	fi
@@ -117,6 +125,69 @@ do_install() {
 	fi
 }
 
+clang12_package() {
+	conflicts="clang"
+	lib32disabled=yes
+	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
+	 libclang12-${version}_${revision}"
+	short_desc+=" - C language family frontend"
+	homepage="https://clang.llvm.org/"
+	pkg_install() {
+		vmove usr/include/clang
+		vmove usr/include/clang-c
+		vmove "usr/bin/*clang*"
+		vmove usr/bin/c-index-test
+		vmove usr/lib/clang
+		vmove usr/lib/cmake/clang
+		vmove "usr/lib/libclang*.a"
+		vmove "usr/lib/libclang*.so"
+		vmove usr/share/clang
+		vmove usr/share/doc/clang
+		vmove usr/share/man/man1/clang.1
+	}
+}
+
+libclang12_package() {
+	short_desc+=" - C frontend runtime library"
+	pkg_install() {
+		vmove "usr/lib/libclang.so.*"
+	}
+}
+
+libclang12-cpp_package() {
+	short_desc+=" - C frontend runtime library (C++ interface)"
+	pkg_install() {
+		vmove "usr/lib/libclang-cpp.so.*"
+	}
+}
+
+lld12_package() {
+	conflicts="lld"
+	lib32disabled=yes
+	short_desc+=" - linker"
+	homepage="https://lld.llvm.org"
+	pkg_install() {
+		vmove usr/bin/lld*
+		vmove usr/bin/wasm-ld
+		vmove usr/bin/ld.lld*
+		vmove usr/bin/ld64.lld*
+		vmove usr/share/doc/lld
+	}
+}
+
+lld12-devel_package() {
+	conflicts="lld-devel"
+	lib32disabled=yes
+	short_desc+=" - linker - development files"
+	homepage="https://lld.llvm.org"
+	depends="lld12>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include/lld
+		vmove usr/lib/cmake/lld
+		vmove "usr/lib/liblld*a"
+	}
+}
+
 libllvm12_package() {
 	short_desc+=" - runtime library"
 	pkg_install() {

From fb3f7f07c61afb3b3ee36f33886d8061aee71d3b Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 05/26] chromium: update for llvm14

---
 srcpkgs/chromium/template | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/srcpkgs/chromium/template b/srcpkgs/chromium/template
index 0dce8772fdb8..8b604a349229 100644
--- a/srcpkgs/chromium/template
+++ b/srcpkgs/chromium/template
@@ -2,7 +2,7 @@
 pkgname=chromium
 # See https://chromiumdash.appspot.com/releases?platform=Linux for the latest version
 version=101.0.4951.41
-revision=1
+revision=2
 archs="i686* x86_64* aarch64* armv7l* ppc64le*"
 short_desc="Google's attempt at creating a safer, faster, and more stable browser"
 maintainer="Duncaen <duncaen@voidlinux.org>"
@@ -20,7 +20,7 @@ desc_option_debug="Build with debug symbols"
 desc_option_js_optimize="Optimize the JS used for Chromium's UI"
 desc_option_pipewire="Enable support for screen sharing for WebRTC via PipeWire"
 
-hostmakedepends="$(vopt_if clang "clang lld llvm12") python python3 pkgconf perl gperf bison ninja nodejs hwids
+hostmakedepends="$(vopt_if clang "clang lld llvm14") python python3 pkgconf perl gperf bison ninja nodejs hwids
  libatomic-devel libevent-devel libglib-devel $(vopt_if js_optimize openjdk) wayland-devel libepoxy-devel"
 makedepends="libpng-devel gtk+-devel gtk+3-devel nss-devel pciutils-devel
  libXi-devel libgcrypt-devel libgnome-keyring-devel cups-devel elfutils-devel
@@ -266,12 +266,6 @@ do_configure() {
 		'disable_fieldtrial_testing_config=true'
 
 		'is_official_build=true'
-
-		# segfaults with llvm-12.0.1
-		'is_cfi=false'
-		'use_thin_lto=false'
-		'use_cfi_icall=false'
-		'chrome_pgo_phase=0'
 	)
 
 	if [ "$CROSS_BUILD" ]; then

From 6f92edb94778a692d5bce81aa2a994b9375e187e Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 06/26] ghdl: update for llvm14

---
 srcpkgs/ghdl/patches/{llvm12.patch => llvm.patch} | 2 ++
 srcpkgs/ghdl/template                             | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)
 rename srcpkgs/ghdl/patches/{llvm12.patch => llvm.patch} (82%)

diff --git a/srcpkgs/ghdl/patches/llvm12.patch b/srcpkgs/ghdl/patches/llvm.patch
similarity index 82%
rename from srcpkgs/ghdl/patches/llvm12.patch
rename to srcpkgs/ghdl/patches/llvm.patch
index 8d2f76bfda06..9201816ae053 100644
--- a/srcpkgs/ghdl/patches/llvm12.patch
+++ b/srcpkgs/ghdl/patches/llvm.patch
@@ -7,6 +7,8 @@ index c1c1a6d..dad7c38 100755
         check_version 10.0 $llvm_version ||
         check_version 11.0 $llvm_version ||
 +       check_version 12.0 $llvm_version ||
++       check_version 13.0 $llvm_version ||
++       check_version 14.0 $llvm_version ||
         false; then
      echo "Debugging is enabled with llvm $llvm_version"
    else
diff --git a/srcpkgs/ghdl/template b/srcpkgs/ghdl/template
index e756d8c3cd87..9ca1169b22bd 100644
--- a/srcpkgs/ghdl/template
+++ b/srcpkgs/ghdl/template
@@ -7,7 +7,7 @@
 pkgname=ghdl
 reverts="20181129_1"
 version=1.0.0
-revision=1
+revision=2
 build_style=configure
 configure_args="--prefix=/usr --srcdir=.. --incdir=lib/ghdl/include"
 makedepends="zlib-devel"

From b6203c7eac1b53b9a80c673bfa8b0c569deb7733 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 07/26] qt5: rebuild for llvm14

---
 srcpkgs/qt5/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index ee788fad2019..25f15583a42d 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -3,7 +3,7 @@ pkgname=qt5
 version=5.15.3+20220222
 # commit fcca82ca40a5d8a02a4ddd90846d070f2c58cfad
 # base repo: https://invent.kde.org/qt/qt/qt5
-revision=3
+revision=4
 build_style=meta
 hostmakedepends="cmake clang flex perl glib-devel pkg-config
  python re2c ruby which"

From c4663a9c394dc5d48de96e3646887027ea17118b Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 08/26] tilix: rebuild for llvm14

---
 srcpkgs/tilix/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/tilix/template b/srcpkgs/tilix/template
index d8f014bc78c5..ac1bf7dd3bdd 100644
--- a/srcpkgs/tilix/template
+++ b/srcpkgs/tilix/template
@@ -1,7 +1,7 @@
 # Template file for 'tilix'
 pkgname=tilix
 version=1.9.4
-revision=3
+revision=4
 build_style=meson
 configure_args="-Db_lto=false"
 hostmakedepends="automake gettext-devel gdk-pixbuf glib-devel ldc po4a pkg-config

From 43875514f850c36f6112a13e77491a2ad5726f82 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 09/26] shiboken2: rebuild for llvm14

---
 srcpkgs/shiboken2/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/shiboken2/template b/srcpkgs/shiboken2/template
index b56613229c13..ab9d2c4cb8f9 100644
--- a/srcpkgs/shiboken2/template
+++ b/srcpkgs/shiboken2/template
@@ -1,7 +1,7 @@
 # Template file for 'shiboken2'
 pkgname=shiboken2
 version=5.15.2
-revision=4
+revision=5
 _pkgname="pyside-setup-opensource-src-${version}"
 wrksrc="${_pkgname/%5.14.2.1/5.14.2}"
 build_wrksrc="sources/shiboken2"

From a5fa6c1dbd26f1858929081fc9998f569c2ee6e8 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 10/26] gnome-builder: rebuild for llvm14

---
 srcpkgs/gnome-builder/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/gnome-builder/template b/srcpkgs/gnome-builder/template
index 93559b21774f..5a5a51893ae8 100644
--- a/srcpkgs/gnome-builder/template
+++ b/srcpkgs/gnome-builder/template
@@ -1,7 +1,7 @@
 # Template file for 'gnome-builder'
 pkgname=gnome-builder
 version=41.3
-revision=1
+revision=2
 build_style=meson
 build_helper=qemu
 configure_args="-Dhelp=true -Dnetwork_tests=false"

From 2afc9ac533b8aea0598ffca1ca646a9c5330ef55 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 11/26] bcc: rebuild for llvm14

---
 srcpkgs/bcc/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/bcc/template b/srcpkgs/bcc/template
index 54509b63d5a7..2cfa0a2977d0 100644
--- a/srcpkgs/bcc/template
+++ b/srcpkgs/bcc/template
@@ -1,7 +1,7 @@
 # Template file for 'bcc'
 pkgname=bcc
 version=0.24.0
-revision=1
+revision=2
 wrksrc="bcc"
 build_style=cmake
 configure_args="-DREVISION=${version} -DENABLE_LLVM_SHARED=1"

From dd1e06a1508d22944bdc7771cc6093d031b5e5c0 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 12/26] mesa: rebuild for llvm14

---
 srcpkgs/mesa/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/mesa/template b/srcpkgs/mesa/template
index c90500de7416..8f08262fb135 100644
--- a/srcpkgs/mesa/template
+++ b/srcpkgs/mesa/template
@@ -1,7 +1,7 @@
 # Template file for 'mesa'
 pkgname=mesa
 version=21.3.7
-revision=1
+revision=2
 build_style=meson
 configure_args="-Dglvnd=true -Dshared-glapi=enabled -Dgbm=enabled -Degl=enabled
  -Dosmesa=true -Dgles1=enabled -Dgles2=enabled -Dglx=dri -Ddri3=enabled

From b257c3076a77f5bbf4dd3d9e7691e1c0ac530051 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 13/26] juCi++: rebuild for llvm14

---
 srcpkgs/juCi++/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/juCi++/template b/srcpkgs/juCi++/template
index 1a7604b44a00..5103324dec20 100644
--- a/srcpkgs/juCi++/template
+++ b/srcpkgs/juCi++/template
@@ -1,7 +1,7 @@
 # Template file for 'juCi++'
 pkgname=juCi++
 version=1.6.2
-revision=2
+revision=3
 _libclangmm_commit="b342f4dd6de4fe509a692a4b4fcfc7e24aae9590"
 _tiny_commit="c9c8bf810ddad8cd17882b9a9ee628a690e779f5"
 wrksrc="jucipp-v${version}"

From 1900de5d7dac6b9c2a2bbc73608aa30d3e06a34b Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 14/26] codelite: rebuild for llvm14

---
 srcpkgs/codelite/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/codelite/template b/srcpkgs/codelite/template
index 3a993a2c0cfb..24e2c879dd45 100644
--- a/srcpkgs/codelite/template
+++ b/srcpkgs/codelite/template
@@ -1,7 +1,7 @@
 # Template file for 'codelite'
 pkgname=codelite
 version=15.0.6
-revision=1
+revision=2
 build_style=cmake
 build_helper=cmake-wxWidgets-gtk3
 configure_args="-DWITH_PCH=0 -DWITH_WX_CONFIG=wx-config-gtk3

From 169acc39cff060ea26358d2dae55be7269bad0cc Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 15/26] ccls: rebuild for llvm14

---
 srcpkgs/ccls/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/ccls/template b/srcpkgs/ccls/template
index fbb7c6847bc1..40aba3b55bfe 100644
--- a/srcpkgs/ccls/template
+++ b/srcpkgs/ccls/template
@@ -1,7 +1,7 @@
 # Template file for 'ccls'
 pkgname=ccls
 version=0.20210330
-revision=2
+revision=3
 build_style=cmake
 hostmakedepends="clang-tools-extra"
 makedepends="llvm ncurses-devel rapidjson zlib-devel clang-tools-extra"

From 11e02ab441b3788a20063df0c26cb19a08ab634b Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 16/26] clazy: rebuild for llvm14

---
 srcpkgs/clazy/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/clazy/template b/srcpkgs/clazy/template
index 11f3bab55aef..f81de08ab836 100644
--- a/srcpkgs/clazy/template
+++ b/srcpkgs/clazy/template
@@ -1,7 +1,7 @@
 # Template file for 'clazy'
 pkgname=clazy
 version=1.11
-revision=1
+revision=2
 build_style=cmake
 build_helper=qemu
 hostmakedepends="llvm"

From 6e3a591c8ea85a2ea3098ee40f7387345e86a1b3 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 17/26] bpftrace: rebuild for llvm14

---
 srcpkgs/bpftrace/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/bpftrace/template b/srcpkgs/bpftrace/template
index 28ab3c626399..eb2480d2230e 100644
--- a/srcpkgs/bpftrace/template
+++ b/srcpkgs/bpftrace/template
@@ -1,7 +1,7 @@
 # Template file for 'bpftrace'
 pkgname=bpftrace
 version=0.14.1
-revision=1
+revision=2
 archs="x86_64* aarch64* ppc64*"
 build_style=cmake
 configure_args="-DBUILD_TESTING=OFF"  # needs root to run

From 9ea5f9123f0c01b1bb792bd39bebf61577b1a2de Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 18/26] rtags: rebuild for llvm14

---
 srcpkgs/rtags/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/rtags/template b/srcpkgs/rtags/template
index b496a1b0e721..9b161e690d76 100644
--- a/srcpkgs/rtags/template
+++ b/srcpkgs/rtags/template
@@ -1,7 +1,7 @@
 # Template file for 'rtags'
 pkgname=rtags
 version=2.38
-revision=5
+revision=6
 build_style=cmake
 # Don't run tests in do_install, please.
 configure_args="-DSKIP_CTEST=TRUE"

From 306fcd20351cac9619b1718b4979dcc5ab34b949 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:07:19 +0200
Subject: [PATCH 19/26] beignet: remove package

---
 srcpkgs/beignet/patches/cl_uint.patch         |  22 -
 ...419a0008e38ef2d9d255d9e9c74e9fba084b.patch | 134 ---
 srcpkgs/beignet/patches/llvm06.patch          |  33 -
 srcpkgs/beignet/patches/llvm08.patch          |  56 --
 srcpkgs/beignet/patches/llvm09.patch          | 111 ---
 srcpkgs/beignet/patches/llvm10.patch          | 347 -------
 srcpkgs/beignet/patches/llvm11.patch          | 937 ------------------
 srcpkgs/beignet/patches/llvm12.patch          | 115 ---
 srcpkgs/beignet/patches/musl.patch            |  11 -
 srcpkgs/beignet/template                      |  22 -
 srcpkgs/beignet/update                        |   1 -
 srcpkgs/removed-packages/template             |   3 +-
 12 files changed, 2 insertions(+), 1790 deletions(-)
 delete mode 100644 srcpkgs/beignet/patches/cl_uint.patch
 delete mode 100644 srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm06.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm08.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm09.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm10.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm11.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm12.patch
 delete mode 100644 srcpkgs/beignet/patches/musl.patch
 delete mode 100644 srcpkgs/beignet/template
 delete mode 100644 srcpkgs/beignet/update

diff --git a/srcpkgs/beignet/patches/cl_uint.patch b/srcpkgs/beignet/patches/cl_uint.patch
deleted file mode 100644
index 86ba00f04e95..000000000000
--- a/srcpkgs/beignet/patches/cl_uint.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/src/cl_api_kernel.c	2017-09-22 10:05:22.000000000 +0200
-+++ b/src/cl_api_kernel.c	2020-03-24 18:27:40.186485887 +0100
-@@ -151,7 +151,7 @@
-         fixed_local_sz[0] = 16;
-         fixed_local_sz[1] = 1;
-       } else {
--        uint j, maxDimSize = 64 /* from 64? */, maxGroupSize = 256; //MAX_WORK_GROUP_SIZE may too large
-+        cl_uint j, maxDimSize = 64 /* from 64? */, maxGroupSize = 256; //MAX_WORK_GROUP_SIZE may too large
-         size_t realGroupSize = 1;
-         for (i = 0; i < work_dim; i++) {
-           for (j = maxDimSize; j > 1; j--) {
---- a/src/cl_enqueue.c	2017-09-22 10:05:22.000000000 +0200
-+++ b/src/cl_enqueue.c	2020-03-24 18:30:12.031479833 +0100
-@@ -494,7 +494,7 @@
- cl_int cl_enqueue_svm_free(enqueue_data *data, cl_int status) {
-   int i;
-   void **pointers = data->pointers;
--  uint num_svm_ptrs = data->size;
-+  cl_uint num_svm_ptrs = data->size;
-   cl_int err = CL_SUCCESS;
- 
-   if (status != CL_COMPLETE)
diff --git a/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch b/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
deleted file mode 100644
index 8de9e6e2f093..000000000000
--- a/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
+++ /dev/null
@@ -1,134 +0,0 @@
-From e1b2419a0008e38ef2d9d255d9e9c74e9fba084b Mon Sep 17 00:00:00 2001
-From: "Rebecca N. Palmer" <rebecca_palmer@zoho.com>
-Date: Sat, 21 Jul 2018 20:05:54 +0100
-Subject: Add preliminary LLVM 7 support
-
-This is preliminary because LLVM 7 has not been released yet:
-it was tested with the snapshot from Debian experimental (svn336894).
-
-1.Change linking order, as clangCodeGen now links to clangFrontend
-2.Pass references not pointers to WriteBitcodeToFile and CloneModule
-3.Add the headers that LoopSimplifyID, LCSSAID and
-some create*Pass have moved to
-4.Define our DEBUG whether or not we just undefined LLVM's
-(theirs is now LLVM_DEBUG, but we never actually use it)
-
-Signed-off-by: Rebecca N. Palmer <rebecca_palmer@zoho.com>
-Reviewed-by: Yang Rong <rong.r.yang@intel.com>
----
- CMake/FindLLVM.cmake                     | 2 +-
- backend/src/backend/gen_program.cpp      | 8 ++++++++
- backend/src/backend/program.cpp          | 4 ++++
- backend/src/llvm/ExpandLargeIntegers.cpp | 2 +-
- backend/src/llvm/llvm_bitcode_link.cpp   | 4 ++++
- backend/src/llvm/llvm_includes.hpp       | 4 ++++
- 6 files changed, 22 insertions(+), 2 deletions(-)
-
-diff --git a/CMake/FindLLVM.cmake b/CMake/FindLLVM.cmake
-index 5457f24..f882589 100644
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -113,10 +113,10 @@ macro(add_one_lib name)
- endmacro()
- 
- #Assume clang lib path same as llvm lib path
-+add_one_lib("clangCodeGen")
- add_one_lib("clangFrontend")
- add_one_lib("clangSerialization")
- add_one_lib("clangDriver")
--add_one_lib("clangCodeGen")
- add_one_lib("clangSema")
- add_one_lib("clangStaticAnalyzerFrontend")
- add_one_lib("clangStaticAnalyzerCheckers")
-diff --git a/backend/src/backend/gen_program.cpp b/backend/src/backend/gen_program.cpp
-index 274c99c..4159234 100644
---- a/backend/src/backend/gen_program.cpp
-+++ b/backend/src/backend/gen_program.cpp
-@@ -454,7 +454,11 @@ namespace gbe {
- #ifdef GBE_COMPILER_AVAILABLE
-       std::string str;
-       llvm::raw_string_ostream OS(str);
-+#if LLVM_VERSION_MAJOR >= 7
-+      llvm::WriteBitcodeToFile(*((llvm::Module*)prog->module), OS);
-+#else
-       llvm::WriteBitcodeToFile((llvm::Module*)prog->module, OS);
-+#endif
-       std::string& bin_str = OS.str();
-       int llsz = bin_str.size();
-       *binary = (char *)malloc(sizeof(char) * (llsz+1) );
-@@ -545,7 +549,11 @@ namespace gbe {
-                                     &modRef);
-         src = llvm::unwrap(modRef);
-       }
-+#if LLVM_VERSION_MAJOR >= 7
-+      llvm::Module* clone = llvm::CloneModule(*src).release();
-+#else
-       llvm::Module* clone = llvm::CloneModule(src).release();
-+#endif
-       if (LLVMLinkModules2(wrap(dst), wrap(clone))) {
- #elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-       if (LLVMLinkModules(wrap(dst), wrap(src), LLVMLinkerPreserveSource_Removed, &errMsg)) {
-diff --git a/backend/src/backend/program.cpp b/backend/src/backend/program.cpp
-index c37c595..b36f7b4 100644
---- a/backend/src/backend/program.cpp
-+++ b/backend/src/backend/program.cpp
-@@ -794,7 +794,11 @@ namespace gbe {
-       llvm::raw_fd_ostream ostream (dumpSPIRBinaryName.c_str(),
-                                     err, llvm::sys::fs::F_None);
-       if (!err)
-+#if LLVM_VERSION_MAJOR<7
-         llvm::WriteBitcodeToFile(*out_module, ostream);
-+#else
-+        llvm::WriteBitcodeToFile(**out_module, ostream);
-+#endif
-     }
- #endif
-     return true;
-diff --git a/backend/src/llvm/ExpandLargeIntegers.cpp b/backend/src/llvm/ExpandLargeIntegers.cpp
-index 8515dc1..4aec44e 100644
---- a/backend/src/llvm/ExpandLargeIntegers.cpp
-+++ b/backend/src/llvm/ExpandLargeIntegers.cpp
-@@ -99,8 +99,8 @@ using namespace llvm;
- 
- #ifdef DEBUG
-   #undef DEBUG
--  #define DEBUG(...)
- #endif
-+#define DEBUG(...)
- // Break instructions up into no larger than 64-bit chunks.
- static const unsigned kChunkBits = 64;
- static const unsigned kChunkBytes = kChunkBits / CHAR_BIT;
-diff --git a/backend/src/llvm/llvm_bitcode_link.cpp b/backend/src/llvm/llvm_bitcode_link.cpp
-index ef56e4c..4c3e20e 100644
---- a/backend/src/llvm/llvm_bitcode_link.cpp
-+++ b/backend/src/llvm/llvm_bitcode_link.cpp
-@@ -340,7 +340,11 @@ namespace gbe
-     /* We use beignet's bitcode as dst because it will have a lot of
-        lazy functions which will not be loaded. */
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 39
-+#if LLVM_VERSION_MAJOR >= 7
-+    llvm::Module * linked_module = llvm::CloneModule(*(llvm::Module*)mod).release();
-+#else
-     llvm::Module * linked_module = llvm::CloneModule((llvm::Module*)mod).release();
-+#endif
-     if(LLVMLinkModules2(wrap(clonedLib), wrap(linked_module))) {
- #else
-     char* errorMsg;
-diff --git a/backend/src/llvm/llvm_includes.hpp b/backend/src/llvm/llvm_includes.hpp
-index 184553a..ffccf02 100644
---- a/backend/src/llvm/llvm_includes.hpp
-+++ b/backend/src/llvm/llvm_includes.hpp
-@@ -89,6 +89,10 @@
- #include "llvm/CodeGen/IntrinsicLowering.h"
- 
- #include "llvm/Transforms/Scalar.h"
-+#if LLVM_VERSION_MAJOR >= 7
-+#include "llvm/Transforms/Utils.h"
-+#include "llvm/Transforms/InstCombine/InstCombine.h"
-+#endif
- #include "llvm/MC/MCAsmInfo.h"
- #include "llvm/MC/MCContext.h"
- #include "llvm/MC/MCInstrInfo.h"
--- 
-cgit v1.1
-
diff --git a/srcpkgs/beignet/patches/llvm06.patch b/srcpkgs/beignet/patches/llvm06.patch
deleted file mode 100644
index 3389e66c82df..000000000000
--- a/srcpkgs/beignet/patches/llvm06.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-Source: Arch Linux
-Upstream: unknown
-Reason: fixes llvm6 compilation
-
---- a/backend/src/llvm/llvm_to_gen.cpp	2017-10-24 09:04:48.000000000 +0300
-+++ b/backend/src/llvm/llvm_to_gen.cpp	2018-03-16 16:08:54.669963824 +0200
-@@ -322,7 +322,11 @@ namespace gbe
-     DataLayout DL(&mod);
-     
-     gbeDiagnosticContext dc;
-+#if LLVM_VERSION_MAJOR >= 6
-+    mod.getContext().setDiagnosticHandlerCallBack(&gbeDiagnosticHandler,&dc);
-+#else
-     mod.getContext().setDiagnosticHandler(&gbeDiagnosticHandler,&dc);
-+#endif
- 
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-     mod.setDataLayout(DL);
---- a/backend/src/llvm/llvm_unroll.cpp	2017-10-24 09:04:48.000000000 +0300
-+++ b/backend/src/llvm/llvm_unroll.cpp	2018-03-16 16:09:47.736403557 +0200
-@@ -205,7 +205,9 @@ namespace gbe {
-           if (parentTripCount != 0 && currTripCount * parentTripCount > 32) {
-             //Don't change the unrollID if doesn't force unroll.
-             //setUnrollID(parentL, false);
--#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-+#if LLVM_VERSION_MAJOR >= 6
-+            loopInfo.erase(parentL);
-+#elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-             loopInfo.markAsRemoved(parentL);
- #else
-             LPM.deleteLoopFromQueue(parentL);
-Only in Beignet-1.3.2-Source: build
-
diff --git a/srcpkgs/beignet/patches/llvm08.patch b/srcpkgs/beignet/patches/llvm08.patch
deleted file mode 100644
index a0c5e7a7c4f7..000000000000
--- a/srcpkgs/beignet/patches/llvm08.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 75c152599a7c1739e6dadcdb9b377acf7e44d9cf Mon Sep 17 00:00:00 2001
-From: Jan Beich <jbeich@FreeBSD.org>
-Date: Wed, 30 Jan 2019 12:42:34 +0000
-Subject: [PATCH] lang/beignet: unbreak with llvm80
-
-Regressed by https://github.com/llvm/llvm-project/commit/721d95713a9e
-
-unable to load /usr/local/lib/beignet//libgbeinterp.so which is part of the driver, please check!
-ld-elf.so.1: /usr/local/lib/beignet//libgbeinterp.so: Undefined symbol "_ZN4llvm24DisableABIBreakingChecksE"
-
-Regressed by https://github.com/llvm/llvm-project/commit/4a2d58e16acc
-
-backend/src/llvm/llvm_gen_backend.cpp:3076:5: error:
-      unknown type name 'TerminatorInst'
-    TerminatorInst *term = bb->getTerminator();
-    ^
-backend/src/llvm/llvm_gen_backend.cpp:3083:5: error:
-      unknown type name 'TerminatorInst'
-    TerminatorInst *term = bb->getTerminator();
-    ^
-
---- a/backend/src/CMakeLists.txt	2017-09-22 08:05:22 UTC
-+++ b/backend/src/CMakeLists.txt
-@@ -168,6 +168,7 @@ add_dependencies(gbe beignet_bitcode)
- endif (NOT (USE_STANDALONE_GBE_COMPILER STREQUAL "true"))
- 
- add_library(gbeinterp SHARED gbe_bin_interpreter.cpp)
-+target_link_libraries(gbeinterp ${LLVM_MODULE_LIBS})
- 
- if (LLVM_VERSION_NODOT VERSION_EQUAL 34)
-   find_library(TERMINFO NAMES tinfo ncurses)
---- a/backend/src/llvm/llvm_gen_backend.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -3073,14 +3073,22 @@ namespace gbe
- 
- 
-   static unsigned getChildNo(BasicBlock *bb) {
-+#if LLVM_VERSION_MAJOR < 8
-     TerminatorInst *term = bb->getTerminator();
-+#else
-+    Instruction *term = bb->getTerminator();
-+#endif
-     return term->getNumSuccessors();
-   }
- 
-   // return NULL if index out-range of children number
-   static BasicBlock *getChildPossible(BasicBlock *bb, unsigned index) {
- 
-+#if LLVM_VERSION_MAJOR < 8
-     TerminatorInst *term = bb->getTerminator();
-+#else
-+    Instruction *term = bb->getTerminator();
-+#endif
-     unsigned childNo = term->getNumSuccessors();
-     BasicBlock *child = NULL;
-     if(index < childNo) {
diff --git a/srcpkgs/beignet/patches/llvm09.patch b/srcpkgs/beignet/patches/llvm09.patch
deleted file mode 100644
index acaeceabb6dd..000000000000
--- a/srcpkgs/beignet/patches/llvm09.patch
+++ /dev/null
@@ -1,111 +0,0 @@
-Source: FreeBSD + q66
-
-Mostly FreeBSD other than FindLLVM.cmake changes.
-Linking against clang-cpp does not work for us.
-
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -140,6 +140,7 @@ add_one_lib("clangStaticAnalyzerCore")
- add_one_lib("clangAnalysis")
- add_one_lib("clangEdit")
- add_one_lib("clangAST")
-+add_one_lib("clangASTMatchers")
- add_one_lib("clangParse")
- add_one_lib("clangSema")
- add_one_lib("clangLex")
---- a/backend/src/llvm/llvm_intrinsic_lowering.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_intrinsic_lowering.cpp
-@@ -77,7 +77,11 @@ namespace gbe {
-         std::vector<Type *> ParamTys;
-         for (Value** I = ArgBegin; I != ArgEnd; ++I)
-           ParamTys.push_back((*I)->getType());
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+        FunctionCallee FCache = M->getOrInsertFunction(NewFn,
-+#else
-         Constant* FCache = M->getOrInsertFunction(NewFn,
-+#endif
-                                         FunctionType::get(RetTy, ParamTys, false));
- 
-         IRBuilder<> Builder(CI->getParent(), BasicBlock::iterator(CI));
---- a/backend/src/llvm/llvm_sampler_fix.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp
-@@ -82,7 +82,11 @@ namespace gbe {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-           Module *M = I->getParent()->getParent()->getParent();
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+          FunctionCallee samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#endif
- #else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType(), nullptr);
- #endif
-@@ -124,7 +128,11 @@ namespace gbe {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-           Module *M = I->getParent()->getParent()->getParent();
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+          FunctionCallee samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#endif
- #else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType(), nullptr);
- #endif
---- a/backend/src/llvm/llvm_profiling.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_profiling.cpp
-@@ -163,10 +163,18 @@ namespace gbe
-       // __gen_ocl_store_timestamp(int nth, int type);
-       Value *Args[2] = {ConstantInt::get(intTy, pointNum++), ConstantInt::get(intTy, profilingType)};
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+      builder->CreateCall(module->getOrInsertFunction(
-+#else
-       builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-+#endif
-               "__gen_ocl_calc_timestamp", Type::getVoidTy(module->getContext()),
-               IntegerType::getInt32Ty(module->getContext()),
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+              IntegerType::getInt32Ty(module->getContext())),
-+#else
-               IntegerType::getInt32Ty(module->getContext()))),
-+#endif
-               ArrayRef<Value*>(Args));
- #else
-       builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-@@ -185,10 +193,18 @@ namespace gbe
-     Value *Args2[2] = {profilingBuf, ConstantInt::get(intTy, profilingType)};
- 
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+    builder->CreateCall(module->getOrInsertFunction(
-+#else
-     builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-+#endif
-             "__gen_ocl_store_profiling", Type::getVoidTy(module->getContext()),
-             ptrTy,
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+            IntegerType::getInt32Ty(module->getContext())),
-+#else
-             IntegerType::getInt32Ty(module->getContext()))),
-+#endif
-             ArrayRef<Value*>(Args2));
- #else
-     builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
---- a/backend/src/llvm/llvm_device_enqueue.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_device_enqueue.cpp
-@@ -398,8 +398,13 @@ namespace gbe {
-               std::vector<Type *> ParamTys;
-               for (Value** iter = args.begin(); iter != args.end(); ++iter)
-                 ParamTys.push_back((*iter)->getType());
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+              CallInst* newCI = builder.CreateCall(mod->getOrInsertFunction(
-+                              "__gen_enqueue_kernel_slm", FunctionType::get(intTy, ParamTys, false)), args);
-+#else
-               CallInst* newCI = builder.CreateCall(cast<llvm::Function>(mod->getOrInsertFunction(
-                               "__gen_enqueue_kernel_slm", FunctionType::get(intTy, ParamTys, false))), args);
-+#endif
-               CI->replaceAllUsesWith(newCI);
-               deadInsnSet.insert(CI);
-             }
diff --git a/srcpkgs/beignet/patches/llvm10.patch b/srcpkgs/beignet/patches/llvm10.patch
deleted file mode 100644
index 8aafe48a240d..000000000000
--- a/srcpkgs/beignet/patches/llvm10.patch
+++ /dev/null
@@ -1,347 +0,0 @@
-diff --git CMake/FindLLVM.cmake CMake/FindLLVM.cmake
-index 0a59e47..6e90923 100644
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -104,28 +104,16 @@ string(REGEX REPLACE " *\n" "" LLVM_SYSTEM_LIBS ${LLVM_SYSTEM_LIBS_ORIG})
- endif (LLVM_SYSTEM_LIBS_ORIG)
- endif (LLVM_VERSION_NODOT VERSION_GREATER 34)
- 
-+#something harmless because whitespace at start is an error
-+set(CLANG_LIBRARIES "-ldl")
- macro(add_one_lib name)
-   FIND_LIBRARY(CLANG_LIB
-     NAMES ${name}
-     PATHS ${LLVM_LIBRARY_DIR} NO_DEFAULT_PATH)
--  set(CLANG_LIBRARIES ${CLANG_LIBRARIES} ${CLANG_LIB})
-+  set(CLANG_LIBRARIES "${CLANG_LIBRARIES} ${CLANG_LIB}")
-+  message(STATUS "clanglibs name ${name} this ${CLANG_LIB} all ${CLANG_LIBRARIES} ")
- 	unset(CLANG_LIB CACHE)
- endmacro()
- 
- #Assume clang lib path same as llvm lib path
--add_one_lib("clangCodeGen")
--add_one_lib("clangFrontend")
--add_one_lib("clangSerialization")
--add_one_lib("clangDriver")
--add_one_lib("clangSema")
--add_one_lib("clangStaticAnalyzerFrontend")
--add_one_lib("clangStaticAnalyzerCheckers")
--add_one_lib("clangStaticAnalyzerCore")
--add_one_lib("clangAnalysis")
--add_one_lib("clangEdit")
--add_one_lib("clangAST")
--add_one_lib("clangASTMatchers")
--add_one_lib("clangParse")
--add_one_lib("clangSema")
--add_one_lib("clangLex")
--add_one_lib("clangBasic")
-+add_one_lib("clang-cpp")
-diff --git CMakeLists.txt CMakeLists.txt
-index c11acbb..08f427d 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -79,7 +79,7 @@ elseif (COMPILER STREQUAL "CLANG")
- elseif (COMPILER STREQUAL "ICC")
-   set (CMAKE_C_CXX_FLAGS "${CMAKE_C_CXX_FLAGS}  -wd2928 -Wall -fPIC -fstrict-aliasing -fp-model fast -msse4.1 -Wl,-E")
- endif ()
--set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
-+set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof")
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
- set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
- set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
-diff --git backend/src/backend/program.cpp backend/src/backend/program.cpp
-index b36f7b4..e666031 100644
---- a/backend/src/backend/program.cpp
-+++ b/backend/src/backend/program.cpp
-@@ -694,9 +694,9 @@ namespace gbe {
- #endif
-                 );
- 
-+    llvm::cl::ResetAllOptionOccurrences();
-     clang::CompilerInvocation::CreateFromArgs(*CI,
--                                              &args[0],
--                                              &args[0] + args.size(),
-+                                              clang::ArrayRef<const char*>(args),
-                                               Diags);
-     // Create the compiler instance
-     clang::CompilerInstance Clang;
-@@ -1242,8 +1242,7 @@ EXTEND_QUOTE:
-       // Create the compiler invocation
-       std::unique_ptr<clang::CompilerInvocation> CI(new clang::CompilerInvocation);
-       return clang::CompilerInvocation::CreateFromArgs(*CI,
--                                                       &args[0],
--                                                       &args[0] + args.size(),
-+                                                       clang::ArrayRef<const char*>(args),
-                                                        Diags);
-     }
- #endif
-diff --git backend/src/llvm/llvm_gen_backend.cpp backend/src/llvm/llvm_gen_backend.cpp
-index c6fc30d..82441d8 100644
---- a/backend/src/llvm/llvm_gen_backend.cpp
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -575,10 +575,12 @@ namespace gbe
-         has_errors(false),
-         legacyMode(true)
-     {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-       initializeLoopInfoWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeLoopInfoPass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-       pass = PASS_EMIT_REGISTERS;
-     }
-diff --git backend/src/llvm/llvm_gen_backend.hpp backend/src/llvm/llvm_gen_backend.hpp
-index b4715b1..8e74f7a 100644
---- a/backend/src/llvm/llvm_gen_backend.hpp
-+++ b/backend/src/llvm/llvm_gen_backend.hpp
-@@ -130,10 +130,10 @@ namespace gbe
-   llvm::FunctionPass *createGenPass(ir::Unit &unit);
- 
-   /*! Remove the GEP instructions */
--  llvm::BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit);
-+  llvm::FunctionPass *createRemoveGEPPass(const ir::Unit &unit);
- 
-   /*! Merge load/store if possible */
--  llvm::BasicBlockPass *createLoadStoreOptimizationPass();
-+  llvm::FunctionPass *createLoadStoreOptimizationPass();
- 
-   /*! Scalarize all vector op instructions */
-   llvm::FunctionPass* createScalarizePass();
-@@ -141,7 +141,7 @@ namespace gbe
-   llvm::ModulePass* createBarrierNodupPass(bool);
- 
-   /*! Convert the Intrinsic call to gen function */
--  llvm::BasicBlockPass *createIntrinsicLoweringPass();
-+  llvm::FunctionPass *createIntrinsicLoweringPass();
- 
-   /*! Passer the printf function call. */
-   llvm::FunctionPass* createPrintfParserPass(ir::Unit &unit);
-diff --git backend/src/llvm/llvm_intrinsic_lowering.cpp backend/src/llvm/llvm_intrinsic_lowering.cpp
-index 94f0ce6..b5539e9 100644
---- a/backend/src/llvm/llvm_intrinsic_lowering.cpp
-+++ b/backend/src/llvm/llvm_intrinsic_lowering.cpp
-@@ -29,12 +29,12 @@
- using namespace llvm;
- 
- namespace gbe {
--    class InstrinsicLowering : public BasicBlockPass
-+    class InstrinsicLowering : public FunctionPass
-     {
-     public:
-       static char ID;
-       InstrinsicLowering() :
--        BasicBlockPass(ID) {}
-+        FunctionPass(ID) {}
- 
-       void getAnalysisUsage(AnalysisUsage &AU) const {
- 
-@@ -93,9 +93,9 @@ namespace gbe {
-         CI->eraseFromParent();
-         return NewCI;
-       }
--      virtual bool runOnBasicBlock(BasicBlock &BB)
-+      virtual bool runOnFunction(Function &F)
-       {
--        bool changedBlock = false;
-+        for (BasicBlock &BB : F) {
-         Module *M = BB.getParent()->getParent();
- 
-         DataLayout TD(M);
-@@ -159,13 +159,14 @@ namespace gbe {
-             }
-           }
-         }
--        return changedBlock;
-+        }
-+        return true;
-       }
-     };
- 
-     char InstrinsicLowering::ID = 0;
- 
--    BasicBlockPass *createIntrinsicLoweringPass() {
-+    FunctionPass *createIntrinsicLoweringPass() {
-       return new InstrinsicLowering();
-     }
- } // end namespace
-diff --git backend/src/llvm/llvm_loadstore_optimization.cpp backend/src/llvm/llvm_loadstore_optimization.cpp
-index 5aa38be..e314302 100644
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
-@@ -26,13 +26,13 @@
- 
- using namespace llvm;
- namespace gbe {
--  class GenLoadStoreOptimization : public BasicBlockPass {
-+  class GenLoadStoreOptimization : public FunctionPass {
- 
-   public:
-     static char ID;
-     ScalarEvolution *SE;
-     const DataLayout *TD;
--    GenLoadStoreOptimization() : BasicBlockPass(ID) {}
-+    GenLoadStoreOptimization() : FunctionPass(ID) {}
- 
-     void getAnalysisUsage(AnalysisUsage &AU) const {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-@@ -45,7 +45,9 @@ namespace gbe {
-       AU.setPreservesCFG();
-     }
- 
--    virtual bool runOnBasicBlock(BasicBlock &BB) {
-+    virtual bool runOnFunction(Function &F) {
-+        bool changedAnyBlock = false;
-+        for (BasicBlock &BB : F) {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-       SE = &getAnalysis<ScalarEvolutionWrapperPass>().getSE();
- #else
-@@ -59,7 +61,9 @@ namespace gbe {
-       #else
-         TD = getAnalysisIfAvailable<DataLayout>();
-       #endif
--      return optimizeLoadStore(BB);
-+           changedAnyBlock = optimizeLoadStore(BB) | changedAnyBlock;
-+        }
-+        return changedAnyBlock;
-     }
-     Type    *getValueType(Value *insn);
-     Value   *getPointerOperand(Value *I);
-@@ -148,7 +152,7 @@ namespace gbe {
-       values.push_back(merged[i]);
-     }
-     LoadInst *ld = cast<LoadInst>(merged[0]);
--    unsigned align = ld->getAlignment();
-+    MaybeAlign align = ld->getAlign();
-     unsigned addrSpace = ld->getPointerAddressSpace();
-     // insert before first load
-     Builder.SetInsertPoint(ld);
-@@ -231,7 +235,7 @@ namespace gbe {
- 
-     unsigned addrSpace = st->getPointerAddressSpace();
- 
--    unsigned align = st->getAlignment();
-+    MaybeAlign align = st->getAlign();
-     // insert before the last store
-     Builder.SetInsertPoint(merged[size-1]);
- 
-@@ -325,7 +329,7 @@ namespace gbe {
-     return changed;
-   }
- 
--  BasicBlockPass *createLoadStoreOptimizationPass() {
-+  FunctionPass *createLoadStoreOptimizationPass() {
-     return new GenLoadStoreOptimization();
-   }
- };
-diff --git backend/src/llvm/llvm_passes.cpp backend/src/llvm/llvm_passes.cpp
-index 10752a3..b8f2282 100644
---- a/backend/src/llvm/llvm_passes.cpp
-+++ b/backend/src/llvm/llvm_passes.cpp
-@@ -37,7 +37,7 @@
- #include "sys/map.hpp"
- 
- using namespace llvm;
--
-+template class cfg::Update<BasicBlock *>;
- namespace gbe
- {
-   bool isKernelFunction(const llvm::Function &F) {
-@@ -219,13 +219,13 @@ namespace gbe
-     return offset;
-   }
- 
--  class GenRemoveGEPPasss : public BasicBlockPass
-+  class GenRemoveGEPPasss : public FunctionPass
-   {
- 
-    public:
-     static char ID;
-     GenRemoveGEPPasss(const ir::Unit &unit) :
--      BasicBlockPass(ID),
-+      FunctionPass(ID),
-       unit(unit) {}
-     const ir::Unit &unit;
-     void getAnalysisUsage(AnalysisUsage &AU) const {
-@@ -242,16 +242,18 @@ namespace gbe
- 
-     bool simplifyGEPInstructions(GetElementPtrInst* GEPInst);
- 
--    virtual bool runOnBasicBlock(BasicBlock &BB)
-+    virtual bool runOnFunction(Function &F)
-     {
--      bool changedBlock = false;
-+      bool changedAnyBlock = false;
-+        for (BasicBlock &BB : F) {
-       iplist<Instruction>::iterator I = BB.getInstList().begin();
-       for (auto nextI = I, E = --BB.getInstList().end(); I != E; I = nextI) {
-         iplist<Instruction>::iterator I = nextI++;
-         if(GetElementPtrInst* gep = dyn_cast<GetElementPtrInst>(&*I))
--          changedBlock = (simplifyGEPInstructions(gep) || changedBlock);
-+          changedAnyBlock = (simplifyGEPInstructions(gep) | changedAnyBlock);
-       }
--      return changedBlock;
-+        }
-+      return changedAnyBlock;
-     }
-   };
- 
-@@ -367,7 +369,7 @@ namespace gbe
-     return true;
-   }
- 
--  BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit) {
-+  FunctionPass *createRemoveGEPPass(const ir::Unit &unit) {
-     return new GenRemoveGEPPasss(unit);
-   }
- } /* namespace gbe */
-diff --git backend/src/llvm/llvm_sampler_fix.cpp backend/src/llvm/llvm_sampler_fix.cpp
-index 2a097c8..863be6d 100644
---- a/backend/src/llvm/llvm_sampler_fix.cpp
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp
-@@ -33,10 +33,12 @@ namespace gbe {
-   class SamplerFix : public FunctionPass {
-   public:
-     SamplerFix() : FunctionPass(ID) {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
-       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-     }
- 
-diff --git backend/src/llvm/llvm_scalarize.cpp backend/src/llvm/llvm_scalarize.cpp
-index e9a2a66..e9d2ee4 100644
---- a/backend/src/llvm/llvm_scalarize.cpp
-+++ b/backend/src/llvm/llvm_scalarize.cpp
-@@ -96,10 +96,12 @@ namespace gbe {
- 
-     Scalarize() : FunctionPass(ID)
-     {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
-       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-     }
- 
-diff --git utests/CMakeLists.txt utests/CMakeLists.txt
-index 300d87a..64179c7 100644
---- a/utests/CMakeLists.txt
-+++ b/utests/CMakeLists.txt
-@@ -26,8 +26,8 @@ if (NOT NOT_BUILD_STAND_ALONE_UTEST)
-   # Threads
-   Find_Package(Threads)
- 
--  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
--  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
-+  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof -ffloat-store -fno-strict-aliasing")
-+  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS} -ffloat-store -fno-strict-aliasing") #compiler_{degrees,radians,function_argument2} use equality comparison of floats, compiler_long_bitcast uses aliasing
-   set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
-   set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
-   set (CMAKE_CXX_FLAGS_MINSIZEREL     "-Os -DNDEBUG -DGBE_DEBUG=0")
diff --git a/srcpkgs/beignet/patches/llvm11.patch b/srcpkgs/beignet/patches/llvm11.patch
deleted file mode 100644
index 2c3a4278943c..000000000000
--- a/srcpkgs/beignet/patches/llvm11.patch
+++ /dev/null
@@ -1,937 +0,0 @@
-Source: Snektron
-
-There were a few changes required for LLVM 11:
-* llvm::StringRef requires .str(), implicit conversion was removed
-* llvm::CallSite was removed, but the required methods are available on llvm::CallInst
-* VectorTyID was split into FixedVectorTyID and ScalableVectorTyID, FixedVectorTyID was used
-* CallInst::getCalledValue() was renamed to CallInst::getCalledOperand()
-* Implicit conversion from MaybeAlign to Align was removed, so MaybeAlign::valueOrOne was used instead.
-
---- a/backend/src/llvm/StripAttributes.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/StripAttributes.cpp	2020-11-09 19:04:19.641897141 +0100
-@@ -107,9 +107,8 @@
-        BB != E; ++BB) {
-     for (BasicBlock::iterator Inst = BB->begin(), E = BB->end();
-          Inst != E; ++Inst) {
--      CallSite Call(&*Inst);
--      if (Call)
--        Call.setCallingConv(CallingConv::C);
-+      if (CallInst* callInst = dyn_cast<CallInst>(&*Inst))
-+        callInst->setCallingConv(CallingConv::C);
-     }
-   }
-
---- a/backend/src/llvm/llvm_bitcode_link.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_bitcode_link.cpp	2020-11-09 17:04:09.633753428 +0100
-@@ -98,7 +98,7 @@
-         if (callFunc && callFunc->getIntrinsicID() != 0)
-           continue;
-
--        std::string fnName = call->getCalledValue()->stripPointerCasts()->getName();
-+        std::string fnName = call->getCalledOperand()->stripPointerCasts()->getName().str();
-
-         if (!MFS.insert(fnName).second) {
-           continue;
---- a/backend/src/llvm/llvm_device_enqueue.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_device_enqueue.cpp	2020-11-09 19:01:49.201915008 +0100
-@@ -45,7 +45,7 @@
-       return NULL;
-
-     /* This is a fake, to check the function bitcast is for block or not */
--    std::string fnName = Fn->getName();
-+    std::string fnName = Fn->getName().str();
-     if(fnName.find("_invoke") == std::string::npos)
-       return NULL;
-
-@@ -119,18 +119,18 @@
-       ParamTys.push_back(ty);
-     }
-     FunctionType* NewFT = FunctionType::get(Fn->getReturnType(), ParamTys, false);
--    Function* NewFn = Function::Create(NewFT, Function::ExternalLinkage, Fn->getName());
-+    Function* NewFn = Function::Create(NewFT, Function::ExternalLinkage, Fn->getName().str());
-     SmallVector<ReturnInst*, 8> Returns;
-
-     Function::arg_iterator NewFnArgIt = NewFn->arg_begin();
-     for (Function::arg_iterator I = Fn->arg_begin(), E = Fn->arg_end(); I != E; ++I) {
--      std::string ArgName = I->getName();
-+      std::string ArgName = I->getName().str();
-       NewFnArgIt->setName(ArgName);
-       VMap[&*I] = &(*NewFnArgIt++);
-     }
-     CloneFunctionInto(NewFn, Fn, VMap, /*ModuleLevelChanges=*/true, Returns);
-
--    Fn->setName("__d" + Fn->getName());
-+    Fn->setName("__d" + Fn->getName().str());
-     mod->getFunctionList().push_back(NewFn);
-     //mod->getOrInsertFunction(NewFn->getName(), NewFn->getFunctionType(),
-     //                         NewFn->getAttributes());
-@@ -147,7 +147,7 @@
-       argTypeNames.push_back(llvm::MDString::get(Context, "char*"));
-       argBaseTypeNames.push_back(llvm::MDString::get(Context, "char*"));
-       argTypeQuals.push_back(llvm::MDString::get(Context, ""));
--      argNames.push_back(llvm::MDString::get(Context, I->getName()));
-+      argNames.push_back(llvm::MDString::get(Context, I->getName().str()));
-     }
-
-     //If run to here, llvm version always > 3.9, add the version check just for build.
-@@ -198,7 +198,7 @@
-            * invoke pointer to store the index in the unit's block functions index.*/
-           Function *Fn = dyn_cast<Function>(bt->getOperand(0));
-
--          std::string fnName = Fn->getName();
-+          std::string fnName = Fn->getName().str();
-           int index = -1;
-           for(size_t i=0; i<unit.blockFuncs.size(); i++) {
-             if(unit.blockFuncs[i] == fnName) {
-@@ -241,7 +241,7 @@
-             //unnamed call function, parse the use to find the define of called function
-             SmallVector<Value*, 16> args(CI->op_begin(), CI->op_end()-1);
-
--            Value *v = CI->getCalledValue();
-+            Value *v = CI->getCalledOperand();
-             BitCastInst* bt = dyn_cast<BitCastInst>(v);
-             if(bt == NULL)
-               continue;
-@@ -316,7 +316,7 @@
-                   ConstantExpr *expr = dyn_cast<ConstantExpr>(c->getOperand(3));
-                   BitCastInst *bt = dyn_cast<BitCastInst>(expr->getAsInstruction());
-                   Function* f = dyn_cast<Function>(bt->getOperand(0));
--                  blocks[v] = f->getName();
-+                  blocks[v] = f->getName().str();
-                 }
-               }
-
-@@ -332,7 +332,7 @@
-           } else {
-             //handle enqueue_kernel function call
-             Function *fn = CI->getCalledFunction();
--            if (fn->getName().find("enqueue_kernel") == std::string::npos)
-+            if (fn->getName().str().find("enqueue_kernel") == std::string::npos)
-               continue;
-
-             //block parameter's index, 3 or 6
-@@ -361,7 +361,7 @@
-                   ConstantExpr *expr = dyn_cast<ConstantExpr>(c->getOperand(3));
-                   BitCastInst *bt = dyn_cast<BitCastInst>(expr->getAsInstruction());
-                   Function* f = dyn_cast<Function>(bt->getOperand(0));
--                  blocks[v] = f->getName();
-+                  blocks[v] = f->getName().str();
-                 }
-               }
-             } else if(isa<AllocaInst>(block)) {
---- a/backend/src/llvm/llvm_gen_backend.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_gen_backend.cpp	2020-11-09 18:33:50.919114327 +0100
-@@ -376,7 +376,7 @@
-           GBE_ASSERT(index == 0);
-           return this->_newScalar(value, key, type, index, uniform);
-           break;
--        case Type::VectorTyID:
-+        case Type::FixedVectorTyID:
-         {
-           auto vectorType = cast<VectorType>(type);
-           auto elementType = vectorType->getElementType();
-@@ -743,20 +743,20 @@
- #undef DECL_VISIT_FN
-
-     // Emit rounding instructions from gen native function
--    void emitRoundingCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode);
-+    void emitRoundingCallInst(CallInst &I, ir::Opcode opcode);
-     // Emit unary instructions from gen native function
--    void emitUnaryCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode, ir::Type = ir::TYPE_FLOAT);
-+    void emitUnaryCallInst(CallInst &I, ir::Opcode opcode, ir::Type = ir::TYPE_FLOAT);
-     // Emit unary instructions from gen native function
--    void emitAtomicInst(CallInst &I, CallSite &CS, ir::AtomicOps opcode);
-+    void emitAtomicInst(CallInst &I, ir::AtomicOps opcode);
-     // Emit workgroup instructions
--    void emitWorkGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode);
-+    void emitWorkGroupInst(CallInst &I, ir::WorkGroupOps opcode);
-     // Emit subgroup instructions
--    void emitSubGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode);
-+    void emitSubGroupInst(CallInst &I, ir::WorkGroupOps opcode);
-     // Emit subgroup instructions
--    void emitBlockReadWriteMemInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
--    void emitBlockReadWriteImageInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-+    void emitBlockReadWriteMemInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-+    void emitBlockReadWriteImageInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-
--    uint8_t appendSampler(CallSite::arg_iterator AI);
-+    uint8_t appendSampler(User::op_iterator AI);
-     uint8_t getImageID(CallInst &I);
-
-     // These instructions are not supported at all
-@@ -1320,13 +1320,13 @@
- #endif
-
-       if(typeNameNode) {
--        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
-+        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-       }
-       if(typeBaseNameNode) {
--        llvmInfo.typeBaseName= (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString();
-+        llvmInfo.typeBaseName= (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString().str();
-       }
--      llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
--      llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString();
-+      llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-+      llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString().str();
-       bool isImage = llvmInfo.isImageType();
-       bool isPipe = llvmInfo.isPipeType();
-       if (I->getType()->isPointerTy() || isImage || isPipe) {
-@@ -1531,7 +1531,7 @@
-             EltTy = getEltType(EltTy, TypeIndex);
-         }
-
--        ir::Constant cc = unit.getConstantSet().getConstant(pointer->getName());
-+        ir::Constant cc = unit.getConstantSet().getConstant(pointer->getName().str());
-         unsigned int defOffset = cc.getOffset();
-         relocs.push_back(ir::RelocEntry(offset, defOffset + constantOffset));
-
-@@ -1546,7 +1546,7 @@
-       return;
-     }
-     if (isa<GlobalVariable>(c)) {
--      ir::Constant cc = unit.getConstantSet().getConstant(c->getName());
-+      ir::Constant cc = unit.getConstantSet().getConstant(c->getName().str());
-       unsigned int defOffset = cc.getOffset();
-
-       relocs.push_back(ir::RelocEntry(offset, defOffset));
-@@ -1609,7 +1609,7 @@
-           }
-           break;
-         }
--      case Type::TypeID::VectorTyID:
-+      case Type::TypeID::FixedVectorTyID:
-         {
-           const ConstantDataSequential *cds = dyn_cast<ConstantDataSequential>(c);
-           const VectorType *vecTy = cast<VectorType>(type);
-@@ -1936,7 +1936,7 @@
-       case Type::PointerTyID:
-         regTranslator.newScalar(value, key, 0, uniform);
-         break;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         auto vectorType = cast<VectorType>(type);
-         const uint32_t elemNum = vectorType->getNumElements();
-@@ -2395,7 +2395,7 @@
- #endif
-         }
-         if(typeNameNode) {
--          llvmInfo.typeName = (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
-+          llvmInfo.typeName = (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-           //LLVM 3.9 image's type name include access qual, don't match OpenCL spec, erase them.
-           std::vector<std::string> filters = {"__read_only ", "__write_only "};
-           for (uint32_t i = 0; i < filters.size(); i++) {
-@@ -2406,16 +2406,16 @@
-           }
-         }
-         if(typeBaseNameNode){
--          llvmInfo.typeBaseName = (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString();
-+          llvmInfo.typeBaseName = (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString().str();
-         }
-         if(accessQualNode) {
--          llvmInfo.accessQual = (cast<MDString>(accessQualNode->getOperand(opID)))->getString();
-+          llvmInfo.accessQual = (cast<MDString>(accessQualNode->getOperand(opID)))->getString().str();
-         }
-         if(typeQualNode) {
--          llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString();
-+          llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString().str();
-         }
-         if(argNameNode){
--          llvmInfo.argName = (cast<MDString>(argNameNode->getOperand(opID)))->getString();
-+          llvmInfo.argName = (cast<MDString>(argNameNode->getOperand(opID)))->getString().str();
-         }
-
-         // function arguments are uniform values.
-@@ -3010,7 +3010,7 @@
-         } else {
-           this->newRegister(const_cast<GlobalVariable*>(&v));
-           ir::Register reg = regTranslator.getScalar(const_cast<GlobalVariable*>(&v), 0);
--          ir::Constant &con = unit.getConstantSet().getConstant(v.getName());
-+          ir::Constant &con = unit.getConstantSet().getConstant(v.getName().str());
-           if (!legacyMode) {
-             ir::Register regload = ctx.reg(getFamily(getType(ctx, v.getType())));
-             ctx.LOADI(getType(ctx, v.getType()), regload, ctx.newIntegerImmediate(con.getOffset(), getType(ctx, v.getType())));
-@@ -3212,7 +3212,7 @@
-         GBE_ASSERTM(false, "Unsupported calling convention");
-     }
-
--    ctx.startFunction(F.getName());
-+    ctx.startFunction(F.getName().str());
-
-     ir::Function &fn = ctx.getFunction();
-     this->regTranslator.clear();
-@@ -3810,9 +3810,9 @@
-
-   void GenWriter::regAllocateCallInst(CallInst &I) {
-     Value *dst = &I;
--    Value *Callee = I.getCalledValue();
-+    Value *Callee = I.getCalledOperand();
-     GBE_ASSERT(ctx.getFunction().getProfile() == ir::PROFILE_OCL);
--    GBE_ASSERT(isa<InlineAsm>(I.getCalledValue()) == false);
-+    GBE_ASSERT(isa<InlineAsm>(I.getCalledOperand()) == false);
-     if(I.getNumArgOperands()) GBE_ASSERT(I.hasStructRetAttr() == false);
-
-     // We only support a small number of intrinsics right now
-@@ -3870,7 +3870,7 @@
-       }
-     }
-     // Get the name of the called function and handle it
--    const std::string fnName = Callee->stripPointerCasts()->getName();
-+    const std::string fnName = Callee->stripPointerCasts()->getName().str();
-     auto genIntrinsicID = intrinsicMap.find(fnName);
-     switch (genIntrinsicID) {
-       case GEN_OCL_GET_GROUP_ID0:
-@@ -4166,7 +4166,7 @@
-     };
-   }
-
--  void GenWriter::emitRoundingCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode) {
-+  void GenWriter::emitRoundingCallInst(CallInst &I, ir::Opcode opcode) {
-     if (I.getType()->isHalfTy()) {
-       const ir::Register src = this->getRegister(I.getOperand(0));
-       const ir::Register srcFloat = ctx.reg(ir::FAMILY_DWORD);
-@@ -4177,14 +4177,14 @@
-       ctx.F32TO16(ir::TYPE_U16, ir::TYPE_FLOAT, dst, dstFloat);
-     } else {
-       GBE_ASSERT(I.getType()->isFloatTy());
--      this->emitUnaryCallInst(I,CS,opcode);
-+      this->emitUnaryCallInst(I,opcode);
-     }
-   }
-
--  void GenWriter::emitUnaryCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
-+  void GenWriter::emitUnaryCallInst(CallInst &I, ir::Opcode opcode, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--    CallSite::arg_iterator AE = CS.arg_end();
-+    User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-     GBE_ASSERT(AI != AE);
-     const ir::Register src = this->getRegister(*AI);
-@@ -4293,9 +4293,9 @@
-     this->emitAtomicInstHelper(opcode, type, dst, llvmPtr, payloadTuple);
-   }
-
--  void GenWriter::emitAtomicInst(CallInst &I, CallSite &CS, ir::AtomicOps opcode) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitAtomicInst(CallInst &I, ir::AtomicOps opcode) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-     Value *llvmPtr = *AI;
-     ir::AddressSpace addrSpace = addressSpaceLLVMToGen(llvmPtr->getType()->getPointerAddressSpace());
-@@ -4348,7 +4348,7 @@
-     }
-   }
-
--  void GenWriter::emitWorkGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode) {
-+  void GenWriter::emitWorkGroupInst(CallInst &I, ir::WorkGroupOps opcode) {
-     ir::Function &f = ctx.getFunction();
-
-     if (f.getwgBroadcastSLM() < 0 && opcode == ir::WORKGROUP_OP_BROADCAST) {
-@@ -4378,8 +4378,8 @@
-       GBE_ASSERT(f.gettidMapSLM() >= 0);
-     }
-
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     if (opcode == ir::WORKGROUP_OP_ALL || opcode == ir::WORKGROUP_OP_ANY) {
-@@ -4391,14 +4391,14 @@
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], 3);
-       ctx.WORKGROUP(opcode, (uint32_t)f.gettidMapSLM(), getRegister(&I), srcTuple, 3, ir::TYPE_S32);
-     } else if (opcode == ir::WORKGROUP_OP_BROADCAST) {
--      int argNum = CS.arg_size();
-+      int argNum = I.arg_size();
-       std::vector<ir::Register> src(argNum);
-       for (int i = 0; i < argNum; i++) {
-         src[i] = this->getRegister(*(AI++));
-       }
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], argNum);
-       ctx.WORKGROUP(ir::WORKGROUP_OP_BROADCAST, (uint32_t)f.getwgBroadcastSLM(), getRegister(&I), srcTuple, argNum,
--          getType(ctx, (*CS.arg_begin())->getType()));
-+          getType(ctx, (*I.arg_begin())->getType()));
-     } else {
-       ConstantInt *sign = dyn_cast<ConstantInt>(AI);
-       GBE_ASSERT(sign);
-@@ -4423,9 +4423,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitSubGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitSubGroupInst(CallInst &I, ir::WorkGroupOps opcode) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     if (opcode == ir::WORKGROUP_OP_ALL || opcode == ir::WORKGROUP_OP_ANY) {
-@@ -4435,7 +4435,7 @@
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], 1);
-       ctx.SUBGROUP(opcode, getRegister(&I), srcTuple, 1, ir::TYPE_S32);
-     } else if (opcode == ir::WORKGROUP_OP_BROADCAST) {
--      int argNum = CS.arg_size();
-+      int argNum = I.arg_size();
-       GBE_ASSERT(argNum == 2);
-       std::vector<ir::Register> src(argNum);
-       for (int i = 0; i < argNum; i++) {
-@@ -4443,7 +4443,7 @@
-       }
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], argNum);
-       ctx.SUBGROUP(ir::WORKGROUP_OP_BROADCAST, getRegister(&I), srcTuple, argNum,
--          getType(ctx, (*CS.arg_begin())->getType()));
-+          getType(ctx, (*I.arg_begin())->getType()));
-     } else {
-       ConstantInt *sign = dyn_cast<ConstantInt>(AI);
-       GBE_ASSERT(sign);
-@@ -4466,9 +4466,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitBlockReadWriteMemInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitBlockReadWriteMemInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     Value *llvmPtr = *(AI++);
-@@ -4522,9 +4522,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitBlockReadWriteImageInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitBlockReadWriteImageInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     const uint8_t imageID = getImageID(I);
-@@ -4557,7 +4557,7 @@
-
-   /* append a new sampler. should be called before any reference to
-    * a sampler_t value. */
--  uint8_t GenWriter::appendSampler(CallSite::arg_iterator AI) {
-+  uint8_t GenWriter::appendSampler(User::op_iterator AI) {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-     CallInst *TC = dyn_cast<CallInst>(*AI);
-     Constant *CPV = TC ? dyn_cast<Constant>(TC->getOperand(0)) : NULL;
-@@ -4595,10 +4595,9 @@
-         const ir::Function &fn = ctx.getFunction();
-
-         // Get the function arguments
--        CallSite CS(&I);
--        CallSite::arg_iterator AI = CS.arg_begin();
-+        User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--        CallSite::arg_iterator AE = CS.arg_end();
-+        User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-         switch (F->getIntrinsicID()) {
-           case Intrinsic::stacksave:
-@@ -4764,17 +4763,17 @@
-             ctx.MAD(srcType, dst, src0, src1, src2);
-           }
-           break;
--          case Intrinsic::sqrt: this->emitUnaryCallInst(I,CS,ir::OP_SQR); break;
--          case Intrinsic::ceil: this->emitRoundingCallInst(I,CS,ir::OP_RNDU); break;
--          case Intrinsic::trunc: this->emitRoundingCallInst(I,CS,ir::OP_RNDZ); break;
--          case Intrinsic::rint: this->emitRoundingCallInst(I,CS,ir::OP_RNDE); break;
--          case Intrinsic::floor: this->emitRoundingCallInst(I,CS,ir::OP_RNDD); break;
--          case Intrinsic::sin: this->emitUnaryCallInst(I,CS,ir::OP_SIN); break;
--          case Intrinsic::cos: this->emitUnaryCallInst(I,CS,ir::OP_COS); break;
--          case Intrinsic::log2: this->emitUnaryCallInst(I,CS,ir::OP_LOG); break;
--          case Intrinsic::exp2: this->emitUnaryCallInst(I,CS,ir::OP_EXP); break;
-+          case Intrinsic::sqrt: this->emitUnaryCallInst(I,ir::OP_SQR); break;
-+          case Intrinsic::ceil: this->emitRoundingCallInst(I,ir::OP_RNDU); break;
-+          case Intrinsic::trunc: this->emitRoundingCallInst(I,ir::OP_RNDZ); break;
-+          case Intrinsic::rint: this->emitRoundingCallInst(I,ir::OP_RNDE); break;
-+          case Intrinsic::floor: this->emitRoundingCallInst(I,ir::OP_RNDD); break;
-+          case Intrinsic::sin: this->emitUnaryCallInst(I,ir::OP_SIN); break;
-+          case Intrinsic::cos: this->emitUnaryCallInst(I,ir::OP_COS); break;
-+          case Intrinsic::log2: this->emitUnaryCallInst(I,ir::OP_LOG); break;
-+          case Intrinsic::exp2: this->emitUnaryCallInst(I,ir::OP_EXP); break;
-           case Intrinsic::bswap:
--            this->emitUnaryCallInst(I,CS,ir::OP_BSWAP, getUnsignedType(ctx, I.getType())); break;
-+            this->emitUnaryCallInst(I,ir::OP_BSWAP, getUnsignedType(ctx, I.getType())); break;
-           case Intrinsic::pow:
-           {
-             const ir::Register src0 = this->getRegister(*AI); ++AI;
-@@ -4794,21 +4793,20 @@
-         }
-       } else {
-         // Get the name of the called function and handle it
--        Value *Callee = I.getCalledValue();
--        const std::string fnName = Callee->stripPointerCasts()->getName();
-+        Value *Callee = I.getCalledOperand();
-+        const std::string fnName = Callee->stripPointerCasts()->getName().str();
-         auto genIntrinsicID = intrinsicMap.find(fnName);
-
-         // Get the function arguments
--        CallSite CS(&I);
--        CallSite::arg_iterator AI = CS.arg_begin();
-+        User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--        CallSite::arg_iterator AE = CS.arg_end();
-+        User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-
-         switch (genIntrinsicID) {
--          case GEN_OCL_FBH: this->emitUnaryCallInst(I,CS,ir::OP_FBH, ir::TYPE_U32); break;
--          case GEN_OCL_FBL: this->emitUnaryCallInst(I,CS,ir::OP_FBL, ir::TYPE_U32); break;
--          case GEN_OCL_CBIT: this->emitUnaryCallInst(I,CS,ir::OP_CBIT, getUnsignedType(ctx, (*AI)->getType())); break;
-+          case GEN_OCL_FBH: this->emitUnaryCallInst(I,ir::OP_FBH, ir::TYPE_U32); break;
-+          case GEN_OCL_FBL: this->emitUnaryCallInst(I,ir::OP_FBL, ir::TYPE_U32); break;
-+          case GEN_OCL_CBIT: this->emitUnaryCallInst(I,ir::OP_CBIT, getUnsignedType(ctx, (*AI)->getType())); break;
-           case GEN_OCL_ABS:
-           {
-             const ir::Register src = this->getRegister(*AI);
-@@ -4915,8 +4913,8 @@
-             ctx.REGION(dst, src, x.getIntegerValue());
-             break;
-           }
--          case GEN_OCL_RSQ: this->emitUnaryCallInst(I,CS,ir::OP_RSQ); break;
--          case GEN_OCL_RCP: this->emitUnaryCallInst(I,CS,ir::OP_RCP); break;
-+          case GEN_OCL_RSQ: this->emitUnaryCallInst(I,ir::OP_RSQ); break;
-+          case GEN_OCL_RCP: this->emitUnaryCallInst(I,ir::OP_RCP); break;
-           case GEN_OCL_FORCE_SIMD8: ctx.setSimdWidth(8); break;
-           case GEN_OCL_FORCE_SIMD16: ctx.setSimdWidth(16); break;
-           case GEN_OCL_LBARRIER: ctx.SYNC(ir::syncLocalBarrier); break;
-@@ -4947,31 +4945,31 @@
-             break;
-           }
-           case GEN_OCL_ATOMIC_ADD0:
--          case GEN_OCL_ATOMIC_ADD1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_ADD); break;
-+          case GEN_OCL_ATOMIC_ADD1: this->emitAtomicInst(I,ir::ATOMIC_OP_ADD); break;
-           case GEN_OCL_ATOMIC_SUB0:
--          case GEN_OCL_ATOMIC_SUB1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_SUB); break;
-+          case GEN_OCL_ATOMIC_SUB1: this->emitAtomicInst(I,ir::ATOMIC_OP_SUB); break;
-           case GEN_OCL_ATOMIC_AND0:
--          case GEN_OCL_ATOMIC_AND1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_AND); break;
-+          case GEN_OCL_ATOMIC_AND1: this->emitAtomicInst(I,ir::ATOMIC_OP_AND); break;
-           case GEN_OCL_ATOMIC_OR0:
--          case GEN_OCL_ATOMIC_OR1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_OR); break;
-+          case GEN_OCL_ATOMIC_OR1: this->emitAtomicInst(I,ir::ATOMIC_OP_OR); break;
-           case GEN_OCL_ATOMIC_XOR0:
--          case GEN_OCL_ATOMIC_XOR1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_XOR); break;
-+          case GEN_OCL_ATOMIC_XOR1: this->emitAtomicInst(I,ir::ATOMIC_OP_XOR); break;
-           case GEN_OCL_ATOMIC_XCHG0:
--          case GEN_OCL_ATOMIC_XCHG1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_XCHG); break;
-+          case GEN_OCL_ATOMIC_XCHG1: this->emitAtomicInst(I,ir::ATOMIC_OP_XCHG); break;
-           case GEN_OCL_ATOMIC_INC0:
--          case GEN_OCL_ATOMIC_INC1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_INC); break;
-+          case GEN_OCL_ATOMIC_INC1: this->emitAtomicInst(I,ir::ATOMIC_OP_INC); break;
-           case GEN_OCL_ATOMIC_DEC0:
--          case GEN_OCL_ATOMIC_DEC1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_DEC); break;
-+          case GEN_OCL_ATOMIC_DEC1: this->emitAtomicInst(I,ir::ATOMIC_OP_DEC); break;
-           case GEN_OCL_ATOMIC_UMIN0:
--          case GEN_OCL_ATOMIC_UMIN1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_UMIN); break;
-+          case GEN_OCL_ATOMIC_UMIN1: this->emitAtomicInst(I,ir::ATOMIC_OP_UMIN); break;
-           case GEN_OCL_ATOMIC_UMAX0:
--          case GEN_OCL_ATOMIC_UMAX1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_UMAX); break;
-+          case GEN_OCL_ATOMIC_UMAX1: this->emitAtomicInst(I,ir::ATOMIC_OP_UMAX); break;
-           case GEN_OCL_ATOMIC_IMIN0:
--          case GEN_OCL_ATOMIC_IMIN1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_IMIN); break;
-+          case GEN_OCL_ATOMIC_IMIN1: this->emitAtomicInst(I,ir::ATOMIC_OP_IMIN); break;
-           case GEN_OCL_ATOMIC_IMAX0:
--          case GEN_OCL_ATOMIC_IMAX1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_IMAX); break;
-+          case GEN_OCL_ATOMIC_IMAX1: this->emitAtomicInst(I,ir::ATOMIC_OP_IMAX); break;
-           case GEN_OCL_ATOMIC_CMPXCHG0:
--          case GEN_OCL_ATOMIC_CMPXCHG1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_CMPXCHG); break;
-+          case GEN_OCL_ATOMIC_CMPXCHG1: this->emitAtomicInst(I,ir::ATOMIC_OP_CMPXCHG); break;
-           case GEN_OCL_GET_IMAGE_WIDTH:
-           case GEN_OCL_GET_IMAGE_HEIGHT:
-           case GEN_OCL_GET_IMAGE_DEPTH:
-@@ -5429,48 +5427,48 @@
-             ctx.WAIT();
-             break;
-           }
--          case GEN_OCL_WORK_GROUP_ALL: this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_ALL); break;
--          case GEN_OCL_WORK_GROUP_ANY: this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_ANY); break;
-+          case GEN_OCL_WORK_GROUP_ALL: this->emitWorkGroupInst(I, ir::WORKGROUP_OP_ALL); break;
-+          case GEN_OCL_WORK_GROUP_ANY: this->emitWorkGroupInst(I, ir::WORKGROUP_OP_ANY); break;
-           case GEN_OCL_WORK_GROUP_BROADCAST:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_BROADCAST); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_BROADCAST); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_ADD); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_MAX); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_MIN); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-           case GEN_OCL_SUB_GROUP_BROADCAST:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_BROADCAST); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_BROADCAST); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_ADD); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_MAX); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_MIN); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-           case GEN_OCL_LRP:
-           {
-             const ir::Register dst  = this->getRegister(&I);
-@@ -5484,69 +5482,69 @@
-             break;
-           }
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, false, 1); break;
-+            this->emitBlockReadWriteMemInst(I, false, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, false, 2); break;
-+            this->emitBlockReadWriteMemInst(I, false, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, false, 4); break;
-+            this->emitBlockReadWriteMemInst(I, false, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, false, 8); break;
-+            this->emitBlockReadWriteMemInst(I, false, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, true, 1); break;
-+            this->emitBlockReadWriteMemInst(I, true, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, true, 2); break;
-+            this->emitBlockReadWriteMemInst(I, true, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, true, 4); break;
-+            this->emitBlockReadWriteMemInst(I, true, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, true, 8); break;
-+            this->emitBlockReadWriteMemInst(I, true, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, false, 1); break;
-+            this->emitBlockReadWriteImageInst(I, false, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, false, 2); break;
-+            this->emitBlockReadWriteImageInst(I, false, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, false, 4); break;
-+            this->emitBlockReadWriteImageInst(I, false, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, false, 8); break;
-+            this->emitBlockReadWriteImageInst(I, false, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, true, 1); break;
-+            this->emitBlockReadWriteImageInst(I, true, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, true, 2); break;
-+            this->emitBlockReadWriteImageInst(I, true, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, true, 4); break;
-+            this->emitBlockReadWriteImageInst(I, true, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, true, 8); break;
-+            this->emitBlockReadWriteImageInst(I, true, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, false, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, false, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, false, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, false, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, true, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, true, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, true, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, true, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, false, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, false, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, false, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, false, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, true, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, true, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, true, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, true, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 8, ir::TYPE_U16); break;
-           case GEN_OCL_GET_PIPE:
-           case GEN_OCL_MAKE_RID:
-           case GEN_OCL_GET_RID:
---- a/backend/src/llvm/llvm_includes.hpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_includes.hpp	2020-11-09 19:00:09.955926795 +0100
-@@ -103,7 +103,6 @@
-
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
- #include "llvm/IR/Mangler.h"
--#include "llvm/IR/CallSite.h"
- #include "llvm/IR/CFG.h"
- #include "llvm/IR/InstVisitor.h"
- #include "llvm/IR/IRPrintingPasses.h"
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-11-09 19:10:37.141852308 +0100
-@@ -160,7 +160,7 @@
-     Value *vecPtr = Builder.CreateBitCast(ld->getPointerOperand(),
-                                         PointerType::get(vecTy, addrSpace));
-     LoadInst *vecValue = Builder.CreateLoad(vecPtr);
--    vecValue->setAlignment(align);
-+    vecValue->setAlignment(align.valueOrOne());
-
-     for (unsigned i = 0; i < size; ++i) {
-       Value *S = Builder.CreateExtractElement(vecValue, Builder.getInt32(i));
-@@ -251,7 +251,7 @@
-       return;
-     Value *newPtr = Builder.CreateBitCast(stPointer, PointerType::get(vecTy, addrSpace));
-     StoreInst *newST = Builder.CreateStore(parent, newPtr);
--    newST->setAlignment(align);
-+    newST->setAlignment(align.valueOrOne());
-   }
-
-   // Find the safe iterator we can point to. If reorder happens, we need to
---- a/backend/src/llvm/llvm_passes.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_passes.cpp	2020-11-09 18:48:55.997006837 +0100
-@@ -95,7 +95,7 @@
-   {
-     switch (Ty->getTypeID()) {
-       case Type::VoidTyID: NOT_SUPPORTED;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         const VectorType* VecTy = cast<VectorType>(Ty);
-         uint32_t elemNum = VecTy->getNumElements();
-@@ -138,7 +138,7 @@
-       case Type::HalfTyID:    return 16;
-       case Type::FloatTyID:   return 32;
-       case Type::DoubleTyID:  return 64;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         const VectorType* VecTy = cast<VectorType>(Ty);
-         uint32_t numElem = VecTy->getNumElements();
-@@ -184,10 +184,12 @@
-     Type *elementType = NULL;
-     if (PointerType* ptrType = dyn_cast<PointerType>(eltTy))
-       elementType = ptrType->getElementType();
--    else if(SequentialType * seqType = dyn_cast<SequentialType>(eltTy))
--      elementType = seqType->getElementType();
--    else if(CompositeType * compTy= dyn_cast<CompositeType>(eltTy))
--      elementType = compTy->getTypeAtIndex(index);
-+    else if (ArrayType * arrType = dyn_cast<ArrayType>(eltTy))
-+      elementType = arrType->getElementType();
-+    else if(VectorType * vecType = dyn_cast<VectorType>(eltTy))
-+      elementType = vecType->getElementType();
-+    else if(StructType * structType = dyn_cast<StructType>(eltTy))
-+      elementType = structType->getTypeAtIndex(index);
-     GBE_ASSERT(elementType);
-     return elementType;
-   }
---- a/backend/src/llvm/llvm_printf_parser.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_printf_parser.cpp	2020-11-09 18:57:52.618943105 +0100
-@@ -323,8 +323,7 @@
-
-   bool PrintfParser::parseOnePrintfInstruction(CallInst * call)
-   {
--    CallSite CS(call);
--    CallSite::arg_iterator CI_FMT = CS.arg_begin();
-+    User::op_iterator CI_FMT = call->arg_begin();
-     int param_num = 0;
-
-     llvm::Constant* arg0 = dyn_cast<llvm::ConstantExpr>(*CI_FMT);
-@@ -341,7 +340,7 @@
-       return false;
-     }
-
--    std::string fmt = fmt_arg->getAsCString();
-+    std::string fmt = fmt_arg->getAsCString().str();
-     if (fmt.size() == 0)
-       return false;
-
-@@ -437,8 +436,8 @@
-         if ( callFunc->getIntrinsicID() != 0)
-           continue;
-
--        Value *Callee = call->getCalledValue();
--        const std::string fnName = Callee->getName();
-+        Value *Callee = call->getCalledOperand();
-+        const std::string fnName = Callee->getName().str();
-
-         if (fnName != "__gen_ocl_printf_stub" && fnName != "__gen_ocl_puts_stub")
-           continue;
-@@ -582,7 +581,7 @@
-             if (!fmt_arg || !fmt_arg->isCString()) {
-               return false;
-             }
--            slot.state.str = fmt_arg->getAsCString();
-+            slot.state.str = fmt_arg->getAsCString().str();
-             return true;
-           }
-           case PRINTF_CONVERSION_P: {
-@@ -595,10 +594,10 @@
-
-         break;
-
--      case Type::VectorTyID: {
--        Type* vect_type = arg->getType();
--        Type* elt_type = vect_type->getVectorElementType();
--        int vec_num = vect_type->getVectorNumElements();
-+      case Type::FixedVectorTyID: {
-+        VectorType* vect_type = dyn_cast<VectorType>(arg->getType());
-+        Type* elt_type = vect_type->getElementType();
-+        int vec_num = vect_type->getNumElements();
-         bool sign = false;
-
-         if (vec_num != slot.state.vector_n) {
---- a/backend/src/llvm/llvm_profiling.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_profiling.cpp	2020-11-09 18:59:50.120929150 +0100
-@@ -35,7 +35,6 @@
- #include "llvm/IR/IRBuilder.h"
-
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
--#include "llvm/IR/CallSite.h"
- #include "llvm/IR/CFG.h"
- #else
- #include "llvm/Support/CallSite.h"
---- a/backend/src/llvm/llvm_sampler_fix.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp	2020-11-09 17:01:09.407774832 +0100
-@@ -45,8 +45,8 @@
-     bool visitCallInst(CallInst *I) {
-       if(!I)
-         return false;
--      Value *Callee = I->getCalledValue();
--      const std::string fnName = Callee->getName();
-+      Value *Callee = I->getCalledOperand();
-+      const std::string fnName = Callee->getName().str();
-       bool changed = false;
-       Type *boolTy = IntegerType::get(I->getContext(), 1);
-       Type *i32Ty = IntegerType::get(I->getContext(), 32);
-@@ -59,7 +59,7 @@
-         Value *needFixVal;
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-         CallInst *init = dyn_cast<CallInst>(I->getOperand(0));
--        if (init && init->getCalledValue()->getName().compare("__translate_sampler_initializer"))
-+        if (init && init->getCalledOperand()->getName().compare("__translate_sampler_initializer"))
-         {
-           const ConstantInt *ci = dyn_cast<ConstantInt>(init->getOperand(0));
-           uint32_t samplerInt = ci->getZExtValue();
-@@ -113,7 +113,7 @@
-         Value *needFixVal;
-  #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-         CallInst *init = dyn_cast<CallInst>(I->getOperand(0));
--        if (init && init->getCalledValue()->getName().compare("__translate_sampler_initializer"))
-+        if (init && init->getCalledOperand()->getName().compare("__translate_sampler_initializer"))
-         {
-           const ConstantInt *ci = dyn_cast<ConstantInt>(init->getOperand(0));
-           uint32_t samplerInt = ci->getZExtValue();
---- a/backend/src/llvm/llvm_scalarize.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_scalarize.cpp	2020-11-09 18:51:16.888990104 +0100
-@@ -178,7 +178,7 @@
-       if(!type)
-         return type;
-       switch(type->getTypeID()) {
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       case Type::ArrayTyID:
-         return GetBasicType(type->getContainedType(0));
-       default:
-@@ -188,7 +188,7 @@
-     }
-
-     int GetComponentCount(const Type* type)  {
--      if (type && type->getTypeID() == Type::VectorTyID)
-+      if (type && type->getTypeID() == Type::FixedVectorTyID)
-         return llvm::dyn_cast<VectorType>(type)->getNumElements();
-       else
-         return 1;
-@@ -652,13 +652,12 @@
-           break;
-         }
-       } else {
--        Value *Callee = call->getCalledValue();
--        const std::string fnName = Callee->getName();
-+        Value *Callee = call->getCalledOperand();
-+        const std::string fnName = Callee->getName().str();
-         auto genIntrinsicID = intrinsicMap.find(fnName);
-
-         // Get the function arguments
--        CallSite CS(call);
--        CallSite::arg_iterator CI = CS.arg_begin() + 1;
-+        User::op_iterator CI = call->arg_begin() + 1;
-
-         switch (genIntrinsicID) {
-           case GEN_OCL_NOT_FOUND:
-@@ -729,7 +728,7 @@
-             extractFromVector(call);
-             break;
-           case GEN_OCL_PRINTF:
--            for (; CI != CS.arg_end(); ++CI)
-+            for (; CI != call->arg_end(); ++CI)
-               if ((*CI)->getType()->isVectorTy())
-                 *CI = InsertToVector(call, *CI);
-             break;
diff --git a/srcpkgs/beignet/patches/llvm12.patch b/srcpkgs/beignet/patches/llvm12.patch
deleted file mode 100644
index 6f8ab005c148..000000000000
--- a/srcpkgs/beignet/patches/llvm12.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-diff --git backend/src/llvm/ExpandLargeIntegers.cpp backend/src/llvm/ExpandLargeIntegers.cpp
-index 8515dc13..27080380 100644
---- a/backend/src/llvm/ExpandLargeIntegers.cpp
-+++ b/backend/src/llvm/ExpandLargeIntegers.cpp
-@@ -328,7 +328,7 @@ static Value *buildVectorOrScalar(ConversionState &State, IRBuilder<> &IRB, Smal
-     // splited, that's why these temporary values should be erased.
-     bool KeepInsert = isLegalBitSize(ElemTy->getPrimitiveSizeInBits() * ElemNo);
-     for (unsigned i = 0; i < ElemNo; ++i) {
--      Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo));
-+      Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo, false));
-       Value *idx = ConstantInt::get(IntTy, i);
-       vec = IRB.CreateInsertElement(tmp, Elements[i], idx);
-       if (!KeepInsert && !isa<Constant>(vec)) {
-@@ -373,7 +373,7 @@ static void unifyElementType(IRBuilder<> &IRB, SmallVector<Value *, 16> &Src, Sm
-       assert((Size % MinWidth) == 0);
- 
-       if (Size > MinWidth) {
--        VectorType *VecTy = VectorType::get(ElemTy, Size/MinWidth);
-+        VectorType *VecTy = VectorType::get(ElemTy, Size/MinWidth, false);
-         Value *Casted = IRB.CreateBitCast(Src[i], VecTy);
-         for (unsigned j = 0; j < Size/MinWidth; j++)
-           Dst.push_back(IRB.CreateExtractElement(Casted, ConstantInt::get(IntTy, j)));
-@@ -462,7 +462,7 @@ static void convertInstruction(Instruction *Inst, ConversionState &State,
-       unsigned ElemNo = Unified.size();
-       Type *ElemTy = Unified[0]->getType();
-       for (unsigned i = 0; i < ElemNo; ++i) {
--        Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo));
-+        Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo, false));
-         Value *idx = ConstantInt::get(IntTy, i);
-         vec = IRB.CreateInsertElement(tmp, Unified[i], idx);
-       }
-diff --git backend/src/llvm/llvm_gen_backend.cpp backend/src/llvm/llvm_gen_backend.cpp
-index c93d89cc..64d5b0e5 100644
---- a/backend/src/llvm/llvm_gen_backend.cpp
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -304,7 +304,7 @@ namespace gbe
-       TYPESIZEVEC(long,8)
-       TYPESIZEVEC(unsigned long,8)
-       else{
--        StructType *StrTy = M->getTypeByName("struct."+name);
-+        StructType *StrTy = StructType::getTypeByName(M->getContext(), "struct."+name);
-         if(StrTy)
-           return getTypeByteSize(unit,StrTy);
-       }
-diff --git backend/src/llvm/llvm_loadstore_optimization.cpp backend/src/llvm/llvm_loadstore_optimization.cpp
-index 5aa38bef..6b5c1bad 100644
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
-@@ -152,7 +152,7 @@ namespace gbe {
-     unsigned addrSpace = ld->getPointerAddressSpace();
-     // insert before first load
-     Builder.SetInsertPoint(ld);
--    VectorType *vecTy = VectorType::get(ld->getType(), size);
-+    VectorType *vecTy = VectorType::get(ld->getType(), size, false);
-     Value *vecPtr = Builder.CreateBitCast(ld->getPointerOperand(),
-                                         PointerType::get(vecTy, addrSpace));
-     LoadInst *vecValue = Builder.CreateLoad(vecPtr);
-@@ -236,7 +236,7 @@ namespace gbe {
-     Builder.SetInsertPoint(merged[size-1]);
- 
-     Type *dataTy = st->getValueOperand()->getType();
--    VectorType *vecTy = VectorType::get(dataTy, size);
-+    VectorType *vecTy = VectorType::get(dataTy, size, false);
-     Value * parent = UndefValue::get(vecTy);
-     for(unsigned i = 0; i < size; i++) {
-       parent = Builder.CreateInsertElement(parent, values[i], ConstantInt::get(IntegerType::get(st->getContext(), 32), i));
-diff --git backend/src/llvm/llvm_printf_parser.cpp backend/src/llvm/llvm_printf_parser.cpp
-index 6bb7c52a..af459cd2 100644
---- a/backend/src/llvm/llvm_printf_parser.cpp
-+++ b/backend/src/llvm/llvm_printf_parser.cpp
-@@ -630,7 +630,7 @@ error:
-             if (elt_type != elt_dst_type) {
-               Value *II = NULL;
-               for (int i = 0; i < vec_num; i++) {
--                Value *vec = II ? II : UndefValue::get(VectorType::get(elt_dst_type, vec_num));
-+                Value *vec = II ? II : UndefValue::get(VectorType::get(elt_dst_type, vec_num, false));
-                 Value *cv = ConstantInt::get(Type::getInt32Ty(elt_type->getContext()), i);
-                 Value *org = builder->CreateExtractElement(arg, cv);
-                 Value *cvt = builder->CreateIntCast(org, elt_dst_type, sign);
-@@ -658,7 +658,7 @@ error:
-             if (elt_type->getTypeID() != Type::FloatTyID) {
-               Value *II = NULL;
-               for (int i = 0; i < vec_num; i++) {
--                Value *vec = II ? II : UndefValue::get(VectorType::get(Type::getFloatTy(elt_type->getContext()), vec_num));
-+                Value *vec = II ? II : UndefValue::get(VectorType::get(Type::getFloatTy(elt_type->getContext()), vec_num, false));
-                 Value *cv = ConstantInt::get(Type::getInt32Ty(elt_type->getContext()), i);
-                 Value *org = builder->CreateExtractElement(arg, cv);
-                 Value* cvt  = builder->CreateFPCast(org, Type::getFloatTy(module->getContext()));
-diff --git backend/src/llvm/llvm_to_gen.cpp backend/src/llvm/llvm_to_gen.cpp
-index 7f7deffe..9e8ccc67 100644
---- a/backend/src/llvm/llvm_to_gen.cpp
-+++ b/backend/src/llvm/llvm_to_gen.cpp
-@@ -358,7 +358,7 @@ namespace gbe
-     passes.add(createScalarReplAggregatesPass(64, true, -1, -1, 64));
- #endif
-     passes.add(createLoadStoreOptimizationPass());
--    passes.add(createConstantPropagationPass());
-+    //passes.add(createConstantPropagationPass());
-     passes.add(createPromoteMemoryToRegisterPass());
-     if(optLevel > 0)
-       passes.add(createGVNPass());                 // Remove redundancies
-@@ -367,11 +367,11 @@ namespace gbe
-     passes.add(createScalarizePass());             // Expand all vector ops
-     passes.add(createExpandLargeIntegersPass());   // legalize large integer operation
-     passes.add(createInstructionCombiningPass());  // legalize will generate some silly instructions
--    passes.add(createConstantPropagationPass());   // propagate constant after scalarize/legalize
-+    //passes.add(createConstantPropagationPass());   // propagate constant after scalarize/legalize
-     passes.add(createExpandConstantExprPass());    // constant prop may generate ConstantExpr
-     passes.add(createPromoteIntegersPass());       // align integer size to power of two
-     passes.add(createRemoveGEPPass(unit));         // Constant prop may generate gep
--    passes.add(createDeadInstEliminationPass());   // Remove simplified instructions
-+    //passes.add(createDeadInstEliminationPass());   // Remove simplified instructions
-     passes.add(createCFGSimplificationPass());     // Merge & remove BBs
-     passes.add(createLowerSwitchPass());           // simplify cfg will generate switch-case instruction
-     if (profiling) {
diff --git a/srcpkgs/beignet/patches/musl.patch b/srcpkgs/beignet/patches/musl.patch
deleted file mode 100644
index cefafbb65588..000000000000
--- a/srcpkgs/beignet/patches/musl.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/backend/src/backend/gen/gen_mesa_disasm.c
-+++ b/backend/src/backend/gen/gen_mesa_disasm.c
-@@ -1137,7 +1137,7 @@ static uint32_t __conv_half_to_float(uint16_t h)
-       // Adjust mantissa so it's normalized (and keep
-       // track of exponent adjustment)
-       int e = -1;
--      uint m = i.mantissa;
-+      unsigned int m = i.mantissa;
-       do {
-         e++;
-         m <<= 1;
diff --git a/srcpkgs/beignet/template b/srcpkgs/beignet/template
deleted file mode 100644
index dce6bbb7ae24..000000000000
--- a/srcpkgs/beignet/template
+++ /dev/null
@@ -1,22 +0,0 @@
-# Template file for 'beignet'
-pkgname=beignet
-version=1.3.2
-revision=10
-archs="i686* x86_64*"
-wrksrc="Beignet-${version}-Source"
-build_style=cmake
-hostmakedepends="clang llvm pkg-config"
-makedepends="MesaLib-devel libedit-devel libffi-devel ocl-icd-devel zlib-devel
- libXfixes-devel"
-depends="ocl-icd"
-short_desc="Beignet GPGPU System for Intel GPUs"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://www.freedesktop.org/wiki/Software/Beignet/"
-distfiles="https://01.org/sites/default/files/${pkgname}-${version}-source.tar.gz"
-checksum=c555edba149de23243965a703f39f79fa06f15bcff5a3762b5544b0925010b43
-
-post_install() {
-	# remove CL headers, we do use opencl-headers instead.
-	rm -r ${DESTDIR}/usr/include
-}
diff --git a/srcpkgs/beignet/update b/srcpkgs/beignet/update
deleted file mode 100644
index ca41e0afe60c..000000000000
--- a/srcpkgs/beignet/update
+++ /dev/null
@@ -1 +0,0 @@
-site="https://01.org/beignet/downloads"
diff --git a/srcpkgs/removed-packages/template b/srcpkgs/removed-packages/template
index 65516dfa921c..b6f2efa5e415 100644
--- a/srcpkgs/removed-packages/template
+++ b/srcpkgs/removed-packages/template
@@ -1,7 +1,7 @@
 # Template file for 'removed-packages'
 pkgname=removed-packages
 version=0.1
-revision=69
+revision=70
 build_style=meta
 short_desc="Uninstalls packages removed from repository"
 maintainer="Piotr Wójcik <chocimier@tlen.pl>"
@@ -25,6 +25,7 @@ replaces="
  atom<=1.44.0_1
  avogadro-devel<=1.2.0_8
  avogadro<=1.2.0_8
+ beignet<=1.3.2_10
  bokken<=1.8_3
  bomi<=0.9.11_17
  burp-client<=1.4.40_13

From b4b3f73350a0e7eae22ed9d9c834eb7900210005 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 22:31:25 +0200
Subject: [PATCH 20/26] ldc: update to 1.29.0.

---
 common/shlibs        | 8 ++++----
 srcpkgs/ldc/template | 6 +++---
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/common/shlibs b/common/shlibs
index 36bab1d3d999..7dea30137635 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -2181,10 +2181,10 @@ libFcitx5Config.so.6 libfcitx5-5.0.5_1
 libFcitx5GClient.so.2 fcitx5-gtk-5.0.4_1
 libFcitx5Qt5DBusAddons.so.1 fcitx5-qt5-5.0.3_1
 libFcitx5Qt5WidgetsAddons.so.2 fcitx5-qt5-5.0.3_1
-libdruntime-ldc-debug-shared.so.98 ldc-runtime-1.28.0_1
-libdruntime-ldc-shared.so.98 ldc-runtime-1.28.0_1
-libphobos2-ldc-shared.so.98 ldc-runtime-1.28.0_1
-libphobos2-ldc-debug-shared.so.98 ldc-runtime-1.28.0_1
+libdruntime-ldc-debug-shared.so.99 ldc-runtime-1.29.0_1
+libdruntime-ldc-shared.so.99 ldc-runtime-1.29.0_1
+libphobos2-ldc-shared.so.99 ldc-runtime-1.29.0_1
+libphobos2-ldc-debug-shared.so.99 ldc-runtime-1.29.0_1
 libldc-jit.so.98 ldc-runtime-1.28.0_1
 libmarblewidget-qt5.so.28 marble5-17.12.2_1
 libastro.so.2 marble5-17.12.2_1
diff --git a/srcpkgs/ldc/template b/srcpkgs/ldc/template
index a27280dde3b8..1d72a8805eb6 100644
--- a/srcpkgs/ldc/template
+++ b/srcpkgs/ldc/template
@@ -1,6 +1,6 @@
 # Template file for 'ldc'
 pkgname=ldc
-version=1.28.0
+version=1.29.0
 revision=1
 wrksrc="ldc-${version}-src"
 build_style=cmake
@@ -11,7 +11,7 @@ configure_args="
  -DBASH_COMPLETION_COMPLETIONSDIR=/usr/share/bash-completion
  -DC_SYSTEM_LIBS='unwind;m;pthread;rt;dl'"
 conf_files="/etc/ldc2.conf"
-hostmakedepends="dmd llvm12 perl pkg-config"
+hostmakedepends="dmd llvm14 perl pkg-config"
 makedepends="libcurl-devel libffi-devel ncurses-devel zlib-devel
  llvm-libunwind-devel"
 depends="ldc-runtime llvm-libunwind-devel"
@@ -22,7 +22,7 @@ license="BSD-3-Clause, BSL-1.0"
 homepage="https://wiki.dlang.org/LDC"
 changelog="https://raw.githubusercontent.com/ldc-developers/ldc/master/CHANGELOG.md"
 distfiles="https://github.com/ldc-developers/ldc/releases/download/v${version}/ldc-${version}-src.tar.gz"
-checksum=17fee8bb535bcb8cda0a45947526555c46c045f302a7349cc8711b254e54cf09
+checksum=d0c066eb965467625d9c5e75c00c583451b9ffa363601f9e37275ca8a8aea140
 nopie=yes
 nocross="dmd compilation fails on cross"
 # tests timeout on musl; also require unpackaged python3-lit

From ce1731774228a50d8610ff2dfe0e1737adc6926d Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 21/26] include-what-you-use: update to 0.18.

---
 srcpkgs/include-what-you-use/template | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/include-what-you-use/template b/srcpkgs/include-what-you-use/template
index b13bb7ee56af..297669f60459 100644
--- a/srcpkgs/include-what-you-use/template
+++ b/srcpkgs/include-what-you-use/template
@@ -1,6 +1,6 @@
 # Template file for 'include-what-you-use'
 pkgname=include-what-you-use
-version=0.16
+version=0.18
 revision=1
 wrksrc="${pkgname}"
 build_style=cmake
@@ -12,7 +12,7 @@ maintainer="Leah Neukirchen <leah@vuxu.org>"
 license="NCSA"
 homepage="https://include-what-you-use.org/"
 distfiles="https://include-what-you-use.org/downloads/${pkgname}-${version}.src.tar.gz"
-checksum=8d6fc9b255343bc1e5ec459e39512df1d51c60e03562985e0076036119ff5a1c
+checksum=9102fc8419294757df86a89ce6ec305f8d90a818d1f2598a139d15eb1894b8f3
 python_version=3
 
 post_install() {

From ae718d135ab769bd6eee3a90db62ae5bd9baa388 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:18:24 +0200
Subject: [PATCH 22/26] SPIRV-LLVM-Translator: update to 14.0.0.

---
 common/shlibs                          |  1 +
 srcpkgs/SPIRV-LLVM-Translator/template | 13 +++++++------
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/common/shlibs b/common/shlibs
index 7dea30137635..21aebcf2d659 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -981,6 +981,7 @@ libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
 libLLVM-14.so libllvm14-14.0.3_1
+libLLVMSPIRVLib.so.14 SPIRV-LLVM-Translator-14.0.0_1
 libisofs.so.6 libisofs-0.6.24_1
 libmpack.so.0 libmpack-1.0.5_1
 libGeoIP.so.1 libgeoip-1.4.8_1
diff --git a/srcpkgs/SPIRV-LLVM-Translator/template b/srcpkgs/SPIRV-LLVM-Translator/template
index 2504cabed367..fde9689f710c 100644
--- a/srcpkgs/SPIRV-LLVM-Translator/template
+++ b/srcpkgs/SPIRV-LLVM-Translator/template
@@ -1,19 +1,20 @@
 # Template file for 'SPIRV-LLVM-Translator'
 pkgname=SPIRV-LLVM-Translator
-version=12.0.0
+version=14.0.0
 revision=1
 build_style=cmake
 make_build_args="llvm-spirv"
-configure_args="-Wno-dev -DLLVM_LINK_LLVM_DYLIB=ON -DCMAKE_SKIP_RPATH=ON
- -DLLVM_SPIRV_INCLUDE_TESTS=OFF -DBUILD_SHARED_LIBS=ON"
-hostmakedepends="clang clang-tools-extra llvm"
-makedepends="llvm"
+configure_args="-DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release
+ -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_SKIP_RPATH=ON -DLLVM_INCLUDE_TESTS=OFF
+ -DLLVM_LINK_LLVM_DYLIB=ON -DLLVM_EXTERNAL_LIT=/usr/bin/lit -Wno-dev -DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=/usr/include/spirv/ "
+hostmakedepends="clang clang-tools-extra llvm14"
+makedepends="llvm14 SPIRV-Headers"
 short_desc="API and commands for processing SPIR-V modules"
 maintainer="Orphaned <orphan@voidlinux.org>"
 license="NCSA"
 homepage="https://github.com/KhronosGroup/SPIRV-LLVM-Translator"
 distfiles="https://github.com/KhronosGroup/${pkgname}/archive/refs/tags/v${version}.tar.gz"
-checksum=6e4fad04203f25fcde4c308c53e9f59bd05a390978992db3212d4b63aff62108
+checksum=1afc52bb4e39aeb9b5b69324a201c81bd986364f347b559995eff6fd6f013318
 make_check=no
 
 post_install() {

From df777b2d1a14c745e4c704aecfcdcbd8a89fb87b Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:35:43 +0200
Subject: [PATCH 23/26] ispc: update to 1.17.0.

---
 .../ispc/patches/cmake-build-type-none.patch  |   18 -
 srcpkgs/ispc/patches/llvm12-001.patch         |   57 -
 srcpkgs/ispc/patches/llvm12-002.patch         |  923 --------
 srcpkgs/ispc/patches/llvm12-003.patch         | 1504 ------------
 srcpkgs/ispc/patches/llvm12-004.patch         |   34 -
 srcpkgs/ispc/patches/llvm12-005.patch         |  372 ---
 srcpkgs/ispc/patches/llvm12-006.patch         |  126 -
 srcpkgs/ispc/patches/llvm12-007.patch         |  160 --
 srcpkgs/ispc/patches/llvm12-008.patch         |  149 --
 srcpkgs/ispc/patches/llvm12-009.patch         | 2109 -----------------
 srcpkgs/ispc/template                         |    8 +-
 11 files changed, 4 insertions(+), 5456 deletions(-)
 delete mode 100644 srcpkgs/ispc/patches/cmake-build-type-none.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-001.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-002.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-003.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-004.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-005.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-006.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-007.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-008.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-009.patch

diff --git a/srcpkgs/ispc/patches/cmake-build-type-none.patch b/srcpkgs/ispc/patches/cmake-build-type-none.patch
deleted file mode 100644
index 411e353c7314..000000000000
--- a/srcpkgs/ispc/patches/cmake-build-type-none.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Index: ispc-1.15.0/CMakeLists.txt
-===================================================================
---- ispc-1.15.0.orig/CMakeLists.txt
-+++ ispc-1.15.0/CMakeLists.txt
-@@ -157,13 +157,6 @@ set(OUTPUT_RELEASE Release/bin)
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin )
- 
- if(CMAKE_BUILD_TYPE)
--    # Validate build type
--    set(CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo")
--
--    string(FIND "${CONFIGURATION_TYPES}" "${CMAKE_BUILD_TYPE}" MATCHED_CONFIG)
--    if (${MATCHED_CONFIG} EQUAL -1)
--         message(FATAL_ERROR "CMAKE_BUILD_TYPE (${CMAKE_BUILD_TYPE}) allows only the following values: ${CONFIGURATION_TYPES}")
--    endif()
- else(NOT CMAKE_BUILD_TYPE)
-     set(CMAKE_BUILD_TYPE "Release")
-     message(STATUS "Build type not specified: Use Release by default.")
diff --git a/srcpkgs/ispc/patches/llvm12-001.patch b/srcpkgs/ispc/patches/llvm12-001.patch
deleted file mode 100644
index 5f2d3f5a409e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-001.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 1c0f89dccb774f216c7f6e76a99ee907a1e641cb Mon Sep 17 00:00:00 2001
-From: Dmitry Babokin <dmitry.y.babokin@intel.com>
-Date: Tue, 22 Dec 2020 17:03:59 -0800
-Subject: [PATCH] Fix to work with LLVM trunk after llvm/llvm-project@41c3b2713
-
----
- src/ctx.cpp | 18 ++++++++++++------
- 1 file changed, 12 insertions(+), 6 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 6fbb8b9cf..977e9d222 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1473,11 +1473,15 @@ void FunctionEmitContext::AddDebugPos(llvm::Value *value, const SourcePos *pos,
-     llvm::Instruction *inst = llvm::dyn_cast<llvm::Instruction>(value);
-     if (inst != NULL && m->diBuilder) {
-         SourcePos p = pos ? *pos : currentPos;
--        if (p.first_line != 0)
-+        if (p.first_line != 0) {
-             // If first_line == 0, then we're in the middle of setting up
-             // the standard library or the like; don't add debug positions
-             // for those functions
--            inst->setDebugLoc(llvm::DebugLoc::get(p.first_line, p.first_column, scope ? scope : GetDIScope()));
-+            scope = scope ? scope : GetDIScope();
-+            llvm::DebugLoc diLoc =
-+                llvm::DILocation::get(scope->getContext(), p.first_line, p.first_column, scope, nullptr, false);
-+            inst->setDebugLoc(diLoc);
-+        }
-     }
- }
- 
-@@ -1518,9 +1522,10 @@ void FunctionEmitContext::EmitVariableDebugInfo(Symbol *sym) {
-     llvm::DILocalVariable *var = m->diBuilder->createAutoVariable(
-         scope, sym->name, sym->pos.GetDIFile(), sym->pos.first_line, diType, true /* preserve through opts */);
- 
-+    llvm::DebugLoc diLoc =
-+        llvm::DILocation::get(scope->getContext(), sym->pos.first_line, sym->pos.first_column, scope, nullptr, false);
-     llvm::Instruction *declareInst =
--        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(),
--                                    llvm::DebugLoc::get(sym->pos.first_line, sym->pos.first_column, scope), bblock);
-+        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(), diLoc, bblock);
-     AddDebugPos(declareInst, &sym->pos, scope);
- }
- 
-@@ -1535,9 +1540,10 @@ void FunctionEmitContext::EmitFunctionParameterDebugInfo(Symbol *sym, int argNum
-         m->diBuilder->createParameterVariable(scope, sym->name, argNum + 1, sym->pos.GetDIFile(), sym->pos.first_line,
-                                               diType, true /* preserve through opts */, flags);
- 
-+    llvm::DebugLoc diLoc =
-+        llvm::DILocation::get(scope->getContext(), sym->pos.first_line, sym->pos.first_column, scope, nullptr, false);
-     llvm::Instruction *declareInst =
--        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(),
--                                    llvm::DebugLoc::get(sym->pos.first_line, sym->pos.first_column, scope), bblock);
-+        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(), diLoc, bblock);
-     AddDebugPos(declareInst, &sym->pos, scope);
- }
- 
diff --git a/srcpkgs/ispc/patches/llvm12-002.patch b/srcpkgs/ispc/patches/llvm12-002.patch
deleted file mode 100644
index 0903f30da10d..000000000000
--- a/srcpkgs/ispc/patches/llvm12-002.patch
+++ /dev/null
@@ -1,923 +0,0 @@
-From 0597a79d084c014780136da906afe21d15e982cb Mon Sep 17 00:00:00 2001
-From: DeepakRajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Tue, 5 Jan 2021 13:53:30 -0800
-Subject: [PATCH] Remove LLVM 8.0 and LLVM 9.0. (#1966)
-
----
- .appveyor.yml                        |  3 --
- .travis.yml                          |  7 ---
- CMakeLists.txt                       | 12 ++----
- src/ast.cpp                          |  4 --
- src/ctx.cpp                          | 30 -------------
- src/gen/GlobalsLocalization.cpp      |  4 --
- src/ispc.cpp                         | 20 ---------
- src/ispc.h                           |  3 +-
- src/ispc_version.h                   |  4 +-
- src/main.cpp                         | 13 ------
- src/module.cpp                       | 27 ------------
- src/module.h                         |  2 -
- src/opt.cpp                          | 64 ++--------------------------
- src/type.cpp                         | 10 ++---
- tests/lit-tests/1771.ispc            |  1 -
- tests/lit-tests/1844.ispc            |  3 --
- tests/lit-tests/1926.ispc            |  2 -
- tests/lit-tests/cpus_x86.ispc        |  2 +
- tests/lit-tests/cpus_x86_llvm10.ispc | 11 -----
- tests/lit-tests/lit.cfg              |  5 ---
- 20 files changed, 14 insertions(+), 213 deletions(-)
- delete mode 100644 tests/lit-tests/cpus_x86_llvm10.ispc
-
-diff --git a/.appveyor.yml b/.appveyor.yml
-index 451a7b3e0..7945cca2a 100644
---- a/.appveyor.yml
-+++ b/.appveyor.yml
-@@ -41,8 +41,6 @@ environment:
-       LLVM_VERSION: latest
-     - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
-       LLVM_VERSION: 10.0
--    - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
--      LLVM_VERSION: 9.0
- 
- for:
- -
-@@ -62,7 +60,6 @@ for:
-         if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2019" ( (set generator="Visual Studio 16") & (set vsversion=2019))
-         set LLVM_TAR=llvm-11.0.0-win.vs2019-Release+Asserts-x86.arm.wasm.7z
-         if "%LLVM_VERSION%"=="10.0" (set LLVM_TAR=llvm-10.0.1-win.vs2019-Release+Asserts-x86.arm.wasm.zip)
--        if "%LLVM_VERSION%"=="9.0" (set LLVM_TAR=llvm-9.0.1-win.vs2017-Release+Asserts-x86.arm.wasm.zip)
-   install:
-     - ps: choco install --no-progress winflexbison3 wget 7zip
-     - cmd: |-
-diff --git a/.travis.yml b/.travis.yml
-index 2e96017a6..3a6b85264 100644
---- a/.travis.yml
-+++ b/.travis.yml
-@@ -108,13 +108,6 @@ jobs:
-         - LLVM_TAR=llvm-10.0.1-ubuntu16.04-Release+Asserts-x86.arm.wasm.tar.xz
-         - LLVM_REPO=https://github.com/dbabokin/llvm-project
-         - ISPC_HOME=$TRAVIS_BUILD_DIR
--    # LLVM 9.0 + Ubuntu 16.04: build, lit tests, examples (build + run), benchmarks (build + trial run)
--    - <<: *my_tag
--      env:
--        - LLVM_VERSION=9.0 OS=Ubuntu16.04
--        - LLVM_TAR=llvm-9.0.1-ubuntu16.04-Release+Asserts-x86.arm.wasm.tar.xz
--        - LLVM_REPO=https://github.com/dbabokin/llvm-project
--        - ISPC_HOME=$TRAVIS_BUILD_DIR
-     # WASM enabled build
-     # LLVM 11.0 + Ubuntu 16.04: build, lit tests, examples (build), benchmarks (build + trial run)
-     - <<: *my_tag
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 5fa863fcf..a6b3ed251 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -241,10 +241,8 @@ if (X86_ENABLED)
-         avx2-i8x32 avx2-i16x16
-         avx2-i32x4 avx2-i32x8 avx2-i32x16 avx2-i64x4
-         avx512knl-i32x16
--        avx512skx-i32x16 avx512skx-i32x8)
--    if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "10.0.0")
--        list(APPEND ISPC_TARGETS avx512skx-i8x64 avx512skx-i16x32)
--    endif()
-+        avx512skx-i32x16 avx512skx-i32x8
-+        avx512skx-i8x64 avx512skx-i16x32)
- endif()
- if (ARM_ENABLED)
-     list(APPEND ISPC_TARGETS neon-i8x16 neon-i16x8 neon-i32x4 neon-i32x8)
-@@ -259,11 +257,7 @@ if (WASM_ENABLED)
- endif()
- 
- set(CLANG_LIBRARY_LIST clangFrontend clangDriver clangSerialization clangParse clangSema clangAnalysis clangAST clangBasic clangEdit clangLex)
--set(LLVM_COMPONENTS engine ipo bitreader bitwriter instrumentation linker option)
--
--if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "10.0.0")
--    list(APPEND LLVM_COMPONENTS frontendopenmp)
--endif()
-+set(LLVM_COMPONENTS engine ipo bitreader bitwriter instrumentation linker option frontendopenmp)
- 
- if (X86_ENABLED)
-     list(APPEND LLVM_COMPONENTS x86)
-diff --git a/src/ast.cpp b/src/ast.cpp
-index 20f75a29c..5a43c4854 100644
---- a/src/ast.cpp
-+++ b/src/ast.cpp
-@@ -44,9 +44,7 @@
- #include "sym.h"
- #include "util.h"
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/TimeProfiler.h>
--#endif
- ///////////////////////////////////////////////////////////////////////////
- // ASTNode
- 
-@@ -62,9 +60,7 @@ void AST::AddFunction(Symbol *sym, Stmt *code) {
- }
- 
- void AST::GenerateIR() {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope TimeScope("GenerateIR");
--#endif
-     for (unsigned int i = 0; i < functions.size(); ++i)
-         functions[i]->GenerateIR();
- }
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 977e9d222..42c4ea09d 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -309,21 +309,13 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym, llvm::F
-             char buf[256];
-             snprintf(buf, sizeof(buf), "__off_all_on_mask_%s", g->target->GetISAString());
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_8_0
--            llvm::Constant *offFunc = m->module->getOrInsertFunction(buf, LLVMTypes::VoidType);
--#else // LLVM 9.0+
-             llvm::FunctionCallee offFuncCallee = m->module->getOrInsertFunction(buf, LLVMTypes::VoidType);
-             llvm::Constant *offFunc = llvm::cast<llvm::Constant>(offFuncCallee.getCallee());
--#endif
-             AssertPos(currentPos, llvm::isa<llvm::Function>(offFunc));
-             llvm::BasicBlock *offBB = llvm::BasicBlock::Create(*g->ctx, "entry", (llvm::Function *)offFunc, 0);
-             llvm::StoreInst *inst = new llvm::StoreInst(LLVMMaskAllOff, globalAllOnMaskPtr, offBB);
-             if (g->opt.forceAlignedMemory) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-                 inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-             }
-             llvm::ReturnInst::Create(*g->ctx, offBB);
-         }
-@@ -2288,11 +2280,7 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
- #endif
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-     }
- 
-     AddDebugPos(inst);
-@@ -2431,11 +2419,7 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-                 // vs the proper alignment in practice.)
-                 int align = 1;
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                inst->setAlignment(align);
--#else // LLVM 10.0+
-                 inst->setAlignment(llvm::MaybeAlign(align).valueOrOne());
--#endif
-             }
- 
-             AddDebugPos(inst);
-@@ -2649,11 +2633,7 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-         align = g->target->getNativeVectorAlignment();
- 
-     if (align != 0) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(align);
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(align).valueOrOne());
--#endif
-     }
-     // Don't add debugging info to alloca instructions
-     return inst;
-@@ -2926,11 +2906,7 @@ void FunctionEmitContext::StoreInst(llvm::Value *value, llvm::Value *ptr, const
-     llvm::StoreInst *inst = new llvm::StoreInst(value, ptr, bblock);
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-     }
- 
- #ifdef ISPC_GENX_ENABLED
-@@ -3025,16 +3001,10 @@ void FunctionEmitContext::MemcpyInst(llvm::Value *dest, llvm::Value *src, llvm::
-     }
-     if (align == NULL)
-         align = LLVMInt32(1);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_8_0
--    llvm::Constant *mcFunc =
--        m->module->getOrInsertFunction("llvm.memcpy.p0i8.p0i8.i64", LLVMTypes::VoidType, LLVMTypes::VoidPointerType,
--                                       LLVMTypes::VoidPointerType, LLVMTypes::Int64Type, LLVMTypes::BoolType);
--#else // LLVM 9.0+
-     llvm::FunctionCallee mcFuncCallee =
-         m->module->getOrInsertFunction("llvm.memcpy.p0i8.p0i8.i64", LLVMTypes::VoidType, LLVMTypes::VoidPointerType,
-                                        LLVMTypes::VoidPointerType, LLVMTypes::Int64Type, LLVMTypes::BoolType);
-     llvm::Constant *mcFunc = llvm::cast<llvm::Constant>(mcFuncCallee.getCallee());
--#endif
-     AssertPos(currentPos, mcFunc != NULL);
-     AssertPos(currentPos, llvm::isa<llvm::Function>(mcFunc));
- 
-diff --git a/src/gen/GlobalsLocalization.cpp b/src/gen/GlobalsLocalization.cpp
-index 193a66289..a176e9462 100644
---- a/src/gen/GlobalsLocalization.cpp
-+++ b/src/gen/GlobalsLocalization.cpp
-@@ -470,11 +470,7 @@ void GlobalsLocalization::LocalizeGlobals(LocalizationInfo &LI) {
-         Instruction &FirstI = *Fn->getEntryBlock().begin();
-         Type *ElemTy = GV->getType()->getElementType();
-         AllocaInst *Alloca = new AllocaInst(ElemTy, 0, GV->getName() + ".local", &FirstI);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        Alloca->setAlignment(GV->getAlignment());
--#else // LLVM 10.0+
-         Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()));
--#endif
-         if (!isa<UndefValue>(GV->getInitializer()))
-             new StoreInst(GV->getInitializer(), Alloca, &FirstI);
- 
-diff --git a/src/ispc.cpp b/src/ispc.cpp
-index e2d0f206e..fac5233f7 100644
---- a/src/ispc.cpp
-+++ b/src/ispc.cpp
-@@ -272,9 +272,7 @@ typedef enum {
-     CPU_Silvermont,
- 
-     CPU_ICX,
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     CPU_TGL,
--#endif
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-     CPU_ADL,
-     CPU_SPR,
-@@ -365,10 +363,8 @@ class AllCPUs {
- 
-         names[CPU_ICX].push_back("icelake-server");
-         names[CPU_ICX].push_back("icx");
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         names[CPU_TGL].push_back("tigerlake");
-         names[CPU_TGL].push_back("tgl");
--#endif
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-         names[CPU_ADL].push_back("alderlake");
-         names[CPU_ADL].push_back("adl");
-@@ -411,11 +407,9 @@ class AllCPUs {
-         compat[CPU_ADL] = Set(CPU_ADL, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont,
-                               CPU_SandyBridge, CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_None);
- #endif
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         compat[CPU_TGL] =
-             Set(CPU_TGL, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont, CPU_SandyBridge,
-                 CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_SKX, CPU_ICL, CPU_ICX, CPU_None);
--#endif
-         compat[CPU_ICX] = Set(CPU_ICX, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont,
-                               CPU_SandyBridge, CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_SKX, CPU_ICL, CPU_None);
- 
-@@ -556,9 +550,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-         case CPU_SPR:
- #endif
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         case CPU_TGL:
--#endif
-         case CPU_ICX:
-         case CPU_ICL:
-         case CPU_SKX:
-@@ -916,7 +908,6 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         }
-         break;
-     case ISPCTarget::avx512skx_i8x64:
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0 // LLVM 10.0+
-         // This target is enabled only for LLVM 10.0 and later
-         // because LLVM requires a number of fixes, which are
-         // committed to LLVM 11.0 and can be applied to 10.0, but not
-@@ -937,12 +928,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         this->m_hasVecPrefetch = false;
-         CPUfromISA = CPU_SKX;
-         break;
--#else
--        unsupported_target = true;
--        break;
--#endif
-     case ISPCTarget::avx512skx_i16x32:
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0 // LLVM 10.0+
-         // This target is enabled only for LLVM 10.0 and later
-         // because LLVM requires a number of fixes, which are
-         // committed to LLVM 11.0 and can be applied to 10.0, but not
-@@ -963,10 +949,6 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         this->m_hasVecPrefetch = false;
-         CPUfromISA = CPU_SKX;
-         break;
--#else
--        unsupported_target = true;
--        break;
--#endif
- #ifdef ISPC_ARM_ENABLED
-     case ISPCTarget::neon_i8x16:
-         this->m_isa = Target::NEON;
-@@ -1662,11 +1644,9 @@ Globals::Globals() {
-     isMultiTargetCompilation = false;
-     errorLimit = -1;
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     enableTimeTrace = false;
-     // set default granularity to 500.
-     timeTraceGranularity = 500;
--#endif
-     target = NULL;
-     ctx = new llvm::LLVMContext;
- 
-diff --git a/src/ispc.h b/src/ispc.h
-index e25d8830e..de357a21c 100644
---- a/src/ispc.h
-+++ b/src/ispc.h
-@@ -695,13 +695,12 @@ struct Globals {
- 
-     /* Number of errors to show in ISPC. */
-     int errorLimit;
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-+
-     /* When true, enable compile time tracing. */
-     bool enableTimeTrace;
- 
-     /* When compile time tracing is enabled, set time granularity. */
-     int timeTraceGranularity;
--#endif
- };
- 
- enum {
-diff --git a/src/ispc_version.h b/src/ispc_version.h
-index d781347fd..434b2d678 100644
---- a/src/ispc_version.h
-+++ b/src/ispc_version.h
-@@ -44,13 +44,11 @@
- 
- #define ISPC_LLVM_VERSION (LLVM_VERSION_MAJOR * 10000 + LLVM_VERSION_MINOR * 100)
- 
--#define ISPC_LLVM_8_0 80000
--#define ISPC_LLVM_9_0 90000
- #define ISPC_LLVM_10_0 100000
- #define ISPC_LLVM_11_0 110000
- #define ISPC_LLVM_12_0 120000
- 
--#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_8_0
-+#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_10_0
- #define LATEST_SUPPORTED_LLVM ISPC_LLVM_12_0
- 
- #ifdef __ispc__xstr
-diff --git a/src/main.cpp b/src/main.cpp
-index 8f64330cc..5c920eabc 100644
---- a/src/main.cpp
-+++ b/src/main.cpp
-@@ -55,9 +55,7 @@
- #include <llvm/Support/Signals.h>
- #include <llvm/Support/TargetRegistry.h>
- #include <llvm/Support/TargetSelect.h>
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/ToolOutputFile.h>
--#endif
- 
- #ifdef ISPC_HOST_IS_WINDOWS
- #define strcasecmp stricmp
-@@ -181,11 +179,9 @@ static void lPrintVersion() {
-     snprintf(targetHelp, sizeof(targetHelp), "[--target-os=<os>]\t\t\tSelect target OS.  <os>={%s}",
-              g->target_registry->getSupportedOSes().c_str());
-     PrintWithWordBreaks(targetHelp, 24, TerminalWidth(), stdout);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     printf("    [--time-trace]\t\t\tTurn on time profiler. Generates JSON file based on output filename.\n");
-     printf("    [--time-trace-granularity=<value>\tMinimum time granularity (in microseconds) traced by time "
-            "profiler.\n");
--#endif
-     printf("    [--version]\t\t\t\tPrint ispc version\n");
- #ifdef ISPC_GENX_ENABLED
-     printf("    [--vc-options=<\"-option1 -option2...\">]\t\t\t\tPass additional options to Vector Compiler backend\n");
-@@ -462,7 +458,6 @@ static void setCallingConv(VectorCallStatus vectorCall, Arch arch) {
-     }
- }
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- static void writeCompileTimeFile(const char *outFileName) {
-     llvm::SmallString<128> jsonFileName(outFileName);
-     jsonFileName.append(".json");
-@@ -479,7 +474,6 @@ static void writeCompileTimeFile(const char *outFileName) {
-     of->keep();
-     return;
- }
--#endif
- 
- static std::set<int> ParsingPhases(char *stages, ArgErrors &errorHandler) {
-     constexpr int parsing_limit = 100;
-@@ -791,12 +785,10 @@ int main(int Argc, char *Argv[]) {
-             }
-         } else if (!strncmp(argv[i], "--force-alignment=", 18)) {
-             g->forceAlignment = atoi(argv[i] + 18);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         } else if (!strcmp(argv[i], "--time-trace")) {
-             g->enableTimeTrace = true;
-         } else if (!strncmp(argv[i], "--time-trace-granularity=", 25)) {
-             g->timeTraceGranularity = atoi(argv[i] + 25);
--#endif
-         } else if (!strcmp(argv[i], "--woff") || !strcmp(argv[i], "-woff")) {
-             g->disableWarnings = true;
-             g->emitPerfWarnings = false;
-@@ -1059,7 +1051,6 @@ int main(int Argc, char *Argv[]) {
- 
-     // This needs to happen after the TargetOS is decided.
-     setCallingConv(vectorCall, arch);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     if (g->enableTimeTrace) {
-         llvm::timeTraceProfilerInitialize(g->timeTraceGranularity, "ispc");
-     }
-@@ -1077,9 +1068,5 @@ int main(int Argc, char *Argv[]) {
-         }
-         llvm::timeTraceProfilerCleanup();
-     }
--#else
--    int ret = Module::CompileAndOutput(file, arch, cpu, targets, flags, ot, outFileName, headerFileName, depsFileName,
--                                       depsTargetName, hostStubFileName, devStubFileName);
--#endif
-     return ret;
- }
-diff --git a/src/module.cpp b/src/module.cpp
-index fe7452df1..a85fec77a 100644
---- a/src/module.cpp
-+++ b/src/module.cpp
-@@ -170,9 +170,7 @@ Module::Module(const char *fn) {
-     module->setDataLayout(g->target->getDataLayout()->getStringRepresentation());
- 
-     if (g->generateDebuggingSymbols) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Create Debug Data");
--#endif
-         // To enable debug information on Windows, we have to let llvm know, that
-         // debug information should be emitted in CodeView format.
-         if (g->target_os == TargetOS::windows) {
-@@ -226,10 +224,8 @@ extern YY_BUFFER_STATE yy_create_buffer(FILE *, int);
- extern void yy_delete_buffer(YY_BUFFER_STATE);
- 
- int Module::CompileFile() {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope CompileFileTimeScope(
-         "CompileFile", llvm::StringRef(filename + ("_" + std::string(g->target->GetISAString()))));
--#endif
-     extern void ParserInit();
-     ParserInit();
- 
-@@ -238,18 +234,14 @@ int Module::CompileFile() {
-     // variable 'm' to be initialized and available (which it isn't until
-     // the Module constructor returns...)
-     {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("DefineStdlib");
--#endif
-         DefineStdlib(symbolTable, g->ctx, module, g->includeStdlib);
-     }
- 
-     bool runPreprocessor = g->runCPP;
- 
-     if (runPreprocessor) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Frontend parser");
--#endif
-         if (!IsStdin(filename)) {
-             // Try to open the file first, since otherwise we crash in the
-             // preprocessor if the file doesn't exist.
-@@ -268,9 +260,7 @@ int Module::CompileFile() {
-         yyparse();
-         yy_delete_buffer(strbuf);
-     } else {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Frontend parser");
--#endif
-         // No preprocessor, just open up the file if it's not stdin..
-         FILE *f = NULL;
-         if (IsStdin(filename)) {
-@@ -297,9 +287,7 @@ int Module::CompileFile() {
- 
-     if (diBuilder)
-         diBuilder->finalize();
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope TimeScope("Optimize");
--#endif
-     if (errorCount == 0)
-         Optimize(module, g->opt.level);
- 
-@@ -1243,15 +1231,8 @@ bool Module::writeObjectFileOrAssembly(llvm::TargetMachine *targetMachine, llvm:
-                                        const char *outFileName) {
-     // Figure out if we're generating object file or assembly output, and
-     // set binary output for object files
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    Assert(!g->target->isGenXTarget());
--    llvm::TargetMachine::CodeGenFileType fileType =
--        (outputType == Object) ? llvm::TargetMachine::CGFT_ObjectFile : llvm::TargetMachine::CGFT_AssemblyFile;
--    bool binary = (fileType == llvm::TargetMachine::CGFT_ObjectFile);
--#else // LLVM 10.0+
-     llvm::CodeGenFileType fileType = (outputType == Object) ? llvm::CGFT_ObjectFile : llvm::CGFT_AssemblyFile;
-     bool binary = (fileType == llvm::CGFT_ObjectFile);
--#endif
- 
-     llvm::sys::fs::OpenFlags flags = binary ? llvm::sys::fs::F_None : llvm::sys::fs::F_Text;
- 
-@@ -2219,11 +2200,7 @@ void Module::execPreprocessor(const char *infilename, llvm::raw_string_ostream *
-     inst.setTarget(target);
-     inst.createSourceManager(inst.getFileManager());
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    clang::FrontendInputFile inputFile(infilename, clang::InputKind::Unknown);
--#else // LLVM 10.0+
-     clang::FrontendInputFile inputFile(infilename, clang::InputKind());
--#endif
- 
-     inst.InitializeSourceManager(inputFile);
- 
-@@ -2722,9 +2699,7 @@ int Module::CompileAndOutput(const char *srcFile, Arch arch, const char *cpu, st
- 
-         m = new Module(srcFile);
-         if (m->CompileFile() == 0) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-             llvm::TimeTraceScope TimeScope("Backend");
--#endif
- #ifdef ISPC_GENX_ENABLED
-             if (outputType == Asm || outputType == Object) {
-                 if (g->target->isGenXTarget()) {
-@@ -2855,9 +2830,7 @@ int Module::CompileAndOutput(const char *srcFile, Arch arch, const char *cpu, st
- 
-             m = new Module(srcFile);
-             int compileFileError = m->CompileFile();
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-             llvm::TimeTraceScope TimeScope("Backend");
--#endif
-             if (compileFileError == 0) {
-                 // Create the dispatch module, unless already created;
-                 // in the latter case, just do the checking
-diff --git a/src/module.h b/src/module.h
-index 61d3cfea0..603124d50 100644
---- a/src/module.h
-+++ b/src/module.h
-@@ -43,9 +43,7 @@
- 
- #include <llvm/IR/DebugInfo.h>
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/TimeProfiler.h>
--#endif
- 
- #ifdef ISPC_GENX_ENABLED
- #include "ocl_igc_interface/igc_ocl_device_ctx.h"
-diff --git a/src/opt.cpp b/src/opt.cpp
-index a655a8344..5b1ac7b63 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -66,6 +66,7 @@
- #include <llvm/IR/Instructions.h>
- #include <llvm/IR/IntrinsicInst.h>
- #include <llvm/IR/Intrinsics.h>
-+#include <llvm/IR/IntrinsicsX86.h>
- #include <llvm/IR/LegacyPassManager.h>
- #include <llvm/IR/Module.h>
- #include <llvm/IR/PatternMatch.h>
-@@ -85,9 +86,6 @@
- #include <llvm/Transforms/Scalar/InstSimplifyPass.h>
- #include <llvm/Transforms/Utils.h>
- #include <llvm/Transforms/Utils/BasicBlockUtils.h>
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
--#include <llvm/IR/IntrinsicsX86.h>
--#endif
- 
- #ifdef ISPC_HOST_IS_LINUX
- #include <alloca.h>
-@@ -1003,10 +1001,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
-                 name = LLVMGetName(callInst->getArgOperand(0), "_load");
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                llvm::Instruction *loadInst =
--                    new llvm::LoadInst(castPtr, name, false /* not volatile */, align, (llvm::Instruction *)NULL);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-                 llvm::Instruction *loadInst = new llvm::LoadInst(castPtr, name, false /* not volatile */,
-                                                                  llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
- #else
-@@ -1043,13 +1038,8 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedStore32 ? 4 : 8;
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                llvm::StoreInst *storeInst = new llvm::StoreInst(rvalue, castPtr, (llvm::Instruction *)NULL);
--                storeInst->setAlignment(align);
--#else
-                 llvm::StoreInst *storeInst = new llvm::StoreInst(rvalue, castPtr, (llvm::Instruction *)NULL,
-                                                                  llvm::MaybeAlign(align).valueOrOne());
--#endif
-                 lCopyMetadata(storeInst, callInst);
-                 llvm::ReplaceInstWithInst(callInst, storeInst);
- 
-@@ -1066,9 +1056,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool IntrinsicsOpt::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("IntrinsicsOpt::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -1239,9 +1227,7 @@ bool InstructionSimplifyPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool InstructionSimplifyPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("InstructionSimplifyPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -2974,16 +2960,10 @@ static bool lImproveMaskedStore(llvm::CallInst *callInst) {
- 
-             lvalue = new llvm::BitCastInst(lvalue, ptrType, "lvalue_to_ptr_type", callInst);
-             lCopyMetadata(lvalue, callInst);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--            store =
--                new llvm::StoreInst(rvalue, lvalue, false /* not volatile */,
--                                    g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align);
--#else
-             store = new llvm::StoreInst(
-                 rvalue, lvalue, false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-                     .valueOrOne());
--#endif
-         }
-         if (store != NULL) {
-             lCopyMetadata(store, callInst);
-@@ -3059,11 +3039,7 @@ static bool lImproveMaskedLoad(llvm::CallInst *callInst, llvm::BasicBlock::itera
-         {
-             llvm::Type *ptrType = llvm::PointerType::get(callInst->getType(), 0);
-             ptr = new llvm::BitCastInst(ptr, ptrType, "ptr_cast_for_load", callInst);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--            load = new llvm::LoadInst(ptr, callInst->getName(), false /* not volatile */,
--                                      g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align,
--                                      (llvm::Instruction *)NULL);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-             load = new llvm::LoadInst(
-                 ptr, callInst->getName(), false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-@@ -3129,9 +3105,7 @@ bool ImproveMemoryOpsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ImproveMemoryOpsPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ImproveMemoryOpsPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -3424,9 +3398,7 @@ llvm::Value *lGEPAndLoad(llvm::Value *basePtr, int64_t offset, int align, llvm::
-                          llvm::Type *type) {
-     llvm::Value *ptr = lGEPInst(basePtr, LLVMInt64(offset), "new_base", insertBefore);
-     ptr = new llvm::BitCastInst(ptr, llvm::PointerType::get(type, 0), "ptr_cast", insertBefore);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, align, insertBefore);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-     return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, llvm::MaybeAlign(align), insertBefore);
- #else // LLVM 11.0+
-     return new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-@@ -4135,9 +4107,7 @@ bool GatherCoalescePass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool GatherCoalescePass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("GatherCoalescePass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -4467,9 +4437,7 @@ bool ReplacePseudoMemoryOpsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplacePseudoMemoryOpsPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplacePseudoMemoryOpsPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -4573,9 +4541,7 @@ bool IsCompileTimeConstantPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool IsCompileTimeConstantPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("IsCompileTimeConstantPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5201,9 +5167,7 @@ bool PeepholePass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool PeepholePass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("PeepholePass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5299,9 +5263,7 @@ bool ReplaceStdlibShiftPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceStdlibShiftPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceStdlibShiftPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5399,9 +5361,7 @@ llvm::Instruction *FixBooleanSelectPass::fixSelect(llvm::SelectInst *sel, llvm::
- }
- 
- bool FixBooleanSelectPass::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("FixBooleanSelectPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
- 
-     return modifiedAny;
-@@ -5964,9 +5924,7 @@ bool GenXGatherCoalescing::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool GenXGatherCoalescing::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("GenXGatherCoalescing::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6113,9 +6071,7 @@ bool PromoteToPrivateMemoryPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool PromoteToPrivateMemoryPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("PromoteToPrivateMemoryPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6181,9 +6137,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceLLVMIntrinsics::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceLLVMIntrinsics::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6278,9 +6232,7 @@ bool ReplaceUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceUnsupportedInsts::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceUnsupportedInsts::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6369,9 +6321,7 @@ bool CheckUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool CheckUnsupportedInsts::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("CheckUnsupportedInsts::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6440,9 +6390,7 @@ bool MangleOpenCLBuiltins::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool MangleOpenCLBuiltins::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("MangleOpenCLBuiltins::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6828,9 +6776,7 @@ bool FixAddressSpace::runOnFunction(llvm::Function &F) {
-     // Transformations are correct when the function is not internal.
-     // This is due to address space calculation algorithm.
-     // TODO: problems can be met in case of Stack Calls
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("FixAddressSpace::runOnFunction", F.getName());
--#endif
-     if (F.getLinkage() == llvm::GlobalValue::LinkageTypes::InternalLinkage)
-         return false;
- 
-@@ -6854,9 +6800,7 @@ class DemotePHIs : public llvm::FunctionPass {
- char DemotePHIs::ID = 0;
- 
- bool DemotePHIs::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("DemotePHIs::runOnFunction", F.getName());
--#endif
-     if (F.isDeclaration() || skipFunction(F))
-         return false;
-     std::vector<llvm::Instruction *> WorkList;
-diff --git a/src/type.cpp b/src/type.cpp
-index 688a4e874..fa0cb04db 100644
---- a/src/type.cpp
-+++ b/src/type.cpp
-@@ -1822,14 +1822,10 @@ llvm::DIType *StructType::GetDIType(llvm::DIScope *scope) const {
-     llvm::DIFile *diFile = pos.GetDIFile();
-     llvm::DINamespace *diSpace = pos.GetDINamespace();
-     return m->diBuilder->createStructType(diSpace, GetString(), diFile,
--                                          pos.first_line,          // Line number
--                                          layout->getSizeInBits(), // Size in bits
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                                          layout->getAlignment() * 8, // Alignment in bits
--#else                                                                 // LLVM 10.0+
-+                                          pos.first_line,                     // Line number
-+                                          layout->getSizeInBits(),            // Size in bits
-                                           layout->getAlignment().value() * 8, // Alignment in bits
--#endif
--                                          llvm::DINode::FlagZero, // Flags
-+                                          llvm::DINode::FlagZero,             // Flags
-                                           NULL, elements);
- }
- 
-diff --git a/tests/lit-tests/1771.ispc b/tests/lit-tests/1771.ispc
-index 98064d84d..4feb73dd7 100644
---- a/tests/lit-tests/1771.ispc
-+++ b/tests/lit-tests/1771.ispc
-@@ -5,7 +5,6 @@
- // RUN: %{ispc} %s --target=sse4-i16x8 --emit-asm -o - | FileCheck %s -check-prefix=CHECKSSE4_I16X8
- // RUN: %{ispc} %s --target=sse4-i8x16 --emit-asm -o - | FileCheck %s -check-prefix=CHECKSSE4_I8X16
- 
--// REQUIRES: LLVM_10_0+
- // REQUIRES: X86_ENABLED
- 
- // CHECKAVX2_I32X8: {{[a-z]*xor[a-z]*}}  %xmm0, %xmm0, %xmm0
-diff --git a/tests/lit-tests/1844.ispc b/tests/lit-tests/1844.ispc
-index 793a8866c..189edf4c3 100644
---- a/tests/lit-tests/1844.ispc
-+++ b/tests/lit-tests/1844.ispc
-@@ -6,9 +6,6 @@
- 
- // REQUIRES: X86_ENABLED
- 
--// It doesn't work for anything earlier than 10.0, but it will not be fixed, so don't run.
--// REQUIRES: LLVM_10_0+
--
- extern uniform unsigned int64 var_6;
- extern uniform unsigned int16 var_11;
- extern uniform bool arr_201 [1] [15] [20];
-diff --git a/tests/lit-tests/1926.ispc b/tests/lit-tests/1926.ispc
-index 70f7cc3c2..7921c91a6 100644
---- a/tests/lit-tests/1926.ispc
-+++ b/tests/lit-tests/1926.ispc
-@@ -2,8 +2,6 @@
- // RUN: cat %T/1926.o.json \
- // RUN:   | FileCheck %s
- 
--// REQUIRES: LLVM_10_0+
--
- // CHECK: "traceEvents"
- // CHECK: "detail"
- export uniform int foo(uniform int a[], uniform int count) {
-diff --git a/tests/lit-tests/cpus_x86.ispc b/tests/lit-tests/cpus_x86.ispc
-index 516efdd4c..4d60186f6 100644
---- a/tests/lit-tests/cpus_x86.ispc
-+++ b/tests/lit-tests/cpus_x86.ispc
-@@ -24,6 +24,8 @@
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icl
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icelake-server
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icx
-+//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tigerlake
-+//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tgl
- 
- // REQUIRES: X86_ENABLED
- 
-diff --git a/tests/lit-tests/cpus_x86_llvm10.ispc b/tests/lit-tests/cpus_x86_llvm10.ispc
-deleted file mode 100644
-index ef00000e5..000000000
---- a/tests/lit-tests/cpus_x86_llvm10.ispc
-+++ /dev/null
-@@ -1,11 +0,0 @@
--// The test checks that cpu definitions (including all synonyms) are successfully consumed by compiler.
--
--//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tigerlake
--//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tgl
--
--// REQUIRES: X86_ENABLED
--// REQUIRES: LLVM_10_0+
--
--uniform int i;
--
--void foo() {}
-diff --git a/tests/lit-tests/lit.cfg b/tests/lit-tests/lit.cfg
-index 17016579d..045e69437 100644
---- a/tests/lit-tests/lit.cfg
-+++ b/tests/lit-tests/lit.cfg
-@@ -30,11 +30,6 @@ print("Config:")
- 
- # LLVM version
- llvm_version = LooseVersion(ispc_llvm_version_number)
--if llvm_version >= LooseVersion("10.0.0"):
--    print("LLVM_10_0+: YES")
--    config.available_features.add("LLVM_10_0+")
--else:
--    print("LLVM_10_0+: NO")
- 
- if llvm_version >= LooseVersion("12.0.0"):
-     print("LLVM_12_0+: YES")
diff --git a/srcpkgs/ispc/patches/llvm12-003.patch b/srcpkgs/ispc/patches/llvm12-003.patch
deleted file mode 100644
index 0423afc9e3f9..000000000000
--- a/srcpkgs/ispc/patches/llvm12-003.patch
+++ /dev/null
@@ -1,1504 +0,0 @@
-From 1851d18b213dbad169937076176b2d5509733c76 Mon Sep 17 00:00:00 2001
-From: Deepak Rajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Tue, 12 Jan 2021 22:15:12 -0800
-Subject: [PATCH] fixes #1821 - Removing LLVMGetName() and switching to
- LLVM::Twine.
-
----
- src/ctx.cpp      | 304 ++++++++++++++++++++++-------------------------
- src/ctx.h        |  72 +++++------
- src/expr.cpp     |  36 +++---
- src/llvmutil.cpp |  17 ---
- src/llvmutil.h   |   5 -
- src/opt.cpp      | 103 +++++++++-------
- 6 files changed, 255 insertions(+), 282 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 42c4ea09d..ded524b71 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1020,8 +1020,8 @@ void FunctionEmitContext::EmitCaseLabel(int value, bool checkMask, SourcePos pos
-     llvm::BasicBlock *bbCaseImpl = NULL;
-     if (emitGenXHardwareMask()) {
-         // Create basic block with actual case implementation
--        std::string bbName = bbCase->getName().str() + "_impl";
--        bbCaseImpl = CreateBasicBlock(bbName.c_str(), bbCase);
-+        llvm::Twine bbName = llvm::Twine(bbCase->getName()) + "_impl";
-+        bbCaseImpl = CreateBasicBlock(bbName, bbCase);
-     }
- #endif
- 
-@@ -1185,7 +1185,7 @@ bool FunctionEmitContext::initLabelBBlocks(ASTNode *node, void *data) {
-     if (ctx->labelMap.find(ls->name) != ctx->labelMap.end())
-         Error(ls->pos, "Multiple labels named \"%s\" in function.", ls->name.c_str());
-     else {
--        llvm::BasicBlock *bb = ctx->CreateBasicBlock(ls->name.c_str());
-+        llvm::BasicBlock *bb = ctx->CreateBasicBlock(ls->name);
-         ctx->labelMap[ls->name] = bb;
-     }
-     return true;
-@@ -1299,7 +1299,7 @@ llvm::Value *FunctionEmitContext::Any(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_any"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_any");
- }
- 
- llvm::Value *FunctionEmitContext::All(llvm::Value *mask) {
-@@ -1315,7 +1315,7 @@ llvm::Value *FunctionEmitContext::All(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_all"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_all");
- }
- 
- llvm::Value *FunctionEmitContext::None(llvm::Value *mask) {
-@@ -1331,7 +1331,7 @@ llvm::Value *FunctionEmitContext::None(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_none"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_none");
- }
- 
- llvm::Value *FunctionEmitContext::LaneMask(llvm::Value *v) {
-@@ -1349,7 +1349,7 @@ llvm::Value *FunctionEmitContext::LaneMask(llvm::Value *v) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, v, LLVMGetName(v, "_movmsk"));
-+    return CallInst(fmm, NULL, v, llvm::Twine(v->getName()) + "_movmsk");
- }
- 
- llvm::Value *FunctionEmitContext::MasksAllEqual(llvm::Value *v1, llvm::Value *v2) {
-@@ -1364,11 +1364,12 @@ llvm::Value *FunctionEmitContext::MasksAllEqual(llvm::Value *v1, llvm::Value *v2
- #else
-     if (g->target->getArch() == Arch::wasm32) {
-         llvm::Function *fmm = m->module->getFunction("__wasm_cmp_msk_eq");
--        return CallInst(fmm, NULL, {v1, v2}, LLVMGetName("wasm_cmp_msk_eq", v1, v2));
-+        return CallInst(fmm, NULL, {v1, v2}, ((llvm::Twine("wasm_cmp_msk_eq_") + v1->getName()) + "_") + v2->getName());
-     }
-     llvm::Value *mm1 = LaneMask(v1);
-     llvm::Value *mm2 = LaneMask(v2);
--    return CmpInst(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_EQ, mm1, mm2, LLVMGetName("equal", v1, v2));
-+    return CmpInst(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_EQ, mm1, mm2,
-+                   ((llvm::Twine("equal_") + v1->getName()) + "_") + v2->getName());
- #endif
- }
- 
-@@ -1392,7 +1393,7 @@ llvm::Value *FunctionEmitContext::GetStringPtr(const std::string &str) {
-     return new llvm::BitCastInst(lstrPtr, LLVMTypes::VoidPointerType, "str_void_ptr", bblock);
- }
- 
--llvm::BasicBlock *FunctionEmitContext::CreateBasicBlock(const char *name, llvm::BasicBlock *insertAfter) {
-+llvm::BasicBlock *FunctionEmitContext::CreateBasicBlock(const llvm::Twine &name, llvm::BasicBlock *insertAfter) {
-     llvm::BasicBlock *newBB = llvm::BasicBlock::Create(*g->ctx, name, llvmFunction);
-     if (insertAfter)
-         newBB->moveAfter(insertAfter);
-@@ -1416,14 +1417,15 @@ llvm::Value *FunctionEmitContext::I1VecToBoolVec(llvm::Value *b) {
- 
-         for (unsigned int i = 0; i < at->getNumElements(); ++i) {
-             llvm::Value *elt = ExtractInst(b, i);
--            llvm::Value *sext = SwitchBoolSize(elt, LLVMTypes::BoolVectorStorageType, LLVMGetName(elt, "_to_boolvec"));
-+            llvm::Value *sext =
-+                SwitchBoolSize(elt, LLVMTypes::BoolVectorStorageType, llvm::Twine(elt->getName()) + "_to_boolvec");
-             ret = InsertInst(ret, sext, i);
-         }
-         return ret;
-     } else {
-         // For non-array types, convert to 'LLVMTypes::BoolVectorType' if
-         // necessary.
--        return SwitchBoolSize(b, LLVMTypes::BoolVectorType, LLVMGetName(b, "_to_boolvec"));
-+        return SwitchBoolSize(b, LLVMTypes::BoolVectorType, llvm::Twine(b->getName()) + "_to_boolvec");
-     }
- }
- 
-@@ -1563,7 +1565,7 @@ static int lArrayVectorWidth(llvm::Type *t) {
- }
- 
- llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps inst, llvm::Value *v0, llvm::Value *v1,
--                                                 const char *name) {
-+                                                 const llvm::Twine &name) {
-     if (v0 == NULL || v1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1573,7 +1575,7 @@ llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps in
-     llvm::Type *type = v0->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *bop = llvm::BinaryOperator::Create(inst, v0, v1, name ? name : "", bblock);
-+        llvm::Instruction *bop = llvm::BinaryOperator::Create(inst, v0, v1, name, bblock);
-         AddDebugPos(bop);
-         return bop;
-     } else {
-@@ -1591,7 +1593,7 @@ llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps in
-     }
- }
- 
--llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const char *name) {
-+llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const llvm::Twine &name) {
-     if (v == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1603,14 +1605,14 @@ llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const char *name)
-     llvm::Type *type = v->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *binst = llvm::BinaryOperator::CreateNot(v, name ? name : "not", bblock);
-+        llvm::Instruction *binst = llvm::BinaryOperator::CreateNot(v, name.isTriviallyEmpty() ? "not" : name, bblock);
-         AddDebugPos(binst);
-         return binst;
-     } else {
-         llvm::Value *ret = llvm::UndefValue::get(type);
-         for (int i = 0; i < arraySize; ++i) {
-             llvm::Value *a = ExtractInst(v, i);
--            llvm::Value *op = llvm::BinaryOperator::CreateNot(a, name ? name : "not", bblock);
-+            llvm::Value *op = llvm::BinaryOperator::CreateNot(a, name.isTriviallyEmpty() ? "not" : name, bblock);
-             AddDebugPos(op);
-             ret = InsertInst(ret, op, i);
-         }
-@@ -1638,7 +1640,7 @@ static llvm::Type *lGetMatchingBoolVectorType(llvm::Type *type) {
- }
- 
- llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm::CmpInst::Predicate pred,
--                                          llvm::Value *v0, llvm::Value *v1, const char *name) {
-+                                          llvm::Value *v0, llvm::Value *v1, const llvm::Twine &name) {
-     if (v0 == NULL || v1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1648,7 +1650,8 @@ llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm
-     llvm::Type *type = v0->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *ci = llvm::CmpInst::Create(inst, pred, v0, v1, name ? name : "cmp", bblock);
-+        llvm::Instruction *ci =
-+            llvm::CmpInst::Create(inst, pred, v0, v1, name.isTriviallyEmpty() ? "cmp" : name, bblock);
-         AddDebugPos(ci);
-         return ci;
-     } else {
-@@ -1657,14 +1660,14 @@ llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm
-         for (int i = 0; i < arraySize; ++i) {
-             llvm::Value *a = ExtractInst(v0, i);
-             llvm::Value *b = ExtractInst(v1, i);
--            llvm::Value *op = CmpInst(inst, pred, a, b, name);
-+            llvm::Value *op = CmpInst(inst, pred, a, b, name.isTriviallyEmpty() ? "cmp" : name);
-             ret = InsertInst(ret, op, i);
-         }
-         return ret;
-     }
- }
- 
--llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const char *name) {
-+llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1704,21 +1707,19 @@ llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const char *n
-     return ret;
- }
- 
--llvm::Value *FunctionEmitContext::BitCastInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Value *FunctionEmitContext::BitCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_bitcast");
--
--    llvm::Instruction *inst = new llvm::BitCastInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::BitCastInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_bitcast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const char *name) {
-+llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1728,23 +1729,19 @@ llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const char *n
-         // no-op for varying pointers; they're already vectors of ints
-         return value;
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_ptr2int");
-     llvm::Type *type = LLVMTypes::PointerIntType;
--    llvm::Instruction *inst = new llvm::PtrToIntInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::PtrToIntInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_ptr2int");
--
-     llvm::Type *fromType = value->getType();
-     if (llvm::isa<llvm::VectorType>(fromType)) {
-         // varying pointer
-@@ -1752,27 +1749,26 @@ llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *t
-             // already the right type--done
-             return value;
-         else if (fromType->getScalarSizeInBits() > toType->getScalarSizeInBits())
--            return TruncInst(value, toType, name);
-+            return TruncInst(value, toType,
-+                             name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name);
-         else {
-             AssertPos(currentPos, fromType->getScalarSizeInBits() < toType->getScalarSizeInBits());
--            return ZExtInst(value, toType, name);
-+            return ZExtInst(value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name);
-         }
-     }
- 
--    llvm::Instruction *inst = new llvm::PtrToIntInst(value, toType, name, bblock);
-+    llvm::Instruction *inst = new llvm::PtrToIntInst(
-+        value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_int2ptr");
--
-     llvm::Type *fromType = value->getType();
-     if (llvm::isa<llvm::VectorType>(fromType)) {
-         // varying pointer
-@@ -1780,95 +1776,87 @@ llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *t
-             // done
-             return value;
-         else if (fromType->getScalarSizeInBits() > toType->getScalarSizeInBits())
--            return TruncInst(value, toType, name);
-+            return TruncInst(value, toType,
-+                             name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name);
-         else {
-             AssertPos(currentPos, fromType->getScalarSizeInBits() < toType->getScalarSizeInBits());
--            return ZExtInst(value, toType, name);
-+            return ZExtInst(value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name);
-         }
-     }
- 
--    llvm::Instruction *inst = new llvm::IntToPtrInst(value, toType, name, bblock);
-+    llvm::Instruction *inst = new llvm::IntToPtrInst(
-+        value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::TruncInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::TruncInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_trunc");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::TruncInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::TruncInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_trunc" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
- llvm::Instruction *FunctionEmitContext::CastInst(llvm::Instruction::CastOps op, llvm::Value *value, llvm::Type *type,
--                                                 const char *name) {
-+                                                 const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_cast");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = llvm::CastInst::Create(op, value, type, name, bblock);
-+    llvm::Instruction *inst = llvm::CastInst::Create(
-+        op, value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_cast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::FPCastInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::FPCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_cast");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = llvm::CastInst::CreateFPCast(value, type, name, bblock);
-+    llvm::Instruction *inst = llvm::CastInst::CreateFPCast(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_cast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::SExtInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::SExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_sext");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::SExtInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::SExtInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_sext" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::ZExtInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::ZExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_zext");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::ZExtInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::ZExtInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_zext" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
-@@ -1913,14 +1901,15 @@ llvm::Value *FunctionEmitContext::applyVaryingGEP(llvm::Value *basePtr, llvm::Va
-         scale = SmearUniform(scale);
-         Assert(index != NULL);
-         // offset = index * scale
--        offset = BinaryOperator(llvm::Instruction::Mul, scale, index, LLVMGetName("mul", scale, index));
-+        offset = BinaryOperator(llvm::Instruction::Mul, scale, index,
-+                                ((llvm::Twine("mul_") + scale->getName()) + "_") + index->getName());
-     }
- 
-     // For 64-bit targets, if we've been doing our offset calculations in
-     // 32 bits, we still have to convert to a 64-bit value before we
-     // actually add the offset to the pointer.
-     if (g->target->is32Bit() == false && g->opt.force32BitAddressing == true)
--        offset = SExtInst(offset, LLVMTypes::Int64VectorType, LLVMGetName(offset, "_to_64"));
-+        offset = SExtInst(offset, LLVMTypes::Int64VectorType, llvm::Twine(offset->getName()) + "_to_64");
- 
-     // Smear out the pointer to be varying; either the base pointer or the
-     // index must be varying for this method to be called.
-@@ -1929,7 +1918,7 @@ llvm::Value *FunctionEmitContext::applyVaryingGEP(llvm::Value *basePtr, llvm::Va
-     llvm::Value *varyingPtr = baseIsUniform ? SmearUniform(basePtr) : basePtr;
- 
-     // newPtr = ptr + offset
--    return BinaryOperator(llvm::Instruction::Add, varyingPtr, offset, LLVMGetName(basePtr, "_offset"));
-+    return BinaryOperator(llvm::Instruction::Add, varyingPtr, offset, llvm::Twine(basePtr->getName()) + "_offset");
- }
- 
- void FunctionEmitContext::MatchIntegerTypes(llvm::Value **v0, llvm::Value **v1) {
-@@ -2006,13 +1995,13 @@ llvm::Value *FunctionEmitContext::MakeSlicePointer(llvm::Value *ptr, llvm::Value
-     llvm::StructType *st = llvm::StructType::get(*g->ctx, eltTypes);
- 
-     llvm::Value *ret = llvm::UndefValue::get(st);
--    ret = InsertInst(ret, ptr, 0, LLVMGetName(ret, "_slice_ptr"));
--    ret = InsertInst(ret, offset, 1, LLVMGetName(ret, "_slice_offset"));
-+    ret = InsertInst(ret, ptr, 0, llvm::Twine(ret->getName()) + "_slice_ptr");
-+    ret = InsertInst(ret, offset, 1, llvm::Twine(ret->getName()) + "_slice_offset");
-     return ret;
- }
- 
- llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index, const Type *ptrRefType,
--                                                    const char *name) {
-+                                                    const llvm::Twine &name) {
-     if (basePtr == NULL || index == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2065,8 +2054,8 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
-         // uniform, so just emit the regular LLVM GEP instruction
-         llvm::Value *ind[1] = {index};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&ind[0], &ind[1]);
--        llvm::Instruction *inst =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "gep", bblock);
-+        llvm::Instruction *inst = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                                  name.isTriviallyEmpty() ? "gep" : name, bblock);
-         AddDebugPos(inst);
-         return inst;
-     } else
-@@ -2074,7 +2063,7 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
- }
- 
- llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0, llvm::Value *index1,
--                                                    const Type *ptrRefType, const char *name) {
-+                                                    const Type *ptrRefType, const llvm::Twine &name) {
-     if (basePtr == NULL || index0 == NULL || index1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2114,8 +2103,8 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
-         // uniform, so just emit the regular LLVM GEP instruction
-         llvm::Value *indices[2] = {index0, index1};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&indices[0], &indices[2]);
--        llvm::Instruction *inst =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "gep", bblock);
-+        llvm::Instruction *inst = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                                  name.isTriviallyEmpty() ? "gep" : name, bblock);
-         AddDebugPos(inst);
-         return inst;
-     } else {
-@@ -2138,7 +2127,7 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
- }
- 
- llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int elementNum, const Type *ptrRefType,
--                                                   const char *name, const PointerType **resultPtrType) {
-+                                                   const llvm::Twine &name, const PointerType **resultPtrType) {
-     if (resultPtrType != NULL)
-         AssertPos(currentPos, ptrRefType != NULL);
- 
-@@ -2195,8 +2184,8 @@ llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int
-         // If the pointer is uniform, we can use the regular LLVM GEP.
-         llvm::Value *offsets[2] = {LLVMInt32(0), LLVMInt32(elementNum)};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&offsets[0], &offsets[2]);
--        resultPtr =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "struct_offset", bblock);
-+        resultPtr = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                    name.isTriviallyEmpty() ? "struct_offset" : name, bblock);
-     } else {
-         // Otherwise do the math to find the offset and add it to the given
-         // varying pointers
-@@ -2237,7 +2226,7 @@ llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int
-         return resultPtr;
- }
- 
--llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if ((value == NULL) || (toType == NULL)) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2248,20 +2237,18 @@ llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type
-     llvm::Value *newBool = value;
-     if (g->target->getDataLayout()->getTypeSizeInBits(fromType) >
-         g->target->getDataLayout()->getTypeSizeInBits(toType)) {
--        if (name == NULL)
--            name = LLVMGetName(value, "_switchBool");
--        newBool = TruncInst(value, toType, name);
-+        newBool =
-+            TruncInst(value, toType, name.isTriviallyEmpty() ? (llvm::Twine(value->getName()) + "_switchBool") : name);
-     } else if (g->target->getDataLayout()->getTypeSizeInBits(fromType) <
-                g->target->getDataLayout()->getTypeSizeInBits(toType)) {
--        if (name == NULL)
--            name = LLVMGetName(value, "_switchBool");
--        newBool = SExtInst(value, toType, name);
-+        newBool =
-+            SExtInst(value, toType, name.isTriviallyEmpty() ? (llvm::Twine(value->getName()) + "_switchBool") : name);
-     }
- 
-     return newBool;
- }
- 
--llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, const char *name) {
-+llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, const llvm::Twine &name) {
-     if (ptr == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2270,13 +2257,13 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
-     llvm::PointerType *pt = llvm::dyn_cast<llvm::PointerType>(ptr->getType());
-     AssertPos(currentPos, pt != NULL);
- 
--    if (name == NULL)
--        name = LLVMGetName(ptr, "_load");
--
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    llvm::LoadInst *inst = new llvm::LoadInst(pt->getPointerElementType(), ptr, name, bblock);
-+    llvm::LoadInst *inst =
-+        new llvm::LoadInst(pt->getPointerElementType(), ptr,
-+                           name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name, bblock);
- #else
--    llvm::LoadInst *inst = new llvm::LoadInst(ptr, name, bblock);
-+    llvm::LoadInst *inst =
-+        new llvm::LoadInst(ptr, name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name, bblock);
- #endif
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
-@@ -2307,8 +2294,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
- static llvm::Value *lFinalSliceOffset(FunctionEmitContext *ctx, llvm::Value *ptr, const PointerType **ptrType) {
-     Assert(CastType<PointerType>(*ptrType) != NULL);
- 
--    llvm::Value *slicePtr = ctx->ExtractInst(ptr, 0, LLVMGetName(ptr, "_ptr"));
--    llvm::Value *sliceOffset = ctx->ExtractInst(ptr, 1, LLVMGetName(ptr, "_offset"));
-+    llvm::Value *slicePtr = ctx->ExtractInst(ptr, 0, llvm::Twine(ptr->getName()) + "_ptr");
-+    llvm::Value *sliceOffset = ctx->ExtractInst(ptr, 1, llvm::Twine(ptr->getName()) + "_offset");
- 
-     // slicePtr should be a pointer to an soa-width wide array of the
-     // final atomic/enum/pointer type
-@@ -2327,14 +2314,14 @@ static llvm::Value *lFinalSliceOffset(FunctionEmitContext *ctx, llvm::Value *ptr
-         slicePtr = ctx->BitCastInst(slicePtr, (*ptrType)->LLVMType(g->ctx));
- 
-     // And finally index based on the slice offset
--    return ctx->GetElementPtrInst(slicePtr, sliceOffset, *ptrType, LLVMGetName(slicePtr, "_final_gep"));
-+    return ctx->GetElementPtrInst(slicePtr, sliceOffset, *ptrType, llvm::Twine(slicePtr->getName()) + "_final_gep");
- }
- 
- /** Utility routine that loads from a uniform pointer to soa<> data,
-     returning a regular uniform (non-SOA result).
-  */
- llvm::Value *FunctionEmitContext::loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType,
--                                                     const char *name) {
-+                                                     const llvm::Twine &name) {
-     const Type *unifType = ptrType->GetBaseType()->GetAsUniformType();
- 
-     const CollectionType *ct = CastType<CollectionType>(ptrType->GetBaseType());
-@@ -2363,7 +2350,7 @@ llvm::Value *FunctionEmitContext::loadUniformFromSOA(llvm::Value *ptr, llvm::Val
- }
- 
- llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrRefType,
--                                           const char *name, bool one_elem) {
-+                                           const llvm::Twine &name, bool one_elem) {
-     if (ptr == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2371,9 +2358,6 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
- 
-     AssertPos(currentPos, ptrRefType != NULL && mask != NULL);
- 
--    if (name == NULL)
--        name = LLVMGetName(ptr, "_load");
--
-     const PointerType *ptrType;
-     const Type *elType;
-     if (CastType<ReferenceType>(ptrRefType) != NULL) {
-@@ -2393,7 +2377,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
- 
-     if (ptrType->IsUniformType()) {
-         if (ptrType->IsSlice()) {
--            return loadUniformFromSOA(ptr, mask, ptrType, name);
-+            return loadUniformFromSOA(ptr, mask, ptrType,
-+                                      name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name);
-         } else {
-             // FIXME: same issue as above load inst regarding alignment...
-             //
-@@ -2405,11 +2390,15 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-             const AtomicType *atomicType = CastType<AtomicType>(ptrType->GetBaseType());
- 
- #if ISPC_LLVM_VERSION <= ISPC_LLVM_10_0
--            llvm::LoadInst *inst = new llvm::LoadInst(ptr, name, false /* not volatile */, bblock);
-+            llvm::LoadInst *inst =
-+                new llvm::LoadInst(ptr, name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name,
-+                                   false /* not volatile */, bblock);
- #else // LLVM 11.0+
-             llvm::PointerType *ptr_type = llvm::dyn_cast<llvm::PointerType>(ptr->getType());
-             llvm::LoadInst *inst =
--                new llvm::LoadInst(ptr_type->getPointerElementType(), ptr, name, false /* not volatile */, bblock);
-+                new llvm::LoadInst(ptr_type->getPointerElementType(), ptr,
-+                                   name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name,
-+                                   false /* not volatile */, bblock);
- #endif
- 
-             if (atomicType != NULL && atomicType->IsVaryingType()) {
-@@ -2433,7 +2422,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-     } else {
-         // Otherwise we should have a varying ptr and it's time for a
-         // gather.
--        llvm::Value *gather_result = gather(ptr, ptrType, GetFullMask(), name);
-+        llvm::Value *gather_result = gather(ptr, ptrType, GetFullMask(),
-+                                            name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name);
-         if (!one_elem)
-             return gather_result;
- 
-@@ -2453,19 +2443,19 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-         // We can actually call either one, since both are i32s as far as
-         // LLVM's type system is concerned...
-         llvm::Function *fmm = mm[0]->function;
--        llvm::Value *int_mask = CallInst(fmm, NULL, mask, LLVMGetName(mask, "_movmsk"));
-+        llvm::Value *int_mask = CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_movmsk");
-         std::vector<Symbol *> lz;
-         m->symbolTable->LookupFunction("__count_trailing_zeros_i64", &lz);
-         llvm::Function *flz = lz[0]->function;
--        llvm::Value *elem_idx = CallInst(flz, NULL, int_mask, LLVMGetName(mask, "_clz"));
--        llvm::Value *elem = llvm::ExtractElementInst::Create(gather_result, elem_idx,
--                                                             LLVMGetName(gather_result, "_umasked_elem"), bblock);
-+        llvm::Value *elem_idx = CallInst(flz, NULL, int_mask, llvm::Twine(mask->getName()) + "_clz");
-+        llvm::Value *elem = llvm::ExtractElementInst::Create(
-+            gather_result, elem_idx, llvm::Twine(gather_result->getName()) + "_umasked_elem", bblock);
-         return elem;
-     }
- }
- 
- llvm::Value *FunctionEmitContext::gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask,
--                                         const char *name) {
-+                                         const llvm::Twine &name) {
-     // We should have a varying pointer if we get here...
-     AssertPos(currentPos, ptrType->IsVaryingType());
- 
-@@ -2602,7 +2592,8 @@ void FunctionEmitContext::addGSMetadata(llvm::Value *v, SourcePos pos) {
-     inst->setMetadata("last_column", md);
- }
- 
--llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *name, int align, bool atEntryBlock) {
-+llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const llvm::Twine &name, int align,
-+                                             bool atEntryBlock) {
-     if (llvmType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2615,12 +2606,12 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-         llvm::Instruction *retInst = allocaBlock->getTerminator();
-         AssertPos(currentPos, retInst);
-         unsigned AS = llvmFunction->getParent()->getDataLayout().getAllocaAddrSpace();
--        inst = new llvm::AllocaInst(llvmType, AS, name ? name : "", retInst);
-+        inst = new llvm::AllocaInst(llvmType, AS, name, retInst);
-     } else {
-         // Unless the caller overrode the default and wants it in the
-         // current basic block
-         unsigned AS = llvmFunction->getParent()->getDataLayout().getAllocaAddrSpace();
--        inst = new llvm::AllocaInst(llvmType, AS, name ? name : "", bblock);
-+        inst = new llvm::AllocaInst(llvmType, AS, name, bblock);
-     }
- 
-     // If no alignment was specified but we have an array of a uniform
-@@ -2639,7 +2630,8 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::AllocaInst(const Type *ptrType, const char *name, int align, bool atEntryBlock) {
-+llvm::Value *FunctionEmitContext::AllocaInst(const Type *ptrType, const llvm::Twine &name, int align,
-+                                             bool atEntryBlock) {
-     if (ptrType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3075,66 +3067,59 @@ llvm::Instruction *FunctionEmitContext::BranchInst(llvm::BasicBlock *trueBlock,
-     return b;
- }
- 
--llvm::Value *FunctionEmitContext::ExtractInst(llvm::Value *v, int elt, const char *name) {
-+llvm::Value *FunctionEmitContext::ExtractInst(llvm::Value *v, int elt, const llvm::Twine &name) {
-     if (v == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_extract_%d", elt);
--        name = LLVMGetName(v, buf);
--    }
-     llvm::Instruction *ei = NULL;
-     if (llvm::isa<llvm::VectorType>(v->getType()))
--        ei = llvm::ExtractElementInst::Create(v, LLVMInt32(elt), name, bblock);
-+        ei = llvm::ExtractElementInst::Create(
-+            v, LLVMInt32(elt),
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_extract_") + llvm::Twine(elt)) : name, bblock);
-     else
--        ei = llvm::ExtractValueInst::Create(v, elt, name, bblock);
-+        ei = llvm::ExtractValueInst::Create(
-+            v, elt, name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_extract_") + llvm::Twine(elt)) : name,
-+            bblock);
-     AddDebugPos(ei);
-     return ei;
- }
- 
--llvm::Value *FunctionEmitContext::InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const char *name) {
-+llvm::Value *FunctionEmitContext::InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const llvm::Twine &name) {
-     if (v == NULL || eltVal == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_insert_%d", elt);
--        name = LLVMGetName(v, buf);
--    }
--
-     llvm::Instruction *ii = NULL;
-     if (llvm::isa<llvm::VectorType>(v->getType()))
--        ii = llvm::InsertElementInst::Create(v, eltVal, LLVMInt32(elt), name, bblock);
-+        ii = llvm::InsertElementInst::Create(
-+            v, eltVal, LLVMInt32(elt),
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_insert_") + llvm::Twine(elt)) : name, bblock);
-     else
--        ii = llvm::InsertValueInst::Create(v, eltVal, elt, name, bblock);
-+        ii = llvm::InsertValueInst::Create(
-+            v, eltVal, elt,
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_insert_") + llvm::Twine(elt)) : name, bblock);
-     AddDebugPos(ii);
-     return ii;
- }
- 
--llvm::Value *FunctionEmitContext::ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const char *name) {
-+llvm::Value *FunctionEmitContext::ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask,
-+                                              const llvm::Twine &name) {
-     if (v1 == NULL || v2 == NULL || mask == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_shuffle");
--        name = LLVMGetName(v1, buf);
--    }
--
--    llvm::Instruction *ii = new llvm::ShuffleVectorInst(v1, v2, mask, name, bblock);
-+    llvm::Instruction *ii = new llvm::ShuffleVectorInst(
-+        v1, v2, mask, name.isTriviallyEmpty() ? (llvm::Twine(v1->getName()) + "_shuffle") : name, bblock);
- 
-     AddDebugPos(ii);
-     return ii;
- }
- 
--llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vecType, const char *name) {
-+llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vecType, const llvm::Twine &name) {
-     if (v == NULL || vecType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3148,12 +3133,6 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     Assert(ty && ty->getVectorElementType() == v->getType());
- #endif
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_broadcast");
--        name = LLVMGetName(v, buf);
--    }
--
-     // Generate the following sequence:
-     //   %name_init.i = insertelement <4 x i32> undef, i32 %val, i32 0
-     //   %name.i = shufflevector <4 x i32> %name_init.i, <4 x i32> undef,
-@@ -3163,7 +3142,7 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     llvm::Value *undef2 = llvm::UndefValue::get(vecType);
- 
-     // InsertElement
--    llvm::Twine tw = llvm::Twine(name) + llvm::Twine("_init");
-+    llvm::Twine tw = name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + llvm::Twine("_init");
-     llvm::Value *insert = InsertInst(undef1, v, 0, tw.str().c_str());
- 
-     // ShuffleVector
-@@ -3179,28 +3158,27 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-         llvm::ConstantVector::getSplat(llvm::ElementCount::get(static_cast<unsigned int>(ty->getNumElements()), false),
-                                        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
- #endif
--    llvm::Value *ret = ShuffleInst(insert, undef2, zeroVec, name);
-+    llvm::Value *ret = ShuffleInst(insert, undef2, zeroVec,
-+                                   name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name);
- 
-     return ret;
- }
- 
--llvm::PHINode *FunctionEmitContext::PhiNode(llvm::Type *type, int count, const char *name) {
--    llvm::PHINode *pn = llvm::PHINode::Create(type, count, name ? name : "phi", bblock);
-+llvm::PHINode *FunctionEmitContext::PhiNode(llvm::Type *type, int count, const llvm::Twine &name) {
-+    llvm::PHINode *pn = llvm::PHINode::Create(type, count, name.isTriviallyEmpty() ? "phi" : name, bblock);
-     AddDebugPos(pn);
-     return pn;
- }
- 
- llvm::Instruction *FunctionEmitContext::SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1,
--                                                   const char *name) {
-+                                                   const llvm::Twine &name) {
-     if (test == NULL || val0 == NULL || val1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(test, "_select");
--
--    llvm::Instruction *inst = llvm::SelectInst::Create(test, val0, val1, name, bblock);
-+    llvm::Instruction *inst = llvm::SelectInst::Create(
-+        test, val0, val1, name.isTriviallyEmpty() ? (llvm::Twine(test->getName()) + "_select") : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
-@@ -3226,7 +3204,7 @@ static unsigned int lCalleeArgCount(llvm::Value *callee, const FunctionType *fun
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType,
--                                           const std::vector<llvm::Value *> &args, const char *name) {
-+                                           const std::vector<llvm::Value *> &args, const llvm::Twine &name) {
-     if (func == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3258,9 +3236,9 @@ llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-         llvm::PointerType *func_ptr_type = llvm::dyn_cast<llvm::PointerType>(func->getType());
-         llvm::FunctionType *func_type = llvm::dyn_cast<llvm::FunctionType>(func_ptr_type->getPointerElementType());
--        llvm::CallInst *callinst = llvm::CallInst::Create(func_type, func, argVals, name ? name : "", bblock);
-+        llvm::CallInst *callinst = llvm::CallInst::Create(func_type, func, argVals, name, bblock);
- #else
--        llvm::CallInst *callinst = llvm::CallInst::Create(func, argVals, name ? name : "", bblock);
-+        llvm::CallInst *callinst = llvm::CallInst::Create(func, argVals, name, bblock);
- #endif
- 
-         // We could be dealing with a function pointer in which case this will not be a 'llvm::Function'.
-@@ -3464,14 +3442,14 @@ llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg,
--                                           const char *name) {
-+                                           const llvm::Twine &name) {
-     std::vector<llvm::Value *> args;
-     args.push_back(arg);
-     return CallInst(func, funcType, args, name);
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg0,
--                                           llvm::Value *arg1, const char *name) {
-+                                           llvm::Value *arg1, const llvm::Twine &name) {
-     std::vector<llvm::Value *> args;
-     args.push_back(arg0);
-     args.push_back(arg1);
-diff --git a/src/ctx.h b/src/ctx.h
-index 6e5ad74ba..48b3bb826 100644
---- a/src/ctx.h
-+++ b/src/ctx.h
-@@ -302,7 +302,7 @@ class FunctionEmitContext {
-     llvm::Value *GetStringPtr(const std::string &str);
- 
-     /** Create a new basic block with given name */
--    llvm::BasicBlock *CreateBasicBlock(const char *name, llvm::BasicBlock *insertAfter = NULL);
-+    llvm::BasicBlock *CreateBasicBlock(const llvm::Twine &name, llvm::BasicBlock *insertAfter = NULL);
- 
-     /** Given a vector with element type i1, return a vector of type
-         LLVMTypes::BoolVectorType.  This method handles the conversion for
-@@ -380,33 +380,33 @@ class FunctionEmitContext {
-         this also handles applying the given operation to the vector
-         elements. */
-     llvm::Value *BinaryOperator(llvm::Instruction::BinaryOps inst, llvm::Value *v0, llvm::Value *v1,
--                                const char *name = NULL);
-+                                const llvm::Twine &name = "");
- 
-     /** Emit the "not" operator.  Like BinaryOperator(), this also handles
-         a VectorType-based operand. */
--    llvm::Value *NotOperator(llvm::Value *v, const char *name = NULL);
-+    llvm::Value *NotOperator(llvm::Value *v, const llvm::Twine &name = "");
- 
-     /** Emit a comparison instruction.  If the operands are VectorTypes,
-         then a value for the corresponding boolean VectorType is
-         returned. */
-     llvm::Value *CmpInst(llvm::Instruction::OtherOps inst, llvm::CmpInst::Predicate pred, llvm::Value *v0,
--                         llvm::Value *v1, const char *name = NULL);
-+                         llvm::Value *v1, const llvm::Twine &name = "");
- 
-     /** Given a scalar value, return a vector of the same type (or an
-         array, for pointer types). */
--    llvm::Value *SmearUniform(llvm::Value *value, const char *name = NULL);
-+    llvm::Value *SmearUniform(llvm::Value *value, const llvm::Twine &name = "");
- 
--    llvm::Value *BitCastInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Value *PtrToIntInst(llvm::Value *value, const char *name = NULL);
--    llvm::Value *PtrToIntInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Value *IntToPtrInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+    llvm::Value *BitCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Value *PtrToIntInst(llvm::Value *value, const llvm::Twine &name = "");
-+    llvm::Value *PtrToIntInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Value *IntToPtrInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
- 
--    llvm::Instruction *TruncInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+    llvm::Instruction *TruncInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-     llvm::Instruction *CastInst(llvm::Instruction::CastOps op, llvm::Value *value, llvm::Type *type,
--                                const char *name = NULL);
--    llvm::Instruction *FPCastInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Instruction *SExtInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Instruction *ZExtInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+                                const llvm::Twine &name = "");
-+    llvm::Instruction *FPCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Instruction *SExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Instruction *ZExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
- 
-     /** Given two integer-typed values (but possibly one vector and the
-         other not, and or of possibly-different bit-widths), update their
-@@ -426,9 +426,9 @@ class FunctionEmitContext {
-         pointers.  The underlying type of the base pointer must be provided
-         via the ptrType parameter */
-     llvm::Value *GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index, const Type *ptrType,
--                                   const char *name = NULL);
-+                                   const llvm::Twine &name = "");
-     llvm::Value *GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0, llvm::Value *index1, const Type *ptrType,
--                                   const char *name = NULL);
-+                                   const llvm::Twine &name = "");
- 
-     /** This method returns a new pointer that represents offsetting the
-         given base pointer to point at the given element number of the
-@@ -436,26 +436,26 @@ class FunctionEmitContext {
-         pointer must be a pointer to a structure type.  The ptrType gives
-         the type of the pointer, though it may be NULL if the base pointer
-         is uniform. */
--    llvm::Value *AddElementOffset(llvm::Value *basePtr, int elementNum, const Type *ptrType, const char *name = NULL,
--                                  const PointerType **resultPtrType = NULL);
-+    llvm::Value *AddElementOffset(llvm::Value *basePtr, int elementNum, const Type *ptrType,
-+                                  const llvm::Twine &name = "", const PointerType **resultPtrType = NULL);
- 
-     /** Bool is stored as i8 and <WIDTH x i8> but represented in IR as i1 and
-      * <WIDTH x MASK>. This is a helper function to match bool size at storage
-      * interface. */
--    llvm::Value *SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const char *name = NULL);
-+    llvm::Value *SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name = "");
-     /** Load from the memory location(s) given by lvalue, using the given
-         mask.  The lvalue may be varying, in which case this corresponds to
-         a gather from the multiple memory locations given by the array of
-         pointer values given by the lvalue.  If the lvalue is not varying,
-         then both the mask pointer and the type pointer may be NULL. */
--    llvm::Value *LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrType, const char *name = NULL,
-+    llvm::Value *LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrType, const llvm::Twine &name = "",
-                           bool one_elem = false);
- 
-     /* Load from memory location(s) given.
-      * 'type' needs to be provided when storage type is different from IR type. For example,
-      * 'unform bool' is 'i1' in IR but stored as 'i8'.
-      * Otherwise leave this as NULL. */
--    llvm::Value *LoadInst(llvm::Value *ptr, const Type *type = NULL, const char *name = NULL);
-+    llvm::Value *LoadInst(llvm::Value *ptr, const Type *type = NULL, const llvm::Twine &name = "");
- 
-     /** Emits an alloca instruction to allocate stack storage for the given
-         type.  If a non-zero alignment is specified, the object is also
-@@ -463,7 +463,8 @@ class FunctionEmitContext {
-         instruction is added at the start of the function in the entry
-         basic block; if it should be added to the current basic block, then
-         the atEntryBlock parameter should be false. */
--    llvm::Value *AllocaInst(llvm::Type *llvmType, const char *name = NULL, int align = 0, bool atEntryBlock = true);
-+    llvm::Value *AllocaInst(llvm::Type *llvmType, const llvm::Twine &name = "", int align = 0,
-+                            bool atEntryBlock = true);
- 
-     /** Emits an alloca instruction to allocate stack storage for the given
-         type.  If a non-zero alignment is specified, the object is also
-@@ -474,7 +475,7 @@ class FunctionEmitContext {
-         This implementation is preferred when possible. It is needed when
-         storage type is different from IR type. For example,
-         'unform bool' is 'i1' in IR but stored as 'i8'. */
--    llvm::Value *AllocaInst(const Type *ptrType, const char *name = NULL, int align = 0, bool atEntryBlock = true);
-+    llvm::Value *AllocaInst(const Type *ptrType, const llvm::Twine &name = "", int align = 0, bool atEntryBlock = true);
- 
-     /** Standard store instruction; for this variant, the lvalue must be a
-         single pointer, not a varying lvalue.
-@@ -502,39 +503,41 @@ class FunctionEmitContext {
-     /** This convenience method maps to an llvm::ExtractElementInst if the
-         given value is a llvm::VectorType, and to an llvm::ExtractValueInst
-         otherwise. */
--    llvm::Value *ExtractInst(llvm::Value *v, int elt, const char *name = NULL);
-+    llvm::Value *ExtractInst(llvm::Value *v, int elt, const llvm::Twine &name = "");
- 
-     /** This convenience method maps to an llvm::InsertElementInst if the
-         given value is a llvm::VectorType, and to an llvm::InsertValueInst
-         otherwise. */
--    llvm::Value *InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const char *name = NULL);
-+    llvm::Value *InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const llvm::Twine &name = "");
- 
-     /** This convenience method maps to an llvm::ShuffleVectorInst. */
--    llvm::Value *ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const char *name = NULL);
-+    llvm::Value *ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const llvm::Twine &name = "");
- 
-     /** This convenience method to generate broadcast pattern. It takes a value
-         and a vector type. Type of the value must match element type of the
-         vector. */
--    llvm::Value *BroadcastValue(llvm::Value *v, llvm::Type *vecType, const char *name = NULL);
-+    llvm::Value *BroadcastValue(llvm::Value *v, llvm::Type *vecType, const llvm::Twine &name = "");
- 
--    llvm::PHINode *PhiNode(llvm::Type *type, int count, const char *name = NULL);
--    llvm::Instruction *SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1, const char *name = NULL);
-+    llvm::PHINode *PhiNode(llvm::Type *type, int count, const llvm::Twine &name = "");
-+    llvm::Instruction *SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1,
-+                                  const llvm::Twine &name = "");
- 
-     /** Emits IR to do a function call with the given arguments.  If the
-         function type is a varying function pointer type, its full type
-         must be provided in funcType.  funcType can be NULL if func is a
-         uniform function pointer. */
-     llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, const std::vector<llvm::Value *> &args,
--                          const char *name = NULL);
-+                          const llvm::Twine &name = "");
- 
-     /** This is a convenience method that issues a call instruction to a
-         function that takes just a single argument. */
--    llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg, const char *name = NULL);
-+    llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg,
-+                          const llvm::Twine &name = "");
- 
-     /** This is a convenience method that issues a call instruction to a
-         function that takes two arguments. */
-     llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg0, llvm::Value *arg1,
--                          const char *name = NULL);
-+                          const llvm::Twine &name = "");
- 
-     /** Launch an asynchronous task to run the given function, passing it
-         he given argument values. */
-@@ -756,9 +759,10 @@ class FunctionEmitContext {
-     void maskedStore(llvm::Value *value, llvm::Value *ptr, const Type *ptrType, llvm::Value *mask);
-     void storeUniformToSOA(llvm::Value *value, llvm::Value *ptr, llvm::Value *mask, const Type *valueType,
-                            const PointerType *ptrType);
--    llvm::Value *loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType, const char *name);
-+    llvm::Value *loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType,
-+                                    const llvm::Twine &name = "");
- 
--    llvm::Value *gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask, const char *name);
-+    llvm::Value *gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask, const llvm::Twine &name = "");
- 
-     llvm::Value *addVaryingOffsetsIfNeeded(llvm::Value *ptr, const Type *ptrType);
- };
-diff --git a/src/expr.cpp b/src/expr.cpp
-index 80cc3020a..6d38d1889 100644
---- a/src/expr.cpp
-+++ b/src/expr.cpp
-@@ -1021,11 +1021,11 @@ static llvm::Value *lEmitNegate(Expr *arg, SourcePos pos, FunctionEmitContext *c
-     ctx->SetDebugPos(pos);
-     if (type->IsFloatType()) {
-         llvm::Value *zero = llvm::ConstantFP::getZeroValueForNegation(type->LLVMType(g->ctx));
--        return ctx->BinaryOperator(llvm::Instruction::FSub, zero, argVal, LLVMGetName(argVal, "_negate"));
-+        return ctx->BinaryOperator(llvm::Instruction::FSub, zero, argVal, llvm::Twine(argVal->getName()) + "_negate");
-     } else {
-         llvm::Value *zero = lLLVMConstantValue(type, g->ctx, 0.);
-         AssertPos(pos, type->IsIntType());
--        return ctx->BinaryOperator(llvm::Instruction::Sub, zero, argVal, LLVMGetName(argVal, "_negate"));
-+        return ctx->BinaryOperator(llvm::Instruction::Sub, zero, argVal, llvm::Twine(argVal->getName()) + "_negate");
-     }
- }
- 
-@@ -1047,11 +1047,11 @@ llvm::Value *UnaryExpr::GetValue(FunctionEmitContext *ctx) const {
-         return lEmitNegate(expr, pos, ctx);
-     case LogicalNot: {
-         llvm::Value *argVal = expr->GetValue(ctx);
--        return ctx->NotOperator(argVal, LLVMGetName(argVal, "_logicalnot"));
-+        return ctx->NotOperator(argVal, llvm::Twine(argVal->getName()) + "_logicalnot");
-     }
-     case BitNot: {
-         llvm::Value *argVal = expr->GetValue(ctx);
--        return ctx->NotOperator(argVal, LLVMGetName(argVal, "_bitnot"));
-+        return ctx->NotOperator(argVal, llvm::Twine(argVal->getName()) + "_bitnot");
-     }
-     default:
-         FATAL("logic error");
-@@ -1518,7 +1518,8 @@ static llvm::Value *lEmitBinaryArith(BinaryExpr::Op op, llvm::Value *value0, llv
-             return NULL;
-         }
- 
--        return ctx->BinaryOperator(inst, value0, value1, LLVMGetName(opName, value0, value1));
-+        return ctx->BinaryOperator(inst, value0, value1,
-+                                   (((llvm::Twine(opName) + "_") + value0->getName()) + "_") + value1->getName());
-     }
- }
- 
-@@ -1563,7 +1564,7 @@ static llvm::Value *lEmitBinaryCmp(BinaryExpr::Op op, llvm::Value *e0Val, llvm::
-     }
- 
-     llvm::Value *cmp = ctx->CmpInst(isFloatOp ? llvm::Instruction::FCmp : llvm::Instruction::ICmp, pred, e0Val, e1Val,
--                                    LLVMGetName(opName, e0Val, e1Val));
-+                                    (((llvm::Twine(opName) + "_") + e0Val->getName()) + "_") + e1Val->getName());
-     // This is a little ugly: CmpInst returns i1 values, but we use vectors
-     // of i32s for varying bool values; type convert the result here if
-     // needed.
-@@ -4177,7 +4178,7 @@ static llvm::Value *lConvertToSlicePointer(FunctionEmitContext *ctx, llvm::Value
-     // offsets
-     llvm::Value *result = llvm::Constant::getNullValue(sliceStructType);
-     // And replace the pointer in the struct with the given pointer
--    return ctx->InsertInst(result, ptr, 0, LLVMGetName(ptr, "_slice"));
-+    return ctx->InsertInst(result, ptr, 0, llvm::Twine(ptr->getName()) + "_slice");
- }
- 
- /** If the given array index is a compile time constant, check to see if it
-@@ -4258,8 +4259,8 @@ llvm::Value *IndexExpr::GetLValue(FunctionEmitContext *ctx) const {
-         // Convert to a slice pointer if we're indexing into SOA data
-         basePtrValue = lConvertPtrToSliceIfNeeded(ctx, basePtrValue, &baseExprType);
- 
--        llvm::Value *ptr =
--            ctx->GetElementPtrInst(basePtrValue, indexValue, baseExprType, LLVMGetName(basePtrValue, "_offset"));
-+        llvm::Value *ptr = ctx->GetElementPtrInst(basePtrValue, indexValue, baseExprType,
-+                                                  llvm::Twine(basePtrValue->getName()) + "_offset");
-         return lAddVaryingOffsetsIfNeeded(ctx, ptr, GetLValueType());
-     }
- 
-@@ -4290,8 +4291,8 @@ llvm::Value *IndexExpr::GetLValue(FunctionEmitContext *ctx) const {
-     ctx->SetDebugPos(pos);
- 
-     // And do the actual indexing calculation..
--    llvm::Value *ptr =
--        ctx->GetElementPtrInst(basePtr, LLVMInt32(0), indexValue, basePtrType, LLVMGetName(basePtr, "_offset"));
-+    llvm::Value *ptr = ctx->GetElementPtrInst(basePtr, LLVMInt32(0), indexValue, basePtrType,
-+                                              llvm::Twine(basePtr->getName()) + "_offset");
-     return lAddVaryingOffsetsIfNeeded(ctx, ptr, GetLValueType());
- }
- 
-@@ -4788,15 +4789,14 @@ llvm::Value *VectorMemberExpr::GetValue(FunctionEmitContext *ctx) const {
-         for (size_t i = 0; i < identifier.size(); ++i) {
-             char idStr[2] = {identifier[i], '\0'};
-             llvm::Value *elementPtr =
--                ctx->AddElementOffset(basePtr, indices[i], basePtrType, LLVMGetName(basePtr, idStr));
-+                ctx->AddElementOffset(basePtr, indices[i], basePtrType, llvm::Twine(basePtr->getName()) + idStr);
-             llvm::Value *elementValue = ctx->LoadInst(elementPtr, elementMask, elementPtrType);
- 
--            const char *resultName = LLVMGetName(resultPtr, idStr);
--            llvm::Value *ptmp = ctx->AddElementOffset(resultPtr, i, NULL, resultName);
-+            llvm::Value *ptmp = ctx->AddElementOffset(resultPtr, i, NULL, llvm::Twine(resultPtr->getName()) + idStr);
-             ctx->StoreInst(elementValue, ptmp, elementPtrType, expr->GetType()->IsUniformType());
-         }
- 
--        return ctx->LoadInst(resultPtr, memberType, LLVMGetName(basePtr, "_swizzle"));
-+        return ctx->LoadInst(resultPtr, memberType, llvm::Twine(basePtr->getName()) + "_swizzle");
-     }
- }
- 
-@@ -4932,7 +4932,7 @@ llvm::Value *MemberExpr::GetValue(FunctionEmitContext *ctx) const {
- 
-     ctx->SetDebugPos(pos);
-     std::string suffix = std::string("_") + identifier;
--    return ctx->LoadInst(lvalue, mask, lvalueType, LLVMGetName(lvalue, suffix.c_str()));
-+    return ctx->LoadInst(lvalue, mask, lvalueType, llvm::Twine(lvalue->getName()) + suffix);
- }
- 
- const Type *MemberExpr::GetType() const { return NULL; }
-@@ -6502,7 +6502,7 @@ static llvm::Value *lTypeConvAtomic(FunctionEmitContext *ctx, llvm::Value *exprV
-                 // does for everyone else...
-                 Assert(cast);
-                 cast = ctx->SwitchBoolSize(cast, LLVMTypes::BoolVectorType->getElementType(),
--                                           LLVMGetName(cast, "to_i_bool"));
-+                                           llvm::Twine(cast->getName()) + "to_i_bool");
-             }
-         } else {
-             // fromType->IsVaryingType())
-@@ -8246,7 +8246,7 @@ llvm::Value *NewExpr::GetValue(FunctionEmitContext *ctx) const {
-         // pointer of the return type and to run the code for initializers,
-         // if present.
-         llvm::Type *ptrType = retType->LLVMType(g->ctx);
--        ptrValue = ctx->BitCastInst(ptrValue, ptrType, LLVMGetName(ptrValue, "_cast_ptr"));
-+        ptrValue = ctx->BitCastInst(ptrValue, ptrType, llvm::Twine(ptrValue->getName()) + "_cast_ptr");
- 
-         if (initExpr != NULL)
-             InitSymbol(ptrValue, allocType, initExpr, ctx, pos);
-diff --git a/src/llvmutil.cpp b/src/llvmutil.cpp
-index 970175dbf..d0becb9f5 100644
---- a/src/llvmutil.cpp
-+++ b/src/llvmutil.cpp
-@@ -1605,23 +1605,6 @@ llvm::Value *LLVMShuffleVectors(llvm::Value *v1, llvm::Value *v2, int32_t shuf[]
-     return new llvm::ShuffleVectorInst(v1, v2, vec, "shuffle", insertBefore);
- }
- 
--const char *LLVMGetName(llvm::Value *v, const char *s) {
--    if (v == NULL)
--        return s;
--    std::string ret = std::string(v->getName());
--    ret += s;
--    return strdup(ret.c_str());
--}
--
--const char *LLVMGetName(const char *op, llvm::Value *v1, llvm::Value *v2) {
--    std::string r = op;
--    r += "_";
--    r += v1->getName().str();
--    r += "_";
--    r += v2->getName().str();
--    return strdup(r.c_str());
--}
--
- #ifdef ISPC_GENX_ENABLED
- bool lIsSVMLoad(llvm::Instruction *inst) {
-     Assert(inst);
-diff --git a/src/llvmutil.h b/src/llvmutil.h
-index 42cce4d83..07d089bb4 100644
---- a/src/llvmutil.h
-+++ b/src/llvmutil.h
-@@ -328,11 +328,6 @@ extern llvm::Value *LLVMConcatVectors(llvm::Value *v1, llvm::Value *v2, llvm::In
- extern llvm::Value *LLVMShuffleVectors(llvm::Value *v1, llvm::Value *v2, int32_t shuf[], int shufSize,
-                                        llvm::Instruction *insertBefore);
- 
--/** Utility routines to concat strings with the names of existing values to
--    create meaningful new names for instruction values.
--*/
--extern const char *LLVMGetName(llvm::Value *v, const char *);
--extern const char *LLVMGetName(const char *op, llvm::Value *v1, llvm::Value *v2);
- #ifdef ISPC_GENX_ENABLED
- enum AddressSpace { Local, Global, External };
- 
-diff --git a/src/opt.cpp b/src/opt.cpp
-index 5b1ac7b63..9d6cae058 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -257,7 +257,7 @@ static bool lGetSourcePosFromMetadata(const llvm::Instruction *inst, SourcePos *
-     return true;
- }
- 
--static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, const char *name,
-+static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[2] = {arg0, arg1};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[2]);
-@@ -265,21 +265,22 @@ static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llv
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    const char *name, llvm::Instruction *insertBefore = NULL) {
-+                                    const llvm::Twine &name, llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[3] = {arg0, arg1, arg2};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[3]);
-     return llvm::CallInst::Create(func, newArgArray, name, insertBefore);
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, const char *name, llvm::Instruction *insertBefore = NULL) {
-+                                    llvm::Value *arg3, const llvm::Twine &name,
-+                                    llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[4] = {arg0, arg1, arg2, arg3};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[4]);
-     return llvm::CallInst::Create(func, newArgArray, name, insertBefore);
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, llvm::Value *arg4, const char *name,
-+                                    llvm::Value *arg3, llvm::Value *arg4, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[5] = {arg0, arg1, arg2, arg3, arg4};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[5]);
-@@ -287,7 +288,7 @@ static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llv
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, llvm::Value *arg4, llvm::Value *arg5, const char *name,
-+                                    llvm::Value *arg3, llvm::Value *arg4, llvm::Value *arg5, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[6] = {arg0, arg1, arg2, arg3, arg4, arg5};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[6]);
-@@ -991,23 +992,24 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 llvm::Type *returnType = callInst->getType();
-                 Assert(llvm::isa<llvm::VectorType>(returnType));
-                 // cast the i8 * to the appropriate type
--                const char *name = LLVMGetName(callInst->getArgOperand(0), "_cast");
--                llvm::Value *castPtr = new llvm::BitCastInst(callInst->getArgOperand(0),
--                                                             llvm::PointerType::get(returnType, 0), name, callInst);
-+                llvm::Value *castPtr =
-+                    new llvm::BitCastInst(callInst->getArgOperand(0), llvm::PointerType::get(returnType, 0),
-+                                          llvm::Twine(callInst->getArgOperand(0)->getName()) + "_cast", callInst);
-                 lCopyMetadata(castPtr, callInst);
-                 int align;
-                 if (g->opt.forceAlignedMemory)
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
--                name = LLVMGetName(callInst->getArgOperand(0), "_load");
- #if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
--                llvm::Instruction *loadInst = new llvm::LoadInst(castPtr, name, false /* not volatile */,
--                                                                 llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
-+                llvm::Instruction *loadInst =
-+                    new llvm::LoadInst(castPtr, llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load",
-+                                       false /* not volatile */, llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
- #else
-                 llvm::Instruction *loadInst = new llvm::LoadInst(
--                    llvm::dyn_cast<llvm::PointerType>(castPtr->getType())->getPointerElementType(), castPtr, name,
--                    false /* not volatile */, llvm::MaybeAlign(align).valueOrOne(), (llvm::Instruction *)NULL);
-+                    llvm::dyn_cast<llvm::PointerType>(castPtr->getType())->getPointerElementType(), castPtr,
-+                    llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load", false /* not volatile */,
-+                    llvm::MaybeAlign(align).valueOrOne(), (llvm::Instruction *)NULL);
- #endif
-                 lCopyMetadata(loadInst, callInst);
-                 llvm::ReplaceInstWithInst(callInst, loadInst);
-@@ -1028,9 +1030,9 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 // all lanes storing, so replace with a regular store
-                 llvm::Value *rvalue = callInst->getArgOperand(2);
-                 llvm::Type *storeType = rvalue->getType();
--                const char *name = LLVMGetName(callInst->getArgOperand(0), "_ptrcast");
--                llvm::Value *castPtr = new llvm::BitCastInst(callInst->getArgOperand(0),
--                                                             llvm::PointerType::get(storeType, 0), name, callInst);
-+                llvm::Value *castPtr =
-+                    new llvm::BitCastInst(callInst->getArgOperand(0), llvm::PointerType::get(storeType, 0),
-+                                          llvm::Twine(callInst->getArgOperand(0)->getName()) + "_ptrcast", callInst);
-                 lCopyMetadata(castPtr, callInst);
- 
-                 int align;
-@@ -1339,8 +1341,8 @@ static llvm::Value *lGetBasePointer(llvm::Value *v, llvm::Instruction *insertBef
-         if (t == NULL) {
-             return NULL;
-         } else {
--            return llvm::CastInst::Create(ci->getOpcode(), t, ci->getType()->getScalarType(), LLVMGetName(t, "_cast"),
--                                          insertBefore);
-+            return llvm::CastInst::Create(ci->getOpcode(), t, ci->getType()->getScalarType(),
-+                                          llvm::Twine(t->getName()) + "_cast", insertBefore);
-         }
-     }
- 
-@@ -1583,13 +1585,13 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-         if (co == NULL)
-             *constOffset = NULL;
-         else
--            *constOffset =
--                llvm::CastInst::Create(cast->getOpcode(), co, cast->getType(), LLVMGetName(co, "_cast"), insertBefore);
-+            *constOffset = llvm::CastInst::Create(cast->getOpcode(), co, cast->getType(),
-+                                                  llvm::Twine(co->getName()) + "_cast", insertBefore);
-         if (vo == NULL)
-             *variableOffset = NULL;
-         else
--            *variableOffset =
--                llvm::CastInst::Create(cast->getOpcode(), vo, cast->getType(), LLVMGetName(vo, "_cast"), insertBefore);
-+            *variableOffset = llvm::CastInst::Create(cast->getOpcode(), vo, cast->getType(),
-+                                                     llvm::Twine(vo->getName()) + "_cast", insertBefore);
-         return;
-     }
- 
-@@ -1608,16 +1610,18 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-             else if (c1 == NULL || llvm::isa<llvm::ConstantAggregateZero>(c1))
-                 *constOffset = c0;
-             else
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, c0, c1, LLVMGetName("add", c0, c1),
--                                                            insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, c0, c1, ((llvm::Twine("add_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
- 
-             if (v0 == NULL || llvm::isa<llvm::ConstantAggregateZero>(v0))
-                 *variableOffset = v1;
-             else if (v1 == NULL || llvm::isa<llvm::ConstantAggregateZero>(v1))
-                 *variableOffset = v0;
-             else
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, v0, v1,
--                                                               LLVMGetName("add", v0, v1), insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, v0, v1, ((llvm::Twine("add_") + v0->getName()) + "_") + v1->getName(),
-+                    insertBefore);
-             return;
-         } else if (bop->getOpcode() == llvm::Instruction::Shl) {
-             lExtractConstantOffset(op0, &c0, &v0, insertBefore);
-@@ -1633,10 +1637,12 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-                 *constOffset = vec;
-                 *variableOffset = NULL;
-             } else {
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Shl, c0, c1, LLVMGetName("shl", c0, c1),
--                                                            insertBefore);
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Shl, v0, c1,
--                                                               LLVMGetName("shl", v0, c1), insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Shl, c0, c1, ((llvm::Twine("shl_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Shl, v0, c1, ((llvm::Twine("shl_") + v0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-             }
-             return;
-         } else if (bop->getOpcode() == llvm::Instruction::Mul) {
-@@ -1648,25 +1654,30 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-             // Note that the first term is a constant and the last three are
-             // variable.
-             if (c0 != NULL && c1 != NULL)
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, c1, LLVMGetName("mul", c0, c1),
--                                                            insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Mul, c0, c1, ((llvm::Twine("mul_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-             else
-                 *constOffset = NULL;
- 
-             llvm::Value *va = NULL, *vb = NULL, *vc = NULL;
-             if (v0 != NULL && c1 != NULL)
--                va = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, c1, LLVMGetName("mul", v0, c1),
-+                va = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, c1,
-+                                                  ((llvm::Twine("mul_") + v0->getName()) + "_") + c1->getName(),
-                                                   insertBefore);
-             if (c0 != NULL && v1 != NULL)
--                vb = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, v1, LLVMGetName("mul", c0, v1),
-+                vb = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, v1,
-+                                                  ((llvm::Twine("mul_") + c0->getName()) + "_") + v1->getName(),
-                                                   insertBefore);
-             if (v0 != NULL && v1 != NULL)
--                vc = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, v1, LLVMGetName("mul", v0, v1),
-+                vc = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, v1,
-+                                                  ((llvm::Twine("mul_") + v0->getName()) + "_") + v1->getName(),
-                                                   insertBefore);
- 
-             llvm::Value *vab = NULL;
-             if (va != NULL && vb != NULL)
--                vab = llvm::BinaryOperator::Create(llvm::Instruction::Add, va, vb, LLVMGetName("add", va, vb),
-+                vab = llvm::BinaryOperator::Create(llvm::Instruction::Add, va, vb,
-+                                                   ((llvm::Twine("add_") + va->getName()) + "_") + vb->getName(),
-                                                    insertBefore);
-             else if (va != NULL)
-                 vab = va;
-@@ -1674,8 +1685,9 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-                 vab = vb;
- 
-             if (vab != NULL && vc != NULL)
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, vab, vc,
--                                                               LLVMGetName("add", vab, vc), insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, vab, vc, ((llvm::Twine("add_") + vab->getName()) + "_") + vc->getName(),
-+                    insertBefore);
-             else if (vab != NULL)
-                 *variableOffset = vab;
-             else
-@@ -1943,7 +1955,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-             // all zeros (i.e. a ConstantAggregateZero, but just in case,
-             // do the more general check with lVectorIs32BitInts().
-             variableOffset = new llvm::TruncInst(variableOffset, LLVMTypes::Int32VectorType,
--                                                 LLVMGetName(variableOffset, "_trunc"), insertBefore);
-+                                                 llvm::Twine(variableOffset->getName()) + "_trunc", insertBefore);
-         else
-             return false;
-     }
-@@ -1952,7 +1964,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-         if (lVectorIs32BitInts(constOffset)) {
-             // Truncate them so we have a 32-bit vector type for them.
-             constOffset = new llvm::TruncInst(constOffset, LLVMTypes::Int32VectorType,
--                                              LLVMGetName(constOffset, "_trunc"), insertBefore);
-+                                              llvm::Twine(constOffset->getName()) + "_trunc", insertBefore);
-         } else {
-             // FIXME: otherwise we just assume that all constant offsets
-             // can actually always fit into 32-bits...  (This could be
-@@ -1963,7 +1975,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-             // llvm::ConstantFoldInstruction() doesn't seem to be doing
-             // enough for us in some cases if we call it from here.
-             constOffset = new llvm::TruncInst(constOffset, LLVMTypes::Int32VectorType,
--                                              LLVMGetName(constOffset, "_trunc"), insertBefore);
-+                                              llvm::Twine(constOffset->getName()) + "_trunc", insertBefore);
-         }
-     }
- 
-@@ -2012,8 +2024,8 @@ static bool lOffsets32BitSafe(llvm::Value **offsetPtr, llvm::Instruction *insert
- 
-         // Alternatively, offset could be a sequence of adds terminating
-         // in safe constant vectors or a SExt.
--        *offsetPtr =
--            new llvm::TruncInst(offset, LLVMTypes::Int32VectorType, LLVMGetName(offset, "_trunc"), insertBefore);
-+        *offsetPtr = new llvm::TruncInst(offset, LLVMTypes::Int32VectorType, llvm::Twine(offset->getName()) + "_trunc",
-+                                         insertBefore);
-         return true;
-     } else
-         return false;
-@@ -2229,7 +2241,8 @@ static bool lGSToGSBaseOffsets(llvm::CallInst *callInst) {
-     }
-     // Cast the base pointer to a void *, since that's what the
-     // __pseudo_*_base_offsets_* functions want.
--    basePtr = new llvm::IntToPtrInst(basePtr, LLVMTypes::VoidPointerType, LLVMGetName(basePtr, "_2void"), callInst);
-+    basePtr = new llvm::IntToPtrInst(basePtr, LLVMTypes::VoidPointerType, llvm::Twine(basePtr->getName()) + "_2void",
-+                                     callInst);
-     lCopyMetadata(basePtr, callInst);
-     llvm::Function *gatherScatterFunc = info->baseOffsetsFunc;
- 
-@@ -2803,7 +2816,7 @@ static bool lGSToLoadStore(llvm::CallInst *callInst) {
-                 lCopyMetadata(ptr, callInst);
-                 Debug(pos, "Transformed gather to unaligned vector load!");
-                 llvm::Instruction *newCall =
--                    lCallInst(gatherInfo->loadMaskedFunc, ptr, mask, LLVMGetName(ptr, "_masked_load"));
-+                    lCallInst(gatherInfo->loadMaskedFunc, ptr, mask, llvm::Twine(ptr->getName()) + "_masked_load");
-                 lCopyMetadata(newCall, callInst);
-                 llvm::ReplaceInstWithInst(callInst, newCall);
-                 return true;
diff --git a/srcpkgs/ispc/patches/llvm12-004.patch b/srcpkgs/ispc/patches/llvm12-004.patch
deleted file mode 100644
index 3a94d8443a5e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-004.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From c03a5142444476a1caa5c2ba7fa2d92d7793d6f1 Mon Sep 17 00:00:00 2001
-From: Deepak Rajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Mon, 25 Jan 2021 09:22:49 -0800
-Subject: [PATCH] Fixing build on llvm trunk.
-
----
- src/ctx.cpp | 7 +++----
- 1 file changed, 3 insertions(+), 4 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index ded524b71..b60e6fe84 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1020,8 +1020,7 @@ void FunctionEmitContext::EmitCaseLabel(int value, bool checkMask, SourcePos pos
-     llvm::BasicBlock *bbCaseImpl = NULL;
-     if (emitGenXHardwareMask()) {
-         // Create basic block with actual case implementation
--        llvm::Twine bbName = llvm::Twine(bbCase->getName()) + "_impl";
--        bbCaseImpl = CreateBasicBlock(bbName, bbCase);
-+        bbCaseImpl = CreateBasicBlock(llvm::Twine(bbCase->getName()) + "_impl", bbCase);
-     }
- #endif
- 
-@@ -3142,8 +3141,8 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     llvm::Value *undef2 = llvm::UndefValue::get(vecType);
- 
-     // InsertElement
--    llvm::Twine tw = name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + llvm::Twine("_init");
--    llvm::Value *insert = InsertInst(undef1, v, 0, tw.str().c_str());
-+    llvm::Value *insert =
-+        InsertInst(undef1, v, 0, name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + "_init");
- 
-     // ShuffleVector
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
diff --git a/srcpkgs/ispc/patches/llvm12-005.patch b/srcpkgs/ispc/patches/llvm12-005.patch
deleted file mode 100644
index e3e96b00abfa..000000000000
--- a/srcpkgs/ispc/patches/llvm12-005.patch
+++ /dev/null
@@ -1,372 +0,0 @@
-From c1d0a51bf8416d42144de9e2bdd59825eaeff1ac Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Fri, 8 Jan 2021 14:13:49 -0800
-Subject: [PATCH] LLVM 11 support for gen code
-
----
- src/ctx.cpp                     |  13 ++-
- src/gen/GlobalsLocalization.cpp |   9 +-
- src/opt.cpp                     | 143 ++++++++++++++++++++++++--------
- 3 files changed, 124 insertions(+), 41 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index b60e6fe84..2a72e6837 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1,5 +1,5 @@
- /*
--  Copyright (c) 2010-2020, Intel Corporation
-+  Copyright (c) 2010-2021, Intel Corporation
-   All rights reserved.
- 
-   Redistribution and use in source and binary forms, with or without
-@@ -3685,8 +3685,17 @@ llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::
-     AssertPos(currentPos, llvm::isa<llvm::VectorType>(value->getType()));
-     llvm::VectorType *vt = llvm::dyn_cast<llvm::VectorType>(value->getType());
-     if (defaults == NULL) {
--        defaults = llvm::ConstantVector::getSplat(value->getType()->getVectorNumElements(),
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+        defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-+                                                  llvm::Constant::getNullValue(vt->getElementType()));
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+        defaults = llvm::ConstantVector::getSplat({static_cast<unsigned int>(vt->getNumElements()), false},
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
-+#else
-+        defaults = llvm::ConstantVector::getSplat(
-+            llvm::ElementCount::get(static_cast<unsigned int>(vt->getNumElements()), false),
-+            llvm::Constant::getNullValue(vt->getElementType()));
-+#endif
-     }
- 
-     auto Fn = llvm::GenXIntrinsic::getGenXDeclaration(m->module, llvm::GenXIntrinsic::genx_simdcf_predicate,
-diff --git a/src/gen/GlobalsLocalization.cpp b/src/gen/GlobalsLocalization.cpp
-index a176e9462..41f3b00e2 100644
---- a/src/gen/GlobalsLocalization.cpp
-+++ b/src/gen/GlobalsLocalization.cpp
-@@ -1,5 +1,5 @@
- /*
--  Copyright (c) 2014, 2016-2020, Intel Corporation
-+  Copyright (c) 2014, 2016-2021, Intel Corporation
-   All rights reserved.
- 
-   Redistribution and use in source and binary forms, with or without
-@@ -53,8 +53,10 @@
- #include <llvm/GenXIntrinsics/GenXIntrOpts.h>
- #include <llvm/GenXIntrinsics/GenXIntrinsics.h>
- #include <llvm/GenXIntrinsics/GenXMetadata.h>
--#include <llvm/IR/CFG.h>
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
- #include <llvm/IR/CallSite.h>
-+#endif
-+#include <llvm/IR/CFG.h>
- #include <llvm/IR/DebugInfo.h>
- #include <llvm/IR/Dominators.h>
- #include <llvm/IR/Function.h>
-@@ -470,7 +472,8 @@ void GlobalsLocalization::LocalizeGlobals(LocalizationInfo &LI) {
-         Instruction &FirstI = *Fn->getEntryBlock().begin();
-         Type *ElemTy = GV->getType()->getElementType();
-         AllocaInst *Alloca = new AllocaInst(ElemTy, 0, GV->getName() + ".local", &FirstI);
--        Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()));
-+        Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()).valueOrOne());
-+
-         if (!isa<UndefValue>(GV->getInitializer()))
-             new StoreInst(GV->getInitializer(), Alloca, &FirstI);
- 
-diff --git a/src/opt.cpp b/src/opt.cpp
-index d58d77f73..1789b8476 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -2899,15 +2899,17 @@ static llvm::Function *lGenXMaskedInt8Inst(llvm::Instruction *inst, bool isStore
- static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::Instruction *inst) {
-     Assert(g->target->isGenXTarget());
-     Assert(llvm::isa<llvm::VectorType>(val->getType()));
--    Assert(llvm::isPowerOf2_32(val->getType()->getVectorNumElements()));
--    Assert(val->getType()->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-+
-+    llvm::VectorType *valVecType = llvm::dyn_cast<llvm::VectorType>(val->getType());
-+    Assert(llvm::isPowerOf2_32(valVecType->getNumElements()));
-+    Assert(valVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
- 
-     // The data write of svm store must have a size that is a power of two from 16 to 128
-     // bytes. However for int8 type and simd width = 8, the data write size is 8.
-     // So we use masked store function here instead of svm store which process int8 type
-     // correctly.
--    if (val->getType()->getPrimitiveSizeInBits() / 8 < 16) {
--        Assert(val->getType()->getScalarType() == LLVMTypes::Int8Type);
-+    if (valVecType->getPrimitiveSizeInBits() / 8 < 16) {
-+        Assert(valVecType->getScalarType() == LLVMTypes::Int8Type);
-         if (llvm::Function *maskedFunc = lGenXMaskedInt8Inst(inst, true))
-             return llvm::dyn_cast<llvm::CallInst>(lCallInst(maskedFunc, ptr, val, LLVMMaskAllOn, ""));
-         else {
-@@ -2923,15 +2925,17 @@ static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::
- 
- static llvm::CallInst *lGenXLoadInst(llvm::Value *ptr, llvm::Type *retType, llvm::Instruction *inst) {
-     Assert(llvm::isa<llvm::VectorType>(retType));
--    Assert(llvm::isPowerOf2_32(retType->getVectorNumElements()));
--    Assert(retType->getPrimitiveSizeInBits());
--    Assert(retType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-+
-+    llvm::VectorType *retVecType = llvm::dyn_cast<llvm::VectorType>(retType);
-+    Assert(llvm::isPowerOf2_32(retVecType->getNumElements()));
-+    Assert(retVecType->getPrimitiveSizeInBits());
-+    Assert(retVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-     // The data read of svm load must have a size that is a power of two from 16 to 128
-     // bytes. However for int8 type and simd width = 8, the data read size is 8.
-     // So we use masked load function here instead of svm load which process int8 type
-     // correctly.
--    if (retType->getPrimitiveSizeInBits() / 8 < 16) {
--        Assert(retType->getScalarType() == LLVMTypes::Int8Type);
-+    if (retVecType->getPrimitiveSizeInBits() / 8 < 16) {
-+        Assert(retVecType->getScalarType() == LLVMTypes::Int8Type);
-         if (llvm::Function *maskedFunc = lGenXMaskedInt8Inst(inst, false))
-             return llvm::dyn_cast<llvm::CallInst>(lCallInst(maskedFunc, ptr, LLVMMaskAllOn, ""));
-         else {
-@@ -5622,15 +5626,24 @@ static bool lVectorizeGEPs(llvm::Value *ptr, std::vector<PtrUse> &ptrUses, std::
-         llvm::PtrToIntInst *ptrToInt =
-             new llvm::PtrToIntInst(ptr, LLVMTypes::Int64Type, "vectorized_ptrtoint", insertBefore);
-         llvm::Instruction *addr = llvm::BinaryOperator::CreateAdd(ptrToInt, offset, "vectorized_address", insertBefore);
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        llvm::Type *retType = llvm::FixedVectorType::get(scalar_type, reqSize / t_size);
-+#else
-         llvm::Type *retType = llvm::VectorType::get(scalar_type, reqSize / t_size);
-+#endif
-         llvm::Function *fn = llvm::GenXIntrinsic::getGenXDeclaration(
-             m->module, llvm::GenXIntrinsic::genx_svm_block_ld_unaligned, {retType, addr->getType()});
-         llvm::Instruction *ld = llvm::CallInst::Create(fn, {addr}, "vectorized_ld", insertBefore);
- 
-         if (loadingPtr) {
-             // Cast int to ptr via inttoptr
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            ld = new llvm::IntToPtrInst(ld, llvm::FixedVectorType::get(originalType, reqSize / t_size),
-+                                        "vectorized_inttoptr", insertBefore);
-+#else
-             ld = new llvm::IntToPtrInst(ld, llvm::VectorType::get(originalType, reqSize / t_size),
-                                         "vectorized_inttoptr", insertBefore);
-+#endif
-         }
- 
-         // Scalar extracts for all loaded elements
-@@ -6160,19 +6173,34 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-         llvm::Instruction *inst = &*I;
-         if (llvm::CallInst *ci = llvm::dyn_cast<llvm::CallInst>(inst)) {
-             llvm::Function *func = ci->getCalledFunction();
--            if (func && func->getName() == "llvm.trap") {
-+            if (func && func->getName().equals("llvm.trap")) {
-                 llvm::Type *argTypes[] = {LLVMTypes::Int1VectorType, LLVMTypes::Int16VectorType};
-                 // Description of parameters for genx_raw_send_noresult can be found in target-genx.ll
-                 auto Fn = +llvm::GenXIntrinsic::getGenXDeclaration(
-                     m->module, llvm::GenXIntrinsic::genx_raw_send_noresult, argTypes);
-                 llvm::SmallVector<llvm::Value *, 8> Args;
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 0));
--                Args.push_back(llvm::ConstantVector::getSplat(g->target->getNativeVectorWidth(),
--                                                              llvm::ConstantInt::getTrue(*g->ctx)));
-+                Args.push_back(llvm::ConstantVector::getSplat(
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+                    g->target->getNativeVectorWidth(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+                    {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
-+#else // LLVM 12.0+
-+                    llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-+#endif
-+                    llvm::ConstantInt::getTrue(*g->ctx)));
-+
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 39));
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 33554448));
-                 llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
--                    g->target->getNativeVectorWidth(), llvm::Constant::getNullValue(llvm::Type::getInt16Ty(*g->ctx)));
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+                    g->target->getNativeVectorWidth(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+                    {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
-+#else // LLVM 12.0+
-+                    llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-+#endif
-+                    llvm::Constant::getNullValue(llvm::Type::getInt16Ty(*g->ctx)));
-                 Args.push_back(zeroMask);
- 
-                 llvm::Instruction *newInst = llvm::CallInst::Create(Fn, Args, ci->getName());
-@@ -6181,7 +6209,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     modifiedAny = true;
-                     goto restart;
-                 }
--            } else if (func && func->getName() == "llvm.assume") {
-+            } else if (func && func->getName().equals("llvm.assume")) {
-                 ci->eraseFromParent();
-                 modifiedAny = true;
-                 goto restart;
-@@ -6335,7 +6363,7 @@ bool CheckUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 continue;
-             for (int i = 0; i < unsupportedFuncs.size(); i++) {
-                 std::smatch match;
--                std::string funcName = func->getName();
-+                std::string funcName = func->getName().str();
-                 if (std::regex_match(funcName, match, unsupportedFuncs[i])) {
-                     // We found unsupported function. Generate error and stop compilation.
-                     SourcePos pos;
-@@ -6418,12 +6446,14 @@ bool MangleOpenCLBuiltins::runOnBasicBlock(llvm::BasicBlock &bb) {
-             if (func->getName().startswith("__spirv_ocl")) {
-                 std::string mangledName;
-                 llvm::Type *retType = func->getReturnType();
--                std::string funcName = func->getName();
-+                std::string funcName = func->getName().str();
-                 std::vector<llvm::Type *> ArgTy;
-                 // spirv OpenCL builtins are used for double types only
--                Assert(retType->isVectorTy() && retType->getVectorElementType()->isDoubleTy() ||
-+                Assert(retType->isVectorTy() &&
-+                           llvm::dyn_cast<llvm::VectorType>(retType)->getElementType()->isDoubleTy() ||
-                        retType->isSingleValueType() && retType->isDoubleTy());
--                if (retType->isVectorTy() && retType->getVectorElementType()->isDoubleTy()) {
-+                if (retType->isVectorTy() &&
-+                    llvm::dyn_cast<llvm::VectorType>(retType)->getElementType()->isDoubleTy()) {
-                     ArgTy.push_back(LLVMTypes::DoubleVectorType);
-                     // _DvWIDTH suffix is used in target file to differentiate scalar
-                     // and vector versions of intrinsics. Here we remove this
-@@ -6511,8 +6541,15 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- 
-     // Cast offsets to int64
-     Offsets = new llvm::ZExtInst(
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        Offsets,
-+        llvm::FixedVectorType::get(LLVMTypes::Int64Type,
-+                                   llvm::dyn_cast<llvm::VectorType>(Offsets->getType())->getNumElements()),
-+        "svm_offset_zext", InsertBefore);
-+#else
-         Offsets, llvm::VectorType::get(LLVMTypes::Int64Type, Offsets->getType()->getVectorNumElements()),
-         "svm_offset_zext", InsertBefore);
-+#endif
- 
-     if (!llvm::isa<llvm::ConstantPointerNull>(Ptr)) {
-         // Cast ptr to int64
-@@ -6520,13 +6557,31 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- 
-         // Vectorize ptr
-         llvm::Value *undefInsertValue =
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            llvm::UndefValue::get(llvm::FixedVectorType::get(
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+#else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
-+#endif
-         address = llvm::InsertElementInst::Create(undefInsertValue, address, LLVMInt32(0), "svm_ptr_iei", InsertBefore);
-         llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+            {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
-+#else
-+        llvm::ElementCount::get(
-+                                llvm::dyn_cast<llvm::FixedVectorType>(addressType->getNumElements(), false),
-+#endif
-             llvm::Constant::getNullValue(llvm::Type::getInt32Ty(InsertBefore->getContext())));
-+
-         llvm::Value *undefShuffleValue =
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            llvm::UndefValue::get(llvm::FixedVectorType::get(
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+#else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
-+#endif
-         address = new llvm::ShuffleVectorInst(address, undefShuffleValue, zeroVec, "svm_ptr_svi", InsertBefore);
- 
-         // Calculate address
-@@ -6553,9 +6608,12 @@ llvm::Instruction *FixAddressSpace::processVectorLoad(llvm::LoadInst *LI) {
-     if (retType->getScalarType()->isPointerTy()) {
-         isPtrLoad = true;
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        retType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(retType)->getNumElements());
-+#else
-         retType = llvm::VectorType::get(scalarType, retType->getVectorNumElements());
-+#endif
-     }
--
-     llvm::Instruction *res = lGenXLoadInst(ptr, retType, llvm::dyn_cast<llvm::Instruction>(LI));
-     Assert(res);
- 
-@@ -6580,11 +6638,16 @@ llvm::Instruction *FixAddressSpace::processSVMVectorLoad(llvm::Instruction *CI)
-     ptr = new llvm::IntToPtrInst(ptr, llvm::PointerType::get(retType, 0), CI->getName() + "_inttoptr", CI);
-     llvm::Instruction *loadInst = NULL;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    loadInst = new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), loadInst,
--                                  CI->getName(), (llvm::Instruction *)NULL);
-+    loadInst = new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-+                                  CI->getName(), false /* not volatile */,
-+                                  llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne(),
-+                                  (llvm::Instruction *)NULL);
- #else
--    loadInst = new llvm::LoadInst(ptr, CI->getName(), (llvm::Instruction *)NULL);
-+    loadInst = new llvm::LoadInst(ptr, CI->getName(), false,
-+                                  llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne(),
-+                                  (llvm::Instruction *)NULL);
- #endif
-+
-     Assert(loadInst);
-     return loadInst;
- }
-@@ -6606,7 +6669,11 @@ llvm::Instruction *FixAddressSpace::processVectorStore(llvm::StoreInst *SI) {
-     // Note: it doesn't look like a normal case for GenX target
-     if (valType->getScalarType()->isPointerTy()) {
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        valType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(valType)->getNumElements());
-+#else
-         valType = llvm::VectorType::get(scalarType, valType->getVectorNumElements());
-+#endif
-         val = new llvm::PtrToIntInst(val, valType, "svm_st_val_ptrtoint", SI);
-     }
- 
-@@ -6631,12 +6698,8 @@ llvm::Instruction *FixAddressSpace::processSVMVectorStore(llvm::Instruction *CI)
-     ptr = new llvm::IntToPtrInst(ptr, llvm::PointerType::get(valType, 0), CI->getName() + "_inttoptr", CI);
- 
-     llvm::Instruction *storeInst = NULL;
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    loadInst = new llvm::StoreInst(val, llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(),
--                                   storeInst, CI->getName(), (llvm::Instruction *)NULL);
--#else
--    storeInst = new llvm::StoreInst(val, ptr, (llvm::Instruction *)NULL);
--#endif
-+    storeInst = new llvm::StoreInst(val, ptr, (llvm::Instruction *)NULL,
-+                                    llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
-     Assert(storeInst);
-     return storeInst;
- }
-@@ -6645,15 +6708,18 @@ llvm::Instruction *FixAddressSpace::createInt8WrRegion(llvm::Value *Val, llvm::V
-     int width = g->target->getVectorWidth();
- 
-     llvm::Value *Args[8];
--
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Args[0] = llvm::UndefValue::get(llvm::FixedVectorType::get(LLVMTypes::Int8Type, width * 4)); // old value
-+#else
-     Args[0] = llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int8Type, width * 4)); // old value
--    Args[1] = Val;                                                                          // value to store
--    Args[2] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);                              // vstride
--    Args[3] = llvm::ConstantInt::get(LLVMTypes::Int32Type, width);                          // width
--    Args[4] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 4);                              // stride
--    Args[5] = llvm::ConstantInt::get(LLVMTypes::Int16Type, 0);                              // offsets
--    Args[6] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);                              // parent width (ignored)
--    Args[7] = Mask;                                                                         // mask
-+#endif
-+    Args[1] = Val;                                                 // value to store
-+    Args[2] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);     // vstride
-+    Args[3] = llvm::ConstantInt::get(LLVMTypes::Int32Type, width); // width
-+    Args[4] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 4);     // stride
-+    Args[5] = llvm::ConstantInt::get(LLVMTypes::Int16Type, 0);     // offsets
-+    Args[6] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);     // parent width (ignored)
-+    Args[7] = Mask;                                                // mask
- 
-     llvm::Type *Tys[4];
- 
-@@ -6708,7 +6774,12 @@ llvm::Instruction *FixAddressSpace::processGatherScatterPrivate(llvm::CallInst *
-         return NULL;
- 
-     llvm::Value *address = calculateGatherScatterAddress(ptr, offsets, CI);
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    llvm::Type *i8VecType = llvm::FixedVectorType::get(LLVMTypes::Int8Type, width * 4);
-+#else
-     llvm::Type *i8VecType = llvm::VectorType::get(LLVMTypes::Int8Type, width * 4);
-+#endif
-+
-     bool isInt8 = (value->getType()->getScalarType() == LLVMTypes::Int8Type);
- 
-     Assert(address && "Bad gather/scatter address!");
diff --git a/srcpkgs/ispc/patches/llvm12-006.patch b/srcpkgs/ispc/patches/llvm12-006.patch
deleted file mode 100644
index a829ea48391e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-006.patch
+++ /dev/null
@@ -1,126 +0,0 @@
-From bb3f493d1fbd45c79e1d9dee67a0430ba313eaad Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 19 Jan 2021 11:07:33 -0800
-Subject: [PATCH] Fixed ifdefs for LLVM_11
-
----
- src/ctx.cpp |  6 +++---
- src/opt.cpp | 18 +++++++++---------
- 2 files changed, 12 insertions(+), 12 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 2a72e6837..527a02f30 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1691,7 +1691,7 @@ llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const llvm::T
-     if (llvm::Constant *const_val = llvm::dyn_cast<llvm::Constant>(value)) {
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         ret = llvm::ConstantVector::getSplat(g->target->getVectorWidth(), const_val);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-         ret =
-             llvm::ConstantVector::getSplat({static_cast<unsigned int>(g->target->getVectorWidth()), false}, const_val);
- #else // LLVM 12.0+
-@@ -3148,7 +3148,7 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-     llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
-         vecType->getVectorNumElements(), llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-     llvm::Constant *zeroVec =
-         llvm::ConstantVector::getSplat({static_cast<unsigned int>(ty->getNumElements()), false},
-                                        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
-@@ -3688,7 +3688,7 @@ llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-         defaults = llvm::ConstantVector::getSplat({static_cast<unsigned int>(vt->getNumElements()), false},
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
- #else
-diff --git a/src/opt.cpp b/src/opt.cpp
-index 1789b8476..3ff191a0a 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -1045,7 +1045,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                 llvm::Instruction *loadInst =
-                     new llvm::LoadInst(castPtr, llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load",
-                                        false /* not volatile */, llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
-@@ -1472,7 +1472,7 @@ static llvm::Value *lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offse
-                     llvm::Value *zeroMask =
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                         llvm::ConstantVector::getSplat(cv->getType()->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                         llvm::ConstantVector::getSplat(
-                             {llvm::dyn_cast<llvm::VectorType>(cv->getType())->getNumElements(), false},
- #else // LLVM 12.0+
-@@ -1495,7 +1495,7 @@ static llvm::Value *lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offse
-                         llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                             bop_var_type->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                             {llvm::dyn_cast<llvm::VectorType>(bop_var_type)->getNumElements(), false},
- #else // LLVM 12.0+
-                             llvm::ElementCount::get(
-@@ -2803,7 +2803,7 @@ static bool lGSToLoadStore(llvm::CallInst *callInst) {
-             llvm::Value *zeroMask =
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                 llvm::ConstantVector::getSplat(callInst->getType()->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                 llvm::ConstantVector::getSplat(
-                     {llvm::dyn_cast<llvm::VectorType>(callInst->getType())->getNumElements(), false},
- 
-@@ -3100,7 +3100,7 @@ static bool lImproveMaskedLoad(llvm::CallInst *callInst, llvm::BasicBlock::itera
-         {
-             llvm::Type *ptrType = llvm::PointerType::get(callInst->getType(), 0);
-             ptr = new llvm::BitCastInst(ptr, ptrType, "ptr_cast_for_load", callInst);
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             load = new llvm::LoadInst(
-                 ptr, callInst->getName(), false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-@@ -3459,7 +3459,7 @@ llvm::Value *lGEPAndLoad(llvm::Value *basePtr, int64_t offset, int align, llvm::
-                          llvm::Type *type) {
-     llvm::Value *ptr = lGEPInst(basePtr, LLVMInt64(offset), "new_base", insertBefore);
-     ptr = new llvm::BitCastInst(ptr, llvm::PointerType::get(type, 0), "ptr_cast", insertBefore);
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-     return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, llvm::MaybeAlign(align), insertBefore);
- #else // LLVM 11.0+
-     return new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-@@ -6183,7 +6183,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 Args.push_back(llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                     g->target->getNativeVectorWidth(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                     {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
- #else // LLVM 12.0+
-                     llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-@@ -6195,7 +6195,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                     g->target->getNativeVectorWidth(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                     {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
- #else // LLVM 12.0+
-                     llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-@@ -6567,7 +6567,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
-         llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-             {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
- #else
-         llvm::ElementCount::get(
diff --git a/srcpkgs/ispc/patches/llvm12-007.patch b/srcpkgs/ispc/patches/llvm12-007.patch
deleted file mode 100644
index 1b975f896c7e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-007.patch
+++ /dev/null
@@ -1,160 +0,0 @@
-From 62f5a6c37bf26fc25a7cf81868052d3472874610 Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 23 Mar 2021 23:07:30 -0700
-Subject: [PATCH] Do not generate function mask when it is not required
-
----
- src/ctx.cpp                    | 39 ++++++++++++++-------
- tests/lit-tests/full_mask.ispc | 63 ++++++++++++++++++++++++++++++++++
- 2 files changed, 90 insertions(+), 12 deletions(-)
- create mode 100644 tests/lit-tests/full_mask.ispc
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 527a02f30..9e775fc5c 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -231,10 +231,18 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym, llvm::F
-     internalMaskPointer = AllocaInst(LLVMTypes::MaskType, "internal_mask_memory");
-     StoreInst(LLVMMaskAllOn, internalMaskPointer);
- 
--    functionMaskValue = LLVMMaskAllOn;
--
--    fullMaskPointer = AllocaInst(LLVMTypes::MaskType, "full_mask_memory");
--    StoreInst(LLVMMaskAllOn, fullMaskPointer);
-+    // If the function doesn't have __mask in parameters, there is no need to
-+    // have function mask
-+    if ((func->GetType()->isExported &&
-+         (lf->getFunctionType()->getNumParams() == func->GetType()->GetNumParameters())) ||
-+        (func->GetType()->isUnmasked) || (func->GetType()->isTask)) {
-+        functionMaskValue = NULL;
-+        fullMaskPointer = NULL;
-+    } else {
-+        functionMaskValue = LLVMMaskAllOn;
-+        fullMaskPointer = AllocaInst(LLVMTypes::MaskType, "full_mask_memory");
-+        StoreInst(LLVMMaskAllOn, fullMaskPointer);
-+    }
- 
-     blockEntryMask = NULL;
-     breakLanesPtr = continueLanesPtr = NULL;
-@@ -389,20 +397,26 @@ llvm::BasicBlock *FunctionEmitContext::GetCurrentBasicBlock() { return bblock; }
- 
- void FunctionEmitContext::SetCurrentBasicBlock(llvm::BasicBlock *bb) { bblock = bb; }
- 
--llvm::Value *FunctionEmitContext::GetFunctionMask() { return functionMaskValue; }
-+llvm::Value *FunctionEmitContext::GetFunctionMask() { return fullMaskPointer ? functionMaskValue : LLVMMaskAllOn; }
- 
- llvm::Value *FunctionEmitContext::GetInternalMask() { return LoadInst(internalMaskPointer, NULL, "load_mask"); }
- 
- llvm::Value *FunctionEmitContext::GetFullMask() {
--    return BinaryOperator(llvm::Instruction::And, GetInternalMask(), functionMaskValue, "internal_mask&function_mask");
-+    return fullMaskPointer ? BinaryOperator(llvm::Instruction::And, GetInternalMask(), functionMaskValue,
-+                                            "internal_mask&function_mask")
-+                           : GetInternalMask();
- }
- 
--llvm::Value *FunctionEmitContext::GetFullMaskPointer() { return fullMaskPointer; }
-+llvm::Value *FunctionEmitContext::GetFullMaskPointer() {
-+    return fullMaskPointer ? fullMaskPointer : internalMaskPointer;
-+}
- 
- void FunctionEmitContext::SetFunctionMask(llvm::Value *value) {
--    functionMaskValue = value;
--    if (bblock != NULL)
--        StoreInst(GetFullMask(), fullMaskPointer);
-+    if (fullMaskPointer != NULL) {
-+        functionMaskValue = value;
-+        if (bblock != NULL)
-+            StoreInst(GetFullMask(), fullMaskPointer);
-+    }
- }
- 
- void FunctionEmitContext::SetBlockEntryMask(llvm::Value *value) { blockEntryMask = value; }
-@@ -410,7 +424,8 @@ void FunctionEmitContext::SetBlockEntryMask(llvm::Value *value) { blockEntryMask
- void FunctionEmitContext::SetInternalMask(llvm::Value *value) {
-     StoreInst(value, internalMaskPointer);
-     // kludge so that __mask returns the right value in ispc code.
--    StoreInst(GetFullMask(), fullMaskPointer);
-+    if (fullMaskPointer)
-+        StoreInst(GetFullMask(), fullMaskPointer);
- }
- 
- void FunctionEmitContext::SetInternalMaskAnd(llvm::Value *oldMask, llvm::Value *test) {
-@@ -1265,7 +1280,7 @@ void FunctionEmitContext::CurrentLanesReturned(Expr *expr, bool doCoherenceCheck
-         // lanes have returned
-         if (doCoherenceCheck) {
-             // if newReturnedLanes == functionMaskValue, get out of here!
--            llvm::Value *cmp = MasksAllEqual(functionMaskValue, newReturnedLanes);
-+            llvm::Value *cmp = MasksAllEqual(GetFunctionMask(), newReturnedLanes);
-             llvm::BasicBlock *bDoReturn = CreateBasicBlock("do_return");
-             llvm::BasicBlock *bNoReturn = CreateBasicBlock("no_return");
-             BranchInst(bDoReturn, bNoReturn, cmp);
-diff --git a/tests/lit-tests/full_mask.ispc b/tests/lit-tests/full_mask.ispc
-new file mode 100644
-index 000000000..ac0b0bca3
---- /dev/null
-+++ b/tests/lit-tests/full_mask.ispc
-@@ -0,0 +1,63 @@
-+// RUN: %{ispc} %s -DISPC_EXPORT --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_EXPORT %s
-+
-+// RUN: %{ispc} %s -DISPC_UNMASKED --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_UNMASKED %s
-+
-+// RUN: %{ispc} %s -DISPC_NOQUALIF --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_NOQUALIF %s
-+
-+// RUN: %{ispc} %s -DISPC_TASK --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_TASK %s
-+
-+struct Parameters {
-+    float *vout;
-+    int param;
-+};
-+
-+#ifdef ISPC_EXPORT
-+// CHECK_ISPC_EXPORT: define void @simple_export___
-+// CHECK_ISPC_EXPORT: %full_mask_memory = alloca
-+// CHECK_ISPC_EXPORT: define void @simple_export(
-+// CHECK_ISPC_EXPORT-NOT: %full_mask_memory = alloca
-+export void simple_export(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_UNMASKED
-+// CHECK_ISPC_UNMASKED: define void @simple_unmasked
-+// CHECK_ISPC_UNMASKED-NOT: %full_mask_memory = alloca
-+unmasked void simple_unmasked(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_NOQUALIF
-+// CHECK_ISPC_NOQUALIF: define void @simple
-+// CHECK_ISPC_NOQUALIF: %full_mask_memory = alloca
-+void simple(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_TASK
-+
-+// CHECK_ISPC_TASK: define void @simple_task
-+// CHECK_ISPC_TASK-NOT: %full_mask_memory = alloca
-+// CHECK_ISPC_TASK: define void @simple_entry_point__
-+// CHECK_ISPC_TASK: %full_mask_memory = alloca
-+// CHECK_ISPC_TASK: define void @simple_entry_point(
-+// CHECK_ISPC_TASK-NOT: %full_mask_memory = alloca
-+task void simple_task(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+export void simple_entry_point(void *uniform parameters, uniform int dim0, uniform int dim1, uniform int dim2) {
-+    launch[dim0, dim1, dim2] simple_task(parameters);
-+}
-+#endif
-\ No newline at end of file
diff --git a/srcpkgs/ispc/patches/llvm12-008.patch b/srcpkgs/ispc/patches/llvm12-008.patch
deleted file mode 100644
index c8413d8b7887..000000000000
--- a/srcpkgs/ispc/patches/llvm12-008.patch
+++ /dev/null
@@ -1,149 +0,0 @@
-From afad14227d9204a3c8a626ca608f5b43c3218fe9 Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 4 May 2021 11:43:52 -0700
-Subject: [PATCH] Fixed ISPC gen build for LLVM12
-
----
- src/ctx.cpp |  4 ++++
- src/opt.cpp | 43 +++++++++++++++++++++++++++++--------------
- 2 files changed, 33 insertions(+), 14 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 0c7050591..f7dc06939 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -3738,7 +3738,11 @@ llvm::Value *FunctionEmitContext::GenXSimdCFAny(llvm::Value *value) {
- 
- llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::Value *defaults) {
-     AssertPos(currentPos, llvm::isa<llvm::VectorType>(value->getType()));
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    llvm::FixedVectorType *vt = llvm::dyn_cast<llvm::FixedVectorType>(value->getType());
-+#else
-     llvm::VectorType *vt = llvm::dyn_cast<llvm::VectorType>(value->getType());
-+#endif
-     if (defaults == NULL) {
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-diff --git a/src/opt.cpp b/src/opt.cpp
-index cea4afa23..4e33d6b1a 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -2916,9 +2916,13 @@ static llvm::Function *lGenXMaskedInt8Inst(llvm::Instruction *inst, bool isStore
- 
- static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::Instruction *inst) {
-     Assert(g->target->isGenXTarget());
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Assert(llvm::isa<llvm::FixedVectorType>(val->getType()));
-+    llvm::FixedVectorType *valVecType = llvm::dyn_cast<llvm::FixedVectorType>(val->getType());
-+#else
-     Assert(llvm::isa<llvm::VectorType>(val->getType()));
--
-     llvm::VectorType *valVecType = llvm::dyn_cast<llvm::VectorType>(val->getType());
-+#endif
-     Assert(llvm::isPowerOf2_32(valVecType->getNumElements()));
-     Assert(valVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
- 
-@@ -2942,9 +2946,13 @@ static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::
- }
- 
- static llvm::CallInst *lGenXLoadInst(llvm::Value *ptr, llvm::Type *retType, llvm::Instruction *inst) {
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Assert(llvm::isa<llvm::FixedVectorType>(retType));
-+    llvm::FixedVectorType *retVecType = llvm::dyn_cast<llvm::FixedVectorType>(retType);
-+#else
-     Assert(llvm::isa<llvm::VectorType>(retType));
--
-     llvm::VectorType *retVecType = llvm::dyn_cast<llvm::VectorType>(retType);
-+#endif
-     Assert(llvm::isPowerOf2_32(retVecType->getNumElements()));
-     Assert(retVecType->getPrimitiveSizeInBits());
-     Assert(retVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-@@ -5485,8 +5493,13 @@ static void lCreateBlockLDUse(llvm::Instruction *currInst, std::vector<llvm::Ext
-         } else if (auto gather = lGetPseudoGather(llvm::dyn_cast<llvm::Instruction>(ui->getUser()))) {
-             // Collect idxs from gather and fix users
-             llvm::Value *res = llvm::UndefValue::get(gather->getType());
--            for (unsigned i = 0, end = llvm::dyn_cast<llvm::VectorType>(res->getType())->getNumElements(); i < end;
--                 ++i) {
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            for (unsigned i = 0, end = llvm::dyn_cast<llvm::FixedVectorType>(res->getType())->getNumElements(); i < end;
-+                 ++i)
-+#else
-+            for (unsigned i = 0, end = llvm::dyn_cast<llvm::VectorType>(res->getType())->getNumElements(); i < end; ++i)
-+#endif
-+            {
-                 // Get element via IEI
-                 res = llvm::InsertElementInst::Create(res, EEIs[ptrUse.idxs[curr_idx++]],
-                                                       llvm::ConstantInt::get(LLVMTypes::Int32Type, i),
-@@ -5522,10 +5535,11 @@ static bool lVectorizeGEPs(llvm::Value *ptr, std::vector<PtrUse> &ptrUses, std::
- 
-     // Adjust values for vector load
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    if (auto vecTy = llvm::dyn_cast<llvm::FixedVectorType>(type)) {
-+    if (auto vecTy = llvm::dyn_cast<llvm::FixedVectorType>(type))
- #else
--    if (auto vecTy = llvm::dyn_cast<llvm::VectorType>(type)) {
-+    if (auto vecTy = llvm::dyn_cast<llvm::VectorType>(type))
- #endif
-+    {
-         // Get single element size
-         t_size /= vecTy->getNumElements();
-         // Get single element type
-@@ -6477,7 +6491,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-         Offsets,
-         llvm::FixedVectorType::get(LLVMTypes::Int64Type,
--                                   llvm::dyn_cast<llvm::VectorType>(Offsets->getType())->getNumElements()),
-+                                   llvm::dyn_cast<llvm::FixedVectorType>(Offsets->getType())->getNumElements()),
-         "svm_offset_zext", InsertBefore);
- #else
-         Offsets, llvm::VectorType::get(LLVMTypes::Int64Type, Offsets->getType()->getVectorNumElements()),
-@@ -6492,7 +6506,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
-         llvm::Value *undefInsertValue =
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-             llvm::UndefValue::get(llvm::FixedVectorType::get(
--                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements()));
- #else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
- #endif
-@@ -6501,17 +6515,16 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
- #elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
--            {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
-+            {llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements(), false},
- #else
--        llvm::ElementCount::get(
--                                llvm::dyn_cast<llvm::FixedVectorType>(addressType->getNumElements(), false),
-+            llvm::ElementCount::get(llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements(), false),
- #endif
-             llvm::Constant::getNullValue(llvm::Type::getInt32Ty(InsertBefore->getContext())));
- 
-         llvm::Value *undefShuffleValue =
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-             llvm::UndefValue::get(llvm::FixedVectorType::get(
--                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements()));
- #else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
- #endif
-@@ -6542,7 +6555,8 @@ llvm::Instruction *FixAddressSpace::processVectorLoad(llvm::LoadInst *LI) {
-         isPtrLoad = true;
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--        retType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(retType)->getNumElements());
-+        retType =
-+            llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::FixedVectorType>(retType)->getNumElements());
- #else
-         retType = llvm::VectorType::get(scalarType, retType->getVectorNumElements());
- #endif
-@@ -6604,7 +6618,8 @@ llvm::Instruction *FixAddressSpace::processVectorStore(llvm::StoreInst *SI) {
-     if (valType->getScalarType()->isPointerTy()) {
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--        valType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(valType)->getNumElements());
-+        valType =
-+            llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::FixedVectorType>(valType)->getNumElements());
- #else
-         valType = llvm::VectorType::get(scalarType, valType->getVectorNumElements());
- #endif
diff --git a/srcpkgs/ispc/patches/llvm12-009.patch b/srcpkgs/ispc/patches/llvm12-009.patch
deleted file mode 100644
index d3ea67828582..000000000000
--- a/srcpkgs/ispc/patches/llvm12-009.patch
+++ /dev/null
@@ -1,2109 +0,0 @@
-From 97b13c32132e2704a5e3e7b2eae49d854d087e3e Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 4 May 2021 11:31:55 -0700
-Subject: [PATCH] Updated builtins-cm* for switch to LLVM12
-
----
- builtins/builtins-cm-32.ll | 234 ++++++++++++++++++-------------------
- builtins/builtins-cm-64.ll | 232 ++++++++++++++++++------------------
- 2 files changed, 233 insertions(+), 233 deletions(-)
-
-diff --git a/builtins/builtins-cm-32.ll b/builtins/builtins-cm-32.ll
-index 32debf32e..481bbdc48 100644
---- a/builtins/builtins-cm-32.ll
-+++ b/builtins/builtins-cm-32.ll
-@@ -557,7 +557,7 @@ $_ZN13VaryingWriter12WriteVecElemIPvEEvv = comdat any
- @.str.10 = private unnamed_addr constant [5 x i8] c"%08X\00", align 1
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -618,7 +618,7 @@ define internal <1 x i8> @_ZN7details13__impl_divremILi1EEEu2CMvbT__cS1_S1_u2CMv
- declare <1 x i8> @llvm.genx.rdregioni.v1i8.v1i8.i16(<1 x i8>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -634,7 +634,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -680,7 +680,7 @@ define internal <2 x i8> @_ZN7details13__impl_divremILi2EEEu2CMvbT__cS1_S1_u2CMv
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -818,7 +818,7 @@ define internal <16 x i8> @_ZN7details13__impl_divremILi16EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -864,7 +864,7 @@ define internal <32 x i8> @_ZN7details13__impl_divremILi32EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -890,7 +890,7 @@ define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -904,7 +904,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -918,7 +918,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -932,7 +932,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -946,7 +946,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -960,7 +960,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -974,7 +974,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1058,7 +1058,7 @@ define internal <1 x i16> @_ZN7details13__impl_divremILi1EEEu2CMvbT__sS1_S1_u2CM
- declare <1 x i16> @llvm.genx.rdregioni.v1i16.v1i16.i16(<1 x i16>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1074,7 +1074,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1143,7 +1143,7 @@ define internal <2 x i16> @_ZN7details13__impl_divremILi2EEEu2CMvbT__sS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1350,7 +1350,7 @@ define internal <16 x i16> @_ZN7details13__impl_divremILi16EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1419,7 +1419,7 @@ define internal <32 x i16> @_ZN7details13__impl_divremILi32EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1445,7 +1445,7 @@ define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 si
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1459,7 +1459,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1473,7 +1473,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1487,7 +1487,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -1501,7 +1501,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -1515,7 +1515,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1529,7 +1529,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1730,7 +1730,7 @@ define internal <1 x i32> @_ZN7details13__impl_divremILi1EEEu2CMvbT__iS1_S1_u2CM
- declare <1 x i32> @llvm.genx.rdregioni.v1i32.v1i32.i16(<1 x i32>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1746,7 +1746,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -1932,7 +1932,7 @@ define internal <2 x i32> @_ZN7details13__impl_divremILi2EEEu2CMvbT__iS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2490,7 +2490,7 @@ define internal <16 x i32> @_ZN7details13__impl_divremILi16EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2676,7 +2676,7 @@ define internal <32 x i32> @_ZN7details13__impl_divremILi32EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2702,7 +2702,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2716,7 +2716,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -2730,7 +2730,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2744,7 +2744,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -2758,7 +2758,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -2772,7 +2772,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2786,7 +2786,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2844,7 +2844,7 @@ define internal <1 x i8> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2860,7 +2860,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -2906,7 +2906,7 @@ define internal <2 x i8> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3044,7 +3044,7 @@ define internal <16 x i8> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3090,7 +3090,7 @@ define internal <32 x i8> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3116,7 +3116,7 @@ define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3130,7 +3130,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -3144,7 +3144,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3158,7 +3158,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -3172,7 +3172,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -3186,7 +3186,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3200,7 +3200,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3278,7 +3278,7 @@ define internal <1 x i16> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3294,7 +3294,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3360,7 +3360,7 @@ define internal <2 x i16> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3558,7 +3558,7 @@ define internal <16 x i16> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3624,7 +3624,7 @@ define internal <32 x i16> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3650,7 +3650,7 @@ define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 ze
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3664,7 +3664,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3678,7 +3678,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3692,7 +3692,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -3706,7 +3706,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -3720,7 +3720,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3734,7 +3734,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3892,7 +3892,7 @@ define internal <1 x i32> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3908,7 +3908,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4054,7 +4054,7 @@ define internal <2 x i32> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4492,7 +4492,7 @@ define internal <16 x i32> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4638,7 +4638,7 @@ define internal <32 x i32> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4664,7 +4664,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4678,7 +4678,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4692,7 +4692,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4706,7 +4706,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -4720,7 +4720,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -4734,7 +4734,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4748,7 +4748,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-+define internal void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-   %8 = alloca i8*, align 4
-   %9 = alloca i8*, align 4
-   %10 = alloca i32, align 4
-@@ -4988,7 +4988,7 @@ define internal void @_ZN7details16_cm_print_formatILi128EEEv15cm_surfaceindexju
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i32) #26 !dbg !117 {
-+define internal void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i32) #26 !dbg !117 {
-   %10 = alloca i32, align 4
-   %11 = alloca i8*, align 4
-   %12 = alloca i32, align 4
-@@ -5069,7 +5069,7 @@ define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i3
-   %67 = load i64, i64* %13, align 8, !dbg !159, !tbaa !19
-   %68 = load <5 x i32>, <5 x i32>* %21, align 32, !dbg !160, !tbaa !7
-   call void @_ZN13VaryingWriterC2ERjRPKjiyu2CMvb5_i(%class.VaryingWriter* %23, i32* dereferenceable(4) %19, i32** dereferenceable(4) %14, i32 %66, i64 %67, <5 x i32> %68), !dbg !161
--  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval align 32 %22, %class.VaryingWriter* byval align 32 %23), !dbg !162
-+  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval(%class.UniformWriter) align 32 %22, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %23), !dbg !162
-   br label %70, !dbg !163
- 
- ; <label>:70:                                     ; preds = %60
-@@ -5187,7 +5187,7 @@ define internal <5 x i32> @_Z17get_auxiliary_strv() #28 comdat !dbg !178 {
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %class.VaryingWriter* byval align 32) #25 comdat !dbg !191 {
-+define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !191 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %class.VaryingWriter, align 32
-@@ -5196,7 +5196,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %8 = bitcast %class.UniformWriter* %5 to i8*, !dbg !196
-   %9 = bitcast %class.UniformWriter* %1 to i8*, !dbg !196
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %8, i8* align 32 %9, i32 64, i1 false), !dbg !196, !tbaa.struct !197
--  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval align 32 %5), !dbg !198
-+  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5), !dbg !198
-   br i1 %10, label %16, label %11, !dbg !199
- 
- ; <label>:11:                                     ; preds = %3
-@@ -5204,7 +5204,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %13 = bitcast %class.VaryingWriter* %6 to i8*, !dbg !201
-   %14 = bitcast %class.VaryingWriter* %2 to i8*, !dbg !201
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %13, i8* align 32 %14, i32 64, i1 false), !dbg !201, !tbaa.struct !197
--  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval align 32 %6), !dbg !202
-+  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %6), !dbg !202
-   br label %16, !dbg !199
- 
- ; <label>:16:                                     ; preds = %11, %3
-@@ -5279,7 +5279,7 @@ define internal void @_ZN13VaryingWriterC2ERjRPKjiyu2CMvb5_i(%class.VaryingWrite
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @__num_cores() #29 !dbg !236 {
-+define internal i32 @__num_cores() #29 !dbg !236 {
-   ret i32 -1, !dbg !237
- }
- 
-@@ -8860,7 +8860,7 @@ declare dso_local void @_ZN7details37__cm_intrinsic_impl_svm_scatter_writeIiLi1E
- declare void @llvm.genx.svm.scatter.v1i1.v1i64.v1i32(<1 x i1>, i32, <1 x i64>, <1 x i32>) #27
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval align 32) #25 comdat !dbg !1645 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32) #25 comdat !dbg !1645 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.UniformWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8869,7 +8869,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
-   %7 = bitcast %class.UniformWriter* %4 to i8*, !dbg !1647
-   %8 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1647
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %7, i8* align 32 %8, i32 64, i1 false), !dbg !1647, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %5), !dbg !1648
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval(%class.UniformWriter) align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %5), !dbg !1648
-   ret i1 %9, !dbg !1649
- }
- 
-@@ -8877,7 +8877,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
- declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture readonly, i32, i1) #32
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval align 32) #25 comdat !dbg !1650 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !1650 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.VaryingWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -8886,12 +8886,12 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWrite
-   %7 = bitcast %class.VaryingWriter* %4 to i8*, !dbg !1652
-   %8 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !1652
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %7, i8* align 32 %8, i32 64, i1 false), !dbg !1652, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %5), !dbg !1653
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %5), !dbg !1653
-   ret i1 %9, !dbg !1654
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1655 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1655 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8914,7 +8914,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %22 = bitcast %class.UniformWriter* %5 to i8*, !dbg !1657
-   %23 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1657
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %22, i8* align 32 %23, i32 64, i1 false), !dbg !1657, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %6), !dbg !1658
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %6), !dbg !1658
-   br i1 %24, label %60, label %25, !dbg !1659
- 
- ; <label>:25:                                     ; preds = %3
-@@ -8922,7 +8922,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %27 = bitcast %class.UniformWriter* %7 to i8*, !dbg !1661
-   %28 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1661
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %27, i8* align 32 %28, i32 64, i1 false), !dbg !1661, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %8), !dbg !1662
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval(%class.UniformWriter) align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %8), !dbg !1662
-   br i1 %29, label %60, label %30, !dbg !1663
- 
- ; <label>:30:                                     ; preds = %25
-@@ -8930,7 +8930,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %32 = bitcast %class.UniformWriter* %9 to i8*, !dbg !1665
-   %33 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1665
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %32, i8* align 32 %33, i32 64, i1 false), !dbg !1665, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %10), !dbg !1666
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval(%class.UniformWriter) align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %10), !dbg !1666
-   br i1 %34, label %60, label %35, !dbg !1667
- 
- ; <label>:35:                                     ; preds = %30
-@@ -8938,7 +8938,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %37 = bitcast %class.UniformWriter* %11 to i8*, !dbg !1669
-   %38 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1669
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %37, i8* align 32 %38, i32 64, i1 false), !dbg !1669, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %12), !dbg !1670
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval(%class.UniformWriter) align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %12), !dbg !1670
-   br i1 %39, label %60, label %40, !dbg !1671
- 
- ; <label>:40:                                     ; preds = %35
-@@ -8946,7 +8946,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %42 = bitcast %class.UniformWriter* %13 to i8*, !dbg !1673
-   %43 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1673
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %42, i8* align 32 %43, i32 64, i1 false), !dbg !1673, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %14), !dbg !1674
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval(%class.UniformWriter) align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %14), !dbg !1674
-   br i1 %44, label %60, label %45, !dbg !1675
- 
- ; <label>:45:                                     ; preds = %40
-@@ -8954,7 +8954,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %47 = bitcast %class.UniformWriter* %15 to i8*, !dbg !1677
-   %48 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1677
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %47, i8* align 32 %48, i32 64, i1 false), !dbg !1677, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %16), !dbg !1678
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval(%class.UniformWriter) align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %16), !dbg !1678
-   br i1 %49, label %60, label %50, !dbg !1679
- 
- ; <label>:50:                                     ; preds = %45
-@@ -8962,7 +8962,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %52 = bitcast %class.UniformWriter* %17 to i8*, !dbg !1681
-   %53 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1681
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %52, i8* align 32 %53, i32 64, i1 false), !dbg !1681, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %18), !dbg !1682
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval(%class.UniformWriter) align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %18), !dbg !1682
-   br i1 %54, label %60, label %55, !dbg !1683
- 
- ; <label>:55:                                     ; preds = %50
-@@ -8970,7 +8970,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %57 = bitcast %class.UniformWriter* %19 to i8*, !dbg !1685
-   %58 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1685
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %57, i8* align 32 %58, i32 64, i1 false), !dbg !1685, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %20), !dbg !1686
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval(%class.UniformWriter) align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %20), !dbg !1686
-   br label %60, !dbg !1683
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -8979,7 +8979,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1688 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1688 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9005,7 +9005,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1697 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1697 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9031,7 +9031,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1706 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1706 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9057,7 +9057,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1715 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1715 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9083,7 +9083,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1724 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1724 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9109,7 +9109,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1733 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1733 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9135,7 +9135,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1742 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1742 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9161,7 +9161,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1751 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1751 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9984,7 +9984,7 @@ define internal i32 @_ZN7details18_cm_print_type_oclIPvEENS_18SHADER_PRINTF_TYPE
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2055 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2055 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.VaryingWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -10007,7 +10007,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %22 = bitcast %class.VaryingWriter* %5 to i8*, !dbg !2057
-   %23 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2057
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %22, i8* align 32 %23, i32 64, i1 false), !dbg !2057, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %6), !dbg !2058
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %6), !dbg !2058
-   br i1 %24, label %60, label %25, !dbg !2059
- 
- ; <label>:25:                                     ; preds = %3
-@@ -10015,7 +10015,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %27 = bitcast %class.VaryingWriter* %7 to i8*, !dbg !2061
-   %28 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2061
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %27, i8* align 32 %28, i32 64, i1 false), !dbg !2061, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %8), !dbg !2062
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %8), !dbg !2062
-   br i1 %29, label %60, label %30, !dbg !2063
- 
- ; <label>:30:                                     ; preds = %25
-@@ -10023,7 +10023,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %32 = bitcast %class.VaryingWriter* %9 to i8*, !dbg !2065
-   %33 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2065
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %32, i8* align 32 %33, i32 64, i1 false), !dbg !2065, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %10), !dbg !2066
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %10), !dbg !2066
-   br i1 %34, label %60, label %35, !dbg !2067
- 
- ; <label>:35:                                     ; preds = %30
-@@ -10031,7 +10031,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %37 = bitcast %class.VaryingWriter* %11 to i8*, !dbg !2069
-   %38 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2069
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %37, i8* align 32 %38, i32 64, i1 false), !dbg !2069, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %12), !dbg !2070
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %12), !dbg !2070
-   br i1 %39, label %60, label %40, !dbg !2071
- 
- ; <label>:40:                                     ; preds = %35
-@@ -10039,7 +10039,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %42 = bitcast %class.VaryingWriter* %13 to i8*, !dbg !2073
-   %43 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2073
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %42, i8* align 32 %43, i32 64, i1 false), !dbg !2073, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %14), !dbg !2074
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %14), !dbg !2074
-   br i1 %44, label %60, label %45, !dbg !2075
- 
- ; <label>:45:                                     ; preds = %40
-@@ -10047,7 +10047,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %47 = bitcast %class.VaryingWriter* %15 to i8*, !dbg !2077
-   %48 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2077
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %47, i8* align 32 %48, i32 64, i1 false), !dbg !2077, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %16), !dbg !2078
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %16), !dbg !2078
-   br i1 %49, label %60, label %50, !dbg !2079
- 
- ; <label>:50:                                     ; preds = %45
-@@ -10055,7 +10055,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %52 = bitcast %class.VaryingWriter* %17 to i8*, !dbg !2081
-   %53 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2081
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %52, i8* align 32 %53, i32 64, i1 false), !dbg !2081, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %18), !dbg !2082
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %18), !dbg !2082
-   br i1 %54, label %60, label %55, !dbg !2083
- 
- ; <label>:55:                                     ; preds = %50
-@@ -10063,7 +10063,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %57 = bitcast %class.VaryingWriter* %19 to i8*, !dbg !2085
-   %58 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2085
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %57, i8* align 32 %58, i32 64, i1 false), !dbg !2085, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %20), !dbg !2086
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %20), !dbg !2086
-   br label %60, !dbg !2083
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -10072,7 +10072,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2088 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2088 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10098,7 +10098,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2097 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2097 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10124,7 +10124,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2106 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2106 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10150,7 +10150,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2115 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2115 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10176,7 +10176,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2124 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2124 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10202,7 +10202,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2133 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2133 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10228,7 +10228,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2142 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2142 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10254,7 +10254,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2151 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2151 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-diff --git a/builtins/builtins-cm-64.ll b/builtins/builtins-cm-64.ll
-index 39a2dd8be..375d01bed 100644
---- a/builtins/builtins-cm-64.ll
-+++ b/builtins/builtins-cm-64.ll
-@@ -557,7 +557,7 @@ $_ZN13VaryingWriter12WriteVecElemIPvEEvv = comdat any
- @.str.10 = private unnamed_addr constant [8 x i8] c"%016llX\00", align 1
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -618,7 +618,7 @@ define internal <1 x i8> @_ZN7details13__impl_divremILi1EEEu2CMvbT__cS1_S1_u2CMv
- declare <1 x i8> @llvm.genx.rdregioni.v1i8.v1i8.i16(<1 x i8>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -634,7 +634,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -680,7 +680,7 @@ define internal <2 x i8> @_ZN7details13__impl_divremILi2EEEu2CMvbT__cS1_S1_u2CMv
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -818,7 +818,7 @@ define internal <16 x i8> @_ZN7details13__impl_divremILi16EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -864,7 +864,7 @@ define internal <32 x i8> @_ZN7details13__impl_divremILi32EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -890,7 +890,7 @@ define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -904,7 +904,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -918,7 +918,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -932,7 +932,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -946,7 +946,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -960,7 +960,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -974,7 +974,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1058,7 +1058,7 @@ define internal <1 x i16> @_ZN7details13__impl_divremILi1EEEu2CMvbT__sS1_S1_u2CM
- declare <1 x i16> @llvm.genx.rdregioni.v1i16.v1i16.i16(<1 x i16>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1074,7 +1074,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1143,7 +1143,7 @@ define internal <2 x i16> @_ZN7details13__impl_divremILi2EEEu2CMvbT__sS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1350,7 +1350,7 @@ define internal <16 x i16> @_ZN7details13__impl_divremILi16EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1419,7 +1419,7 @@ define internal <32 x i16> @_ZN7details13__impl_divremILi32EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1445,7 +1445,7 @@ define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 si
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1459,7 +1459,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1473,7 +1473,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1487,7 +1487,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -1501,7 +1501,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -1515,7 +1515,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1529,7 +1529,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1730,7 +1730,7 @@ define internal <1 x i32> @_ZN7details13__impl_divremILi1EEEu2CMvbT__iS1_S1_u2CM
- declare <1 x i32> @llvm.genx.rdregioni.v1i32.v1i32.i16(<1 x i32>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1746,7 +1746,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -1932,7 +1932,7 @@ define internal <2 x i32> @_ZN7details13__impl_divremILi2EEEu2CMvbT__iS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2490,7 +2490,7 @@ define internal <16 x i32> @_ZN7details13__impl_divremILi16EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2676,7 +2676,7 @@ define internal <32 x i32> @_ZN7details13__impl_divremILi32EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2702,7 +2702,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2716,7 +2716,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -2730,7 +2730,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2744,7 +2744,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -2758,7 +2758,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -2772,7 +2772,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2786,7 +2786,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2844,7 +2844,7 @@ define internal <1 x i8> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2860,7 +2860,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -2906,7 +2906,7 @@ define internal <2 x i8> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3044,7 +3044,7 @@ define internal <16 x i8> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3090,7 +3090,7 @@ define internal <32 x i8> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3116,7 +3116,7 @@ define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3130,7 +3130,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -3144,7 +3144,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3158,7 +3158,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -3172,7 +3172,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -3186,7 +3186,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3200,7 +3200,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3278,7 +3278,7 @@ define internal <1 x i16> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3294,7 +3294,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3360,7 +3360,7 @@ define internal <2 x i16> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3558,7 +3558,7 @@ define internal <16 x i16> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3624,7 +3624,7 @@ define internal <32 x i16> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3650,7 +3650,7 @@ define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 ze
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3664,7 +3664,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3678,7 +3678,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3692,7 +3692,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -3706,7 +3706,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -3720,7 +3720,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3734,7 +3734,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3892,7 +3892,7 @@ define internal <1 x i32> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3908,7 +3908,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4054,7 +4054,7 @@ define internal <2 x i32> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4492,7 +4492,7 @@ define internal <16 x i32> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4638,7 +4638,7 @@ define internal <32 x i32> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4664,7 +4664,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4678,7 +4678,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4692,7 +4692,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4706,7 +4706,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -4720,7 +4720,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -4734,7 +4734,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4748,7 +4748,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-+define internal void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-   %8 = alloca i8*, align 8
-   %9 = alloca i8*, align 8
-   %10 = alloca i32, align 4
-@@ -5070,7 +5070,7 @@ define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i3
-   %67 = load i64, i64* %13, align 8, !dbg !159, !tbaa !19
-   %68 = load <5 x i32>, <5 x i32>* %21, align 32, !dbg !160, !tbaa !7
-   call void @_ZN13VaryingWriterC2ERyRPKjiyu2CMvb5_i(%class.VaryingWriter* %23, i64* dereferenceable(8) %19, i32** dereferenceable(8) %14, i32 %66, i64 %67, <5 x i32> %68), !dbg !161
--  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval align 32 %22, %class.VaryingWriter* byval align 32 %23), !dbg !162
-+  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval(%class.UniformWriter) align 32 %22, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %23), !dbg !162
-   br label %70, !dbg !163
- 
- ; <label>:70:                                     ; preds = %60
-@@ -5188,7 +5188,7 @@ define internal <5 x i32> @_Z17get_auxiliary_strv() #28 comdat !dbg !178 {
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %class.VaryingWriter* byval align 32) #25 comdat !dbg !191 {
-+define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !191 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %class.VaryingWriter, align 32
-@@ -5197,7 +5197,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %8 = bitcast %class.UniformWriter* %5 to i8*, !dbg !196
-   %9 = bitcast %class.UniformWriter* %1 to i8*, !dbg !196
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %8, i8* align 32 %9, i64 64, i1 false), !dbg !196, !tbaa.struct !197
--  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval align 32 %5), !dbg !198
-+  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5), !dbg !198
-   br i1 %10, label %16, label %11, !dbg !199
- 
- ; <label>:11:                                     ; preds = %3
-@@ -5205,7 +5205,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %13 = bitcast %class.VaryingWriter* %6 to i8*, !dbg !201
-   %14 = bitcast %class.VaryingWriter* %2 to i8*, !dbg !201
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %13, i8* align 32 %14, i64 64, i1 false), !dbg !201, !tbaa.struct !197
--  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval align 32 %6), !dbg !202
-+  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %6), !dbg !202
-   br label %16, !dbg !199
- 
- ; <label>:16:                                     ; preds = %11, %3
-@@ -5280,7 +5280,7 @@ define internal void @_ZN13VaryingWriterC2ERyRPKjiyu2CMvb5_i(%class.VaryingWrite
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @__num_cores() #29 !dbg !236 {
-+define internal i32 @__num_cores() #29 !dbg !236 {
-   ret i32 -1, !dbg !237
- }
- 
-@@ -8870,7 +8870,7 @@ declare dso_local void @_ZN7details37__cm_intrinsic_impl_svm_scatter_writeIiLi1E
- declare void @llvm.genx.svm.scatter.v1i1.v1i64.v1i32(<1 x i1>, i32, <1 x i64>, <1 x i32>) #27
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval align 32) #25 comdat !dbg !1645 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32) #25 comdat !dbg !1645 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.UniformWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8879,7 +8879,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
-   %7 = bitcast %class.UniformWriter* %4 to i8*, !dbg !1647
-   %8 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1647
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %7, i8* align 32 %8, i64 64, i1 false), !dbg !1647, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %5), !dbg !1648
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval(%class.UniformWriter) align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %5), !dbg !1648
-   ret i1 %9, !dbg !1649
- }
- 
-@@ -8887,7 +8887,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
- declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1) #32
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval align 32) #25 comdat !dbg !1650 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !1650 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.VaryingWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -8896,12 +8896,12 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWrite
-   %7 = bitcast %class.VaryingWriter* %4 to i8*, !dbg !1652
-   %8 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !1652
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %7, i8* align 32 %8, i64 64, i1 false), !dbg !1652, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %5), !dbg !1653
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %5), !dbg !1653
-   ret i1 %9, !dbg !1654
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1655 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1655 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8924,7 +8924,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %22 = bitcast %class.UniformWriter* %5 to i8*, !dbg !1657
-   %23 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1657
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %22, i8* align 32 %23, i64 64, i1 false), !dbg !1657, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %6), !dbg !1658
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %6), !dbg !1658
-   br i1 %24, label %60, label %25, !dbg !1659
- 
- ; <label>:25:                                     ; preds = %3
-@@ -8932,7 +8932,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %27 = bitcast %class.UniformWriter* %7 to i8*, !dbg !1661
-   %28 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1661
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %27, i8* align 32 %28, i64 64, i1 false), !dbg !1661, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %8), !dbg !1662
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval(%class.UniformWriter) align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %8), !dbg !1662
-   br i1 %29, label %60, label %30, !dbg !1663
- 
- ; <label>:30:                                     ; preds = %25
-@@ -8940,7 +8940,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %32 = bitcast %class.UniformWriter* %9 to i8*, !dbg !1665
-   %33 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1665
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %32, i8* align 32 %33, i64 64, i1 false), !dbg !1665, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %10), !dbg !1666
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval(%class.UniformWriter) align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %10), !dbg !1666
-   br i1 %34, label %60, label %35, !dbg !1667
- 
- ; <label>:35:                                     ; preds = %30
-@@ -8948,7 +8948,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %37 = bitcast %class.UniformWriter* %11 to i8*, !dbg !1669
-   %38 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1669
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %37, i8* align 32 %38, i64 64, i1 false), !dbg !1669, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %12), !dbg !1670
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval(%class.UniformWriter) align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %12), !dbg !1670
-   br i1 %39, label %60, label %40, !dbg !1671
- 
- ; <label>:40:                                     ; preds = %35
-@@ -8956,7 +8956,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %42 = bitcast %class.UniformWriter* %13 to i8*, !dbg !1673
-   %43 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1673
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %42, i8* align 32 %43, i64 64, i1 false), !dbg !1673, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %14), !dbg !1674
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval(%class.UniformWriter) align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %14), !dbg !1674
-   br i1 %44, label %60, label %45, !dbg !1675
- 
- ; <label>:45:                                     ; preds = %40
-@@ -8964,7 +8964,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %47 = bitcast %class.UniformWriter* %15 to i8*, !dbg !1677
-   %48 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1677
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %47, i8* align 32 %48, i64 64, i1 false), !dbg !1677, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %16), !dbg !1678
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval(%class.UniformWriter) align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %16), !dbg !1678
-   br i1 %49, label %60, label %50, !dbg !1679
- 
- ; <label>:50:                                     ; preds = %45
-@@ -8972,7 +8972,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %52 = bitcast %class.UniformWriter* %17 to i8*, !dbg !1681
-   %53 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1681
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %52, i8* align 32 %53, i64 64, i1 false), !dbg !1681, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %18), !dbg !1682
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval(%class.UniformWriter) align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %18), !dbg !1682
-   br i1 %54, label %60, label %55, !dbg !1683
- 
- ; <label>:55:                                     ; preds = %50
-@@ -8980,7 +8980,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %57 = bitcast %class.UniformWriter* %19 to i8*, !dbg !1685
-   %58 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1685
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %57, i8* align 32 %58, i64 64, i1 false), !dbg !1685, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %20), !dbg !1686
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval(%class.UniformWriter) align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %20), !dbg !1686
-   br label %60, !dbg !1683
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -8989,7 +8989,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1688 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1688 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9015,7 +9015,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1697 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1697 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9041,7 +9041,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1706 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1706 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9067,7 +9067,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1715 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1715 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9093,7 +9093,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1724 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1724 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9119,7 +9119,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1733 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1733 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9145,7 +9145,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1742 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1742 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9171,7 +9171,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1751 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1751 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10013,7 +10013,7 @@ define internal i32 @_ZN7details18_cm_print_type_oclIPvEENS_18SHADER_PRINTF_TYPE
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2061 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2061 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.VaryingWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -10036,7 +10036,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %22 = bitcast %class.VaryingWriter* %5 to i8*, !dbg !2063
-   %23 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2063
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %22, i8* align 32 %23, i64 64, i1 false), !dbg !2063, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %6), !dbg !2064
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %6), !dbg !2064
-   br i1 %24, label %60, label %25, !dbg !2065
- 
- ; <label>:25:                                     ; preds = %3
-@@ -10044,7 +10044,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %27 = bitcast %class.VaryingWriter* %7 to i8*, !dbg !2067
-   %28 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2067
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %27, i8* align 32 %28, i64 64, i1 false), !dbg !2067, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %8), !dbg !2068
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %8), !dbg !2068
-   br i1 %29, label %60, label %30, !dbg !2069
- 
- ; <label>:30:                                     ; preds = %25
-@@ -10052,7 +10052,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %32 = bitcast %class.VaryingWriter* %9 to i8*, !dbg !2071
-   %33 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2071
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %32, i8* align 32 %33, i64 64, i1 false), !dbg !2071, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %10), !dbg !2072
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %10), !dbg !2072
-   br i1 %34, label %60, label %35, !dbg !2073
- 
- ; <label>:35:                                     ; preds = %30
-@@ -10060,7 +10060,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %37 = bitcast %class.VaryingWriter* %11 to i8*, !dbg !2075
-   %38 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2075
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %37, i8* align 32 %38, i64 64, i1 false), !dbg !2075, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %12), !dbg !2076
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %12), !dbg !2076
-   br i1 %39, label %60, label %40, !dbg !2077
- 
- ; <label>:40:                                     ; preds = %35
-@@ -10068,7 +10068,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %42 = bitcast %class.VaryingWriter* %13 to i8*, !dbg !2079
-   %43 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2079
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %42, i8* align 32 %43, i64 64, i1 false), !dbg !2079, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %14), !dbg !2080
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %14), !dbg !2080
-   br i1 %44, label %60, label %45, !dbg !2081
- 
- ; <label>:45:                                     ; preds = %40
-@@ -10076,7 +10076,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %47 = bitcast %class.VaryingWriter* %15 to i8*, !dbg !2083
-   %48 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2083
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %47, i8* align 32 %48, i64 64, i1 false), !dbg !2083, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %16), !dbg !2084
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %16), !dbg !2084
-   br i1 %49, label %60, label %50, !dbg !2085
- 
- ; <label>:50:                                     ; preds = %45
-@@ -10084,7 +10084,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %52 = bitcast %class.VaryingWriter* %17 to i8*, !dbg !2087
-   %53 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2087
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %52, i8* align 32 %53, i64 64, i1 false), !dbg !2087, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %18), !dbg !2088
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %18), !dbg !2088
-   br i1 %54, label %60, label %55, !dbg !2089
- 
- ; <label>:55:                                     ; preds = %50
-@@ -10092,7 +10092,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %57 = bitcast %class.VaryingWriter* %19 to i8*, !dbg !2091
-   %58 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2091
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %57, i8* align 32 %58, i64 64, i1 false), !dbg !2091, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %20), !dbg !2092
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %20), !dbg !2092
-   br label %60, !dbg !2089
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -10101,7 +10101,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2094 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2094 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10127,7 +10127,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2103 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2103 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10153,7 +10153,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2112 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2112 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10179,7 +10179,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2121 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2121 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10205,7 +10205,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2130 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2130 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10231,7 +10231,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2139 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2139 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10257,7 +10257,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2148 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2148 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10283,7 +10283,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2157 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2157 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
diff --git a/srcpkgs/ispc/template b/srcpkgs/ispc/template
index 9c3acb42a9cf..68fed5a4c659 100644
--- a/srcpkgs/ispc/template
+++ b/srcpkgs/ispc/template
@@ -1,10 +1,10 @@
 # Template file for 'ispc'
 pkgname=ispc
-version=1.15.0
-revision=2
+version=1.17.0
+revision=1
 archs="x86_64*"
 build_style=cmake
-configure_args="-DISPC_NO_DUMPS=ON -DARM_ENABLED=OFF"
+configure_args="-DISPC_NO_DUMPS=ON -DARM_ENABLED=OFF -DCMAKE_BUILD_TYPE=Release"
 hostmakedepends="clang clang-tools-extra python3 m4 bison flex llvm"
 makedepends="ncurses-devel ncurses-libtinfo-devel zlib-devel"
 short_desc="Compiler for high-performance SIMD programming on the CPU"
@@ -12,7 +12,7 @@ maintainer="Andrea Brancaleoni <abc@pompel.me>"
 license="BSD-3-Clause"
 homepage="https://ispc.github.io"
 distfiles="https://github.com/ispc/ispc/archive/v${version}.tar.gz"
-checksum=2658ff00dc045ac9fcefbf6bd26dffaf723b059a942a27df91bbb61bc503a285
+checksum=37fb1055d6c6b232e112d8d50145d726824ed4d8da93a7396315dceba6c76e62
 nocross=yes
 nopie=yes
 

From 7dc50e9900e34940985536b027b35bfed79df63a Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Tue, 3 May 2022 01:20:03 +0200
Subject: [PATCH 24/26] llvm14: switch to runtimes build.

https://reviews.llvm.org/rGac7031b2b2fa
https://reviews.llvm.org/D110338#3022952
---
 srcpkgs/llvm14/template | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
index 3e7e6ab2c00b..e731aa76130a 100644
--- a/srcpkgs/llvm14/template
+++ b/srcpkgs/llvm14/template
@@ -51,7 +51,8 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
-_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
+_enabled_projects="clang;clang-tools-extra;lld"
+_enabled_runtimes="compiler-rt;libcxx;libcxxabi;libunwind"
 
 _lldb_enable=yes
 _libomp_enable=no
@@ -67,9 +68,8 @@ esac
 
 subpackages="clang-tools-extra"
 
-# must go before clang
 if [ "$_libomp_enable" = "yes" ]; then
-	_enabled_projects+=";openmp"
+	_enabled_runtimes+=";openmp"
 	subpackages+=" libomp libomp-devel"
 	# because of cmake nonsense referencing libomptarget.so.*
 	depends+=" libomp>=${version}_${revision}"
@@ -88,6 +88,7 @@ fi
 subpackages+=" lld lld-devel"
 
 configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+configure_args+=" -DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}"
 
 post_patch() {
 	if [ "$_lldb_enable" = "yes" ]; then
@@ -156,7 +157,8 @@ pre_configure() {
 		CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
 			CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
-			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
+			-DLLVM_ENABLE_PROJECTS=${_enabled_projects} \
+			-DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}
 		make ${makejobs} -C utils/TableGen
 		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen

From 7e2cfe564c1f2e036cf62b6572e614d1628a0394 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 14:07:14 +0200
Subject: [PATCH 25/26] zig: fix build.

---
 srcpkgs/zig/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/zig/template b/srcpkgs/zig/template
index 728c5a64e9df..c175de62c5f7 100644
--- a/srcpkgs/zig/template
+++ b/srcpkgs/zig/template
@@ -5,7 +5,7 @@ revision=2
 archs="x86_64* aarch64*"
 build_style=cmake
 make_cmd=make
-makedepends="clang llvm12 lld-devel"
+makedepends="clang12 llvm12 lld12-devel"
 short_desc="Programming language designed for robustness, optimality, and clarity"
 maintainer="Isaac Freund <mail@isaacfreund.com>"
 license="MIT"

From e0affa78ccbf0c5a0f1b164635c5ed60c83f690a Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 03:39:58 +0200
Subject: [PATCH 26/26] llvm14: fix build.

---
 common/shlibs                                 |  5 +-
 .../llvm14/files/llvm-Config-llvm-config.h    |  9 +++
 ...le-mutliarch-layout-on-musl-in-clang.patch | 31 +++++++++
 ...ch-locations-for-libunwind-libc-libc.patch | 68 +++++++++++++++++++
 srcpkgs/llvm14/template                       | 18 ++---
 5 files changed, 117 insertions(+), 14 deletions(-)
 create mode 100644 srcpkgs/llvm14/files/llvm-Config-llvm-config.h
 create mode 100644 srcpkgs/llvm14/patches/clang-005-disable-mutliarch-layout-on-musl-in-clang.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-007-disable-multiarch-locations-for-libunwind-libc-libc.patch

diff --git a/common/shlibs b/common/shlibs
index 21aebcf2d659..15da117bfb46 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -976,7 +976,7 @@ libconfuse.so.2 confuse-3.2.1_1
 libclang.so.12 libclang12-12.0.0_1
 libclang-cpp.so.12 libclang12-cpp-12.0.0_1
 liblldb.so.14 lldb-14.0.3_1
-libclang.so.14 libclang-14.0.3_1
+libclang.so.13 libclang-14.0.3_1
 libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
@@ -4179,7 +4179,8 @@ libomptarget.rtl.amdgpu.so libomp-14.0.3_1
 libomptarget.rtl.cuda.so libomp-14.0.3_1
 libomptarget.rtl.x86_64.so libomp-14.0.3_1
 libarcher.so libomp-14.0.3_1
-libomptarget.so libomp-14.0.3_1
+libompd.so libomp-devel-14.0.3_1
+libomptarget.so libomp-devel-14.0.3_1
 liblldbIntelFeatures.so.14 lldb-14.0.3_1
 libLTO.so.14 llvm14-14.0.3_1
 libRemarks.so.14 llvm14-14.0.3_1
diff --git a/srcpkgs/llvm14/files/llvm-Config-llvm-config.h b/srcpkgs/llvm14/files/llvm-Config-llvm-config.h
new file mode 100644
index 000000000000..2fa08c9be696
--- /dev/null
+++ b/srcpkgs/llvm14/files/llvm-Config-llvm-config.h
@@ -0,0 +1,9 @@
+#include <bits/wordsize.h>
+
+#if __WORDSIZE == 32
+#include "llvm-config-32.h"
+#elif __WORDSIZE == 64
+#include "llvm-config-64.h"
+#else
+#error "Unknown word size"
+#endif
diff --git a/srcpkgs/llvm14/patches/clang-005-disable-mutliarch-layout-on-musl-in-clang.patch b/srcpkgs/llvm14/patches/clang-005-disable-mutliarch-layout-on-musl-in-clang.patch
new file mode 100644
index 000000000000..348d99b10de2
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-005-disable-mutliarch-layout-on-musl-in-clang.patch
@@ -0,0 +1,31 @@
+From cff917c85b509789ec75b1e2343831c5729a193c Mon Sep 17 00:00:00 2001
+From: Daniel Kolesa <daniel@octaforge.org>
+Date: Wed, 6 Apr 2022 00:52:23 +0200
+Subject: [PATCH 05/22] disable mutliarch layout on musl in clang
+
+We don't use a multiarch layout and we don't really care for
+debianisms, so emulate whatever a non-multiarch gcc toolchain
+would do and use an empty thing.
+---
+ clang/lib/Driver/ToolChains/Linux.cpp | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp
+index f85c04df4..13cbdbdc7 100644
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -46,6 +46,11 @@ std::string Linux::getMultiarchTriple(const Driver &D,
+   bool IsMipsR6 = TargetTriple.getSubArch() == llvm::Triple::MipsSubArch_r6;
+   bool IsMipsN32Abi = TargetTriple.getEnvironment() == llvm::Triple::GNUABIN32;
+ 
++  /* we are not multiarch */
++  if (TargetTriple.isMusl()) {
++    return "";
++  }
++
+   // For most architectures, just use whatever we have rather than trying to be
+   // clever.
+   switch (TargetTriple.getArch()) {
+-- 
+2.35.1
+
diff --git a/srcpkgs/llvm14/patches/llvm-007-disable-multiarch-locations-for-libunwind-libc-libc.patch b/srcpkgs/llvm14/patches/llvm-007-disable-multiarch-locations-for-libunwind-libc-libc.patch
new file mode 100644
index 000000000000..3ef7499d6082
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-007-disable-multiarch-locations-for-libunwind-libc-libc.patch
@@ -0,0 +1,68 @@
+From 92a3b73dfec9c85a536ed99c5570231c333ad1e8 Mon Sep 17 00:00:00 2001
+From: Daniel Kolesa <daniel@octaforge.org>
+Date: Wed, 6 Apr 2022 00:57:58 +0200
+Subject: [PATCH 08/22] disable multiarch locations for
+ libunwind/libc++/libc++abi
+
+---
+ libcxx/CMakeLists.txt            | 2 +-
+ libcxx/benchmarks/CMakeLists.txt | 2 +-
+ libcxxabi/CMakeLists.txt         | 2 +-
+ libunwind/CMakeLists.txt         | 2 +-
+ 4 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt
+index 35c2ce515..19f423bf0 100644
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -432,7 +432,7 @@ set(LIBCXX_INSTALL_INCLUDE_DIR "${CMAKE_INSTALL_INCLUDEDIR}/c++/v1" CACHE PATH
+ set(LIBCXX_INSTALL_RUNTIME_DIR "${CMAKE_INSTALL_BINDIR}" CACHE PATH
+     "Path where built libc++ runtime libraries should be installed.")
+ 
+-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
++if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME MATCHES "Linux")
+   set(LIBCXX_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/${LLVM_DEFAULT_TARGET_TRIPLE})
+   set(LIBCXX_GENERATED_INCLUDE_DIR "${LLVM_BINARY_DIR}/include/c++/v1")
+   set(LIBCXX_GENERATED_INCLUDE_TARGET_DIR "${LLVM_BINARY_DIR}/include/${LLVM_DEFAULT_TARGET_TRIPLE}/c++/v1")
+diff --git a/libcxx/benchmarks/CMakeLists.txt b/libcxx/benchmarks/CMakeLists.txt
+index 95e28618b..906abdb4e 100644
+--- a/libcxx/benchmarks/CMakeLists.txt
++++ b/libcxx/benchmarks/CMakeLists.txt
+@@ -26,7 +26,7 @@ set(BENCHMARK_LIBCXX_COMPILE_FLAGS
+     -Wl,-rpath,${LIBCXX_LIBRARY_DIR}
+     ${SANITIZER_FLAGS}
+     )
+-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
++if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME MATCHES "Linux")
+   list(APPEND BENCHMARK_LIBCXX_COMPILE_FLAGS
+     -isystem "${LIBCXX_GENERATED_INCLUDE_TARGET_DIR}")
+ endif()
+diff --git a/libcxxabi/CMakeLists.txt b/libcxxabi/CMakeLists.txt
+index 8e8cdf8ad..94e625f44 100644
+--- a/libcxxabi/CMakeLists.txt
++++ b/libcxxabi/CMakeLists.txt
+@@ -226,7 +226,7 @@ set(CMAKE_MODULE_PATH
+ set(LIBCXXABI_INSTALL_RUNTIME_DIR "${CMAKE_INSTALL_BINDIR}" CACHE PATH
+     "Path where built libc++abi runtime libraries should be installed.")
+ 
+-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
++if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME MATCHES "Linux")
+   set(LIBCXXABI_HEADER_DIR ${LLVM_BINARY_DIR})
+   set(LIBCXXABI_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/${LLVM_DEFAULT_TARGET_TRIPLE})
+   set(LIBCXXABI_INSTALL_LIBRARY_DIR lib${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE} CACHE PATH
+diff --git a/libunwind/CMakeLists.txt b/libunwind/CMakeLists.txt
+index 6523fb0d3..a63b88f31 100644
+--- a/libunwind/CMakeLists.txt
++++ b/libunwind/CMakeLists.txt
+@@ -158,7 +158,7 @@ set(LIBUNWIND_INSTALL_INCLUDE_DIR "${CMAKE_INSTALL_INCLUDEDIR}" CACHE PATH
+ set(LIBUNWIND_INSTALL_RUNTIME_DIR "${CMAKE_INSTALL_BINDIR}" CACHE PATH
+     "Path where built libunwind runtime libraries should be installed.")
+ 
+-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
++if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME MATCHES "Linux")
+   set(LIBUNWIND_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/${LLVM_DEFAULT_TARGET_TRIPLE})
+   set(LIBUNWIND_INSTALL_LIBRARY_DIR lib${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE} CACHE PATH
+       "Path where built libunwind libraries should be installed.")
+-- 
+2.35.1
+
diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
index e731aa76130a..8107c1d339e2 100644
--- a/srcpkgs/llvm14/template
+++ b/srcpkgs/llvm14/template
@@ -15,6 +15,7 @@ configure_args="
  -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
  -DLIBOMP_ENABLE_SHARED=YES
  -DLIBOMP_INSTALL_ALIASES=NO
+ -DCOMPILER_RT_DEFAULT_TARGET_ONLY=YES
  -DLLVM_INCLUDE_DOCS=YES
  -DLLVM_BUILD_DOCS=YES
  -DLLVM_ENABLE_SPHINX=YES
@@ -38,6 +39,7 @@ distfiles="https://github.com/llvm/llvm-project/releases/download/llvmorg-${vers
 checksum=44d3e7a784d5cf805e72853bb03f218bd1058d448c03ca883dabbebc99204e0c
 lib32disabled=yes
 python_version=3
+nopie_files="/usr/bin/llvm-omp-device-info"
 
 if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
 	configure_args+=" -DLIBCXX_HAS_MUSL_LIBC=YES"
@@ -136,8 +138,7 @@ post_patch() {
 }
 
 pre_configure() {
-	local triplet
-
+	local triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
 	# Vastly reduce size of debugging symbols:
 	CFLAGS=${CFLAGS/ -g/ -g1}
 	CXXFLAGS=${CXXFLAGS/ -g/ -g1}
@@ -180,8 +181,6 @@ pre_configure() {
 		riscv64*) _arch="RISCV64";;
 	esac
 
-	triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
-
 	configure_args+=" -DLLVM_TARGET_ARCH=${_arch}"
 	configure_args+=" -DLLVM_HOST_TRIPLE=${triplet}"
 	configure_args+=" -DLLVM_DEFAULT_TARGET_TRIPLE=${triplet}"
@@ -251,7 +250,7 @@ clang-tools-extra_package() {
 		vmove "usr/lib/libclangQuery*"
 		vmove "usr/lib/libclangTidy*"
 		vmove "usr/share/clang/*tidy*"
-		vmove usr/share/doc/clang-tools
+		vmove usr/share/doc/LLVM/clang-tools
 		vmove usr/share/man/man1/extraclangtools.1
 		vmove usr/share/man/man1/diagtool.1
 	}
@@ -273,7 +272,7 @@ clang_package() {
 		vmove "usr/lib/libclang*.a"
 		vmove "usr/lib/libclang*.so"
 		vmove usr/share/clang
-		vmove usr/share/doc/clang
+		vmove usr/share/doc/LLVM/clang
 		vmove usr/share/man/man1/clang.1
 	}
 }
@@ -301,7 +300,7 @@ lld_package() {
 		vmove usr/bin/wasm-ld
 		vmove usr/bin/ld.lld*
 		vmove usr/bin/ld64.lld*
-		vmove usr/share/doc/lld
+		vmove usr/share/doc/LLVM/lld
 	}
 }
 
@@ -355,7 +354,6 @@ llvm-libunwind-devel_package() {
 		vmove usr/lib/libunwind.a
 		vmove "usr/include/*unwind*"
 		vmove usr/include/mach-o
-		vmove usr/share/doc/libunwind
 	}
 }
 
@@ -391,7 +389,6 @@ libcxx-devel_package() {
 		vmove usr/lib/libc++.a
 		vmove usr/lib/libc++experimental.a
 		vmove usr/include/c++
-		vmove usr/share/doc/libcxx
 	}
 }
 
@@ -401,7 +398,6 @@ libomp_package() {
 		vmove usr/lib/libomp.so
 		vmove "usr/lib/libomptarget.rtl.*.so"
 		vmove usr/lib/libarcher.so
-		vmove "usr/lib/libomp*.so.*"
 	}
 }
 
@@ -413,8 +409,6 @@ libomp-devel_package() {
 		vmove "usr/lib/libarcher*"
 		vmove "usr/include/omp*.h"
 		vmove "usr/lib/clang/${version}/include/omp*.h"
-		vmove usr/share/man/man1/llvmopenmp.1
-		vmove usr/share/doc/openmp
 	}
 }
 

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (29 preceding siblings ...)
  2022-05-25  1:22 ` [PR PATCH] [Updated] Llvm14 prez
@ 2022-05-25  1:23 ` prez
  2022-06-04 20:43 ` Llvm14 motorto
                   ` (38 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-05-25  1:23 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 197 bytes --]

New comment by prez on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1136601755

Comment:
Thanks Daniel, looking much better now. Everything builds.

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (30 preceding siblings ...)
  2022-05-25  1:23 ` Llvm14 prez
@ 2022-06-04 20:43 ` motorto
  2022-06-05 13:31 ` Llvm14 prez
                   ` (37 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: motorto @ 2022-06-04 20:43 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 275 bytes --]

New comment by motorto on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1146683075

Comment:
@prez asked on irc, but is it done ? or  is there something I can help ?

I will try to build on x86_64 musl and I will report back

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (31 preceding siblings ...)
  2022-06-04 20:43 ` Llvm14 motorto
@ 2022-06-05 13:31 ` prez
  2022-06-05 13:35 ` Llvm14 prez
                   ` (36 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-06-05 13:31 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 290 bytes --]

New comment by prez on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1146805157

Comment:
The only thing pending is review.

>or is there something I can help ?

Yes. Please ask committers to stop being lazy and do the above-mentioned.


^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (32 preceding siblings ...)
  2022-06-05 13:31 ` Llvm14 prez
@ 2022-06-05 13:35 ` prez
  2022-06-05 13:51 ` Llvm14 motorto
                   ` (35 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-06-05 13:35 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 270 bytes --]

New comment by prez on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1146805157

Comment:
The only thing pending is review.

>or is there something I can help ?

Yes. Please ask committers to do the above-mentioned.


^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (33 preceding siblings ...)
  2022-06-05 13:35 ` Llvm14 prez
@ 2022-06-05 13:51 ` motorto
  2022-06-05 16:32 ` Llvm14 wael444
                   ` (34 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: motorto @ 2022-06-05 13:51 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 984 bytes --]

New comment by motorto on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1146808641

Comment:
That's what happened with my llvm13 pr it was done for months, and now it
won't be merged because llvm14 is already out.

I understand that this is an open source project, and people do have life
besides this. But nevertheless its pretty frustrating... I will ask on the
irc for review


A domingo, 5/06/2022, 14:31, prez ***@***.***> escreveu:

> The only thing pending is review.
>
> or is there something I can help ?
>
> Yes. Please ask committers to stop being lazy and do the above-mentioned.
>
> —
> Reply to this email directly, view it on GitHub
> <https://github.com/void-linux/void-packages/pull/36962#issuecomment-1146805157>,
> or unsubscribe
> <https://github.com/notifications/unsubscribe-auth/AMRTQPIN4T3BQGARD3EYXGTVNST2XANCNFSM5U5BXA6A>
> .
> You are receiving this because you were mentioned.Message ID:
> ***@***.***>
>


^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (34 preceding siblings ...)
  2022-06-05 13:51 ` Llvm14 motorto
@ 2022-06-05 16:32 ` wael444
  2022-06-07 12:01 ` Llvm14 dkwo
                   ` (33 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: wael444 @ 2022-06-05 16:32 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 167 bytes --]

New comment by wael444 on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1146844140

Comment:
can build on x86_64 glibc

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (35 preceding siblings ...)
  2022-06-05 16:32 ` Llvm14 wael444
@ 2022-06-07 12:01 ` dkwo
  2022-06-07 18:55 ` Llvm14 motorto
                   ` (32 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: dkwo @ 2022-06-07 12:01 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 234 bytes --]

New comment by dkwo on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1148571728

Comment:
Does it compile on musl? does it cross-compile?
is it possible to fix the trivial lint errors?

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (36 preceding siblings ...)
  2022-06-07 12:01 ` Llvm14 dkwo
@ 2022-06-07 18:55 ` motorto
  2022-06-07 18:56 ` Llvm14 motorto
                   ` (31 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: motorto @ 2022-06-07 18:55 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 176 bytes --]

New comment by motorto on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1149047485

Comment:
@prez  Could you rebase please  ? 

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (37 preceding siblings ...)
  2022-06-07 18:55 ` Llvm14 motorto
@ 2022-06-07 18:56 ` motorto
  2022-06-07 20:04 ` [PR PATCH] [Updated] Llvm14 prez
                   ` (30 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: motorto @ 2022-06-07 18:56 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 205 bytes --]

New comment by motorto on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1149047485

Comment:
@prez  Could you rebase please  ? (Trying to build on x86_musl)

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: [PR PATCH] [Updated] Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (38 preceding siblings ...)
  2022-06-07 18:56 ` Llvm14 motorto
@ 2022-06-07 20:04 ` prez
  2022-06-07 20:06 ` Llvm14 prez
                   ` (29 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-06-07 20:04 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 488 bytes --]

There is an updated pull request by prez against master on the void-packages repository

https://github.com/prez/void-packages llvm
https://github.com/void-linux/void-packages/pull/36962

Llvm14
Supersedes https://github.com/void-linux/void-packages/pull/36229, https://github.com/void-linux/void-packages/pull/34800 - thank you @motorto and @DBLouis.

Updated patches, ping @q66 .

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/36962.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-llvm-36962.patch --]
[-- Type: text/x-diff, Size: 543437 bytes --]

From 0769371bd292ca132bb357d122e2d4242532bcfc Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:15:06 +0200
Subject: [PATCH 01/23] New package: llvm14-14.0.3

---
 common/shlibs                                 |  16 +-
 srcpkgs/clang                                 |   2 +-
 srcpkgs/clang-analyzer                        |   2 +-
 srcpkgs/clang-tools-extra                     |   2 +-
 srcpkgs/libclang                              |   2 +-
 srcpkgs/libclang-cpp                          |   2 +-
 srcpkgs/libcxx                                |   2 +-
 srcpkgs/libcxx-devel                          |   2 +-
 srcpkgs/libcxxabi                             |   2 +-
 srcpkgs/libcxxabi-devel                       |   2 +-
 srcpkgs/libllvm14                             |   1 +
 srcpkgs/libomp                                |   2 +-
 srcpkgs/libomp-devel                          |   2 +-
 srcpkgs/lld                                   |   2 +-
 srcpkgs/lld-devel                             |   2 +-
 srcpkgs/lldb                                  |   2 +-
 srcpkgs/lldb-devel                            |   2 +-
 srcpkgs/llvm-libunwind                        |   2 +-
 srcpkgs/llvm-libunwind-devel                  |   2 +-
 .../patches/clang-002-add-musl-triples.patch  | 110 +++++
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 +
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ++
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 ++
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 +++
 srcpkgs/llvm14/patches/libcxx-musl.patch      |  26 ++
 srcpkgs/llvm14/patches/libcxx-ppc.patch       |  22 +
 .../llvm14/patches/libcxx-ssp-nonshared.patch |  11 +
 srcpkgs/llvm14/patches/libcxxabi-dl.patch     |  25 ++
 srcpkgs/llvm14/patches/lldb-musl.patch        |  31 ++
 srcpkgs/llvm14/patches/llvm-001-musl.patch    |  57 +++
 .../patches/llvm-002-musl-ppc64-elfv2.patch   |  30 ++
 .../patches/llvm-003-ppc-secureplt.patch      |  11 +
 .../patches/llvm-004-override-opt.patch       |  18 +
 .../llvm14/patches/llvm-005-ppc-bigpic.patch  |  36 ++
 .../patches/llvm-006-aarch64-mf_exec.patch    |  25 ++
 srcpkgs/llvm14/template                       | 424 ++++++++++++++++++
 srcpkgs/llvm14/update                         |   3 +
 37 files changed, 1018 insertions(+), 20 deletions(-)
 create mode 120000 srcpkgs/libllvm14
 create mode 100644 srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
 create mode 100644 srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
 create mode 100644 srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
 create mode 100644 srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-ppc.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxxabi-dl.patch
 create mode 100644 srcpkgs/llvm14/patches/lldb-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-001-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-004-override-opt.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
 create mode 100644 srcpkgs/llvm14/template
 create mode 100644 srcpkgs/llvm14/update

diff --git a/common/shlibs b/common/shlibs
index e04037a9f2f0..7658c1d2531e 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -973,11 +973,12 @@ libuchardet.so.0 uchardet-0.0.6_1
 libgtksourceviewmm-3.0.so.0 gtksourceviewmm-3.2.0_1
 libyajl.so.2 yajl-2.0.1_1
 libconfuse.so.2 confuse-3.2.1_1
-liblldb.so.12 lldb-12.0.0_1
-libclang.so.12 libclang-12.0.0_1
-libclang-cpp.so.12 libclang-cpp-12.0.0_1
+liblldb.so.14 lldb-14.0.3_1
+libclang.so.14 libclang-14.0.3_1
+libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
+libLLVM-14.so libllvm14-14.0.3_1
 libisofs.so.6 libisofs-0.6.24_1
 libmpack.so.0 libmpack-1.0.5_1
 libGeoIP.so.1 libgeoip-1.4.8_1
@@ -4165,3 +4166,12 @@ libTMVA.so root-6.24.06_1
 libMathCore.so root-6.24.06_1
 liblowdown.so lowdown-0.11.2_1
 libjaylink.so.0 libjaylink-0.2.0_1
+libomp.so libomp-14.0.3_1
+libomptarget.rtl.amdgpu.so libomp-14.0.3_1
+libomptarget.rtl.cuda.so libomp-14.0.3_1
+libomptarget.rtl.x86_64.so libomp-14.0.3_1
+libarcher.so libomp-14.0.3_1
+libomptarget.so libomp-14.0.3_1
+liblldbIntelFeatures.so.14 lldb-14.0.3_1
+libLTO.so.14 llvm14-14.0.3_1
+libRemarks.so.14 llvm14-14.0.3_1
diff --git a/srcpkgs/clang b/srcpkgs/clang
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang
+++ b/srcpkgs/clang
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/clang-analyzer b/srcpkgs/clang-analyzer
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang-analyzer
+++ b/srcpkgs/clang-analyzer
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/clang-tools-extra b/srcpkgs/clang-tools-extra
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang-tools-extra
+++ b/srcpkgs/clang-tools-extra
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libclang b/srcpkgs/libclang
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libclang
+++ b/srcpkgs/libclang
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libclang-cpp b/srcpkgs/libclang-cpp
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libclang-cpp
+++ b/srcpkgs/libclang-cpp
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxx b/srcpkgs/libcxx
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxx
+++ b/srcpkgs/libcxx
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxx-devel b/srcpkgs/libcxx-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxx-devel
+++ b/srcpkgs/libcxx-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxxabi b/srcpkgs/libcxxabi
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxxabi
+++ b/srcpkgs/libcxxabi
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxxabi-devel b/srcpkgs/libcxxabi-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxxabi-devel
+++ b/srcpkgs/libcxxabi-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libllvm14 b/srcpkgs/libllvm14
new file mode 120000
index 000000000000..1d42ed7632a6
--- /dev/null
+++ b/srcpkgs/libllvm14
@@ -0,0 +1 @@
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libomp b/srcpkgs/libomp
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libomp
+++ b/srcpkgs/libomp
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libomp-devel b/srcpkgs/libomp-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libomp-devel
+++ b/srcpkgs/libomp-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lld b/srcpkgs/lld
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lld
+++ b/srcpkgs/lld
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lld-devel b/srcpkgs/lld-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lld-devel
+++ b/srcpkgs/lld-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lldb b/srcpkgs/lldb
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lldb
+++ b/srcpkgs/lldb
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lldb-devel b/srcpkgs/lldb-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lldb-devel
+++ b/srcpkgs/lldb-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm-libunwind b/srcpkgs/llvm-libunwind
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/llvm-libunwind
+++ b/srcpkgs/llvm-libunwind
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm-libunwind-devel b/srcpkgs/llvm-libunwind-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/llvm-libunwind-devel
+++ b/srcpkgs/llvm-libunwind-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
new file mode 100644
index 000000000000..7b640e102bed
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
@@ -0,0 +1,110 @@
+--- a/clang/lib/Driver/ToolChains/Gnu.cpp
++++ b/clang/lib/Driver/ToolChains/Gnu.cpp
+@@ -2083,7 +2083,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
+                                              "armv7hl-redhat-linux-gnueabi",
+                                              "armv6hl-suse-linux-gnueabi",
+-                                             "armv7hl-suse-linux-gnueabi"};
++                                             "armv7hl-suse-linux-gnueabi",
++                                             "armv7l-linux-gnueabihf"};
+   static const char *const ARMebLibDirs[] = {"/lib"};
+   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi"};
+   static const char *const ARMebHFTriples[] = {
+@@ -2151,8 +2152,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
+   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
+   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
+-                                             "powerpcle-unknown-linux-gnu",
+-                                             "powerpcle-linux-musl"};
++                                             "powerpcle-unknown-linux-gnu"};
+
+   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
+   static const char *const PPC64Triples[] = {
+@@ -2231,6 +2231,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+     return;
+   }
+
++  if (TargetTriple.isMusl()) {
++    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
++    static const char *const ARMHFMuslTriples[] = {
++        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
++    };
++    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
++    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
++    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
++    static const char *const MIPSMuslTriples[] = {
++        "mips-linux-musl", "mipsel-linux-musl",
++        "mipsel-linux-muslhf", "mips-linux-muslhf"
++    };
++    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
++    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
++    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
++    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
++
++    switch (TargetTriple.getArch()) {
++    case llvm::Triple::aarch64:
++      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      break;
++    case llvm::Triple::arm:
++      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
++      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
++        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
++      } else {
++        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
++      }
++      break;
++    case llvm::Triple::x86_64:
++      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      break;
++    case llvm::Triple::x86:
++      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      break;
++    case llvm::Triple::mips:
++      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
++      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
++      break;
++    case llvm::Triple::ppc:
++      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      break;
++    case llvm::Triple::ppcle:
++      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      break;
++    case llvm::Triple::ppc64:
++      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      break;
++    case llvm::Triple::ppc64le:
++      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      break;
++    default:
++      break;
++    }
++    TripleAliases.push_back(TargetTriple.str());
++    if (TargetTriple.str() != BiarchTriple.str())
++      BiarchTripleAliases.push_back(BiarchTriple.str());
++    return;
++  }
++
+   // Android targets should not use GNU/Linux tools or libraries.
+   if (TargetTriple.isAndroid()) {
+     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
new file mode 100644
index 000000000000..47128af79b7f
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
@@ -0,0 +1,13 @@
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -490,10 +490,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+     Loader = "ld.so.1";
+     break;
+   case llvm::Triple::ppc64:
+-    LibDir = "lib64";
+-    Loader =
+-        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
+-    break;
+   case llvm::Triple::ppc64le:
+     LibDir = "lib64";
+     Loader =
diff --git a/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
new file mode 100644
index 000000000000..21fc8003c5f1
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
@@ -0,0 +1,48 @@
+--- a/clang/lib/Basic/Targets/PPC.h
++++ b/clang/lib/Basic/Targets/PPC.h
+@@ -415,11 +415,10 @@ public:
+       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
+     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
+       DataLayout = "e-m:e-i64:64-n32:64";
+-      ABI = "elfv2";
+     } else {
+       DataLayout = "E-m:e-i64:64-n32:64";
+-      ABI = "elfv1";
+     }
++    ABI = "elfv2";
+ 
+     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
+       LongDoubleWidth = LongDoubleAlign = 64;
+--- a/clang/lib/CodeGen/TargetInfo.cpp
++++ b/clang/lib/CodeGen/TargetInfo.cpp
+@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
+       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
+ 
+     if (Triple.isOSBinFormatELF()) {
+-      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
+-      if (getTarget().getABI() == "elfv2")
+-        Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      if (getTarget().getABI() == "elfv1")
++        Kind = PPC64_SVR4_ABIInfo::ELFv1;
+       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
+ 
+       return SetCGInfo(
+--- a/clang/lib/Driver/ToolChains/Clang.cpp
++++ b/clang/lib/Driver/ToolChains/Clang.cpp
+@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
+   const llvm::Triple &T = getToolChain().getTriple();
+   if (T.isOSBinFormatELF()) {
+     switch (getToolChain().getArch()) {
+-    case llvm::Triple::ppc64: {
+-      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
+-          T.isOSOpenBSD() || T.isMusl())
+-        ABIName = "elfv2";
+-      else
+-        ABIName = "elfv1";
+-      break;
+-    }
++    case llvm::Triple::ppc64:
+     case llvm::Triple::ppc64le:
+       ABIName = "elfv2";
+       break;
diff --git a/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch b/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
new file mode 100644
index 000000000000..4135bfd4486a
--- /dev/null
+++ b/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
@@ -0,0 +1,35 @@
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
+@@ -74,6 +74,10 @@
+ #include <sys/utsname.h>
+ #endif
+
++#if SANITIZER_LINUX && defined(__powerpc__)
++#include <asm/ptrace.h>
++#endif
++
+ #if SANITIZER_LINUX && !SANITIZER_ANDROID
+ #include <sys/personality.h>
+ #endif
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
+@@ -92,7 +92,7 @@
+ # include <utime.h>
+ # include <sys/ptrace.h>
+ #    if defined(__mips64) || defined(__aarch64__) || defined(__arm__) || \
+-        defined(__hexagon__) || SANITIZER_RISCV64
++        defined(__hexagon__) || defined(__powerpc__) || SANITIZER_RISCV64
+ #      include <asm/ptrace.h>
+ #      ifdef __arm__
+ typedef struct user_fpregs elf_fpregset_t;
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
+@@ -31,7 +31,7 @@
+ #include <sys/types.h> // for pid_t
+ #include <sys/uio.h> // for iovec
+ #include <elf.h> // for NT_PRSTATUS
+-#if (defined(__aarch64__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
++#if (defined(__aarch64__) || defined(__powerpc__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
+ // GLIBC 2.20+ sys/user does not include asm/ptrace.h
+ # include <asm/ptrace.h>
+ #endif
diff --git a/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch b/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
new file mode 100644
index 000000000000..d0b61c80c897
--- /dev/null
+++ b/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
@@ -0,0 +1,62 @@
+--- a/compiler-rt/lib/xray/xray_powerpc64.inc
++++ b/compiler-rt/lib/xray/xray_powerpc64.inc
+@@ -12,7 +12,13 @@
+ 
+ #include <cstdint>
+ #include <mutex>
++#ifdef __GLIBC__
+ #include <sys/platform/ppc.h>
++#else
++#include <cctype>
++#include <cstring>
++#include <cstdlib>
++#endif
+ 
+ #include "xray_defs.h"
+ 
+@@ -20,13 +26,45 @@ namespace __xray {
+ 
+ ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
+   CPU = 0;
++#ifdef __GLIBC__
+   return __ppc_get_timebase();
++#else
++  return __builtin_ppc_get_timebase();
++#endif
+ }
+ 
+ inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
+   static std::mutex M;
+   std::lock_guard<std::mutex> Guard(M);
++#ifdef __GLIBC__
+   return __ppc_get_timebase_freq();
++#else
++  /* FIXME: a less dirty implementation? */
++  static uint64_t base;
++  if (!base) {
++    FILE *f = fopen("/proc/cpuinfo", "rb");
++    if (f) {
++      ssize_t nr;
++      /* virtually always big enough to hold the line */
++      char buf[512];
++      while (fgets(buf, sizeof(buf), f)) {
++        char *ret = strstr(buf, "timebase");
++        if (!ret) {
++          continue;
++        }
++        ret += sizeof("timebase") - 1;
++        ret = strchr(ret, ':');
++        if (!ret) {
++          continue;
++        }
++        base = strtoul(ret + 1, nullptr, 10);
++        break;
++      }
++      fclose(f);
++    }
++  }
++  return base;
++#endif
+ }
+ 
+ inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
diff --git a/srcpkgs/llvm14/patches/libcxx-musl.patch b/srcpkgs/llvm14/patches/libcxx-musl.patch
new file mode 100644
index 000000000000..bbd31ffc2cb1
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-musl.patch
@@ -0,0 +1,26 @@
+--- a/libcxx/include/locale
++++ b/libcxx/include/locale
+@@ -742,7 +742,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
+         typename remove_reference<decltype(errno)>::type __save_errno = errno;
+         errno = 0;
+         char *__p2;
++#if defined(__linux__) && !defined(__GLIBC__)
++        long long __ll = strtoll(__a, &__p2, __base);
++#else
+         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
++#endif
+         typename remove_reference<decltype(errno)>::type __current_errno = errno;
+         if (__current_errno == 0)
+             errno = __save_errno;
+@@ -782,7 +786,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
+         typename remove_reference<decltype(errno)>::type __save_errno = errno;
+         errno = 0;
+         char *__p2;
++#if defined(__linux__) && !defined(__GLIBC__)
++        unsigned long long __ll = strtoull(__a, &__p2, __base);
++#else
+         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
++#endif
+         typename remove_reference<decltype(errno)>::type __current_errno = errno;
+         if (__current_errno == 0)
+             errno = __save_errno;
diff --git a/srcpkgs/llvm14/patches/libcxx-ppc.patch b/srcpkgs/llvm14/patches/libcxx-ppc.patch
new file mode 100644
index 000000000000..7a92f8004e1c
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-ppc.patch
@@ -0,0 +1,22 @@
+This ensures `is_iec559` is defined correctly under all long double ABIs,
+including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__`
+is not defined on gcc.
+
+--- a/libcxx/include/limits
++++ b/libcxx/include/limits
+@@ -426,8 +426,14 @@ protected:
+     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
+     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
+ 
+-#if (defined(__ppc__) || defined(__ppc64__))
++#if defined(__powerpc__) || defined(__powerpc64__)
++#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__)
++    /* IEEE 754 quadruple or double precision */
++    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
++#else
++    /* 128-bit IBM double-double */
+     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
++#endif
+ #else
+     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
+ #endif
diff --git a/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch b/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
new file mode 100644
index 000000000000..70292beb2fcd
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
@@ -0,0 +1,11 @@
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -769,6 +769,8 @@ function(cxx_link_system_libraries target)
+     target_link_libraries(${target} PRIVATE atomic)
+   endif()
+ 
++#ssp  target_link_libraries(${target} PRIVATE ssp_nonshared)
++
+   if (MINGW)
+     target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
+   endif()
diff --git a/srcpkgs/llvm14/patches/libcxxabi-dl.patch b/srcpkgs/llvm14/patches/libcxxabi-dl.patch
new file mode 100644
index 000000000000..3a15f9db8c98
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxxabi-dl.patch
@@ -0,0 +1,25 @@
+Also link to -ldl to prevent undefined references.
+
+--- a/libcxxabi/src/CMakeLists.txt
++++ b/libcxxabi/src/CMakeLists.txt
+@@ -73,6 +73,7 @@
+   endif()
+ 
+   add_library_flags_if(LIBCXXABI_HAS_C_LIB c)
++  add_library_flags_if(LIBCXXABI_HAS_C_LIB dl)
+ endif()
+ 
+ if (LIBCXXABI_USE_LLVM_UNWINDER)
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -745,6 +745,10 @@
+     target_link_libraries(${target} PRIVATE m)
+   endif()
+ 
++  if (LIBCXX_HAS_C_LIB)
++    target_link_libraries(${target} PRIVATE dl)
++  endif()
++
+   if (LIBCXX_HAS_RT_LIB)
+     target_link_libraries(${target} PRIVATE rt)
+   endif()
diff --git a/srcpkgs/llvm14/patches/lldb-musl.patch b/srcpkgs/llvm14/patches/lldb-musl.patch
new file mode 100644
index 000000000000..601c0d138523
--- /dev/null
+++ b/srcpkgs/llvm14/patches/lldb-musl.patch
@@ -0,0 +1,31 @@
+--- a/lldb/source/Plugins/Process/Linux/Procfs.h
++++ b/lldb/source/Plugins/Process/Linux/Procfs.h
+@@ -10,21 +10,12 @@
+ // sys/procfs.h on Android/Linux for all supported architectures.
+ 
+ #include <sys/ptrace.h>
++#include <asm/ptrace.h>
+ 
+-#ifdef __ANDROID__
+-#if defined(__arm64__) || defined(__aarch64__)
+-typedef unsigned long elf_greg_t;
+-typedef elf_greg_t
+-    elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
+-typedef struct user_fpsimd_state elf_fpregset_t;
+-#ifndef NT_FPREGSET
+-#define NT_FPREGSET NT_PRFPREG
+-#endif // NT_FPREGSET
+-#elif defined(__mips__)
+-#ifndef NT_FPREGSET
+-#define NT_FPREGSET NT_PRFPREG
+-#endif // NT_FPREGSET
+-#endif
+-#else // __ANDROID__
++#if !defined(__GLIBC__) && defined(__powerpc__)
++#define pt_regs musl_pt_regs
++#include <sys/procfs.h>
++#undef pt_regs
++#else
+ #include <sys/procfs.h>
+-#endif // __ANDROID__
++#endif
diff --git a/srcpkgs/llvm14/patches/llvm-001-musl.patch b/srcpkgs/llvm14/patches/llvm-001-musl.patch
new file mode 100644
index 000000000000..f2a3f8d62813
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-001-musl.patch
@@ -0,0 +1,57 @@
+From faca3fbd15d0c3108493c3c54cd93138e049ac43 Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe@gmail.com>
+Date: Tue, 8 Sep 2015 22:03:02 +0200
+Subject: [PATCH 3/3] musl
+
+---
+ include/llvm/Analysis/TargetLibraryInfo.h | 9 +++++++++
+ lib/Support/DynamicLibrary.cpp            | 2 +-
+ lib/Support/Unix/Signals.inc              | 6 +++---
+ utils/unittest/googletest/src/gtest.cc    | 1 +
+ 5 files changed, 17 insertions(+), 6 deletions(-)
+
+diff --git a/include/llvm/Analysis/TargetLibraryInfo.h b/include/llvm/Analysis/TargetLibraryInfo.h
+index 34a8a1e3..1214ece5 100644
+--- a/llvm/include/llvm/Analysis/TargetLibraryInfo.h
++++ b/llvm/include/llvm/Analysis/TargetLibraryInfo.h
+@@ -18,6 +18,15 @@
+ #include "llvm/IR/PassManager.h"
+ #include "llvm/Pass.h"
+ 
++#undef fopen64
++#undef fseeko64
++#undef fstat64
++#undef fstatvfs64
++#undef ftello64
++#undef lstat64
++#undef stat64
++#undef tmpfile64
++
+ namespace llvm {
+ template <typename T> class ArrayRef;
+ class Triple;
+diff --git a/lib/Support/Unix/DynamicLibrary.inc b/lib/Support/Unix/DynamicLibrary.inc
+index a2a37996..2f86c470 100644
+--- a/llvm/lib/Support/Unix/DynamicLibrary.inc
++++ b/llvm/lib/Support/Unix/DynamicLibrary.inc
+@@ -102,7 +102,7 @@ static void *DoSearch(const char* SymbolName) {
+ 
+ // This macro returns the address of a well-known, explicit symbol
+ #define EXPLICIT_SYMBOL(SYM) \
+-   if (!strcmp(SymbolName, #SYM)) return &SYM
++   if (!strcmp(SymbolName, #SYM)) return (void *)&SYM
+ 
+ // Under glibc we have a weird situation. The stderr/out/in symbols are both
+ // macros and global variables because of standards requirements. So, we
+diff --git a/utils/unittest/googletest/src/gtest.cc b/utils/unittest/googletest/src/gtest.cc
+index d882ab2e..f1fb12d0 100644
+--- a/llvm/utils/unittest/googletest/src/gtest.cc
++++ b/llvm/utils/unittest/googletest/src/gtest.cc
+@@ -128,6 +128,7 @@
+ 
+ #if GTEST_CAN_STREAM_RESULTS_
+ # include <arpa/inet.h>  // NOLINT
++# include <sys/socket.h>  // NOLINT
+ # include <netdb.h>  // NOLINT
+ # include <sys/socket.h>  // NOLINT
+ # include <sys/types.h>  // NOLINT
diff --git a/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch b/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
new file mode 100644
index 000000000000..0071d964bd37
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
@@ -0,0 +1,30 @@
+This patches LLVM to use ELFv2 on ppc64 unconditionally unless overridden. We
+need this because unlike most distros we use ELFv2 for both glibc and musl
+on big endian ppc64.
+
+diff --git a/lib/Target/PowerPC/PPCTargetMachine.cpp b/lib/Target/PowerPC/PPCTargetMachine.cpp
+index 0634833e..b7cbc2e7 100644
+--- a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
++++ b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
+@@ -222,9 +222,8 @@ static PPCTargetMachine::PPCABI computeTargetABI(const Triple &TT,
+ 
+   switch (TT.getArch()) {
+   case Triple::ppc64le:
+-    return PPCTargetMachine::PPC_ABI_ELFv2;
+   case Triple::ppc64:
+-    return PPCTargetMachine::PPC_ABI_ELFv1;
++    return PPCTargetMachine::PPC_ABI_ELFv2;
+   default:
+     return PPCTargetMachine::PPC_ABI_UNKNOWN;
+   }
+diff --git a/test/CodeGen/PowerPC/ppc64-elf-abi.ll b/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+index 8b1cf6b5..296a2afa 100644
+--- a/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
++++ b/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+@@ -1,4 +1,5 @@
+-; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv1
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-musl < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv1 < %s | FileCheck %s -check-prefix=CHECK-ELFv1
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv2 < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
diff --git a/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch b/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
new file mode 100644
index 000000000000..b5d15974375d
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
@@ -0,0 +1,11 @@
+--- a/llvm/lib/Target/PowerPC/PPCSubtarget.cpp
++++ b/llvm/lib/Target/PowerPC/PPCSubtarget.cpp
+@@ -165,7 +165,7 @@ void PPCSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) {
+ 
+   if ((TargetTriple.isOSFreeBSD() && TargetTriple.getOSMajorVersion() >= 13) ||
+       TargetTriple.isOSNetBSD() || TargetTriple.isOSOpenBSD() ||
+-      TargetTriple.isMusl())
++      isTargetLinux())
+     SecurePlt = true;
+ 
+   if (HasSPE && IsPPC64)
diff --git a/srcpkgs/llvm14/patches/llvm-004-override-opt.patch b/srcpkgs/llvm14/patches/llvm-004-override-opt.patch
new file mode 100644
index 000000000000..51d0e4b31b32
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-004-override-opt.patch
@@ -0,0 +1,18 @@
+This allows us to override the optimization level as not all platforms can
+deal with -O3.
+
+--- a/llvm/CMakeLists.txt
++++ b/llvm/CMakeLists.txt
+@@ -918,6 +918,12 @@ if( MINGW AND NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" )
+   llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "-O2")
+ endif()
+ 
++set(VOID_CXX_OPT_FLAGS "" CACHE STRING "Optimization level to use")
++
++if (NOT VOID_CXX_OPT_FLAGS STREQUAL "")
++    llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "${VOID_CXX_OPT_FLAGS}")
++endif()
++
+ # Put this before tblgen. Else we have a circular dependence.
+ add_subdirectory(lib/Demangle)
+ add_subdirectory(lib/Support)
diff --git a/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch b/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
new file mode 100644
index 000000000000..d332687b9d92
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
@@ -0,0 +1,36 @@
+From f3dbdd49c06bfafc1d6138094cf42889c14d38b6 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Sun, 3 Nov 2019 10:57:27 -0600
+Subject: [PATCH] [LLVM][PowerPC] Assume BigPIC if no PIC level is specified
+
+---
+ llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp  | 2 +-
+ llvm/lib/Target/PowerPC/PPCMCInstLower.cpp | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/Target/PowerPC/PPCAsmPrinter.cpp b/lib/Target/PowerPC/PPCAsmPrinter.cpp
+index cce21f32..87ca5f9b 100644
+--- a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
++++ b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
+@@ -520,7 +520,7 @@ void PPCAsmPrinter::EmitTlsCall(const MachineInstr *MI,
+ 
+   // Add 32768 offset to the symbol so we follow up the latest GOT/PLT ABI.
+   if (Kind == MCSymbolRefExpr::VK_PLT && Subtarget->isSecurePlt() &&
+-      M->getPICLevel() == PICLevel::BigPIC)
++      M->getPICLevel() != PICLevel::SmallPIC)
+     TlsRef = MCBinaryExpr::createAdd(
+         TlsRef, MCConstantExpr::create(32768, OutContext), OutContext);
+   const MachineOperand &MO = MI->getOperand(2);
+diff --git a/lib/Target/PowerPC/PPCMCInstLower.cpp b/lib/Target/PowerPC/PPCMCInstLower.cpp
+index 5cc180d7..a5b02565 100644
+--- a/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
++++ b/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
+@@ -117,7 +117,7 @@ static MCOperand GetSymbolRef(const MachineOperand &MO, const MCSymbol *Symbol,
+   const MCExpr *Expr = MCSymbolRefExpr::create(Symbol, RefKind, Ctx);
+   // If -msecure-plt -fPIC, add 32768 to symbol.
+   if (Subtarget->isSecurePlt() && TM.isPositionIndependent() &&
+-      M->getPICLevel() == PICLevel::BigPIC &&
++      M->getPICLevel() != PICLevel::SmallPIC &&
+       MO.getTargetFlags() == PPCII::MO_PLT)
+     Expr =
+         MCBinaryExpr::createAdd(Expr, MCConstantExpr::create(32768, Ctx), Ctx);
diff --git a/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch b/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
new file mode 100644
index 000000000000..a00abd216665
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
@@ -0,0 +1,25 @@
+Fix failures in AllocationTests/MappedMemoryTest.* on aarch64:
+
+    Failing Tests (8):
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.AllocAndRelease/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.DuplicateNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.EnabledWrite/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.MultipleAllocAndRelease/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.SuccessiveNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.UnalignedNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.ZeroNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.ZeroSizeNear/3
+
+Upstream-Issue: https://bugs.llvm.org/show_bug.cgi?id=14278#c10
+
+--- a/llvm/lib/Support/Unix/Memory.inc
++++ b/llvm/lib/Support/Unix/Memory.inc
+@@ -58,7 +58,7 @@ static int getPosixProtectionFlags(unsigned Flags) {
+     return PROT_READ | PROT_WRITE | PROT_EXEC;
+   case llvm::sys::Memory::MF_EXEC:
+ #if (defined(__FreeBSD__) || defined(__POWERPC__) || defined (__ppc__) || \
+-     defined(_POWER) || defined(_ARCH_PPC))
++     defined(_POWER) || defined(_ARCH_PPC) || (defined(__linux__) && defined(__aarch64__)))
+     // On PowerPC, having an executable page that has no read permission
+     // can have unintended consequences.  The function InvalidateInstruction-
+     // Cache uses instructions dcbf and icbi, both of which are treated by
diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
new file mode 100644
index 000000000000..3e7e6ab2c00b
--- /dev/null
+++ b/srcpkgs/llvm14/template
@@ -0,0 +1,424 @@
+# Template file for 'llvm14'
+pkgname=llvm14
+version=14.0.3
+revision=1
+wrksrc="llvm-project-${version}.src"
+build_wrksrc=llvm
+build_style=cmake
+configure_args="
+ -DCMAKE_BUILD_TYPE=Release -Wno-dev
+ -DENABLE_LINKER_BUILD_ID=YES
+ -DLLDB_USE_SYSTEM_SIX=YES
+ -DLIBCXX_CXX_ABI=libcxxabi
+ -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
+ -DLIBCXXABI_USE_LLVM_UNWINDER=YES
+ -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
+ -DLIBOMP_ENABLE_SHARED=YES
+ -DLIBOMP_INSTALL_ALIASES=NO
+ -DLLVM_INCLUDE_DOCS=YES
+ -DLLVM_BUILD_DOCS=YES
+ -DLLVM_ENABLE_SPHINX=YES
+ -DSPHINX_WARNINGS_AS_ERRORS=NO
+ -DLLVM_INSTALL_UTILS=YES
+ -DLLVM_BUILD_LLVM_DYLIB=YES
+ -DLLVM_LINK_LLVM_DYLIB=YES
+ -DLLVM_ENABLE_RTTI=YES
+ -DLLVM_ENABLE_FFI=YES
+ -DLLVM_BINUTILS_INCDIR=/usr/include"
+hostmakedepends="perl python3 zlib-devel libffi-devel swig python3-Sphinx
+ python3-recommonmark python3-sphinx-automodapi"
+makedepends="python3-devel zlib-devel elfutils-devel libffi-devel libedit-devel
+ libxml2-devel binutils-devel libatomic-devel"
+depends="libllvm14>=${version}_${revision}"
+short_desc="Low Level Virtual Machine"
+maintainer="q66 <daniel@octaforge.org>"
+license="Apache-2.0"
+homepage="https://www.llvm.org"
+distfiles="https://github.com/llvm/llvm-project/releases/download/llvmorg-${version}/llvm-project-${version}.src.tar.xz"
+checksum=44d3e7a784d5cf805e72853bb03f218bd1058d448c03ca883dabbebc99204e0c
+lib32disabled=yes
+python_version=3
+
+if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+	configure_args+=" -DLIBCXX_HAS_MUSL_LIBC=YES"
+	makedepends+=" libexecinfo-devel"
+	depends+=" libexecinfo-devel"
+fi
+
+# "operand out of range" assembler failures
+case "$XBPS_TARGET_MACHINE" in
+	ppc64*) ;;
+	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
+esac
+
+_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
+
+_lldb_enable=yes
+_libomp_enable=no
+
+case "$XBPS_TARGET_MACHINE" in
+	ppc64le*) ;;
+	ppc*|i686*) _lldb_enable=no ;;
+esac
+
+case "$XBPS_TARGET_MACHINE" in
+	x86_64*|aarch64*|ppc64*) _libomp_enable=yes;;
+esac
+
+subpackages="clang-tools-extra"
+
+# must go before clang
+if [ "$_libomp_enable" = "yes" ]; then
+	_enabled_projects+=";openmp"
+	subpackages+=" libomp libomp-devel"
+	# because of cmake nonsense referencing libomptarget.so.*
+	depends+=" libomp>=${version}_${revision}"
+fi
+
+subpackages+=" clang clang-analyzer libclang libclang-cpp
+ llvm-libunwind llvm-libunwind-devel libcxx libcxx-devel
+ libcxxabi libcxxabi-devel libllvm14"
+
+if [ "$_lldb_enable" = "yes" ]; then
+	# XXX fails to cross compile due to python
+	_enabled_projects+=";lldb"
+	subpackages+=" lldb lldb-devel"
+fi
+
+subpackages+=" lld lld-devel"
+
+configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+
+post_patch() {
+	if [ "$_lldb_enable" = "yes" ]; then
+		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+			vsed -i 's|__ptrace_request|int|g' \
+				${wrksrc}/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
+		fi
+		# disable docs for lldb as they fail to generate
+		vsed -i '/add_subdirectory(docs)/d' \
+			${wrksrc}/lldb/CMakeLists.txt
+	fi
+
+	# update config.guess for better platform detection
+	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
+		${wrksrc}/llvm/cmake
+
+	# fix linker failures on some archs
+	vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
+		${wrksrc}/libcxxabi/cmake/config-ix.cmake
+	vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
+		${wrksrc}/libcxxabi/cmake/config-ix.cmake
+
+	# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*) ;;
+		ppc*-musl|i686-musl|mips*-musl)
+			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
+				${wrksrc}/libunwind/src/CMakeLists.txt
+			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
+				${wrksrc}/libcxxabi/src/CMakeLists.txt
+			vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
+			;;
+	esac
+
+	case "$XBPS_TARGET_MACHINE" in
+		x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
+			vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
+				${wrksrc}/compiler-rt/CMakeLists.txt
+			;;
+		arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
+			vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
+				${wrksrc}/compiler-rt/cmake/config-ix.cmake
+			;;
+	esac
+}
+
+pre_configure() {
+	local triplet
+
+	# Vastly reduce size of debugging symbols:
+	CFLAGS=${CFLAGS/ -g/ -g1}
+	CXXFLAGS=${CXXFLAGS/ -g/ -g1}
+
+	# since gcc9, the build likes to blow up for ppc32 apparently because
+	# of clang being too large for a 24-bit relative call to the PLT, so
+	# optimize for size instead
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*) ;;
+		mips*-musl|ppc*) configure_args+=" -DVOID_CXX_OPT_FLAGS=-Os" ;;
+	esac
+
+	if [ "$CROSS_BUILD" ]; then
+		msg_normal "Building host tblgen\n"
+		mkdir -p build/HOST
+		cd build/HOST
+		CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
+			CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
+			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
+			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
+		make ${makejobs} -C utils/TableGen
+		make ${makejobs} -C tools/clang/utils/TableGen
+		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
+		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
+		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
+		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
+		cd ../..
+	fi
+
+	case "$XBPS_TARGET_MACHINE" in
+		i686*) _arch="X86";;
+		x86_64*) _arch="X86";;
+		armv5*) _arch="Armv5te";;
+		armv6*) _arch="Armv6";;
+		armv7*) _arch="Armv7";;
+		aarch64*) _arch="AArch64";;
+		mips*) _arch="Mips";;
+		ppc*) _arch="PowerPC";;
+		riscv64*) _arch="RISCV64";;
+	esac
+
+	triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
+
+	configure_args+=" -DLLVM_TARGET_ARCH=${_arch}"
+	configure_args+=" -DLLVM_HOST_TRIPLE=${triplet}"
+	configure_args+=" -DLLVM_DEFAULT_TARGET_TRIPLE=${triplet}"
+}
+
+do_install() {
+	cd build
+	cmake -DCMAKE_INSTALL_PREFIX=${DESTDIR}/usr -P cmake_install.cmake
+
+	# Required for multilib.
+	if [ "$XBPS_TARGET_MACHINE" = "x86_64" ]; then
+		for _header in llvm-config; do
+			mv ${DESTDIR}/usr/include/llvm/Config/${_header}{,-64}.h
+			vinstall ${FILESDIR}/llvm-Config-${_header}.h 644 \
+				usr/include/llvm/Config ${_header}.h
+		done
+	fi
+
+	# Remove llvm-config-host in cross builds.
+	if [ "$CROSS_BUILD" ]; then
+		rm -f ${DESTDIR}/usr/bin/llvm-config-host
+	fi
+
+	# Install libcxxabi headers
+	vinstall ${wrksrc}/libcxxabi/include/__cxxabi_config.h 644 usr/include
+	vinstall ${wrksrc}/libcxxabi/include/cxxabi.h 644 usr/include
+
+	# Install libunwind headers
+	vinstall ${wrksrc}/libunwind/include/__libunwind_config.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/libunwind.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/unwind.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/mach-o/compact_unwind_encoding.h \
+		644 usr/include/mach-o
+}
+
+clang-analyzer_package() {
+	pycompile_dirs="usr/share/scan-view"
+	depends="clang-${version}_${revision} python3 perl"
+	short_desc+=" - A source code analysis framework"
+	homepage="https://clang-analyzer.llvm.org/"
+	pkg_install() {
+		vmove usr/share/man/man1/scan-build.1
+		vmove "/usr/bin/scan-*"
+		vmove "/usr/share/scan-*"
+		vmove "/usr/libexec/*analyzer"
+	}
+}
+
+clang-tools-extra_package() {
+	lib32disabled=yes
+	depends="clang-${version}_${revision} python3"
+	short_desc+=" - Extra Clang tools"
+	homepage="https://clang.llvm.org/extra/"
+	pkg_install() {
+		vmove usr/include/clang-tidy
+		vmove usr/bin/clang-apply-replacements
+		vmove usr/bin/clang-query
+		vmove usr/bin/clang-rename
+		vmove usr/bin/clang-tidy
+		vmove usr/bin/diagtool
+		vmove usr/bin/find-all-symbols
+		vmove usr/bin/hmaptool
+		vmove usr/bin/modularize
+		vmove usr/bin/pp-trace
+		vmove usr/bin/sancov
+		vmove "usr/lib/libclangApplyReplacements*"
+		vmove "usr/lib/libclangQuery*"
+		vmove "usr/lib/libclangTidy*"
+		vmove "usr/share/clang/*tidy*"
+		vmove usr/share/doc/clang-tools
+		vmove usr/share/man/man1/extraclangtools.1
+		vmove usr/share/man/man1/diagtool.1
+	}
+}
+
+clang_package() {
+	lib32disabled=yes
+	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
+	 libclang-${version}_${revision}"
+	short_desc+=" - C language family frontend"
+	homepage="https://clang.llvm.org/"
+	pkg_install() {
+		vmove usr/include/clang
+		vmove usr/include/clang-c
+		vmove "usr/bin/*clang*"
+		vmove usr/bin/c-index-test
+		vmove usr/lib/clang
+		vmove usr/lib/cmake/clang
+		vmove "usr/lib/libclang*.a"
+		vmove "usr/lib/libclang*.so"
+		vmove usr/share/clang
+		vmove usr/share/doc/clang
+		vmove usr/share/man/man1/clang.1
+	}
+}
+
+libclang_package() {
+	short_desc+=" - C frontend runtime library"
+	pkg_install() {
+		vmove "usr/lib/libclang.so.*"
+	}
+}
+
+libclang-cpp_package() {
+	short_desc+=" - C frontend runtime library (C++ interface)"
+	pkg_install() {
+		vmove "usr/lib/libclang-cpp.so.*"
+	}
+}
+
+lld_package() {
+	lib32disabled=yes
+	short_desc+=" - linker"
+	homepage="https://lld.llvm.org"
+	pkg_install() {
+		vmove usr/bin/lld*
+		vmove usr/bin/wasm-ld
+		vmove usr/bin/ld.lld*
+		vmove usr/bin/ld64.lld*
+		vmove usr/share/doc/lld
+	}
+}
+
+lld-devel_package() {
+	lib32disabled=yes
+	short_desc+=" - linker - development files"
+	homepage="https://lld.llvm.org"
+	depends="lld>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include/lld
+		vmove usr/lib/cmake/lld
+		vmove "usr/lib/liblld*a"
+	}
+}
+
+lldb_package() {
+	lib32disabled=yes
+	depends+=" python3-six"
+	short_desc+=" - LLDB debugger"
+	homepage="https://lldb.llvm.org/"
+	pkg_install() {
+		vmove usr/bin/*lldb*
+		vmove usr/lib/liblldb*so.*
+		vmove /usr/lib/python*
+	}
+}
+
+lldb-devel_package() {
+	lib32disabled=yes
+	depends="lldb>=${version}_${revision}"
+	short_desc+=" - LLDB debugger - development files"
+	pkg_install() {
+		vmove usr/include/lldb
+		vmove "usr/lib/liblldb*.so"
+	}
+}
+
+llvm-libunwind_package() {
+	short_desc+=" - libunwind"
+	pkg_install() {
+		vmove "usr/lib/libunwind.so.*"
+	}
+}
+
+llvm-libunwind-devel_package() {
+	short_desc+=" - libunwind - development files"
+	depends="llvm-libunwind>=${version}_${revision}"
+	conflicts="libunwind-devel>=0"
+	pkg_install() {
+		vmove usr/lib/libunwind.so
+		vmove usr/lib/libunwind.a
+		vmove "usr/include/*unwind*"
+		vmove usr/include/mach-o
+		vmove usr/share/doc/libunwind
+	}
+}
+
+libcxxabi_package() {
+	short_desc+=" - low level support for libc++"
+	pkg_install() {
+		vmove "usr/lib/libc++abi.so.*"
+	}
+}
+
+libcxxabi-devel_package() {
+	short_desc+=" - low level support for libc++ - development files"
+	depends="libcxxabi>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/lib/libc++abi.so
+		vmove usr/lib/libc++abi.a
+		vmove "usr/include/*cxxabi*"
+	}
+}
+
+libcxx_package() {
+	short_desc+=" - C++ standard library"
+	pkg_install() {
+		vmove "usr/lib/libc++.so.*"
+	}
+}
+
+libcxx-devel_package() {
+	short_desc+=" - C++ standard library - development files"
+	depends="libcxx>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/lib/libc++.so
+		vmove usr/lib/libc++.a
+		vmove usr/lib/libc++experimental.a
+		vmove usr/include/c++
+		vmove usr/share/doc/libcxx
+	}
+}
+
+libomp_package() {
+	short_desc+=" - Clang OpenMP support library"
+	pkg_install() {
+		vmove usr/lib/libomp.so
+		vmove "usr/lib/libomptarget.rtl.*.so"
+		vmove usr/lib/libarcher.so
+		vmove "usr/lib/libomp*.so.*"
+	}
+}
+
+libomp-devel_package() {
+	short_desc+=" - Clang OpenMP support library - development files"
+	depends="libomp>=${version}_${revision}"
+	pkg_install() {
+		vmove "usr/lib/libomp*.so"
+		vmove "usr/lib/libarcher*"
+		vmove "usr/include/omp*.h"
+		vmove "usr/lib/clang/${version}/include/omp*.h"
+		vmove usr/share/man/man1/llvmopenmp.1
+		vmove usr/share/doc/openmp
+	}
+}
+
+libllvm14_package() {
+	short_desc+=" - runtime library"
+	pkg_install() {
+		vmove "usr/lib/libLLVM-*.so*"
+	}
+}
diff --git a/srcpkgs/llvm14/update b/srcpkgs/llvm14/update
new file mode 100644
index 000000000000..e95cf26b3586
--- /dev/null
+++ b/srcpkgs/llvm14/update
@@ -0,0 +1,3 @@
+site="https://github.com/llvm/llvm-project/releases"
+pattern="llvmorg-\K(\d+.){2}\d+(-rc\d+)?"
+ignore="*-rc*"

From b4ebe6e62cd8d03d22cf5b02097b5c499e0f58a1 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:16:07 +0200
Subject: [PATCH 02/23] llvm: update to 14.0.3.

switch to runtimes build:
https://reviews.llvm.org/rGac7031b2b2fa
https://reviews.llvm.org/D110338#3022952
---
 common/shlibs                                 |  5 +-
 srcpkgs/llvm/template                         |  6 +-
 .../llvm14/files/llvm-Config-llvm-config.h    |  9 +++
 ...le-mutliarch-layout-on-musl-in-clang.patch | 31 +++++++++
 ...ch-locations-for-libunwind-libc-libc.patch | 68 +++++++++++++++++++
 srcpkgs/llvm14/template                       | 28 ++++----
 6 files changed, 126 insertions(+), 21 deletions(-)
 create mode 100644 srcpkgs/llvm14/files/llvm-Config-llvm-config.h
 create mode 100644 srcpkgs/llvm14/patches/clang-005-disable-mutliarch-layout-on-musl-in-clang.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-007-disable-multiarch-locations-for-libunwind-libc-libc.patch

diff --git a/common/shlibs b/common/shlibs
index 7658c1d2531e..9180c68d8419 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -974,7 +974,7 @@ libgtksourceviewmm-3.0.so.0 gtksourceviewmm-3.2.0_1
 libyajl.so.2 yajl-2.0.1_1
 libconfuse.so.2 confuse-3.2.1_1
 liblldb.so.14 lldb-14.0.3_1
-libclang.so.14 libclang-14.0.3_1
+libclang.so.13 libclang-14.0.3_1
 libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
@@ -4171,7 +4171,8 @@ libomptarget.rtl.amdgpu.so libomp-14.0.3_1
 libomptarget.rtl.cuda.so libomp-14.0.3_1
 libomptarget.rtl.x86_64.so libomp-14.0.3_1
 libarcher.so libomp-14.0.3_1
-libomptarget.so libomp-14.0.3_1
+libompd.so libomp-devel-14.0.3_1
+libomptarget.so libomp-devel-14.0.3_1
 liblldbIntelFeatures.so.14 lldb-14.0.3_1
 libLTO.so.14 llvm14-14.0.3_1
 libRemarks.so.14 llvm14-14.0.3_1
diff --git a/srcpkgs/llvm/template b/srcpkgs/llvm/template
index a92db6f94f9f..d226c61c734e 100644
--- a/srcpkgs/llvm/template
+++ b/srcpkgs/llvm/template
@@ -1,10 +1,10 @@
 # Template file for 'llvm'
 pkgname=llvm
-version=12.0.0
+version=14.0.3
 revision=1
 build_style=meta
-depends="llvm12"
-replaces="llvm11>=0 llvm10>=0 llvm9>=0 llvm8>=0 llvm7>=0 llvm6.0>=0 llvm3.9>=0"
+depends="llvm14"
+replaces="llvm13>=0 llvm12>=0 llvm11>=0 llvm10>=0 llvm9>=0 llvm8>=0 llvm7>=0 llvm6.0>=0 llvm3.9>=0"
 short_desc="LLVM meta package"
 maintainer="Enno Boland <gottox@voidlinux.org>"
 license="Public Domain"
diff --git a/srcpkgs/llvm14/files/llvm-Config-llvm-config.h b/srcpkgs/llvm14/files/llvm-Config-llvm-config.h
new file mode 100644
index 000000000000..2fa08c9be696
--- /dev/null
+++ b/srcpkgs/llvm14/files/llvm-Config-llvm-config.h
@@ -0,0 +1,9 @@
+#include <bits/wordsize.h>
+
+#if __WORDSIZE == 32
+#include "llvm-config-32.h"
+#elif __WORDSIZE == 64
+#include "llvm-config-64.h"
+#else
+#error "Unknown word size"
+#endif
diff --git a/srcpkgs/llvm14/patches/clang-005-disable-mutliarch-layout-on-musl-in-clang.patch b/srcpkgs/llvm14/patches/clang-005-disable-mutliarch-layout-on-musl-in-clang.patch
new file mode 100644
index 000000000000..348d99b10de2
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-005-disable-mutliarch-layout-on-musl-in-clang.patch
@@ -0,0 +1,31 @@
+From cff917c85b509789ec75b1e2343831c5729a193c Mon Sep 17 00:00:00 2001
+From: Daniel Kolesa <daniel@octaforge.org>
+Date: Wed, 6 Apr 2022 00:52:23 +0200
+Subject: [PATCH 05/22] disable mutliarch layout on musl in clang
+
+We don't use a multiarch layout and we don't really care for
+debianisms, so emulate whatever a non-multiarch gcc toolchain
+would do and use an empty thing.
+---
+ clang/lib/Driver/ToolChains/Linux.cpp | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp
+index f85c04df4..13cbdbdc7 100644
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -46,6 +46,11 @@ std::string Linux::getMultiarchTriple(const Driver &D,
+   bool IsMipsR6 = TargetTriple.getSubArch() == llvm::Triple::MipsSubArch_r6;
+   bool IsMipsN32Abi = TargetTriple.getEnvironment() == llvm::Triple::GNUABIN32;
+ 
++  /* we are not multiarch */
++  if (TargetTriple.isMusl()) {
++    return "";
++  }
++
+   // For most architectures, just use whatever we have rather than trying to be
+   // clever.
+   switch (TargetTriple.getArch()) {
+-- 
+2.35.1
+
diff --git a/srcpkgs/llvm14/patches/llvm-007-disable-multiarch-locations-for-libunwind-libc-libc.patch b/srcpkgs/llvm14/patches/llvm-007-disable-multiarch-locations-for-libunwind-libc-libc.patch
new file mode 100644
index 000000000000..3ef7499d6082
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-007-disable-multiarch-locations-for-libunwind-libc-libc.patch
@@ -0,0 +1,68 @@
+From 92a3b73dfec9c85a536ed99c5570231c333ad1e8 Mon Sep 17 00:00:00 2001
+From: Daniel Kolesa <daniel@octaforge.org>
+Date: Wed, 6 Apr 2022 00:57:58 +0200
+Subject: [PATCH 08/22] disable multiarch locations for
+ libunwind/libc++/libc++abi
+
+---
+ libcxx/CMakeLists.txt            | 2 +-
+ libcxx/benchmarks/CMakeLists.txt | 2 +-
+ libcxxabi/CMakeLists.txt         | 2 +-
+ libunwind/CMakeLists.txt         | 2 +-
+ 4 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt
+index 35c2ce515..19f423bf0 100644
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -432,7 +432,7 @@ set(LIBCXX_INSTALL_INCLUDE_DIR "${CMAKE_INSTALL_INCLUDEDIR}/c++/v1" CACHE PATH
+ set(LIBCXX_INSTALL_RUNTIME_DIR "${CMAKE_INSTALL_BINDIR}" CACHE PATH
+     "Path where built libc++ runtime libraries should be installed.")
+ 
+-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
++if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME MATCHES "Linux")
+   set(LIBCXX_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/${LLVM_DEFAULT_TARGET_TRIPLE})
+   set(LIBCXX_GENERATED_INCLUDE_DIR "${LLVM_BINARY_DIR}/include/c++/v1")
+   set(LIBCXX_GENERATED_INCLUDE_TARGET_DIR "${LLVM_BINARY_DIR}/include/${LLVM_DEFAULT_TARGET_TRIPLE}/c++/v1")
+diff --git a/libcxx/benchmarks/CMakeLists.txt b/libcxx/benchmarks/CMakeLists.txt
+index 95e28618b..906abdb4e 100644
+--- a/libcxx/benchmarks/CMakeLists.txt
++++ b/libcxx/benchmarks/CMakeLists.txt
+@@ -26,7 +26,7 @@ set(BENCHMARK_LIBCXX_COMPILE_FLAGS
+     -Wl,-rpath,${LIBCXX_LIBRARY_DIR}
+     ${SANITIZER_FLAGS}
+     )
+-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
++if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME MATCHES "Linux")
+   list(APPEND BENCHMARK_LIBCXX_COMPILE_FLAGS
+     -isystem "${LIBCXX_GENERATED_INCLUDE_TARGET_DIR}")
+ endif()
+diff --git a/libcxxabi/CMakeLists.txt b/libcxxabi/CMakeLists.txt
+index 8e8cdf8ad..94e625f44 100644
+--- a/libcxxabi/CMakeLists.txt
++++ b/libcxxabi/CMakeLists.txt
+@@ -226,7 +226,7 @@ set(CMAKE_MODULE_PATH
+ set(LIBCXXABI_INSTALL_RUNTIME_DIR "${CMAKE_INSTALL_BINDIR}" CACHE PATH
+     "Path where built libc++abi runtime libraries should be installed.")
+ 
+-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
++if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME MATCHES "Linux")
+   set(LIBCXXABI_HEADER_DIR ${LLVM_BINARY_DIR})
+   set(LIBCXXABI_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/${LLVM_DEFAULT_TARGET_TRIPLE})
+   set(LIBCXXABI_INSTALL_LIBRARY_DIR lib${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE} CACHE PATH
+diff --git a/libunwind/CMakeLists.txt b/libunwind/CMakeLists.txt
+index 6523fb0d3..a63b88f31 100644
+--- a/libunwind/CMakeLists.txt
++++ b/libunwind/CMakeLists.txt
+@@ -158,7 +158,7 @@ set(LIBUNWIND_INSTALL_INCLUDE_DIR "${CMAKE_INSTALL_INCLUDEDIR}" CACHE PATH
+ set(LIBUNWIND_INSTALL_RUNTIME_DIR "${CMAKE_INSTALL_BINDIR}" CACHE PATH
+     "Path where built libunwind runtime libraries should be installed.")
+ 
+-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
++if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME MATCHES "Linux")
+   set(LIBUNWIND_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/${LLVM_DEFAULT_TARGET_TRIPLE})
+   set(LIBUNWIND_INSTALL_LIBRARY_DIR lib${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE} CACHE PATH
+       "Path where built libunwind libraries should be installed.")
+-- 
+2.35.1
+
diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
index 3e7e6ab2c00b..8107c1d339e2 100644
--- a/srcpkgs/llvm14/template
+++ b/srcpkgs/llvm14/template
@@ -15,6 +15,7 @@ configure_args="
  -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
  -DLIBOMP_ENABLE_SHARED=YES
  -DLIBOMP_INSTALL_ALIASES=NO
+ -DCOMPILER_RT_DEFAULT_TARGET_ONLY=YES
  -DLLVM_INCLUDE_DOCS=YES
  -DLLVM_BUILD_DOCS=YES
  -DLLVM_ENABLE_SPHINX=YES
@@ -38,6 +39,7 @@ distfiles="https://github.com/llvm/llvm-project/releases/download/llvmorg-${vers
 checksum=44d3e7a784d5cf805e72853bb03f218bd1058d448c03ca883dabbebc99204e0c
 lib32disabled=yes
 python_version=3
+nopie_files="/usr/bin/llvm-omp-device-info"
 
 if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
 	configure_args+=" -DLIBCXX_HAS_MUSL_LIBC=YES"
@@ -51,7 +53,8 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
-_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
+_enabled_projects="clang;clang-tools-extra;lld"
+_enabled_runtimes="compiler-rt;libcxx;libcxxabi;libunwind"
 
 _lldb_enable=yes
 _libomp_enable=no
@@ -67,9 +70,8 @@ esac
 
 subpackages="clang-tools-extra"
 
-# must go before clang
 if [ "$_libomp_enable" = "yes" ]; then
-	_enabled_projects+=";openmp"
+	_enabled_runtimes+=";openmp"
 	subpackages+=" libomp libomp-devel"
 	# because of cmake nonsense referencing libomptarget.so.*
 	depends+=" libomp>=${version}_${revision}"
@@ -88,6 +90,7 @@ fi
 subpackages+=" lld lld-devel"
 
 configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+configure_args+=" -DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}"
 
 post_patch() {
 	if [ "$_lldb_enable" = "yes" ]; then
@@ -135,8 +138,7 @@ post_patch() {
 }
 
 pre_configure() {
-	local triplet
-
+	local triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
 	# Vastly reduce size of debugging symbols:
 	CFLAGS=${CFLAGS/ -g/ -g1}
 	CXXFLAGS=${CXXFLAGS/ -g/ -g1}
@@ -156,7 +158,8 @@ pre_configure() {
 		CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
 			CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
-			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
+			-DLLVM_ENABLE_PROJECTS=${_enabled_projects} \
+			-DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}
 		make ${makejobs} -C utils/TableGen
 		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
@@ -178,8 +181,6 @@ pre_configure() {
 		riscv64*) _arch="RISCV64";;
 	esac
 
-	triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
-
 	configure_args+=" -DLLVM_TARGET_ARCH=${_arch}"
 	configure_args+=" -DLLVM_HOST_TRIPLE=${triplet}"
 	configure_args+=" -DLLVM_DEFAULT_TARGET_TRIPLE=${triplet}"
@@ -249,7 +250,7 @@ clang-tools-extra_package() {
 		vmove "usr/lib/libclangQuery*"
 		vmove "usr/lib/libclangTidy*"
 		vmove "usr/share/clang/*tidy*"
-		vmove usr/share/doc/clang-tools
+		vmove usr/share/doc/LLVM/clang-tools
 		vmove usr/share/man/man1/extraclangtools.1
 		vmove usr/share/man/man1/diagtool.1
 	}
@@ -271,7 +272,7 @@ clang_package() {
 		vmove "usr/lib/libclang*.a"
 		vmove "usr/lib/libclang*.so"
 		vmove usr/share/clang
-		vmove usr/share/doc/clang
+		vmove usr/share/doc/LLVM/clang
 		vmove usr/share/man/man1/clang.1
 	}
 }
@@ -299,7 +300,7 @@ lld_package() {
 		vmove usr/bin/wasm-ld
 		vmove usr/bin/ld.lld*
 		vmove usr/bin/ld64.lld*
-		vmove usr/share/doc/lld
+		vmove usr/share/doc/LLVM/lld
 	}
 }
 
@@ -353,7 +354,6 @@ llvm-libunwind-devel_package() {
 		vmove usr/lib/libunwind.a
 		vmove "usr/include/*unwind*"
 		vmove usr/include/mach-o
-		vmove usr/share/doc/libunwind
 	}
 }
 
@@ -389,7 +389,6 @@ libcxx-devel_package() {
 		vmove usr/lib/libc++.a
 		vmove usr/lib/libc++experimental.a
 		vmove usr/include/c++
-		vmove usr/share/doc/libcxx
 	}
 }
 
@@ -399,7 +398,6 @@ libomp_package() {
 		vmove usr/lib/libomp.so
 		vmove "usr/lib/libomptarget.rtl.*.so"
 		vmove usr/lib/libarcher.so
-		vmove "usr/lib/libomp*.so.*"
 	}
 }
 
@@ -411,8 +409,6 @@ libomp-devel_package() {
 		vmove "usr/lib/libarcher*"
 		vmove "usr/include/omp*.h"
 		vmove "usr/lib/clang/${version}/include/omp*.h"
-		vmove usr/share/man/man1/llvmopenmp.1
-		vmove usr/share/doc/openmp
 	}
 }
 

From 10eddcb54f455e358c4b74ef21248fac98618364 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:36:32 +0200
Subject: [PATCH 03/23] llvm12: drop non-llvm components

---
 ...clang-001-fix-unwind-chain-inclusion.patch |  44 ---
 .../patches/clang-002-add-musl-triples.patch  | 110 -------
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 -
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ---
 .../compiler-rt-aarch64-ucontext.patch        |  11 -
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 --
 .../llvm12/patches/compiler-rt-size_t.patch   |  10 -
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 ----
 srcpkgs/llvm12/patches/libcxx-musl.patch      |  26 --
 srcpkgs/llvm12/patches/libcxx-ppc.patch       |  22 --
 .../llvm12/patches/libcxx-ssp-nonshared.patch |  11 -
 srcpkgs/llvm12/patches/libcxxabi-dl.patch     |  25 --
 srcpkgs/llvm12/patches/libunwind-ppc32.patch  |  63 ----
 srcpkgs/llvm12/patches/lldb-musl.patch        |  31 --
 .../llvm12/patches/ppc32-compiler-rt.patch    |  21 --
 srcpkgs/llvm12/template                       | 301 +-----------------
 16 files changed, 1 insertion(+), 832 deletions(-)
 delete mode 100644 srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-size_t.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-ppc.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxxabi-dl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libunwind-ppc32.patch
 delete mode 100644 srcpkgs/llvm12/patches/lldb-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/ppc32-compiler-rt.patch

diff --git a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
deleted file mode 100644
index e4eaa7783e7a..000000000000
--- a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 352974169f0d2b5da3d5321f588f5e3b5941330e Mon Sep 17 00:00:00 2001
-From: Andrea Brancaleoni <miwaxe@gmail.com>
-Date: Tue, 8 Sep 2015 22:14:57 +0200
-Subject: [PATCH 2/7] fix unwind chain inclusion
-
----
- lib/Headers/unwind.h | 9 +++++----
- 1 file changed, 5 insertions(+), 4 deletions(-)
-
-diff --git a/lib/Headers/unwind.h b/lib/Headers/unwind.h
-index 303d792..44e10cc 100644
---- a/clang/lib/Headers/unwind.h
-+++ b/clang/lib/Headers/unwind.h
-@@ -9,9 +9,6 @@
- 
- /* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/
- 
--#ifndef __CLANG_UNWIND_H
--#define __CLANG_UNWIND_H
--
- #if defined(__APPLE__) && __has_include_next(<unwind.h>)
- /* Darwin (from 11.x on) provide an unwind.h. If that's available,
-  * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE,
-@@ -39,6 +36,9 @@
- # endif
- #else
- 
-+#ifndef __CLANG_UNWIND_H
-+#define __CLANG_UNWIND_H
-+
- #include <stdint.h>
- 
- #ifdef __cplusplus
-@@ -322,6 +322,7 @@ _Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *);
- }
- #endif
- 
-+#endif /* __CLANG_UNWIND_H */
-+
- #endif
- 
--#endif /* __CLANG_UNWIND_H */
--- 
-2.5.1
diff --git a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
deleted file mode 100644
index 25688d40dbc2..000000000000
--- a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
+++ /dev/null
@@ -1,110 +0,0 @@
---- a/clang/lib/Driver/ToolChains/Gnu.cpp
-+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
-@@ -2086,7 +2086,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
-                                              "armv7hl-redhat-linux-gnueabi",
-                                              "armv6hl-suse-linux-gnueabi",
--                                             "armv7hl-suse-linux-gnueabi"};
-+                                             "armv7hl-suse-linux-gnueabi",
-+                                             "armv7l-linux-gnueabihf"};
-   static const char *const ARMebLibDirs[] = {"/lib"};
-   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
-                                              "armeb-linux-androideabi"};
-@@ -2153,8 +2154,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
-   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
-   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
--                                             "powerpcle-unknown-linux-gnu",
--                                             "powerpcle-linux-musl"};
-+                                             "powerpcle-unknown-linux-gnu"};
- 
-   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
-   static const char *const PPC64Triples[] = {
-@@ -2235,6 +2235,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-     return;
-   }
- 
-+  if (TargetTriple.isMusl()) {
-+    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
-+    static const char *const ARMHFMuslTriples[] = {
-+        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
-+    };
-+    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
-+    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
-+    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
-+    static const char *const MIPSMuslTriples[] = {
-+        "mips-linux-musl", "mipsel-linux-musl",
-+        "mipsel-linux-muslhf", "mips-linux-muslhf"
-+    };
-+    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
-+    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
-+    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
-+    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
-+
-+    switch (TargetTriple.getArch()) {
-+    case llvm::Triple::aarch64:
-+      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
-+      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
-+      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
-+      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
-+      break;
-+    case llvm::Triple::arm:
-+      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
-+      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
-+        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
-+      } else {
-+        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
-+      }
-+      break;
-+    case llvm::Triple::x86_64:
-+      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-+      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
-+      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-+      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
-+      break;
-+    case llvm::Triple::x86:
-+      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-+      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
-+      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-+      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
-+      break;
-+    case llvm::Triple::mips:
-+      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
-+      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
-+      break;
-+    case llvm::Triple::ppc:
-+      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
-+      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
-+      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
-+      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
-+      break;
-+    case llvm::Triple::ppcle:
-+      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
-+      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
-+      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
-+      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
-+      break;
-+    case llvm::Triple::ppc64:
-+      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
-+      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
-+      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
-+      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
-+      break;
-+    case llvm::Triple::ppc64le:
-+      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
-+      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
-+      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
-+      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
-+      break;
-+    default:
-+      break;
-+    }
-+    TripleAliases.push_back(TargetTriple.str());
-+    if (TargetTriple.str() != BiarchTriple.str())
-+      BiarchTripleAliases.push_back(BiarchTriple.str());
-+    return;
-+  }
-+
-   // Android targets should not use GNU/Linux tools or libraries.
-   if (TargetTriple.isAndroid()) {
-     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
deleted file mode 100644
index 4ad6412d1e6c..000000000000
--- a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/clang/lib/Driver/ToolChains/Linux.cpp
-+++ b/clang/lib/Driver/ToolChains/Linux.cpp
-@@ -504,10 +504,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
-     Loader = "ld.so.1";
-     break;
-   case llvm::Triple::ppc64:
--    LibDir = "lib64";
--    Loader =
--        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
--    break;
-   case llvm::Triple::ppc64le:
-     LibDir = "lib64";
-     Loader =
diff --git a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
deleted file mode 100644
index 21fc8003c5f1..000000000000
--- a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
+++ /dev/null
@@ -1,48 +0,0 @@
---- a/clang/lib/Basic/Targets/PPC.h
-+++ b/clang/lib/Basic/Targets/PPC.h
-@@ -415,11 +415,10 @@ public:
-       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
-     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
-       DataLayout = "e-m:e-i64:64-n32:64";
--      ABI = "elfv2";
-     } else {
-       DataLayout = "E-m:e-i64:64-n32:64";
--      ABI = "elfv1";
-     }
-+    ABI = "elfv2";
- 
-     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
-       LongDoubleWidth = LongDoubleAlign = 64;
---- a/clang/lib/CodeGen/TargetInfo.cpp
-+++ b/clang/lib/CodeGen/TargetInfo.cpp
-@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
-       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
- 
-     if (Triple.isOSBinFormatELF()) {
--      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
--      if (getTarget().getABI() == "elfv2")
--        Kind = PPC64_SVR4_ABIInfo::ELFv2;
-+      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
-+      if (getTarget().getABI() == "elfv1")
-+        Kind = PPC64_SVR4_ABIInfo::ELFv1;
-       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
- 
-       return SetCGInfo(
---- a/clang/lib/Driver/ToolChains/Clang.cpp
-+++ b/clang/lib/Driver/ToolChains/Clang.cpp
-@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
-   const llvm::Triple &T = getToolChain().getTriple();
-   if (T.isOSBinFormatELF()) {
-     switch (getToolChain().getArch()) {
--    case llvm::Triple::ppc64: {
--      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
--          T.isOSOpenBSD() || T.isMusl())
--        ABIName = "elfv2";
--      else
--        ABIName = "elfv1";
--      break;
--    }
-+    case llvm::Triple::ppc64:
-     case llvm::Triple::ppc64le:
-       ABIName = "elfv2";
-       break;
diff --git a/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch b/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
deleted file mode 100644
index 893c059d7b8d..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp.orig
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-@@ -1799,7 +1799,7 @@
- 
- static bool Aarch64GetESR(ucontext_t *ucontext, u64 *esr) {
-   static const u32 kEsrMagic = 0x45535201;
--  u8 *aux = ucontext->uc_mcontext.__reserved;
-+  u8 *aux = reinterpret_cast<u8 *>(ucontext->uc_mcontext.__reserved);
-   while (true) {
-     _aarch64_ctx *ctx = (_aarch64_ctx *)aux;
-     if (ctx->size == 0) break;
diff --git a/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch b/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
deleted file mode 100644
index 35f16d24f340..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
+++ /dev/null
@@ -1,35 +0,0 @@
---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-@@ -74,6 +74,10 @@
- #include <sys/utsname.h>
- #endif
- 
-+#if SANITIZER_LINUX && defined(__powerpc__)
-+#include <asm/ptrace.h>
-+#endif
-+
- #if SANITIZER_LINUX && !SANITIZER_ANDROID
- #include <sys/personality.h>
- #endif
---- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
-@@ -92,7 +92,7 @@
- # include <utime.h>
- # include <sys/ptrace.h>
- #if defined(__mips64) || defined(__aarch64__) || defined(__arm__) || \
--    SANITIZER_RISCV64
-+    defined(__powerpc__) || SANITIZER_RISCV64
- #  include <asm/ptrace.h>
- #  ifdef __arm__
- typedef struct user_fpregs elf_fpregset_t;
---- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
-@@ -31,7 +31,7 @@
- #include <sys/types.h> // for pid_t
- #include <sys/uio.h> // for iovec
- #include <elf.h> // for NT_PRSTATUS
--#if (defined(__aarch64__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
-+#if (defined(__aarch64__) || defined(__powerpc__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
- // GLIBC 2.20+ sys/user does not include asm/ptrace.h
- # include <asm/ptrace.h>
- #endif
diff --git a/srcpkgs/llvm12/patches/compiler-rt-size_t.patch b/srcpkgs/llvm12/patches/compiler-rt-size_t.patch
deleted file mode 100644
index 2c63063a5e9e..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-size_t.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/compiler-rt/lib/fuzzer/FuzzerInterceptors.cpp.orig
-+++ b/compiler-rt/lib/fuzzer/FuzzerInterceptors.cpp
-@@ -25,6 +25,7 @@
-   }
- 
- #include <cassert>
-+#include <cstddef>
- #include <cstdint>
- #include <dlfcn.h> // for dlsym()
- 
diff --git a/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch b/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
deleted file mode 100644
index d0b61c80c897..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
+++ /dev/null
@@ -1,62 +0,0 @@
---- a/compiler-rt/lib/xray/xray_powerpc64.inc
-+++ b/compiler-rt/lib/xray/xray_powerpc64.inc
-@@ -12,7 +12,13 @@
- 
- #include <cstdint>
- #include <mutex>
-+#ifdef __GLIBC__
- #include <sys/platform/ppc.h>
-+#else
-+#include <cctype>
-+#include <cstring>
-+#include <cstdlib>
-+#endif
- 
- #include "xray_defs.h"
- 
-@@ -20,13 +26,45 @@ namespace __xray {
- 
- ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
-   CPU = 0;
-+#ifdef __GLIBC__
-   return __ppc_get_timebase();
-+#else
-+  return __builtin_ppc_get_timebase();
-+#endif
- }
- 
- inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
-   static std::mutex M;
-   std::lock_guard<std::mutex> Guard(M);
-+#ifdef __GLIBC__
-   return __ppc_get_timebase_freq();
-+#else
-+  /* FIXME: a less dirty implementation? */
-+  static uint64_t base;
-+  if (!base) {
-+    FILE *f = fopen("/proc/cpuinfo", "rb");
-+    if (f) {
-+      ssize_t nr;
-+      /* virtually always big enough to hold the line */
-+      char buf[512];
-+      while (fgets(buf, sizeof(buf), f)) {
-+        char *ret = strstr(buf, "timebase");
-+        if (!ret) {
-+          continue;
-+        }
-+        ret += sizeof("timebase") - 1;
-+        ret = strchr(ret, ':');
-+        if (!ret) {
-+          continue;
-+        }
-+        base = strtoul(ret + 1, nullptr, 10);
-+        break;
-+      }
-+      fclose(f);
-+    }
-+  }
-+  return base;
-+#endif
- }
- 
- inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
diff --git a/srcpkgs/llvm12/patches/libcxx-musl.patch b/srcpkgs/llvm12/patches/libcxx-musl.patch
deleted file mode 100644
index bbd31ffc2cb1..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-musl.patch
+++ /dev/null
@@ -1,26 +0,0 @@
---- a/libcxx/include/locale
-+++ b/libcxx/include/locale
-@@ -742,7 +742,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
-         typename remove_reference<decltype(errno)>::type __save_errno = errno;
-         errno = 0;
-         char *__p2;
-+#if defined(__linux__) && !defined(__GLIBC__)
-+        long long __ll = strtoll(__a, &__p2, __base);
-+#else
-         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
-+#endif
-         typename remove_reference<decltype(errno)>::type __current_errno = errno;
-         if (__current_errno == 0)
-             errno = __save_errno;
-@@ -782,7 +786,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
-         typename remove_reference<decltype(errno)>::type __save_errno = errno;
-         errno = 0;
-         char *__p2;
-+#if defined(__linux__) && !defined(__GLIBC__)
-+        unsigned long long __ll = strtoull(__a, &__p2, __base);
-+#else
-         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
-+#endif
-         typename remove_reference<decltype(errno)>::type __current_errno = errno;
-         if (__current_errno == 0)
-             errno = __save_errno;
diff --git a/srcpkgs/llvm12/patches/libcxx-ppc.patch b/srcpkgs/llvm12/patches/libcxx-ppc.patch
deleted file mode 100644
index 7a92f8004e1c..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-ppc.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-This ensures `is_iec559` is defined correctly under all long double ABIs,
-including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__`
-is not defined on gcc.
-
---- a/libcxx/include/limits
-+++ b/libcxx/include/limits
-@@ -426,8 +426,14 @@ protected:
-     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
-     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
- 
--#if (defined(__ppc__) || defined(__ppc64__))
-+#if defined(__powerpc__) || defined(__powerpc64__)
-+#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__)
-+    /* IEEE 754 quadruple or double precision */
-+    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
-+#else
-+    /* 128-bit IBM double-double */
-     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
-+#endif
- #else
-     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
- #endif
diff --git a/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch b/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
deleted file mode 100644
index 70292beb2fcd..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/libcxx/CMakeLists.txt
-+++ b/libcxx/CMakeLists.txt
-@@ -769,6 +769,8 @@ function(cxx_link_system_libraries target)
-     target_link_libraries(${target} PRIVATE atomic)
-   endif()
- 
-+#ssp  target_link_libraries(${target} PRIVATE ssp_nonshared)
-+
-   if (MINGW)
-     target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
-   endif()
diff --git a/srcpkgs/llvm12/patches/libcxxabi-dl.patch b/srcpkgs/llvm12/patches/libcxxabi-dl.patch
deleted file mode 100644
index 3a15f9db8c98..000000000000
--- a/srcpkgs/llvm12/patches/libcxxabi-dl.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-Also link to -ldl to prevent undefined references.
-
---- a/libcxxabi/src/CMakeLists.txt
-+++ b/libcxxabi/src/CMakeLists.txt
-@@ -73,6 +73,7 @@
-   endif()
- 
-   add_library_flags_if(LIBCXXABI_HAS_C_LIB c)
-+  add_library_flags_if(LIBCXXABI_HAS_C_LIB dl)
- endif()
- 
- if (LIBCXXABI_USE_LLVM_UNWINDER)
---- a/libcxx/CMakeLists.txt
-+++ b/libcxx/CMakeLists.txt
-@@ -745,6 +745,10 @@
-     target_link_libraries(${target} PRIVATE m)
-   endif()
- 
-+  if (LIBCXX_HAS_C_LIB)
-+    target_link_libraries(${target} PRIVATE dl)
-+  endif()
-+
-   if (LIBCXX_HAS_RT_LIB)
-     target_link_libraries(${target} PRIVATE rt)
-   endif()
diff --git a/srcpkgs/llvm12/patches/libunwind-ppc32.patch b/srcpkgs/llvm12/patches/libunwind-ppc32.patch
deleted file mode 100644
index 74aa7576ecf9..000000000000
--- a/srcpkgs/llvm12/patches/libunwind-ppc32.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-This fixes build at least with gcc9 which does not define `__ppc__`.
-
---- a/libunwind/include/__libunwind_config.h
-+++ b/libunwind/include/__libunwind_config.h
-@@ -49,7 +49,7 @@
- #  define _LIBUNWIND_CONTEXT_SIZE 167
- #  define _LIBUNWIND_CURSOR_SIZE 179
- #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64
--# elif defined(__ppc__)
-+# elif defined(__powerpc__)
- #  define _LIBUNWIND_TARGET_PPC 1
- #  define _LIBUNWIND_CONTEXT_SIZE 117
- #  define _LIBUNWIND_CURSOR_SIZE 124
---- a/libunwind/src/UnwindRegistersRestore.S
-+++ b/libunwind/src/UnwindRegistersRestore.S
-@@ -392,7 +392,7 @@ Lnovec:
-   PPC64_LR(3)
-   bctr
- 
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- 
- DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind13Registers_ppc6jumptoEv)
- //
---- a/libunwind/src/UnwindRegistersSave.S
-+++ b/libunwind/src/UnwindRegistersSave.S
-@@ -554,7 +554,7 @@ DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext)
-   blr
- 
- 
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- 
- //
- // extern int unw_getcontext(unw_context_t* thread_state)
---- a/libunwind/src/config.h
-+++ b/libunwind/src/config.h
-@@ -95,12 +95,12 @@
- #define _LIBUNWIND_BUILD_SJLJ_APIS
- #endif
- 
--#if defined(__i386__) || defined(__x86_64__) || defined(__ppc__) || defined(__ppc64__) || defined(__powerpc64__)
-+#if defined(__i386__) || defined(__x86_64__) || defined(__powerpc__) || defined(__powerpc64__)
- #define _LIBUNWIND_SUPPORT_FRAME_APIS
- #endif
- 
- #if defined(__i386__) || defined(__x86_64__) ||                                \
--    defined(__ppc__) || defined(__ppc64__) || defined(__powerpc64__) ||        \
-+    defined(__powerpc__) || defined(__powerpc64__) ||                          \
-     (!defined(__APPLE__) && defined(__arm__)) ||                               \
-     (defined(__arm64__) || defined(__aarch64__)) ||                            \
-     defined(__mips__)
---- a/libunwind/src/libunwind.cpp
-+++ b/libunwind/src/libunwind.cpp
-@@ -42,7 +42,7 @@ _LIBUNWIND_HIDDEN int __unw_init_local(unw_cursor_t *cursor,
- # define REGISTER_KIND Registers_x86_64
- #elif defined(__powerpc64__)
- # define REGISTER_KIND Registers_ppc64
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- # define REGISTER_KIND Registers_ppc
- #elif defined(__aarch64__)
- # define REGISTER_KIND Registers_arm64
diff --git a/srcpkgs/llvm12/patches/lldb-musl.patch b/srcpkgs/llvm12/patches/lldb-musl.patch
deleted file mode 100644
index 601c0d138523..000000000000
--- a/srcpkgs/llvm12/patches/lldb-musl.patch
+++ /dev/null
@@ -1,31 +0,0 @@
---- a/lldb/source/Plugins/Process/Linux/Procfs.h
-+++ b/lldb/source/Plugins/Process/Linux/Procfs.h
-@@ -10,21 +10,12 @@
- // sys/procfs.h on Android/Linux for all supported architectures.
- 
- #include <sys/ptrace.h>
-+#include <asm/ptrace.h>
- 
--#ifdef __ANDROID__
--#if defined(__arm64__) || defined(__aarch64__)
--typedef unsigned long elf_greg_t;
--typedef elf_greg_t
--    elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
--typedef struct user_fpsimd_state elf_fpregset_t;
--#ifndef NT_FPREGSET
--#define NT_FPREGSET NT_PRFPREG
--#endif // NT_FPREGSET
--#elif defined(__mips__)
--#ifndef NT_FPREGSET
--#define NT_FPREGSET NT_PRFPREG
--#endif // NT_FPREGSET
--#endif
--#else // __ANDROID__
-+#if !defined(__GLIBC__) && defined(__powerpc__)
-+#define pt_regs musl_pt_regs
-+#include <sys/procfs.h>
-+#undef pt_regs
-+#else
- #include <sys/procfs.h>
--#endif // __ANDROID__
-+#endif
diff --git a/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch b/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch
deleted file mode 100644
index 8e0a9a779d1b..000000000000
--- a/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-commit ba4ede595ff9599232f5dd2b4384c243137b53fc
-Author: Daniel Kolesa <daniel@octaforge.org>
-Date:   Tue Jun 22 23:40:54 2021 +0200
-
-    enable compiler-rt support for ppc32
-
-diff --git a/compiler-rt/cmake/base-config-ix.cmake b/compiler-rt/cmake/base-config-ix.cmake
-index 1edab43..5c0c8a2 100644
---- a/compiler-rt/cmake/base-config-ix.cmake
-+++ b/compiler-rt/cmake/base-config-ix.cmake
-@@ -182,9 +182,7 @@ macro(test_targets)
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc64le")
-       test_target_arch(powerpc64le "" "-m64")
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc")
--      if(CMAKE_SYSTEM_NAME MATCHES "AIX")
--        test_target_arch(powerpc "" "-m32")
--      endif()
-+      test_target_arch(powerpc "" "-m32")
-       test_target_arch(powerpc64 "" "-m64")
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "s390x")
-       test_target_arch(s390x "" "")
diff --git a/srcpkgs/llvm12/template b/srcpkgs/llvm12/template
index 7ce18028e4a3..7b361bbbf5bc 100644
--- a/srcpkgs/llvm12/template
+++ b/srcpkgs/llvm12/template
@@ -1,25 +1,17 @@
 # Template file for 'llvm12'
 pkgname=llvm12
 version=12.0.1
-revision=2
+revision=3
 wrksrc="llvm-project-${version}.src"
 build_wrksrc=llvm
 build_style=cmake
 configure_args="
  -DCMAKE_BUILD_TYPE=Release -Wno-dev
  -DENABLE_LINKER_BUILD_ID=YES
- -DLLDB_USE_SYSTEM_SIX=YES
- -DLIBCXX_CXX_ABI=libcxxabi
- -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
- -DLIBCXXABI_USE_LLVM_UNWINDER=YES
- -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
- -DLIBOMP_ENABLE_SHARED=YES
- -DLIBOMP_INSTALL_ALIASES=NO
  -DLLVM_INCLUDE_DOCS=YES
  -DLLVM_BUILD_DOCS=YES
  -DLLVM_ENABLE_SPHINX=YES
  -DSPHINX_WARNINGS_AS_ERRORS=NO
- -DLLVM_INSTALL_UTILS=YES
  -DLLVM_BUILD_LLVM_DYLIB=YES
  -DLLVM_LINK_LLVM_DYLIB=YES
  -DLLVM_ENABLE_RTTI=YES
@@ -51,87 +43,10 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
-_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
-
-_lldb_enable=yes
-_libomp_enable=no
-
-case "$XBPS_TARGET_MACHINE" in
-	ppc64le*) ;;
-	ppc*|i686*) _lldb_enable=no ;;
-esac
-
-case "$XBPS_TARGET_MACHINE" in
-	x86_64*|aarch64*|ppc64*) _libomp_enable=yes;;
-esac
-
-subpackages="clang-tools-extra"
-
-# must go before clang
-if [ "$_libomp_enable" = "yes" ]; then
-	_enabled_projects+=";openmp"
-	subpackages+=" libomp libomp-devel"
-	# because of cmake nonsense referencing libomptarget.so.*
-	depends+=" libomp>=${version}_${revision}"
-fi
-
-subpackages+=" clang clang-analyzer libclang libclang-cpp
- llvm-libunwind llvm-libunwind-devel libcxx libcxx-devel
- libcxxabi libcxxabi-devel libllvm12"
-
-if [ "$_lldb_enable" = "yes" ]; then
-	# XXX fails to cross compile due to python
-	_enabled_projects+=";lldb"
-	subpackages+=" lldb lldb-devel"
-fi
-
-subpackages+=" lld lld-devel"
-
-configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
-
 post_patch() {
-	if [ "$_lldb_enable" = "yes" ]; then
-		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
-			vsed -i 's|__ptrace_request|int|g' \
-				${wrksrc}/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
-		fi
-		# disable docs for lldb as they fail to generate
-		vsed -i '/add_subdirectory(docs)/d' \
-			${wrksrc}/lldb/CMakeLists.txt
-	fi
-
 	# update config.guess for better platform detection
 	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
 		${wrksrc}/llvm/cmake
-
-	# fix linker failures on some archs
-	vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
-		${wrksrc}/libcxxabi/cmake/config-ix.cmake
-	vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
-		${wrksrc}/libcxxabi/cmake/config-ix.cmake
-
-	# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
-	case "$XBPS_TARGET_MACHINE" in
-		ppc64*) ;;
-		ppc*-musl|i686-musl|mips*-musl)
-			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
-				${wrksrc}/libunwind/src/CMakeLists.txt
-			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
-				${wrksrc}/libcxxabi/src/CMakeLists.txt
-			vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
-			;;
-	esac
-
-	case "$XBPS_TARGET_MACHINE" in
-		x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
-			vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
-				${wrksrc}/compiler-rt/CMakeLists.txt
-			;;
-		arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
-			vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
-				${wrksrc}/compiler-rt/cmake/config-ix.cmake
-			;;
-	esac
 }
 
 pre_configure() {
@@ -158,10 +73,8 @@ pre_configure() {
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
 			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
 		make ${makejobs} -C utils/TableGen
-		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
 		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
-		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
 		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
 		cd ../..
 	fi
@@ -202,218 +115,6 @@ do_install() {
 	if [ "$CROSS_BUILD" ]; then
 		rm -f ${DESTDIR}/usr/bin/llvm-config-host
 	fi
-
-	# Install libcxxabi headers
-	vinstall ${wrksrc}/libcxxabi/include/__cxxabi_config.h 644 usr/include
-	vinstall ${wrksrc}/libcxxabi/include/cxxabi.h 644 usr/include
-
-	# Install libunwind headers
-	vinstall ${wrksrc}/libunwind/include/__libunwind_config.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/libunwind.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/unwind.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/mach-o/compact_unwind_encoding.h \
-		644 usr/include/mach-o
-}
-
-clang-analyzer_package() {
-	pycompile_dirs="usr/share/scan-view"
-	depends="clang-${version}_${revision} python3 perl"
-	short_desc+=" - A source code analysis framework"
-	homepage="https://clang-analyzer.llvm.org/"
-	pkg_install() {
-		vmove usr/share/man/man1/scan-build.1
-		vmove "/usr/bin/scan-*"
-		vmove "/usr/share/scan-*"
-		vmove "/usr/libexec/*analyzer"
-	}
-}
-
-clang-tools-extra_package() {
-	lib32disabled=yes
-	depends="clang-${version}_${revision} python3"
-	short_desc+=" - Extra Clang tools"
-	homepage="https://clang.llvm.org/extra/"
-	pkg_install() {
-		vmove usr/include/clang-tidy
-		vmove usr/bin/clang-apply-replacements
-		vmove usr/bin/clang-query
-		vmove usr/bin/clang-rename
-		vmove usr/bin/clang-tidy
-		vmove usr/bin/diagtool
-		vmove usr/bin/find-all-symbols
-		vmove usr/bin/hmaptool
-		vmove usr/bin/modularize
-		vmove usr/bin/pp-trace
-		vmove usr/bin/sancov
-		vmove "usr/lib/libclangApplyReplacements*"
-		vmove "usr/lib/libclangQuery*"
-		vmove "usr/lib/libclangTidy*"
-		vmove "usr/share/clang/*tidy*"
-		vmove usr/share/doc/clang-tools
-		vmove usr/share/man/man1/extraclangtools.1
-		vmove usr/share/man/man1/diagtool.1
-	}
-}
-
-clang_package() {
-	lib32disabled=yes
-	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
-	 libclang-${version}_${revision}"
-	short_desc+=" - C language family frontend"
-	homepage="https://clang.llvm.org/"
-	pkg_install() {
-		vmove usr/include/clang
-		vmove usr/include/clang-c
-		vmove "usr/bin/*clang*"
-		vmove usr/bin/c-index-test
-		vmove usr/lib/clang
-		vmove usr/lib/cmake/clang
-		vmove "usr/lib/libclang*.a"
-		vmove "usr/lib/libclang*.so"
-		vmove usr/share/clang
-		vmove usr/share/doc/clang
-		vmove usr/share/man/man1/clang.1
-	}
-}
-
-libclang_package() {
-	short_desc+=" - C frontend runtime library"
-	pkg_install() {
-		vmove "usr/lib/libclang.so.*"
-	}
-}
-
-libclang-cpp_package() {
-	short_desc+=" - C frontend runtime library (C++ interface)"
-	pkg_install() {
-		vmove "usr/lib/libclang-cpp.so.*"
-	}
-}
-
-lld_package() {
-	lib32disabled=yes
-	short_desc+=" - linker"
-	homepage="https://lld.llvm.org"
-	pkg_install() {
-		vmove usr/bin/lld*
-		vmove usr/bin/wasm-ld
-		vmove usr/bin/ld.lld*
-		vmove usr/bin/ld64.lld*
-		vmove usr/share/doc/lld
-	}
-}
-
-lld-devel_package() {
-	lib32disabled=yes
-	short_desc+=" - linker - development files"
-	homepage="https://lld.llvm.org"
-	depends="lld>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/include/lld
-		vmove usr/lib/cmake/lld
-		vmove "usr/lib/liblld*a"
-	}
-}
-
-lldb_package() {
-	lib32disabled=yes
-	depends+=" python3-six"
-	short_desc+=" - LLDB debugger"
-	homepage="https://lldb.llvm.org/"
-	pkg_install() {
-		vmove usr/bin/*lldb*
-		vmove usr/lib/liblldb*so.*
-		vmove /usr/lib/python*
-	}
-}
-
-lldb-devel_package() {
-	lib32disabled=yes
-	depends="lldb>=${version}_${revision}"
-	short_desc+=" - LLDB debugger - development files"
-	pkg_install() {
-		vmove usr/include/lldb
-		vmove "usr/lib/liblldb*.so"
-	}
-}
-
-llvm-libunwind_package() {
-	short_desc+=" - libunwind"
-	pkg_install() {
-		vmove "usr/lib/libunwind.so.*"
-	}
-}
-
-llvm-libunwind-devel_package() {
-	short_desc+=" - libunwind - development files"
-	depends="llvm-libunwind>=${version}_${revision}"
-	conflicts="libunwind-devel>=0"
-	pkg_install() {
-		vmove usr/lib/libunwind.so
-		vmove usr/lib/libunwind.a
-		vmove "usr/include/*unwind*"
-		vmove usr/include/mach-o
-		vmove usr/share/doc/libunwind
-	}
-}
-
-libcxxabi_package() {
-	short_desc+=" - low level support for libc++"
-	pkg_install() {
-		vmove "usr/lib/libc++abi.so.*"
-	}
-}
-
-libcxxabi-devel_package() {
-	short_desc+=" - low level support for libc++ - development files"
-	depends="libcxxabi>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/lib/libc++abi.so
-		vmove usr/lib/libc++abi.a
-		vmove "usr/include/*cxxabi*"
-	}
-}
-
-libcxx_package() {
-	short_desc+=" - C++ standard library"
-	pkg_install() {
-		vmove "usr/lib/libc++.so.*"
-	}
-}
-
-libcxx-devel_package() {
-	short_desc+=" - C++ standard library - development files"
-	depends="libcxx>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/lib/libc++.so
-		vmove usr/lib/libc++.a
-		vmove usr/lib/libc++experimental.a
-		vmove usr/include/c++
-		vmove usr/share/doc/libcxx
-	}
-}
-
-libomp_package() {
-	short_desc+=" - Clang OpenMP support library"
-	pkg_install() {
-		vmove usr/lib/libomp.so
-		vmove "usr/lib/libomptarget.rtl.*.so"
-		vmove usr/lib/libarcher.so
-		vmove "usr/lib/libomp*.so.*"
-	}
-}
-
-libomp-devel_package() {
-	short_desc+=" - Clang OpenMP support library - development files"
-	depends="libomp>=${version}_${revision}"
-	pkg_install() {
-		vmove "usr/lib/libomp*.so"
-		vmove "usr/lib/libarcher*"
-		vmove "usr/include/omp*.h"
-		vmove "usr/lib/clang/${version}/include/omp*.h"
-		vmove usr/share/man/man1/llvmopenmp.1
-		vmove usr/share/doc/openmp
-	}
 }
 
 libllvm12_package() {

From e99c9cefdcd892c68de8b38ad2c6c236defaf362 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 14:00:28 +0200
Subject: [PATCH 04/23] New packages: clang12, libclang12, libclang12-cpp,
 lld12, lld12-devel.

---
 common/shlibs                                 |   2 +
 srcpkgs/clang12                               |   1 +
 srcpkgs/libclang12                            |   1 +
 srcpkgs/libclang12-cpp                        |   1 +
 srcpkgs/lld12                                 |   1 +
 srcpkgs/lld12-devel                           |   1 +
 ...clang-001-fix-unwind-chain-inclusion.patch |  44 +++++++
 .../patches/clang-002-add-musl-triples.patch  | 110 ++++++++++++++++++
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 +++
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ++++++++
 srcpkgs/llvm12/template                       |  71 +++++++++++
 11 files changed, 293 insertions(+)
 create mode 120000 srcpkgs/clang12
 create mode 120000 srcpkgs/libclang12
 create mode 120000 srcpkgs/libclang12-cpp
 create mode 120000 srcpkgs/lld12
 create mode 120000 srcpkgs/lld12-devel
 create mode 100644 srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch

diff --git a/common/shlibs b/common/shlibs
index 9180c68d8419..3333740b2881 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -973,6 +973,8 @@ libuchardet.so.0 uchardet-0.0.6_1
 libgtksourceviewmm-3.0.so.0 gtksourceviewmm-3.2.0_1
 libyajl.so.2 yajl-2.0.1_1
 libconfuse.so.2 confuse-3.2.1_1
+libclang.so.12 libclang12-12.0.0_1
+libclang-cpp.so.12 libclang12-cpp-12.0.0_1
 liblldb.so.14 lldb-14.0.3_1
 libclang.so.13 libclang-14.0.3_1
 libclang-cpp.so.14 libclang-cpp-14.0.3_1
diff --git a/srcpkgs/clang12 b/srcpkgs/clang12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/clang12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/libclang12 b/srcpkgs/libclang12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/libclang12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/libclang12-cpp b/srcpkgs/libclang12-cpp
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/libclang12-cpp
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/lld12 b/srcpkgs/lld12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/lld12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/lld12-devel b/srcpkgs/lld12-devel
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/lld12-devel
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
new file mode 100644
index 000000000000..e4eaa7783e7a
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
@@ -0,0 +1,44 @@
+From 352974169f0d2b5da3d5321f588f5e3b5941330e Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe@gmail.com>
+Date: Tue, 8 Sep 2015 22:14:57 +0200
+Subject: [PATCH 2/7] fix unwind chain inclusion
+
+---
+ lib/Headers/unwind.h | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/lib/Headers/unwind.h b/lib/Headers/unwind.h
+index 303d792..44e10cc 100644
+--- a/clang/lib/Headers/unwind.h
++++ b/clang/lib/Headers/unwind.h
+@@ -9,9 +9,6 @@
+ 
+ /* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/
+ 
+-#ifndef __CLANG_UNWIND_H
+-#define __CLANG_UNWIND_H
+-
+ #if defined(__APPLE__) && __has_include_next(<unwind.h>)
+ /* Darwin (from 11.x on) provide an unwind.h. If that's available,
+  * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE,
+@@ -39,6 +36,9 @@
+ # endif
+ #else
+ 
++#ifndef __CLANG_UNWIND_H
++#define __CLANG_UNWIND_H
++
+ #include <stdint.h>
+ 
+ #ifdef __cplusplus
+@@ -322,6 +322,7 @@ _Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *);
+ }
+ #endif
+ 
++#endif /* __CLANG_UNWIND_H */
++
+ #endif
+ 
+-#endif /* __CLANG_UNWIND_H */
+-- 
+2.5.1
diff --git a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
new file mode 100644
index 000000000000..25688d40dbc2
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
@@ -0,0 +1,110 @@
+--- a/clang/lib/Driver/ToolChains/Gnu.cpp
++++ b/clang/lib/Driver/ToolChains/Gnu.cpp
+@@ -2086,7 +2086,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
+                                              "armv7hl-redhat-linux-gnueabi",
+                                              "armv6hl-suse-linux-gnueabi",
+-                                             "armv7hl-suse-linux-gnueabi"};
++                                             "armv7hl-suse-linux-gnueabi",
++                                             "armv7l-linux-gnueabihf"};
+   static const char *const ARMebLibDirs[] = {"/lib"};
+   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
+                                              "armeb-linux-androideabi"};
+@@ -2153,8 +2154,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
+   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
+   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
+-                                             "powerpcle-unknown-linux-gnu",
+-                                             "powerpcle-linux-musl"};
++                                             "powerpcle-unknown-linux-gnu"};
+ 
+   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
+   static const char *const PPC64Triples[] = {
+@@ -2235,6 +2235,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+     return;
+   }
+ 
++  if (TargetTriple.isMusl()) {
++    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
++    static const char *const ARMHFMuslTriples[] = {
++        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
++    };
++    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
++    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
++    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
++    static const char *const MIPSMuslTriples[] = {
++        "mips-linux-musl", "mipsel-linux-musl",
++        "mipsel-linux-muslhf", "mips-linux-muslhf"
++    };
++    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
++    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
++    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
++    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
++
++    switch (TargetTriple.getArch()) {
++    case llvm::Triple::aarch64:
++      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      break;
++    case llvm::Triple::arm:
++      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
++      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
++        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
++      } else {
++        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
++      }
++      break;
++    case llvm::Triple::x86_64:
++      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      break;
++    case llvm::Triple::x86:
++      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      break;
++    case llvm::Triple::mips:
++      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
++      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
++      break;
++    case llvm::Triple::ppc:
++      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      break;
++    case llvm::Triple::ppcle:
++      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      break;
++    case llvm::Triple::ppc64:
++      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      break;
++    case llvm::Triple::ppc64le:
++      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      break;
++    default:
++      break;
++    }
++    TripleAliases.push_back(TargetTriple.str());
++    if (TargetTriple.str() != BiarchTriple.str())
++      BiarchTripleAliases.push_back(BiarchTriple.str());
++    return;
++  }
++
+   // Android targets should not use GNU/Linux tools or libraries.
+   if (TargetTriple.isAndroid()) {
+     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
new file mode 100644
index 000000000000..4ad6412d1e6c
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
@@ -0,0 +1,13 @@
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -504,10 +504,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+     Loader = "ld.so.1";
+     break;
+   case llvm::Triple::ppc64:
+-    LibDir = "lib64";
+-    Loader =
+-        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
+-    break;
+   case llvm::Triple::ppc64le:
+     LibDir = "lib64";
+     Loader =
diff --git a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
new file mode 100644
index 000000000000..21fc8003c5f1
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
@@ -0,0 +1,48 @@
+--- a/clang/lib/Basic/Targets/PPC.h
++++ b/clang/lib/Basic/Targets/PPC.h
+@@ -415,11 +415,10 @@ public:
+       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
+     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
+       DataLayout = "e-m:e-i64:64-n32:64";
+-      ABI = "elfv2";
+     } else {
+       DataLayout = "E-m:e-i64:64-n32:64";
+-      ABI = "elfv1";
+     }
++    ABI = "elfv2";
+ 
+     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
+       LongDoubleWidth = LongDoubleAlign = 64;
+--- a/clang/lib/CodeGen/TargetInfo.cpp
++++ b/clang/lib/CodeGen/TargetInfo.cpp
+@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
+       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
+ 
+     if (Triple.isOSBinFormatELF()) {
+-      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
+-      if (getTarget().getABI() == "elfv2")
+-        Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      if (getTarget().getABI() == "elfv1")
++        Kind = PPC64_SVR4_ABIInfo::ELFv1;
+       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
+ 
+       return SetCGInfo(
+--- a/clang/lib/Driver/ToolChains/Clang.cpp
++++ b/clang/lib/Driver/ToolChains/Clang.cpp
+@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
+   const llvm::Triple &T = getToolChain().getTriple();
+   if (T.isOSBinFormatELF()) {
+     switch (getToolChain().getArch()) {
+-    case llvm::Triple::ppc64: {
+-      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
+-          T.isOSOpenBSD() || T.isMusl())
+-        ABIName = "elfv2";
+-      else
+-        ABIName = "elfv1";
+-      break;
+-    }
++    case llvm::Triple::ppc64:
+     case llvm::Triple::ppc64le:
+       ABIName = "elfv2";
+       break;
diff --git a/srcpkgs/llvm12/template b/srcpkgs/llvm12/template
index 7b361bbbf5bc..274b57183654 100644
--- a/srcpkgs/llvm12/template
+++ b/srcpkgs/llvm12/template
@@ -43,6 +43,12 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
+_enabled_projects="clang;lld"
+
+subpackages+=" clang12 libclang12 libclang12-cpp libllvm12 lld12 lld12-devel"
+
+configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+
 post_patch() {
 	# update config.guess for better platform detection
 	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
@@ -73,8 +79,10 @@ pre_configure() {
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
 			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
 		make ${makejobs} -C utils/TableGen
+		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
 		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
+		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
 		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
 		cd ../..
 	fi
@@ -117,6 +125,69 @@ do_install() {
 	fi
 }
 
+clang12_package() {
+	conflicts="clang"
+	lib32disabled=yes
+	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
+	 libclang12-${version}_${revision}"
+	short_desc+=" - C language family frontend"
+	homepage="https://clang.llvm.org/"
+	pkg_install() {
+		vmove usr/include/clang
+		vmove usr/include/clang-c
+		vmove "usr/bin/*clang*"
+		vmove usr/bin/c-index-test
+		vmove usr/lib/clang
+		vmove usr/lib/cmake/clang
+		vmove "usr/lib/libclang*.a"
+		vmove "usr/lib/libclang*.so"
+		vmove usr/share/clang
+		vmove usr/share/doc/clang
+		vmove usr/share/man/man1/clang.1
+	}
+}
+
+libclang12_package() {
+	short_desc+=" - C frontend runtime library"
+	pkg_install() {
+		vmove "usr/lib/libclang.so.*"
+	}
+}
+
+libclang12-cpp_package() {
+	short_desc+=" - C frontend runtime library (C++ interface)"
+	pkg_install() {
+		vmove "usr/lib/libclang-cpp.so.*"
+	}
+}
+
+lld12_package() {
+	conflicts="lld"
+	lib32disabled=yes
+	short_desc+=" - linker"
+	homepage="https://lld.llvm.org"
+	pkg_install() {
+		vmove usr/bin/lld*
+		vmove usr/bin/wasm-ld
+		vmove usr/bin/ld.lld*
+		vmove usr/bin/ld64.lld*
+		vmove usr/share/doc/lld
+	}
+}
+
+lld12-devel_package() {
+	conflicts="lld-devel"
+	lib32disabled=yes
+	short_desc+=" - linker - development files"
+	homepage="https://lld.llvm.org"
+	depends="lld12>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include/lld
+		vmove usr/lib/cmake/lld
+		vmove "usr/lib/liblld*a"
+	}
+}
+
 libllvm12_package() {
 	short_desc+=" - runtime library"
 	pkg_install() {

From a70cee58a111b3d8949fec8e4c5fb912965d6e52 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 05/23] chromium: update for llvm14

---
 srcpkgs/chromium/template | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/srcpkgs/chromium/template b/srcpkgs/chromium/template
index fe400b74c129..f15f2a313aa9 100644
--- a/srcpkgs/chromium/template
+++ b/srcpkgs/chromium/template
@@ -2,7 +2,7 @@
 pkgname=chromium
 # See https://chromiumdash.appspot.com/releases?platform=Linux for the latest version
 version=102.0.5005.61
-revision=1
+revision=2
 archs="i686* x86_64* aarch64* armv7l* ppc64le*"
 short_desc="Google's attempt at creating a safer, faster, and more stable browser"
 maintainer="Duncaen <duncaen@voidlinux.org>"
@@ -20,7 +20,7 @@ desc_option_debug="Build with debug symbols"
 desc_option_js_optimize="Optimize the JS used for Chromium's UI"
 desc_option_pipewire="Enable support for screen sharing for WebRTC via PipeWire"
 
-hostmakedepends="$(vopt_if clang "clang lld llvm12") python python3 pkgconf perl gperf bison ninja nodejs hwids
+hostmakedepends="$(vopt_if clang "clang lld llvm14") python python3 pkgconf perl gperf bison ninja nodejs hwids
  libatomic-devel libevent-devel libglib-devel $(vopt_if js_optimize openjdk) wayland-devel libepoxy-devel git"
 makedepends="libpng-devel gtk+-devel gtk+3-devel nss-devel pciutils-devel
  libXi-devel libgcrypt-devel libgnome-keyring-devel cups-devel elfutils-devel
@@ -266,12 +266,6 @@ do_configure() {
 		'disable_fieldtrial_testing_config=true'
 
 		'is_official_build=true'
-
-		# segfaults with llvm-12.0.1
-		'is_cfi=false'
-		'use_thin_lto=false'
-		'use_cfi_icall=false'
-		'chrome_pgo_phase=0'
 	)
 
 	if [ "$CROSS_BUILD" ]; then

From 2dd543769b78e84fc63c13fc68e85af4328227d7 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 06/23] ghdl: update for llvm14

---
 srcpkgs/ghdl/patches/{llvm12.patch => llvm.patch} | 2 ++
 srcpkgs/ghdl/template                             | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)
 rename srcpkgs/ghdl/patches/{llvm12.patch => llvm.patch} (82%)

diff --git a/srcpkgs/ghdl/patches/llvm12.patch b/srcpkgs/ghdl/patches/llvm.patch
similarity index 82%
rename from srcpkgs/ghdl/patches/llvm12.patch
rename to srcpkgs/ghdl/patches/llvm.patch
index 8d2f76bfda06..9201816ae053 100644
--- a/srcpkgs/ghdl/patches/llvm12.patch
+++ b/srcpkgs/ghdl/patches/llvm.patch
@@ -7,6 +7,8 @@ index c1c1a6d..dad7c38 100755
         check_version 10.0 $llvm_version ||
         check_version 11.0 $llvm_version ||
 +       check_version 12.0 $llvm_version ||
++       check_version 13.0 $llvm_version ||
++       check_version 14.0 $llvm_version ||
         false; then
      echo "Debugging is enabled with llvm $llvm_version"
    else
diff --git a/srcpkgs/ghdl/template b/srcpkgs/ghdl/template
index e756d8c3cd87..9ca1169b22bd 100644
--- a/srcpkgs/ghdl/template
+++ b/srcpkgs/ghdl/template
@@ -7,7 +7,7 @@
 pkgname=ghdl
 reverts="20181129_1"
 version=1.0.0
-revision=1
+revision=2
 build_style=configure
 configure_args="--prefix=/usr --srcdir=.. --incdir=lib/ghdl/include"
 makedepends="zlib-devel"

From c13e3a7c3f454636eee71ed50c81db3e9a017a94 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 14:07:14 +0200
Subject: [PATCH 07/23] zig: update for llvm14

---
 srcpkgs/zig/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/zig/template b/srcpkgs/zig/template
index 728c5a64e9df..c175de62c5f7 100644
--- a/srcpkgs/zig/template
+++ b/srcpkgs/zig/template
@@ -5,7 +5,7 @@ revision=2
 archs="x86_64* aarch64*"
 build_style=cmake
 make_cmd=make
-makedepends="clang llvm12 lld-devel"
+makedepends="clang12 llvm12 lld12-devel"
 short_desc="Programming language designed for robustness, optimality, and clarity"
 maintainer="Isaac Freund <mail@isaacfreund.com>"
 license="MIT"

From 0e5b676c5fd0d717d0ce38589593a153699d597a Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 08/23] qt5: rebuild for llvm14

---
 srcpkgs/qt5/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index ee788fad2019..25f15583a42d 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -3,7 +3,7 @@ pkgname=qt5
 version=5.15.3+20220222
 # commit fcca82ca40a5d8a02a4ddd90846d070f2c58cfad
 # base repo: https://invent.kde.org/qt/qt/qt5
-revision=3
+revision=4
 build_style=meta
 hostmakedepends="cmake clang flex perl glib-devel pkg-config
  python re2c ruby which"

From 5651b1e785b0686d05d289168c300108ecea7af3 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 09/23] shiboken2: rebuild for llvm14

---
 srcpkgs/shiboken2/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/shiboken2/template b/srcpkgs/shiboken2/template
index b56613229c13..ab9d2c4cb8f9 100644
--- a/srcpkgs/shiboken2/template
+++ b/srcpkgs/shiboken2/template
@@ -1,7 +1,7 @@
 # Template file for 'shiboken2'
 pkgname=shiboken2
 version=5.15.2
-revision=4
+revision=5
 _pkgname="pyside-setup-opensource-src-${version}"
 wrksrc="${_pkgname/%5.14.2.1/5.14.2}"
 build_wrksrc="sources/shiboken2"

From 07e4e9395b5ebf9e39ab41936a839524903b9ded Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 10/23] gnome-builder: rebuild for llvm14

---
 srcpkgs/gnome-builder/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/gnome-builder/template b/srcpkgs/gnome-builder/template
index 93559b21774f..5a5a51893ae8 100644
--- a/srcpkgs/gnome-builder/template
+++ b/srcpkgs/gnome-builder/template
@@ -1,7 +1,7 @@
 # Template file for 'gnome-builder'
 pkgname=gnome-builder
 version=41.3
-revision=1
+revision=2
 build_style=meson
 build_helper=qemu
 configure_args="-Dhelp=true -Dnetwork_tests=false"

From ade0ae485f15eb4b19874341847e3dc3d37eb91a Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 11/23] bcc: rebuild for llvm14

---
 srcpkgs/bcc/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/bcc/template b/srcpkgs/bcc/template
index 54509b63d5a7..2cfa0a2977d0 100644
--- a/srcpkgs/bcc/template
+++ b/srcpkgs/bcc/template
@@ -1,7 +1,7 @@
 # Template file for 'bcc'
 pkgname=bcc
 version=0.24.0
-revision=1
+revision=2
 wrksrc="bcc"
 build_style=cmake
 configure_args="-DREVISION=${version} -DENABLE_LLVM_SHARED=1"

From a6f4ecec21da86d7d5d7a071c90ba101850b8450 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 12/23] mesa: rebuild for llvm14

---
 srcpkgs/mesa/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/mesa/template b/srcpkgs/mesa/template
index c90500de7416..8f08262fb135 100644
--- a/srcpkgs/mesa/template
+++ b/srcpkgs/mesa/template
@@ -1,7 +1,7 @@
 # Template file for 'mesa'
 pkgname=mesa
 version=21.3.7
-revision=1
+revision=2
 build_style=meson
 configure_args="-Dglvnd=true -Dshared-glapi=enabled -Dgbm=enabled -Degl=enabled
  -Dosmesa=true -Dgles1=enabled -Dgles2=enabled -Dglx=dri -Ddri3=enabled

From 4d976a1bd77e192793126b88b600a056c6a348f5 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 13/23] juCi++: rebuild for llvm14

---
 srcpkgs/juCi++/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/juCi++/template b/srcpkgs/juCi++/template
index 1a7604b44a00..5103324dec20 100644
--- a/srcpkgs/juCi++/template
+++ b/srcpkgs/juCi++/template
@@ -1,7 +1,7 @@
 # Template file for 'juCi++'
 pkgname=juCi++
 version=1.6.2
-revision=2
+revision=3
 _libclangmm_commit="b342f4dd6de4fe509a692a4b4fcfc7e24aae9590"
 _tiny_commit="c9c8bf810ddad8cd17882b9a9ee628a690e779f5"
 wrksrc="jucipp-v${version}"

From 31193e7960efbd65ccd071d4b7020b0f1c482792 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 14/23] codelite: rebuild for llvm14

---
 srcpkgs/codelite/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/codelite/template b/srcpkgs/codelite/template
index 3a993a2c0cfb..24e2c879dd45 100644
--- a/srcpkgs/codelite/template
+++ b/srcpkgs/codelite/template
@@ -1,7 +1,7 @@
 # Template file for 'codelite'
 pkgname=codelite
 version=15.0.6
-revision=1
+revision=2
 build_style=cmake
 build_helper=cmake-wxWidgets-gtk3
 configure_args="-DWITH_PCH=0 -DWITH_WX_CONFIG=wx-config-gtk3

From bd27be5e5bda4827b5d40228e239ca0fff8a6577 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 15/23] ccls: rebuild for llvm14

---
 srcpkgs/ccls/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/ccls/template b/srcpkgs/ccls/template
index fbb7c6847bc1..40aba3b55bfe 100644
--- a/srcpkgs/ccls/template
+++ b/srcpkgs/ccls/template
@@ -1,7 +1,7 @@
 # Template file for 'ccls'
 pkgname=ccls
 version=0.20210330
-revision=2
+revision=3
 build_style=cmake
 hostmakedepends="clang-tools-extra"
 makedepends="llvm ncurses-devel rapidjson zlib-devel clang-tools-extra"

From f4d008c934abd6469e119666016233229ff2da6d Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 16/23] clazy: rebuild for llvm14

---
 srcpkgs/clazy/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/clazy/template b/srcpkgs/clazy/template
index 11f3bab55aef..f81de08ab836 100644
--- a/srcpkgs/clazy/template
+++ b/srcpkgs/clazy/template
@@ -1,7 +1,7 @@
 # Template file for 'clazy'
 pkgname=clazy
 version=1.11
-revision=1
+revision=2
 build_style=cmake
 build_helper=qemu
 hostmakedepends="llvm"

From f96e2e27a6891f54bb2221c6ac9da6c4e14c680e Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 17/23] bpftrace: rebuild for llvm14

---
 srcpkgs/bpftrace/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/bpftrace/template b/srcpkgs/bpftrace/template
index 190cebb8e3bc..a13224b82b08 100644
--- a/srcpkgs/bpftrace/template
+++ b/srcpkgs/bpftrace/template
@@ -1,7 +1,7 @@
 # Template file for 'bpftrace'
 pkgname=bpftrace
 version=0.15.0
-revision=1
+revision=2
 archs="x86_64* aarch64* ppc64*"
 build_style=cmake
 configure_args="-DBUILD_TESTING=OFF"  # needs root to run

From 201f7dbcb96dc3989cba70f37562b0fb90adf292 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 18/23] rtags: rebuild for llvm14

---
 srcpkgs/rtags/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/rtags/template b/srcpkgs/rtags/template
index b496a1b0e721..9b161e690d76 100644
--- a/srcpkgs/rtags/template
+++ b/srcpkgs/rtags/template
@@ -1,7 +1,7 @@
 # Template file for 'rtags'
 pkgname=rtags
 version=2.38
-revision=5
+revision=6
 build_style=cmake
 # Don't run tests in do_install, please.
 configure_args="-DSKIP_CTEST=TRUE"

From 838f70f779a4d2128f49414bf03a7bb9d16155d2 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:07:19 +0200
Subject: [PATCH 19/23] beignet: remove package

---
 srcpkgs/beignet/patches/cl_uint.patch         |  22 -
 ...419a0008e38ef2d9d255d9e9c74e9fba084b.patch | 134 ---
 srcpkgs/beignet/patches/llvm06.patch          |  33 -
 srcpkgs/beignet/patches/llvm08.patch          |  56 --
 srcpkgs/beignet/patches/llvm09.patch          | 111 ---
 srcpkgs/beignet/patches/llvm10.patch          | 347 -------
 srcpkgs/beignet/patches/llvm11.patch          | 937 ------------------
 srcpkgs/beignet/patches/llvm12.patch          | 115 ---
 srcpkgs/beignet/patches/musl.patch            |  11 -
 srcpkgs/beignet/template                      |  22 -
 srcpkgs/beignet/update                        |   1 -
 srcpkgs/removed-packages/template             |   3 +-
 12 files changed, 2 insertions(+), 1790 deletions(-)
 delete mode 100644 srcpkgs/beignet/patches/cl_uint.patch
 delete mode 100644 srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm06.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm08.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm09.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm10.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm11.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm12.patch
 delete mode 100644 srcpkgs/beignet/patches/musl.patch
 delete mode 100644 srcpkgs/beignet/template
 delete mode 100644 srcpkgs/beignet/update

diff --git a/srcpkgs/beignet/patches/cl_uint.patch b/srcpkgs/beignet/patches/cl_uint.patch
deleted file mode 100644
index 86ba00f04e95..000000000000
--- a/srcpkgs/beignet/patches/cl_uint.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/src/cl_api_kernel.c	2017-09-22 10:05:22.000000000 +0200
-+++ b/src/cl_api_kernel.c	2020-03-24 18:27:40.186485887 +0100
-@@ -151,7 +151,7 @@
-         fixed_local_sz[0] = 16;
-         fixed_local_sz[1] = 1;
-       } else {
--        uint j, maxDimSize = 64 /* from 64? */, maxGroupSize = 256; //MAX_WORK_GROUP_SIZE may too large
-+        cl_uint j, maxDimSize = 64 /* from 64? */, maxGroupSize = 256; //MAX_WORK_GROUP_SIZE may too large
-         size_t realGroupSize = 1;
-         for (i = 0; i < work_dim; i++) {
-           for (j = maxDimSize; j > 1; j--) {
---- a/src/cl_enqueue.c	2017-09-22 10:05:22.000000000 +0200
-+++ b/src/cl_enqueue.c	2020-03-24 18:30:12.031479833 +0100
-@@ -494,7 +494,7 @@
- cl_int cl_enqueue_svm_free(enqueue_data *data, cl_int status) {
-   int i;
-   void **pointers = data->pointers;
--  uint num_svm_ptrs = data->size;
-+  cl_uint num_svm_ptrs = data->size;
-   cl_int err = CL_SUCCESS;
- 
-   if (status != CL_COMPLETE)
diff --git a/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch b/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
deleted file mode 100644
index 8de9e6e2f093..000000000000
--- a/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
+++ /dev/null
@@ -1,134 +0,0 @@
-From e1b2419a0008e38ef2d9d255d9e9c74e9fba084b Mon Sep 17 00:00:00 2001
-From: "Rebecca N. Palmer" <rebecca_palmer@zoho.com>
-Date: Sat, 21 Jul 2018 20:05:54 +0100
-Subject: Add preliminary LLVM 7 support
-
-This is preliminary because LLVM 7 has not been released yet:
-it was tested with the snapshot from Debian experimental (svn336894).
-
-1.Change linking order, as clangCodeGen now links to clangFrontend
-2.Pass references not pointers to WriteBitcodeToFile and CloneModule
-3.Add the headers that LoopSimplifyID, LCSSAID and
-some create*Pass have moved to
-4.Define our DEBUG whether or not we just undefined LLVM's
-(theirs is now LLVM_DEBUG, but we never actually use it)
-
-Signed-off-by: Rebecca N. Palmer <rebecca_palmer@zoho.com>
-Reviewed-by: Yang Rong <rong.r.yang@intel.com>
----
- CMake/FindLLVM.cmake                     | 2 +-
- backend/src/backend/gen_program.cpp      | 8 ++++++++
- backend/src/backend/program.cpp          | 4 ++++
- backend/src/llvm/ExpandLargeIntegers.cpp | 2 +-
- backend/src/llvm/llvm_bitcode_link.cpp   | 4 ++++
- backend/src/llvm/llvm_includes.hpp       | 4 ++++
- 6 files changed, 22 insertions(+), 2 deletions(-)
-
-diff --git a/CMake/FindLLVM.cmake b/CMake/FindLLVM.cmake
-index 5457f24..f882589 100644
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -113,10 +113,10 @@ macro(add_one_lib name)
- endmacro()
- 
- #Assume clang lib path same as llvm lib path
-+add_one_lib("clangCodeGen")
- add_one_lib("clangFrontend")
- add_one_lib("clangSerialization")
- add_one_lib("clangDriver")
--add_one_lib("clangCodeGen")
- add_one_lib("clangSema")
- add_one_lib("clangStaticAnalyzerFrontend")
- add_one_lib("clangStaticAnalyzerCheckers")
-diff --git a/backend/src/backend/gen_program.cpp b/backend/src/backend/gen_program.cpp
-index 274c99c..4159234 100644
---- a/backend/src/backend/gen_program.cpp
-+++ b/backend/src/backend/gen_program.cpp
-@@ -454,7 +454,11 @@ namespace gbe {
- #ifdef GBE_COMPILER_AVAILABLE
-       std::string str;
-       llvm::raw_string_ostream OS(str);
-+#if LLVM_VERSION_MAJOR >= 7
-+      llvm::WriteBitcodeToFile(*((llvm::Module*)prog->module), OS);
-+#else
-       llvm::WriteBitcodeToFile((llvm::Module*)prog->module, OS);
-+#endif
-       std::string& bin_str = OS.str();
-       int llsz = bin_str.size();
-       *binary = (char *)malloc(sizeof(char) * (llsz+1) );
-@@ -545,7 +549,11 @@ namespace gbe {
-                                     &modRef);
-         src = llvm::unwrap(modRef);
-       }
-+#if LLVM_VERSION_MAJOR >= 7
-+      llvm::Module* clone = llvm::CloneModule(*src).release();
-+#else
-       llvm::Module* clone = llvm::CloneModule(src).release();
-+#endif
-       if (LLVMLinkModules2(wrap(dst), wrap(clone))) {
- #elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-       if (LLVMLinkModules(wrap(dst), wrap(src), LLVMLinkerPreserveSource_Removed, &errMsg)) {
-diff --git a/backend/src/backend/program.cpp b/backend/src/backend/program.cpp
-index c37c595..b36f7b4 100644
---- a/backend/src/backend/program.cpp
-+++ b/backend/src/backend/program.cpp
-@@ -794,7 +794,11 @@ namespace gbe {
-       llvm::raw_fd_ostream ostream (dumpSPIRBinaryName.c_str(),
-                                     err, llvm::sys::fs::F_None);
-       if (!err)
-+#if LLVM_VERSION_MAJOR<7
-         llvm::WriteBitcodeToFile(*out_module, ostream);
-+#else
-+        llvm::WriteBitcodeToFile(**out_module, ostream);
-+#endif
-     }
- #endif
-     return true;
-diff --git a/backend/src/llvm/ExpandLargeIntegers.cpp b/backend/src/llvm/ExpandLargeIntegers.cpp
-index 8515dc1..4aec44e 100644
---- a/backend/src/llvm/ExpandLargeIntegers.cpp
-+++ b/backend/src/llvm/ExpandLargeIntegers.cpp
-@@ -99,8 +99,8 @@ using namespace llvm;
- 
- #ifdef DEBUG
-   #undef DEBUG
--  #define DEBUG(...)
- #endif
-+#define DEBUG(...)
- // Break instructions up into no larger than 64-bit chunks.
- static const unsigned kChunkBits = 64;
- static const unsigned kChunkBytes = kChunkBits / CHAR_BIT;
-diff --git a/backend/src/llvm/llvm_bitcode_link.cpp b/backend/src/llvm/llvm_bitcode_link.cpp
-index ef56e4c..4c3e20e 100644
---- a/backend/src/llvm/llvm_bitcode_link.cpp
-+++ b/backend/src/llvm/llvm_bitcode_link.cpp
-@@ -340,7 +340,11 @@ namespace gbe
-     /* We use beignet's bitcode as dst because it will have a lot of
-        lazy functions which will not be loaded. */
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 39
-+#if LLVM_VERSION_MAJOR >= 7
-+    llvm::Module * linked_module = llvm::CloneModule(*(llvm::Module*)mod).release();
-+#else
-     llvm::Module * linked_module = llvm::CloneModule((llvm::Module*)mod).release();
-+#endif
-     if(LLVMLinkModules2(wrap(clonedLib), wrap(linked_module))) {
- #else
-     char* errorMsg;
-diff --git a/backend/src/llvm/llvm_includes.hpp b/backend/src/llvm/llvm_includes.hpp
-index 184553a..ffccf02 100644
---- a/backend/src/llvm/llvm_includes.hpp
-+++ b/backend/src/llvm/llvm_includes.hpp
-@@ -89,6 +89,10 @@
- #include "llvm/CodeGen/IntrinsicLowering.h"
- 
- #include "llvm/Transforms/Scalar.h"
-+#if LLVM_VERSION_MAJOR >= 7
-+#include "llvm/Transforms/Utils.h"
-+#include "llvm/Transforms/InstCombine/InstCombine.h"
-+#endif
- #include "llvm/MC/MCAsmInfo.h"
- #include "llvm/MC/MCContext.h"
- #include "llvm/MC/MCInstrInfo.h"
--- 
-cgit v1.1
-
diff --git a/srcpkgs/beignet/patches/llvm06.patch b/srcpkgs/beignet/patches/llvm06.patch
deleted file mode 100644
index 3389e66c82df..000000000000
--- a/srcpkgs/beignet/patches/llvm06.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-Source: Arch Linux
-Upstream: unknown
-Reason: fixes llvm6 compilation
-
---- a/backend/src/llvm/llvm_to_gen.cpp	2017-10-24 09:04:48.000000000 +0300
-+++ b/backend/src/llvm/llvm_to_gen.cpp	2018-03-16 16:08:54.669963824 +0200
-@@ -322,7 +322,11 @@ namespace gbe
-     DataLayout DL(&mod);
-     
-     gbeDiagnosticContext dc;
-+#if LLVM_VERSION_MAJOR >= 6
-+    mod.getContext().setDiagnosticHandlerCallBack(&gbeDiagnosticHandler,&dc);
-+#else
-     mod.getContext().setDiagnosticHandler(&gbeDiagnosticHandler,&dc);
-+#endif
- 
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-     mod.setDataLayout(DL);
---- a/backend/src/llvm/llvm_unroll.cpp	2017-10-24 09:04:48.000000000 +0300
-+++ b/backend/src/llvm/llvm_unroll.cpp	2018-03-16 16:09:47.736403557 +0200
-@@ -205,7 +205,9 @@ namespace gbe {
-           if (parentTripCount != 0 && currTripCount * parentTripCount > 32) {
-             //Don't change the unrollID if doesn't force unroll.
-             //setUnrollID(parentL, false);
--#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-+#if LLVM_VERSION_MAJOR >= 6
-+            loopInfo.erase(parentL);
-+#elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-             loopInfo.markAsRemoved(parentL);
- #else
-             LPM.deleteLoopFromQueue(parentL);
-Only in Beignet-1.3.2-Source: build
-
diff --git a/srcpkgs/beignet/patches/llvm08.patch b/srcpkgs/beignet/patches/llvm08.patch
deleted file mode 100644
index a0c5e7a7c4f7..000000000000
--- a/srcpkgs/beignet/patches/llvm08.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 75c152599a7c1739e6dadcdb9b377acf7e44d9cf Mon Sep 17 00:00:00 2001
-From: Jan Beich <jbeich@FreeBSD.org>
-Date: Wed, 30 Jan 2019 12:42:34 +0000
-Subject: [PATCH] lang/beignet: unbreak with llvm80
-
-Regressed by https://github.com/llvm/llvm-project/commit/721d95713a9e
-
-unable to load /usr/local/lib/beignet//libgbeinterp.so which is part of the driver, please check!
-ld-elf.so.1: /usr/local/lib/beignet//libgbeinterp.so: Undefined symbol "_ZN4llvm24DisableABIBreakingChecksE"
-
-Regressed by https://github.com/llvm/llvm-project/commit/4a2d58e16acc
-
-backend/src/llvm/llvm_gen_backend.cpp:3076:5: error:
-      unknown type name 'TerminatorInst'
-    TerminatorInst *term = bb->getTerminator();
-    ^
-backend/src/llvm/llvm_gen_backend.cpp:3083:5: error:
-      unknown type name 'TerminatorInst'
-    TerminatorInst *term = bb->getTerminator();
-    ^
-
---- a/backend/src/CMakeLists.txt	2017-09-22 08:05:22 UTC
-+++ b/backend/src/CMakeLists.txt
-@@ -168,6 +168,7 @@ add_dependencies(gbe beignet_bitcode)
- endif (NOT (USE_STANDALONE_GBE_COMPILER STREQUAL "true"))
- 
- add_library(gbeinterp SHARED gbe_bin_interpreter.cpp)
-+target_link_libraries(gbeinterp ${LLVM_MODULE_LIBS})
- 
- if (LLVM_VERSION_NODOT VERSION_EQUAL 34)
-   find_library(TERMINFO NAMES tinfo ncurses)
---- a/backend/src/llvm/llvm_gen_backend.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -3073,14 +3073,22 @@ namespace gbe
- 
- 
-   static unsigned getChildNo(BasicBlock *bb) {
-+#if LLVM_VERSION_MAJOR < 8
-     TerminatorInst *term = bb->getTerminator();
-+#else
-+    Instruction *term = bb->getTerminator();
-+#endif
-     return term->getNumSuccessors();
-   }
- 
-   // return NULL if index out-range of children number
-   static BasicBlock *getChildPossible(BasicBlock *bb, unsigned index) {
- 
-+#if LLVM_VERSION_MAJOR < 8
-     TerminatorInst *term = bb->getTerminator();
-+#else
-+    Instruction *term = bb->getTerminator();
-+#endif
-     unsigned childNo = term->getNumSuccessors();
-     BasicBlock *child = NULL;
-     if(index < childNo) {
diff --git a/srcpkgs/beignet/patches/llvm09.patch b/srcpkgs/beignet/patches/llvm09.patch
deleted file mode 100644
index acaeceabb6dd..000000000000
--- a/srcpkgs/beignet/patches/llvm09.patch
+++ /dev/null
@@ -1,111 +0,0 @@
-Source: FreeBSD + q66
-
-Mostly FreeBSD other than FindLLVM.cmake changes.
-Linking against clang-cpp does not work for us.
-
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -140,6 +140,7 @@ add_one_lib("clangStaticAnalyzerCore")
- add_one_lib("clangAnalysis")
- add_one_lib("clangEdit")
- add_one_lib("clangAST")
-+add_one_lib("clangASTMatchers")
- add_one_lib("clangParse")
- add_one_lib("clangSema")
- add_one_lib("clangLex")
---- a/backend/src/llvm/llvm_intrinsic_lowering.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_intrinsic_lowering.cpp
-@@ -77,7 +77,11 @@ namespace gbe {
-         std::vector<Type *> ParamTys;
-         for (Value** I = ArgBegin; I != ArgEnd; ++I)
-           ParamTys.push_back((*I)->getType());
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+        FunctionCallee FCache = M->getOrInsertFunction(NewFn,
-+#else
-         Constant* FCache = M->getOrInsertFunction(NewFn,
-+#endif
-                                         FunctionType::get(RetTy, ParamTys, false));
- 
-         IRBuilder<> Builder(CI->getParent(), BasicBlock::iterator(CI));
---- a/backend/src/llvm/llvm_sampler_fix.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp
-@@ -82,7 +82,11 @@ namespace gbe {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-           Module *M = I->getParent()->getParent()->getParent();
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+          FunctionCallee samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#endif
- #else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType(), nullptr);
- #endif
-@@ -124,7 +128,11 @@ namespace gbe {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-           Module *M = I->getParent()->getParent()->getParent();
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+          FunctionCallee samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#endif
- #else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType(), nullptr);
- #endif
---- a/backend/src/llvm/llvm_profiling.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_profiling.cpp
-@@ -163,10 +163,18 @@ namespace gbe
-       // __gen_ocl_store_timestamp(int nth, int type);
-       Value *Args[2] = {ConstantInt::get(intTy, pointNum++), ConstantInt::get(intTy, profilingType)};
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+      builder->CreateCall(module->getOrInsertFunction(
-+#else
-       builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-+#endif
-               "__gen_ocl_calc_timestamp", Type::getVoidTy(module->getContext()),
-               IntegerType::getInt32Ty(module->getContext()),
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+              IntegerType::getInt32Ty(module->getContext())),
-+#else
-               IntegerType::getInt32Ty(module->getContext()))),
-+#endif
-               ArrayRef<Value*>(Args));
- #else
-       builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-@@ -185,10 +193,18 @@ namespace gbe
-     Value *Args2[2] = {profilingBuf, ConstantInt::get(intTy, profilingType)};
- 
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+    builder->CreateCall(module->getOrInsertFunction(
-+#else
-     builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-+#endif
-             "__gen_ocl_store_profiling", Type::getVoidTy(module->getContext()),
-             ptrTy,
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+            IntegerType::getInt32Ty(module->getContext())),
-+#else
-             IntegerType::getInt32Ty(module->getContext()))),
-+#endif
-             ArrayRef<Value*>(Args2));
- #else
-     builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
---- a/backend/src/llvm/llvm_device_enqueue.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_device_enqueue.cpp
-@@ -398,8 +398,13 @@ namespace gbe {
-               std::vector<Type *> ParamTys;
-               for (Value** iter = args.begin(); iter != args.end(); ++iter)
-                 ParamTys.push_back((*iter)->getType());
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+              CallInst* newCI = builder.CreateCall(mod->getOrInsertFunction(
-+                              "__gen_enqueue_kernel_slm", FunctionType::get(intTy, ParamTys, false)), args);
-+#else
-               CallInst* newCI = builder.CreateCall(cast<llvm::Function>(mod->getOrInsertFunction(
-                               "__gen_enqueue_kernel_slm", FunctionType::get(intTy, ParamTys, false))), args);
-+#endif
-               CI->replaceAllUsesWith(newCI);
-               deadInsnSet.insert(CI);
-             }
diff --git a/srcpkgs/beignet/patches/llvm10.patch b/srcpkgs/beignet/patches/llvm10.patch
deleted file mode 100644
index 8aafe48a240d..000000000000
--- a/srcpkgs/beignet/patches/llvm10.patch
+++ /dev/null
@@ -1,347 +0,0 @@
-diff --git CMake/FindLLVM.cmake CMake/FindLLVM.cmake
-index 0a59e47..6e90923 100644
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -104,28 +104,16 @@ string(REGEX REPLACE " *\n" "" LLVM_SYSTEM_LIBS ${LLVM_SYSTEM_LIBS_ORIG})
- endif (LLVM_SYSTEM_LIBS_ORIG)
- endif (LLVM_VERSION_NODOT VERSION_GREATER 34)
- 
-+#something harmless because whitespace at start is an error
-+set(CLANG_LIBRARIES "-ldl")
- macro(add_one_lib name)
-   FIND_LIBRARY(CLANG_LIB
-     NAMES ${name}
-     PATHS ${LLVM_LIBRARY_DIR} NO_DEFAULT_PATH)
--  set(CLANG_LIBRARIES ${CLANG_LIBRARIES} ${CLANG_LIB})
-+  set(CLANG_LIBRARIES "${CLANG_LIBRARIES} ${CLANG_LIB}")
-+  message(STATUS "clanglibs name ${name} this ${CLANG_LIB} all ${CLANG_LIBRARIES} ")
- 	unset(CLANG_LIB CACHE)
- endmacro()
- 
- #Assume clang lib path same as llvm lib path
--add_one_lib("clangCodeGen")
--add_one_lib("clangFrontend")
--add_one_lib("clangSerialization")
--add_one_lib("clangDriver")
--add_one_lib("clangSema")
--add_one_lib("clangStaticAnalyzerFrontend")
--add_one_lib("clangStaticAnalyzerCheckers")
--add_one_lib("clangStaticAnalyzerCore")
--add_one_lib("clangAnalysis")
--add_one_lib("clangEdit")
--add_one_lib("clangAST")
--add_one_lib("clangASTMatchers")
--add_one_lib("clangParse")
--add_one_lib("clangSema")
--add_one_lib("clangLex")
--add_one_lib("clangBasic")
-+add_one_lib("clang-cpp")
-diff --git CMakeLists.txt CMakeLists.txt
-index c11acbb..08f427d 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -79,7 +79,7 @@ elseif (COMPILER STREQUAL "CLANG")
- elseif (COMPILER STREQUAL "ICC")
-   set (CMAKE_C_CXX_FLAGS "${CMAKE_C_CXX_FLAGS}  -wd2928 -Wall -fPIC -fstrict-aliasing -fp-model fast -msse4.1 -Wl,-E")
- endif ()
--set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
-+set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof")
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
- set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
- set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
-diff --git backend/src/backend/program.cpp backend/src/backend/program.cpp
-index b36f7b4..e666031 100644
---- a/backend/src/backend/program.cpp
-+++ b/backend/src/backend/program.cpp
-@@ -694,9 +694,9 @@ namespace gbe {
- #endif
-                 );
- 
-+    llvm::cl::ResetAllOptionOccurrences();
-     clang::CompilerInvocation::CreateFromArgs(*CI,
--                                              &args[0],
--                                              &args[0] + args.size(),
-+                                              clang::ArrayRef<const char*>(args),
-                                               Diags);
-     // Create the compiler instance
-     clang::CompilerInstance Clang;
-@@ -1242,8 +1242,7 @@ EXTEND_QUOTE:
-       // Create the compiler invocation
-       std::unique_ptr<clang::CompilerInvocation> CI(new clang::CompilerInvocation);
-       return clang::CompilerInvocation::CreateFromArgs(*CI,
--                                                       &args[0],
--                                                       &args[0] + args.size(),
-+                                                       clang::ArrayRef<const char*>(args),
-                                                        Diags);
-     }
- #endif
-diff --git backend/src/llvm/llvm_gen_backend.cpp backend/src/llvm/llvm_gen_backend.cpp
-index c6fc30d..82441d8 100644
---- a/backend/src/llvm/llvm_gen_backend.cpp
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -575,10 +575,12 @@ namespace gbe
-         has_errors(false),
-         legacyMode(true)
-     {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-       initializeLoopInfoWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeLoopInfoPass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-       pass = PASS_EMIT_REGISTERS;
-     }
-diff --git backend/src/llvm/llvm_gen_backend.hpp backend/src/llvm/llvm_gen_backend.hpp
-index b4715b1..8e74f7a 100644
---- a/backend/src/llvm/llvm_gen_backend.hpp
-+++ b/backend/src/llvm/llvm_gen_backend.hpp
-@@ -130,10 +130,10 @@ namespace gbe
-   llvm::FunctionPass *createGenPass(ir::Unit &unit);
- 
-   /*! Remove the GEP instructions */
--  llvm::BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit);
-+  llvm::FunctionPass *createRemoveGEPPass(const ir::Unit &unit);
- 
-   /*! Merge load/store if possible */
--  llvm::BasicBlockPass *createLoadStoreOptimizationPass();
-+  llvm::FunctionPass *createLoadStoreOptimizationPass();
- 
-   /*! Scalarize all vector op instructions */
-   llvm::FunctionPass* createScalarizePass();
-@@ -141,7 +141,7 @@ namespace gbe
-   llvm::ModulePass* createBarrierNodupPass(bool);
- 
-   /*! Convert the Intrinsic call to gen function */
--  llvm::BasicBlockPass *createIntrinsicLoweringPass();
-+  llvm::FunctionPass *createIntrinsicLoweringPass();
- 
-   /*! Passer the printf function call. */
-   llvm::FunctionPass* createPrintfParserPass(ir::Unit &unit);
-diff --git backend/src/llvm/llvm_intrinsic_lowering.cpp backend/src/llvm/llvm_intrinsic_lowering.cpp
-index 94f0ce6..b5539e9 100644
---- a/backend/src/llvm/llvm_intrinsic_lowering.cpp
-+++ b/backend/src/llvm/llvm_intrinsic_lowering.cpp
-@@ -29,12 +29,12 @@
- using namespace llvm;
- 
- namespace gbe {
--    class InstrinsicLowering : public BasicBlockPass
-+    class InstrinsicLowering : public FunctionPass
-     {
-     public:
-       static char ID;
-       InstrinsicLowering() :
--        BasicBlockPass(ID) {}
-+        FunctionPass(ID) {}
- 
-       void getAnalysisUsage(AnalysisUsage &AU) const {
- 
-@@ -93,9 +93,9 @@ namespace gbe {
-         CI->eraseFromParent();
-         return NewCI;
-       }
--      virtual bool runOnBasicBlock(BasicBlock &BB)
-+      virtual bool runOnFunction(Function &F)
-       {
--        bool changedBlock = false;
-+        for (BasicBlock &BB : F) {
-         Module *M = BB.getParent()->getParent();
- 
-         DataLayout TD(M);
-@@ -159,13 +159,14 @@ namespace gbe {
-             }
-           }
-         }
--        return changedBlock;
-+        }
-+        return true;
-       }
-     };
- 
-     char InstrinsicLowering::ID = 0;
- 
--    BasicBlockPass *createIntrinsicLoweringPass() {
-+    FunctionPass *createIntrinsicLoweringPass() {
-       return new InstrinsicLowering();
-     }
- } // end namespace
-diff --git backend/src/llvm/llvm_loadstore_optimization.cpp backend/src/llvm/llvm_loadstore_optimization.cpp
-index 5aa38be..e314302 100644
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
-@@ -26,13 +26,13 @@
- 
- using namespace llvm;
- namespace gbe {
--  class GenLoadStoreOptimization : public BasicBlockPass {
-+  class GenLoadStoreOptimization : public FunctionPass {
- 
-   public:
-     static char ID;
-     ScalarEvolution *SE;
-     const DataLayout *TD;
--    GenLoadStoreOptimization() : BasicBlockPass(ID) {}
-+    GenLoadStoreOptimization() : FunctionPass(ID) {}
- 
-     void getAnalysisUsage(AnalysisUsage &AU) const {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-@@ -45,7 +45,9 @@ namespace gbe {
-       AU.setPreservesCFG();
-     }
- 
--    virtual bool runOnBasicBlock(BasicBlock &BB) {
-+    virtual bool runOnFunction(Function &F) {
-+        bool changedAnyBlock = false;
-+        for (BasicBlock &BB : F) {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-       SE = &getAnalysis<ScalarEvolutionWrapperPass>().getSE();
- #else
-@@ -59,7 +61,9 @@ namespace gbe {
-       #else
-         TD = getAnalysisIfAvailable<DataLayout>();
-       #endif
--      return optimizeLoadStore(BB);
-+           changedAnyBlock = optimizeLoadStore(BB) | changedAnyBlock;
-+        }
-+        return changedAnyBlock;
-     }
-     Type    *getValueType(Value *insn);
-     Value   *getPointerOperand(Value *I);
-@@ -148,7 +152,7 @@ namespace gbe {
-       values.push_back(merged[i]);
-     }
-     LoadInst *ld = cast<LoadInst>(merged[0]);
--    unsigned align = ld->getAlignment();
-+    MaybeAlign align = ld->getAlign();
-     unsigned addrSpace = ld->getPointerAddressSpace();
-     // insert before first load
-     Builder.SetInsertPoint(ld);
-@@ -231,7 +235,7 @@ namespace gbe {
- 
-     unsigned addrSpace = st->getPointerAddressSpace();
- 
--    unsigned align = st->getAlignment();
-+    MaybeAlign align = st->getAlign();
-     // insert before the last store
-     Builder.SetInsertPoint(merged[size-1]);
- 
-@@ -325,7 +329,7 @@ namespace gbe {
-     return changed;
-   }
- 
--  BasicBlockPass *createLoadStoreOptimizationPass() {
-+  FunctionPass *createLoadStoreOptimizationPass() {
-     return new GenLoadStoreOptimization();
-   }
- };
-diff --git backend/src/llvm/llvm_passes.cpp backend/src/llvm/llvm_passes.cpp
-index 10752a3..b8f2282 100644
---- a/backend/src/llvm/llvm_passes.cpp
-+++ b/backend/src/llvm/llvm_passes.cpp
-@@ -37,7 +37,7 @@
- #include "sys/map.hpp"
- 
- using namespace llvm;
--
-+template class cfg::Update<BasicBlock *>;
- namespace gbe
- {
-   bool isKernelFunction(const llvm::Function &F) {
-@@ -219,13 +219,13 @@ namespace gbe
-     return offset;
-   }
- 
--  class GenRemoveGEPPasss : public BasicBlockPass
-+  class GenRemoveGEPPasss : public FunctionPass
-   {
- 
-    public:
-     static char ID;
-     GenRemoveGEPPasss(const ir::Unit &unit) :
--      BasicBlockPass(ID),
-+      FunctionPass(ID),
-       unit(unit) {}
-     const ir::Unit &unit;
-     void getAnalysisUsage(AnalysisUsage &AU) const {
-@@ -242,16 +242,18 @@ namespace gbe
- 
-     bool simplifyGEPInstructions(GetElementPtrInst* GEPInst);
- 
--    virtual bool runOnBasicBlock(BasicBlock &BB)
-+    virtual bool runOnFunction(Function &F)
-     {
--      bool changedBlock = false;
-+      bool changedAnyBlock = false;
-+        for (BasicBlock &BB : F) {
-       iplist<Instruction>::iterator I = BB.getInstList().begin();
-       for (auto nextI = I, E = --BB.getInstList().end(); I != E; I = nextI) {
-         iplist<Instruction>::iterator I = nextI++;
-         if(GetElementPtrInst* gep = dyn_cast<GetElementPtrInst>(&*I))
--          changedBlock = (simplifyGEPInstructions(gep) || changedBlock);
-+          changedAnyBlock = (simplifyGEPInstructions(gep) | changedAnyBlock);
-       }
--      return changedBlock;
-+        }
-+      return changedAnyBlock;
-     }
-   };
- 
-@@ -367,7 +369,7 @@ namespace gbe
-     return true;
-   }
- 
--  BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit) {
-+  FunctionPass *createRemoveGEPPass(const ir::Unit &unit) {
-     return new GenRemoveGEPPasss(unit);
-   }
- } /* namespace gbe */
-diff --git backend/src/llvm/llvm_sampler_fix.cpp backend/src/llvm/llvm_sampler_fix.cpp
-index 2a097c8..863be6d 100644
---- a/backend/src/llvm/llvm_sampler_fix.cpp
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp
-@@ -33,10 +33,12 @@ namespace gbe {
-   class SamplerFix : public FunctionPass {
-   public:
-     SamplerFix() : FunctionPass(ID) {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
-       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-     }
- 
-diff --git backend/src/llvm/llvm_scalarize.cpp backend/src/llvm/llvm_scalarize.cpp
-index e9a2a66..e9d2ee4 100644
---- a/backend/src/llvm/llvm_scalarize.cpp
-+++ b/backend/src/llvm/llvm_scalarize.cpp
-@@ -96,10 +96,12 @@ namespace gbe {
- 
-     Scalarize() : FunctionPass(ID)
-     {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
-       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-     }
- 
-diff --git utests/CMakeLists.txt utests/CMakeLists.txt
-index 300d87a..64179c7 100644
---- a/utests/CMakeLists.txt
-+++ b/utests/CMakeLists.txt
-@@ -26,8 +26,8 @@ if (NOT NOT_BUILD_STAND_ALONE_UTEST)
-   # Threads
-   Find_Package(Threads)
- 
--  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
--  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
-+  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof -ffloat-store -fno-strict-aliasing")
-+  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS} -ffloat-store -fno-strict-aliasing") #compiler_{degrees,radians,function_argument2} use equality comparison of floats, compiler_long_bitcast uses aliasing
-   set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
-   set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
-   set (CMAKE_CXX_FLAGS_MINSIZEREL     "-Os -DNDEBUG -DGBE_DEBUG=0")
diff --git a/srcpkgs/beignet/patches/llvm11.patch b/srcpkgs/beignet/patches/llvm11.patch
deleted file mode 100644
index 2c3a4278943c..000000000000
--- a/srcpkgs/beignet/patches/llvm11.patch
+++ /dev/null
@@ -1,937 +0,0 @@
-Source: Snektron
-
-There were a few changes required for LLVM 11:
-* llvm::StringRef requires .str(), implicit conversion was removed
-* llvm::CallSite was removed, but the required methods are available on llvm::CallInst
-* VectorTyID was split into FixedVectorTyID and ScalableVectorTyID, FixedVectorTyID was used
-* CallInst::getCalledValue() was renamed to CallInst::getCalledOperand()
-* Implicit conversion from MaybeAlign to Align was removed, so MaybeAlign::valueOrOne was used instead.
-
---- a/backend/src/llvm/StripAttributes.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/StripAttributes.cpp	2020-11-09 19:04:19.641897141 +0100
-@@ -107,9 +107,8 @@
-        BB != E; ++BB) {
-     for (BasicBlock::iterator Inst = BB->begin(), E = BB->end();
-          Inst != E; ++Inst) {
--      CallSite Call(&*Inst);
--      if (Call)
--        Call.setCallingConv(CallingConv::C);
-+      if (CallInst* callInst = dyn_cast<CallInst>(&*Inst))
-+        callInst->setCallingConv(CallingConv::C);
-     }
-   }
-
---- a/backend/src/llvm/llvm_bitcode_link.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_bitcode_link.cpp	2020-11-09 17:04:09.633753428 +0100
-@@ -98,7 +98,7 @@
-         if (callFunc && callFunc->getIntrinsicID() != 0)
-           continue;
-
--        std::string fnName = call->getCalledValue()->stripPointerCasts()->getName();
-+        std::string fnName = call->getCalledOperand()->stripPointerCasts()->getName().str();
-
-         if (!MFS.insert(fnName).second) {
-           continue;
---- a/backend/src/llvm/llvm_device_enqueue.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_device_enqueue.cpp	2020-11-09 19:01:49.201915008 +0100
-@@ -45,7 +45,7 @@
-       return NULL;
-
-     /* This is a fake, to check the function bitcast is for block or not */
--    std::string fnName = Fn->getName();
-+    std::string fnName = Fn->getName().str();
-     if(fnName.find("_invoke") == std::string::npos)
-       return NULL;
-
-@@ -119,18 +119,18 @@
-       ParamTys.push_back(ty);
-     }
-     FunctionType* NewFT = FunctionType::get(Fn->getReturnType(), ParamTys, false);
--    Function* NewFn = Function::Create(NewFT, Function::ExternalLinkage, Fn->getName());
-+    Function* NewFn = Function::Create(NewFT, Function::ExternalLinkage, Fn->getName().str());
-     SmallVector<ReturnInst*, 8> Returns;
-
-     Function::arg_iterator NewFnArgIt = NewFn->arg_begin();
-     for (Function::arg_iterator I = Fn->arg_begin(), E = Fn->arg_end(); I != E; ++I) {
--      std::string ArgName = I->getName();
-+      std::string ArgName = I->getName().str();
-       NewFnArgIt->setName(ArgName);
-       VMap[&*I] = &(*NewFnArgIt++);
-     }
-     CloneFunctionInto(NewFn, Fn, VMap, /*ModuleLevelChanges=*/true, Returns);
-
--    Fn->setName("__d" + Fn->getName());
-+    Fn->setName("__d" + Fn->getName().str());
-     mod->getFunctionList().push_back(NewFn);
-     //mod->getOrInsertFunction(NewFn->getName(), NewFn->getFunctionType(),
-     //                         NewFn->getAttributes());
-@@ -147,7 +147,7 @@
-       argTypeNames.push_back(llvm::MDString::get(Context, "char*"));
-       argBaseTypeNames.push_back(llvm::MDString::get(Context, "char*"));
-       argTypeQuals.push_back(llvm::MDString::get(Context, ""));
--      argNames.push_back(llvm::MDString::get(Context, I->getName()));
-+      argNames.push_back(llvm::MDString::get(Context, I->getName().str()));
-     }
-
-     //If run to here, llvm version always > 3.9, add the version check just for build.
-@@ -198,7 +198,7 @@
-            * invoke pointer to store the index in the unit's block functions index.*/
-           Function *Fn = dyn_cast<Function>(bt->getOperand(0));
-
--          std::string fnName = Fn->getName();
-+          std::string fnName = Fn->getName().str();
-           int index = -1;
-           for(size_t i=0; i<unit.blockFuncs.size(); i++) {
-             if(unit.blockFuncs[i] == fnName) {
-@@ -241,7 +241,7 @@
-             //unnamed call function, parse the use to find the define of called function
-             SmallVector<Value*, 16> args(CI->op_begin(), CI->op_end()-1);
-
--            Value *v = CI->getCalledValue();
-+            Value *v = CI->getCalledOperand();
-             BitCastInst* bt = dyn_cast<BitCastInst>(v);
-             if(bt == NULL)
-               continue;
-@@ -316,7 +316,7 @@
-                   ConstantExpr *expr = dyn_cast<ConstantExpr>(c->getOperand(3));
-                   BitCastInst *bt = dyn_cast<BitCastInst>(expr->getAsInstruction());
-                   Function* f = dyn_cast<Function>(bt->getOperand(0));
--                  blocks[v] = f->getName();
-+                  blocks[v] = f->getName().str();
-                 }
-               }
-
-@@ -332,7 +332,7 @@
-           } else {
-             //handle enqueue_kernel function call
-             Function *fn = CI->getCalledFunction();
--            if (fn->getName().find("enqueue_kernel") == std::string::npos)
-+            if (fn->getName().str().find("enqueue_kernel") == std::string::npos)
-               continue;
-
-             //block parameter's index, 3 or 6
-@@ -361,7 +361,7 @@
-                   ConstantExpr *expr = dyn_cast<ConstantExpr>(c->getOperand(3));
-                   BitCastInst *bt = dyn_cast<BitCastInst>(expr->getAsInstruction());
-                   Function* f = dyn_cast<Function>(bt->getOperand(0));
--                  blocks[v] = f->getName();
-+                  blocks[v] = f->getName().str();
-                 }
-               }
-             } else if(isa<AllocaInst>(block)) {
---- a/backend/src/llvm/llvm_gen_backend.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_gen_backend.cpp	2020-11-09 18:33:50.919114327 +0100
-@@ -376,7 +376,7 @@
-           GBE_ASSERT(index == 0);
-           return this->_newScalar(value, key, type, index, uniform);
-           break;
--        case Type::VectorTyID:
-+        case Type::FixedVectorTyID:
-         {
-           auto vectorType = cast<VectorType>(type);
-           auto elementType = vectorType->getElementType();
-@@ -743,20 +743,20 @@
- #undef DECL_VISIT_FN
-
-     // Emit rounding instructions from gen native function
--    void emitRoundingCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode);
-+    void emitRoundingCallInst(CallInst &I, ir::Opcode opcode);
-     // Emit unary instructions from gen native function
--    void emitUnaryCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode, ir::Type = ir::TYPE_FLOAT);
-+    void emitUnaryCallInst(CallInst &I, ir::Opcode opcode, ir::Type = ir::TYPE_FLOAT);
-     // Emit unary instructions from gen native function
--    void emitAtomicInst(CallInst &I, CallSite &CS, ir::AtomicOps opcode);
-+    void emitAtomicInst(CallInst &I, ir::AtomicOps opcode);
-     // Emit workgroup instructions
--    void emitWorkGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode);
-+    void emitWorkGroupInst(CallInst &I, ir::WorkGroupOps opcode);
-     // Emit subgroup instructions
--    void emitSubGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode);
-+    void emitSubGroupInst(CallInst &I, ir::WorkGroupOps opcode);
-     // Emit subgroup instructions
--    void emitBlockReadWriteMemInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
--    void emitBlockReadWriteImageInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-+    void emitBlockReadWriteMemInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-+    void emitBlockReadWriteImageInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-
--    uint8_t appendSampler(CallSite::arg_iterator AI);
-+    uint8_t appendSampler(User::op_iterator AI);
-     uint8_t getImageID(CallInst &I);
-
-     // These instructions are not supported at all
-@@ -1320,13 +1320,13 @@
- #endif
-
-       if(typeNameNode) {
--        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
-+        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-       }
-       if(typeBaseNameNode) {
--        llvmInfo.typeBaseName= (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString();
-+        llvmInfo.typeBaseName= (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString().str();
-       }
--      llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
--      llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString();
-+      llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-+      llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString().str();
-       bool isImage = llvmInfo.isImageType();
-       bool isPipe = llvmInfo.isPipeType();
-       if (I->getType()->isPointerTy() || isImage || isPipe) {
-@@ -1531,7 +1531,7 @@
-             EltTy = getEltType(EltTy, TypeIndex);
-         }
-
--        ir::Constant cc = unit.getConstantSet().getConstant(pointer->getName());
-+        ir::Constant cc = unit.getConstantSet().getConstant(pointer->getName().str());
-         unsigned int defOffset = cc.getOffset();
-         relocs.push_back(ir::RelocEntry(offset, defOffset + constantOffset));
-
-@@ -1546,7 +1546,7 @@
-       return;
-     }
-     if (isa<GlobalVariable>(c)) {
--      ir::Constant cc = unit.getConstantSet().getConstant(c->getName());
-+      ir::Constant cc = unit.getConstantSet().getConstant(c->getName().str());
-       unsigned int defOffset = cc.getOffset();
-
-       relocs.push_back(ir::RelocEntry(offset, defOffset));
-@@ -1609,7 +1609,7 @@
-           }
-           break;
-         }
--      case Type::TypeID::VectorTyID:
-+      case Type::TypeID::FixedVectorTyID:
-         {
-           const ConstantDataSequential *cds = dyn_cast<ConstantDataSequential>(c);
-           const VectorType *vecTy = cast<VectorType>(type);
-@@ -1936,7 +1936,7 @@
-       case Type::PointerTyID:
-         regTranslator.newScalar(value, key, 0, uniform);
-         break;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         auto vectorType = cast<VectorType>(type);
-         const uint32_t elemNum = vectorType->getNumElements();
-@@ -2395,7 +2395,7 @@
- #endif
-         }
-         if(typeNameNode) {
--          llvmInfo.typeName = (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
-+          llvmInfo.typeName = (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-           //LLVM 3.9 image's type name include access qual, don't match OpenCL spec, erase them.
-           std::vector<std::string> filters = {"__read_only ", "__write_only "};
-           for (uint32_t i = 0; i < filters.size(); i++) {
-@@ -2406,16 +2406,16 @@
-           }
-         }
-         if(typeBaseNameNode){
--          llvmInfo.typeBaseName = (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString();
-+          llvmInfo.typeBaseName = (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString().str();
-         }
-         if(accessQualNode) {
--          llvmInfo.accessQual = (cast<MDString>(accessQualNode->getOperand(opID)))->getString();
-+          llvmInfo.accessQual = (cast<MDString>(accessQualNode->getOperand(opID)))->getString().str();
-         }
-         if(typeQualNode) {
--          llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString();
-+          llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString().str();
-         }
-         if(argNameNode){
--          llvmInfo.argName = (cast<MDString>(argNameNode->getOperand(opID)))->getString();
-+          llvmInfo.argName = (cast<MDString>(argNameNode->getOperand(opID)))->getString().str();
-         }
-
-         // function arguments are uniform values.
-@@ -3010,7 +3010,7 @@
-         } else {
-           this->newRegister(const_cast<GlobalVariable*>(&v));
-           ir::Register reg = regTranslator.getScalar(const_cast<GlobalVariable*>(&v), 0);
--          ir::Constant &con = unit.getConstantSet().getConstant(v.getName());
-+          ir::Constant &con = unit.getConstantSet().getConstant(v.getName().str());
-           if (!legacyMode) {
-             ir::Register regload = ctx.reg(getFamily(getType(ctx, v.getType())));
-             ctx.LOADI(getType(ctx, v.getType()), regload, ctx.newIntegerImmediate(con.getOffset(), getType(ctx, v.getType())));
-@@ -3212,7 +3212,7 @@
-         GBE_ASSERTM(false, "Unsupported calling convention");
-     }
-
--    ctx.startFunction(F.getName());
-+    ctx.startFunction(F.getName().str());
-
-     ir::Function &fn = ctx.getFunction();
-     this->regTranslator.clear();
-@@ -3810,9 +3810,9 @@
-
-   void GenWriter::regAllocateCallInst(CallInst &I) {
-     Value *dst = &I;
--    Value *Callee = I.getCalledValue();
-+    Value *Callee = I.getCalledOperand();
-     GBE_ASSERT(ctx.getFunction().getProfile() == ir::PROFILE_OCL);
--    GBE_ASSERT(isa<InlineAsm>(I.getCalledValue()) == false);
-+    GBE_ASSERT(isa<InlineAsm>(I.getCalledOperand()) == false);
-     if(I.getNumArgOperands()) GBE_ASSERT(I.hasStructRetAttr() == false);
-
-     // We only support a small number of intrinsics right now
-@@ -3870,7 +3870,7 @@
-       }
-     }
-     // Get the name of the called function and handle it
--    const std::string fnName = Callee->stripPointerCasts()->getName();
-+    const std::string fnName = Callee->stripPointerCasts()->getName().str();
-     auto genIntrinsicID = intrinsicMap.find(fnName);
-     switch (genIntrinsicID) {
-       case GEN_OCL_GET_GROUP_ID0:
-@@ -4166,7 +4166,7 @@
-     };
-   }
-
--  void GenWriter::emitRoundingCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode) {
-+  void GenWriter::emitRoundingCallInst(CallInst &I, ir::Opcode opcode) {
-     if (I.getType()->isHalfTy()) {
-       const ir::Register src = this->getRegister(I.getOperand(0));
-       const ir::Register srcFloat = ctx.reg(ir::FAMILY_DWORD);
-@@ -4177,14 +4177,14 @@
-       ctx.F32TO16(ir::TYPE_U16, ir::TYPE_FLOAT, dst, dstFloat);
-     } else {
-       GBE_ASSERT(I.getType()->isFloatTy());
--      this->emitUnaryCallInst(I,CS,opcode);
-+      this->emitUnaryCallInst(I,opcode);
-     }
-   }
-
--  void GenWriter::emitUnaryCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
-+  void GenWriter::emitUnaryCallInst(CallInst &I, ir::Opcode opcode, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--    CallSite::arg_iterator AE = CS.arg_end();
-+    User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-     GBE_ASSERT(AI != AE);
-     const ir::Register src = this->getRegister(*AI);
-@@ -4293,9 +4293,9 @@
-     this->emitAtomicInstHelper(opcode, type, dst, llvmPtr, payloadTuple);
-   }
-
--  void GenWriter::emitAtomicInst(CallInst &I, CallSite &CS, ir::AtomicOps opcode) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitAtomicInst(CallInst &I, ir::AtomicOps opcode) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-     Value *llvmPtr = *AI;
-     ir::AddressSpace addrSpace = addressSpaceLLVMToGen(llvmPtr->getType()->getPointerAddressSpace());
-@@ -4348,7 +4348,7 @@
-     }
-   }
-
--  void GenWriter::emitWorkGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode) {
-+  void GenWriter::emitWorkGroupInst(CallInst &I, ir::WorkGroupOps opcode) {
-     ir::Function &f = ctx.getFunction();
-
-     if (f.getwgBroadcastSLM() < 0 && opcode == ir::WORKGROUP_OP_BROADCAST) {
-@@ -4378,8 +4378,8 @@
-       GBE_ASSERT(f.gettidMapSLM() >= 0);
-     }
-
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     if (opcode == ir::WORKGROUP_OP_ALL || opcode == ir::WORKGROUP_OP_ANY) {
-@@ -4391,14 +4391,14 @@
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], 3);
-       ctx.WORKGROUP(opcode, (uint32_t)f.gettidMapSLM(), getRegister(&I), srcTuple, 3, ir::TYPE_S32);
-     } else if (opcode == ir::WORKGROUP_OP_BROADCAST) {
--      int argNum = CS.arg_size();
-+      int argNum = I.arg_size();
-       std::vector<ir::Register> src(argNum);
-       for (int i = 0; i < argNum; i++) {
-         src[i] = this->getRegister(*(AI++));
-       }
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], argNum);
-       ctx.WORKGROUP(ir::WORKGROUP_OP_BROADCAST, (uint32_t)f.getwgBroadcastSLM(), getRegister(&I), srcTuple, argNum,
--          getType(ctx, (*CS.arg_begin())->getType()));
-+          getType(ctx, (*I.arg_begin())->getType()));
-     } else {
-       ConstantInt *sign = dyn_cast<ConstantInt>(AI);
-       GBE_ASSERT(sign);
-@@ -4423,9 +4423,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitSubGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitSubGroupInst(CallInst &I, ir::WorkGroupOps opcode) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     if (opcode == ir::WORKGROUP_OP_ALL || opcode == ir::WORKGROUP_OP_ANY) {
-@@ -4435,7 +4435,7 @@
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], 1);
-       ctx.SUBGROUP(opcode, getRegister(&I), srcTuple, 1, ir::TYPE_S32);
-     } else if (opcode == ir::WORKGROUP_OP_BROADCAST) {
--      int argNum = CS.arg_size();
-+      int argNum = I.arg_size();
-       GBE_ASSERT(argNum == 2);
-       std::vector<ir::Register> src(argNum);
-       for (int i = 0; i < argNum; i++) {
-@@ -4443,7 +4443,7 @@
-       }
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], argNum);
-       ctx.SUBGROUP(ir::WORKGROUP_OP_BROADCAST, getRegister(&I), srcTuple, argNum,
--          getType(ctx, (*CS.arg_begin())->getType()));
-+          getType(ctx, (*I.arg_begin())->getType()));
-     } else {
-       ConstantInt *sign = dyn_cast<ConstantInt>(AI);
-       GBE_ASSERT(sign);
-@@ -4466,9 +4466,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitBlockReadWriteMemInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitBlockReadWriteMemInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     Value *llvmPtr = *(AI++);
-@@ -4522,9 +4522,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitBlockReadWriteImageInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitBlockReadWriteImageInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     const uint8_t imageID = getImageID(I);
-@@ -4557,7 +4557,7 @@
-
-   /* append a new sampler. should be called before any reference to
-    * a sampler_t value. */
--  uint8_t GenWriter::appendSampler(CallSite::arg_iterator AI) {
-+  uint8_t GenWriter::appendSampler(User::op_iterator AI) {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-     CallInst *TC = dyn_cast<CallInst>(*AI);
-     Constant *CPV = TC ? dyn_cast<Constant>(TC->getOperand(0)) : NULL;
-@@ -4595,10 +4595,9 @@
-         const ir::Function &fn = ctx.getFunction();
-
-         // Get the function arguments
--        CallSite CS(&I);
--        CallSite::arg_iterator AI = CS.arg_begin();
-+        User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--        CallSite::arg_iterator AE = CS.arg_end();
-+        User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-         switch (F->getIntrinsicID()) {
-           case Intrinsic::stacksave:
-@@ -4764,17 +4763,17 @@
-             ctx.MAD(srcType, dst, src0, src1, src2);
-           }
-           break;
--          case Intrinsic::sqrt: this->emitUnaryCallInst(I,CS,ir::OP_SQR); break;
--          case Intrinsic::ceil: this->emitRoundingCallInst(I,CS,ir::OP_RNDU); break;
--          case Intrinsic::trunc: this->emitRoundingCallInst(I,CS,ir::OP_RNDZ); break;
--          case Intrinsic::rint: this->emitRoundingCallInst(I,CS,ir::OP_RNDE); break;
--          case Intrinsic::floor: this->emitRoundingCallInst(I,CS,ir::OP_RNDD); break;
--          case Intrinsic::sin: this->emitUnaryCallInst(I,CS,ir::OP_SIN); break;
--          case Intrinsic::cos: this->emitUnaryCallInst(I,CS,ir::OP_COS); break;
--          case Intrinsic::log2: this->emitUnaryCallInst(I,CS,ir::OP_LOG); break;
--          case Intrinsic::exp2: this->emitUnaryCallInst(I,CS,ir::OP_EXP); break;
-+          case Intrinsic::sqrt: this->emitUnaryCallInst(I,ir::OP_SQR); break;
-+          case Intrinsic::ceil: this->emitRoundingCallInst(I,ir::OP_RNDU); break;
-+          case Intrinsic::trunc: this->emitRoundingCallInst(I,ir::OP_RNDZ); break;
-+          case Intrinsic::rint: this->emitRoundingCallInst(I,ir::OP_RNDE); break;
-+          case Intrinsic::floor: this->emitRoundingCallInst(I,ir::OP_RNDD); break;
-+          case Intrinsic::sin: this->emitUnaryCallInst(I,ir::OP_SIN); break;
-+          case Intrinsic::cos: this->emitUnaryCallInst(I,ir::OP_COS); break;
-+          case Intrinsic::log2: this->emitUnaryCallInst(I,ir::OP_LOG); break;
-+          case Intrinsic::exp2: this->emitUnaryCallInst(I,ir::OP_EXP); break;
-           case Intrinsic::bswap:
--            this->emitUnaryCallInst(I,CS,ir::OP_BSWAP, getUnsignedType(ctx, I.getType())); break;
-+            this->emitUnaryCallInst(I,ir::OP_BSWAP, getUnsignedType(ctx, I.getType())); break;
-           case Intrinsic::pow:
-           {
-             const ir::Register src0 = this->getRegister(*AI); ++AI;
-@@ -4794,21 +4793,20 @@
-         }
-       } else {
-         // Get the name of the called function and handle it
--        Value *Callee = I.getCalledValue();
--        const std::string fnName = Callee->stripPointerCasts()->getName();
-+        Value *Callee = I.getCalledOperand();
-+        const std::string fnName = Callee->stripPointerCasts()->getName().str();
-         auto genIntrinsicID = intrinsicMap.find(fnName);
-
-         // Get the function arguments
--        CallSite CS(&I);
--        CallSite::arg_iterator AI = CS.arg_begin();
-+        User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--        CallSite::arg_iterator AE = CS.arg_end();
-+        User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-
-         switch (genIntrinsicID) {
--          case GEN_OCL_FBH: this->emitUnaryCallInst(I,CS,ir::OP_FBH, ir::TYPE_U32); break;
--          case GEN_OCL_FBL: this->emitUnaryCallInst(I,CS,ir::OP_FBL, ir::TYPE_U32); break;
--          case GEN_OCL_CBIT: this->emitUnaryCallInst(I,CS,ir::OP_CBIT, getUnsignedType(ctx, (*AI)->getType())); break;
-+          case GEN_OCL_FBH: this->emitUnaryCallInst(I,ir::OP_FBH, ir::TYPE_U32); break;
-+          case GEN_OCL_FBL: this->emitUnaryCallInst(I,ir::OP_FBL, ir::TYPE_U32); break;
-+          case GEN_OCL_CBIT: this->emitUnaryCallInst(I,ir::OP_CBIT, getUnsignedType(ctx, (*AI)->getType())); break;
-           case GEN_OCL_ABS:
-           {
-             const ir::Register src = this->getRegister(*AI);
-@@ -4915,8 +4913,8 @@
-             ctx.REGION(dst, src, x.getIntegerValue());
-             break;
-           }
--          case GEN_OCL_RSQ: this->emitUnaryCallInst(I,CS,ir::OP_RSQ); break;
--          case GEN_OCL_RCP: this->emitUnaryCallInst(I,CS,ir::OP_RCP); break;
-+          case GEN_OCL_RSQ: this->emitUnaryCallInst(I,ir::OP_RSQ); break;
-+          case GEN_OCL_RCP: this->emitUnaryCallInst(I,ir::OP_RCP); break;
-           case GEN_OCL_FORCE_SIMD8: ctx.setSimdWidth(8); break;
-           case GEN_OCL_FORCE_SIMD16: ctx.setSimdWidth(16); break;
-           case GEN_OCL_LBARRIER: ctx.SYNC(ir::syncLocalBarrier); break;
-@@ -4947,31 +4945,31 @@
-             break;
-           }
-           case GEN_OCL_ATOMIC_ADD0:
--          case GEN_OCL_ATOMIC_ADD1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_ADD); break;
-+          case GEN_OCL_ATOMIC_ADD1: this->emitAtomicInst(I,ir::ATOMIC_OP_ADD); break;
-           case GEN_OCL_ATOMIC_SUB0:
--          case GEN_OCL_ATOMIC_SUB1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_SUB); break;
-+          case GEN_OCL_ATOMIC_SUB1: this->emitAtomicInst(I,ir::ATOMIC_OP_SUB); break;
-           case GEN_OCL_ATOMIC_AND0:
--          case GEN_OCL_ATOMIC_AND1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_AND); break;
-+          case GEN_OCL_ATOMIC_AND1: this->emitAtomicInst(I,ir::ATOMIC_OP_AND); break;
-           case GEN_OCL_ATOMIC_OR0:
--          case GEN_OCL_ATOMIC_OR1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_OR); break;
-+          case GEN_OCL_ATOMIC_OR1: this->emitAtomicInst(I,ir::ATOMIC_OP_OR); break;
-           case GEN_OCL_ATOMIC_XOR0:
--          case GEN_OCL_ATOMIC_XOR1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_XOR); break;
-+          case GEN_OCL_ATOMIC_XOR1: this->emitAtomicInst(I,ir::ATOMIC_OP_XOR); break;
-           case GEN_OCL_ATOMIC_XCHG0:
--          case GEN_OCL_ATOMIC_XCHG1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_XCHG); break;
-+          case GEN_OCL_ATOMIC_XCHG1: this->emitAtomicInst(I,ir::ATOMIC_OP_XCHG); break;
-           case GEN_OCL_ATOMIC_INC0:
--          case GEN_OCL_ATOMIC_INC1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_INC); break;
-+          case GEN_OCL_ATOMIC_INC1: this->emitAtomicInst(I,ir::ATOMIC_OP_INC); break;
-           case GEN_OCL_ATOMIC_DEC0:
--          case GEN_OCL_ATOMIC_DEC1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_DEC); break;
-+          case GEN_OCL_ATOMIC_DEC1: this->emitAtomicInst(I,ir::ATOMIC_OP_DEC); break;
-           case GEN_OCL_ATOMIC_UMIN0:
--          case GEN_OCL_ATOMIC_UMIN1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_UMIN); break;
-+          case GEN_OCL_ATOMIC_UMIN1: this->emitAtomicInst(I,ir::ATOMIC_OP_UMIN); break;
-           case GEN_OCL_ATOMIC_UMAX0:
--          case GEN_OCL_ATOMIC_UMAX1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_UMAX); break;
-+          case GEN_OCL_ATOMIC_UMAX1: this->emitAtomicInst(I,ir::ATOMIC_OP_UMAX); break;
-           case GEN_OCL_ATOMIC_IMIN0:
--          case GEN_OCL_ATOMIC_IMIN1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_IMIN); break;
-+          case GEN_OCL_ATOMIC_IMIN1: this->emitAtomicInst(I,ir::ATOMIC_OP_IMIN); break;
-           case GEN_OCL_ATOMIC_IMAX0:
--          case GEN_OCL_ATOMIC_IMAX1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_IMAX); break;
-+          case GEN_OCL_ATOMIC_IMAX1: this->emitAtomicInst(I,ir::ATOMIC_OP_IMAX); break;
-           case GEN_OCL_ATOMIC_CMPXCHG0:
--          case GEN_OCL_ATOMIC_CMPXCHG1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_CMPXCHG); break;
-+          case GEN_OCL_ATOMIC_CMPXCHG1: this->emitAtomicInst(I,ir::ATOMIC_OP_CMPXCHG); break;
-           case GEN_OCL_GET_IMAGE_WIDTH:
-           case GEN_OCL_GET_IMAGE_HEIGHT:
-           case GEN_OCL_GET_IMAGE_DEPTH:
-@@ -5429,48 +5427,48 @@
-             ctx.WAIT();
-             break;
-           }
--          case GEN_OCL_WORK_GROUP_ALL: this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_ALL); break;
--          case GEN_OCL_WORK_GROUP_ANY: this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_ANY); break;
-+          case GEN_OCL_WORK_GROUP_ALL: this->emitWorkGroupInst(I, ir::WORKGROUP_OP_ALL); break;
-+          case GEN_OCL_WORK_GROUP_ANY: this->emitWorkGroupInst(I, ir::WORKGROUP_OP_ANY); break;
-           case GEN_OCL_WORK_GROUP_BROADCAST:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_BROADCAST); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_BROADCAST); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_ADD); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_MAX); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_MIN); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-           case GEN_OCL_SUB_GROUP_BROADCAST:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_BROADCAST); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_BROADCAST); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_ADD); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_MAX); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_MIN); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-           case GEN_OCL_LRP:
-           {
-             const ir::Register dst  = this->getRegister(&I);
-@@ -5484,69 +5482,69 @@
-             break;
-           }
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, false, 1); break;
-+            this->emitBlockReadWriteMemInst(I, false, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, false, 2); break;
-+            this->emitBlockReadWriteMemInst(I, false, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, false, 4); break;
-+            this->emitBlockReadWriteMemInst(I, false, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, false, 8); break;
-+            this->emitBlockReadWriteMemInst(I, false, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, true, 1); break;
-+            this->emitBlockReadWriteMemInst(I, true, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, true, 2); break;
-+            this->emitBlockReadWriteMemInst(I, true, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, true, 4); break;
-+            this->emitBlockReadWriteMemInst(I, true, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, true, 8); break;
-+            this->emitBlockReadWriteMemInst(I, true, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, false, 1); break;
-+            this->emitBlockReadWriteImageInst(I, false, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, false, 2); break;
-+            this->emitBlockReadWriteImageInst(I, false, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, false, 4); break;
-+            this->emitBlockReadWriteImageInst(I, false, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, false, 8); break;
-+            this->emitBlockReadWriteImageInst(I, false, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, true, 1); break;
-+            this->emitBlockReadWriteImageInst(I, true, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, true, 2); break;
-+            this->emitBlockReadWriteImageInst(I, true, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, true, 4); break;
-+            this->emitBlockReadWriteImageInst(I, true, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, true, 8); break;
-+            this->emitBlockReadWriteImageInst(I, true, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, false, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, false, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, false, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, false, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, true, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, true, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, true, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, true, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, false, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, false, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, false, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, false, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, true, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, true, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, true, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, true, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 8, ir::TYPE_U16); break;
-           case GEN_OCL_GET_PIPE:
-           case GEN_OCL_MAKE_RID:
-           case GEN_OCL_GET_RID:
---- a/backend/src/llvm/llvm_includes.hpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_includes.hpp	2020-11-09 19:00:09.955926795 +0100
-@@ -103,7 +103,6 @@
-
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
- #include "llvm/IR/Mangler.h"
--#include "llvm/IR/CallSite.h"
- #include "llvm/IR/CFG.h"
- #include "llvm/IR/InstVisitor.h"
- #include "llvm/IR/IRPrintingPasses.h"
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-11-09 19:10:37.141852308 +0100
-@@ -160,7 +160,7 @@
-     Value *vecPtr = Builder.CreateBitCast(ld->getPointerOperand(),
-                                         PointerType::get(vecTy, addrSpace));
-     LoadInst *vecValue = Builder.CreateLoad(vecPtr);
--    vecValue->setAlignment(align);
-+    vecValue->setAlignment(align.valueOrOne());
-
-     for (unsigned i = 0; i < size; ++i) {
-       Value *S = Builder.CreateExtractElement(vecValue, Builder.getInt32(i));
-@@ -251,7 +251,7 @@
-       return;
-     Value *newPtr = Builder.CreateBitCast(stPointer, PointerType::get(vecTy, addrSpace));
-     StoreInst *newST = Builder.CreateStore(parent, newPtr);
--    newST->setAlignment(align);
-+    newST->setAlignment(align.valueOrOne());
-   }
-
-   // Find the safe iterator we can point to. If reorder happens, we need to
---- a/backend/src/llvm/llvm_passes.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_passes.cpp	2020-11-09 18:48:55.997006837 +0100
-@@ -95,7 +95,7 @@
-   {
-     switch (Ty->getTypeID()) {
-       case Type::VoidTyID: NOT_SUPPORTED;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         const VectorType* VecTy = cast<VectorType>(Ty);
-         uint32_t elemNum = VecTy->getNumElements();
-@@ -138,7 +138,7 @@
-       case Type::HalfTyID:    return 16;
-       case Type::FloatTyID:   return 32;
-       case Type::DoubleTyID:  return 64;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         const VectorType* VecTy = cast<VectorType>(Ty);
-         uint32_t numElem = VecTy->getNumElements();
-@@ -184,10 +184,12 @@
-     Type *elementType = NULL;
-     if (PointerType* ptrType = dyn_cast<PointerType>(eltTy))
-       elementType = ptrType->getElementType();
--    else if(SequentialType * seqType = dyn_cast<SequentialType>(eltTy))
--      elementType = seqType->getElementType();
--    else if(CompositeType * compTy= dyn_cast<CompositeType>(eltTy))
--      elementType = compTy->getTypeAtIndex(index);
-+    else if (ArrayType * arrType = dyn_cast<ArrayType>(eltTy))
-+      elementType = arrType->getElementType();
-+    else if(VectorType * vecType = dyn_cast<VectorType>(eltTy))
-+      elementType = vecType->getElementType();
-+    else if(StructType * structType = dyn_cast<StructType>(eltTy))
-+      elementType = structType->getTypeAtIndex(index);
-     GBE_ASSERT(elementType);
-     return elementType;
-   }
---- a/backend/src/llvm/llvm_printf_parser.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_printf_parser.cpp	2020-11-09 18:57:52.618943105 +0100
-@@ -323,8 +323,7 @@
-
-   bool PrintfParser::parseOnePrintfInstruction(CallInst * call)
-   {
--    CallSite CS(call);
--    CallSite::arg_iterator CI_FMT = CS.arg_begin();
-+    User::op_iterator CI_FMT = call->arg_begin();
-     int param_num = 0;
-
-     llvm::Constant* arg0 = dyn_cast<llvm::ConstantExpr>(*CI_FMT);
-@@ -341,7 +340,7 @@
-       return false;
-     }
-
--    std::string fmt = fmt_arg->getAsCString();
-+    std::string fmt = fmt_arg->getAsCString().str();
-     if (fmt.size() == 0)
-       return false;
-
-@@ -437,8 +436,8 @@
-         if ( callFunc->getIntrinsicID() != 0)
-           continue;
-
--        Value *Callee = call->getCalledValue();
--        const std::string fnName = Callee->getName();
-+        Value *Callee = call->getCalledOperand();
-+        const std::string fnName = Callee->getName().str();
-
-         if (fnName != "__gen_ocl_printf_stub" && fnName != "__gen_ocl_puts_stub")
-           continue;
-@@ -582,7 +581,7 @@
-             if (!fmt_arg || !fmt_arg->isCString()) {
-               return false;
-             }
--            slot.state.str = fmt_arg->getAsCString();
-+            slot.state.str = fmt_arg->getAsCString().str();
-             return true;
-           }
-           case PRINTF_CONVERSION_P: {
-@@ -595,10 +594,10 @@
-
-         break;
-
--      case Type::VectorTyID: {
--        Type* vect_type = arg->getType();
--        Type* elt_type = vect_type->getVectorElementType();
--        int vec_num = vect_type->getVectorNumElements();
-+      case Type::FixedVectorTyID: {
-+        VectorType* vect_type = dyn_cast<VectorType>(arg->getType());
-+        Type* elt_type = vect_type->getElementType();
-+        int vec_num = vect_type->getNumElements();
-         bool sign = false;
-
-         if (vec_num != slot.state.vector_n) {
---- a/backend/src/llvm/llvm_profiling.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_profiling.cpp	2020-11-09 18:59:50.120929150 +0100
-@@ -35,7 +35,6 @@
- #include "llvm/IR/IRBuilder.h"
-
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
--#include "llvm/IR/CallSite.h"
- #include "llvm/IR/CFG.h"
- #else
- #include "llvm/Support/CallSite.h"
---- a/backend/src/llvm/llvm_sampler_fix.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp	2020-11-09 17:01:09.407774832 +0100
-@@ -45,8 +45,8 @@
-     bool visitCallInst(CallInst *I) {
-       if(!I)
-         return false;
--      Value *Callee = I->getCalledValue();
--      const std::string fnName = Callee->getName();
-+      Value *Callee = I->getCalledOperand();
-+      const std::string fnName = Callee->getName().str();
-       bool changed = false;
-       Type *boolTy = IntegerType::get(I->getContext(), 1);
-       Type *i32Ty = IntegerType::get(I->getContext(), 32);
-@@ -59,7 +59,7 @@
-         Value *needFixVal;
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-         CallInst *init = dyn_cast<CallInst>(I->getOperand(0));
--        if (init && init->getCalledValue()->getName().compare("__translate_sampler_initializer"))
-+        if (init && init->getCalledOperand()->getName().compare("__translate_sampler_initializer"))
-         {
-           const ConstantInt *ci = dyn_cast<ConstantInt>(init->getOperand(0));
-           uint32_t samplerInt = ci->getZExtValue();
-@@ -113,7 +113,7 @@
-         Value *needFixVal;
-  #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-         CallInst *init = dyn_cast<CallInst>(I->getOperand(0));
--        if (init && init->getCalledValue()->getName().compare("__translate_sampler_initializer"))
-+        if (init && init->getCalledOperand()->getName().compare("__translate_sampler_initializer"))
-         {
-           const ConstantInt *ci = dyn_cast<ConstantInt>(init->getOperand(0));
-           uint32_t samplerInt = ci->getZExtValue();
---- a/backend/src/llvm/llvm_scalarize.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_scalarize.cpp	2020-11-09 18:51:16.888990104 +0100
-@@ -178,7 +178,7 @@
-       if(!type)
-         return type;
-       switch(type->getTypeID()) {
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       case Type::ArrayTyID:
-         return GetBasicType(type->getContainedType(0));
-       default:
-@@ -188,7 +188,7 @@
-     }
-
-     int GetComponentCount(const Type* type)  {
--      if (type && type->getTypeID() == Type::VectorTyID)
-+      if (type && type->getTypeID() == Type::FixedVectorTyID)
-         return llvm::dyn_cast<VectorType>(type)->getNumElements();
-       else
-         return 1;
-@@ -652,13 +652,12 @@
-           break;
-         }
-       } else {
--        Value *Callee = call->getCalledValue();
--        const std::string fnName = Callee->getName();
-+        Value *Callee = call->getCalledOperand();
-+        const std::string fnName = Callee->getName().str();
-         auto genIntrinsicID = intrinsicMap.find(fnName);
-
-         // Get the function arguments
--        CallSite CS(call);
--        CallSite::arg_iterator CI = CS.arg_begin() + 1;
-+        User::op_iterator CI = call->arg_begin() + 1;
-
-         switch (genIntrinsicID) {
-           case GEN_OCL_NOT_FOUND:
-@@ -729,7 +728,7 @@
-             extractFromVector(call);
-             break;
-           case GEN_OCL_PRINTF:
--            for (; CI != CS.arg_end(); ++CI)
-+            for (; CI != call->arg_end(); ++CI)
-               if ((*CI)->getType()->isVectorTy())
-                 *CI = InsertToVector(call, *CI);
-             break;
diff --git a/srcpkgs/beignet/patches/llvm12.patch b/srcpkgs/beignet/patches/llvm12.patch
deleted file mode 100644
index 6f8ab005c148..000000000000
--- a/srcpkgs/beignet/patches/llvm12.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-diff --git backend/src/llvm/ExpandLargeIntegers.cpp backend/src/llvm/ExpandLargeIntegers.cpp
-index 8515dc13..27080380 100644
---- a/backend/src/llvm/ExpandLargeIntegers.cpp
-+++ b/backend/src/llvm/ExpandLargeIntegers.cpp
-@@ -328,7 +328,7 @@ static Value *buildVectorOrScalar(ConversionState &State, IRBuilder<> &IRB, Smal
-     // splited, that's why these temporary values should be erased.
-     bool KeepInsert = isLegalBitSize(ElemTy->getPrimitiveSizeInBits() * ElemNo);
-     for (unsigned i = 0; i < ElemNo; ++i) {
--      Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo));
-+      Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo, false));
-       Value *idx = ConstantInt::get(IntTy, i);
-       vec = IRB.CreateInsertElement(tmp, Elements[i], idx);
-       if (!KeepInsert && !isa<Constant>(vec)) {
-@@ -373,7 +373,7 @@ static void unifyElementType(IRBuilder<> &IRB, SmallVector<Value *, 16> &Src, Sm
-       assert((Size % MinWidth) == 0);
- 
-       if (Size > MinWidth) {
--        VectorType *VecTy = VectorType::get(ElemTy, Size/MinWidth);
-+        VectorType *VecTy = VectorType::get(ElemTy, Size/MinWidth, false);
-         Value *Casted = IRB.CreateBitCast(Src[i], VecTy);
-         for (unsigned j = 0; j < Size/MinWidth; j++)
-           Dst.push_back(IRB.CreateExtractElement(Casted, ConstantInt::get(IntTy, j)));
-@@ -462,7 +462,7 @@ static void convertInstruction(Instruction *Inst, ConversionState &State,
-       unsigned ElemNo = Unified.size();
-       Type *ElemTy = Unified[0]->getType();
-       for (unsigned i = 0; i < ElemNo; ++i) {
--        Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo));
-+        Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo, false));
-         Value *idx = ConstantInt::get(IntTy, i);
-         vec = IRB.CreateInsertElement(tmp, Unified[i], idx);
-       }
-diff --git backend/src/llvm/llvm_gen_backend.cpp backend/src/llvm/llvm_gen_backend.cpp
-index c93d89cc..64d5b0e5 100644
---- a/backend/src/llvm/llvm_gen_backend.cpp
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -304,7 +304,7 @@ namespace gbe
-       TYPESIZEVEC(long,8)
-       TYPESIZEVEC(unsigned long,8)
-       else{
--        StructType *StrTy = M->getTypeByName("struct."+name);
-+        StructType *StrTy = StructType::getTypeByName(M->getContext(), "struct."+name);
-         if(StrTy)
-           return getTypeByteSize(unit,StrTy);
-       }
-diff --git backend/src/llvm/llvm_loadstore_optimization.cpp backend/src/llvm/llvm_loadstore_optimization.cpp
-index 5aa38bef..6b5c1bad 100644
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
-@@ -152,7 +152,7 @@ namespace gbe {
-     unsigned addrSpace = ld->getPointerAddressSpace();
-     // insert before first load
-     Builder.SetInsertPoint(ld);
--    VectorType *vecTy = VectorType::get(ld->getType(), size);
-+    VectorType *vecTy = VectorType::get(ld->getType(), size, false);
-     Value *vecPtr = Builder.CreateBitCast(ld->getPointerOperand(),
-                                         PointerType::get(vecTy, addrSpace));
-     LoadInst *vecValue = Builder.CreateLoad(vecPtr);
-@@ -236,7 +236,7 @@ namespace gbe {
-     Builder.SetInsertPoint(merged[size-1]);
- 
-     Type *dataTy = st->getValueOperand()->getType();
--    VectorType *vecTy = VectorType::get(dataTy, size);
-+    VectorType *vecTy = VectorType::get(dataTy, size, false);
-     Value * parent = UndefValue::get(vecTy);
-     for(unsigned i = 0; i < size; i++) {
-       parent = Builder.CreateInsertElement(parent, values[i], ConstantInt::get(IntegerType::get(st->getContext(), 32), i));
-diff --git backend/src/llvm/llvm_printf_parser.cpp backend/src/llvm/llvm_printf_parser.cpp
-index 6bb7c52a..af459cd2 100644
---- a/backend/src/llvm/llvm_printf_parser.cpp
-+++ b/backend/src/llvm/llvm_printf_parser.cpp
-@@ -630,7 +630,7 @@ error:
-             if (elt_type != elt_dst_type) {
-               Value *II = NULL;
-               for (int i = 0; i < vec_num; i++) {
--                Value *vec = II ? II : UndefValue::get(VectorType::get(elt_dst_type, vec_num));
-+                Value *vec = II ? II : UndefValue::get(VectorType::get(elt_dst_type, vec_num, false));
-                 Value *cv = ConstantInt::get(Type::getInt32Ty(elt_type->getContext()), i);
-                 Value *org = builder->CreateExtractElement(arg, cv);
-                 Value *cvt = builder->CreateIntCast(org, elt_dst_type, sign);
-@@ -658,7 +658,7 @@ error:
-             if (elt_type->getTypeID() != Type::FloatTyID) {
-               Value *II = NULL;
-               for (int i = 0; i < vec_num; i++) {
--                Value *vec = II ? II : UndefValue::get(VectorType::get(Type::getFloatTy(elt_type->getContext()), vec_num));
-+                Value *vec = II ? II : UndefValue::get(VectorType::get(Type::getFloatTy(elt_type->getContext()), vec_num, false));
-                 Value *cv = ConstantInt::get(Type::getInt32Ty(elt_type->getContext()), i);
-                 Value *org = builder->CreateExtractElement(arg, cv);
-                 Value* cvt  = builder->CreateFPCast(org, Type::getFloatTy(module->getContext()));
-diff --git backend/src/llvm/llvm_to_gen.cpp backend/src/llvm/llvm_to_gen.cpp
-index 7f7deffe..9e8ccc67 100644
---- a/backend/src/llvm/llvm_to_gen.cpp
-+++ b/backend/src/llvm/llvm_to_gen.cpp
-@@ -358,7 +358,7 @@ namespace gbe
-     passes.add(createScalarReplAggregatesPass(64, true, -1, -1, 64));
- #endif
-     passes.add(createLoadStoreOptimizationPass());
--    passes.add(createConstantPropagationPass());
-+    //passes.add(createConstantPropagationPass());
-     passes.add(createPromoteMemoryToRegisterPass());
-     if(optLevel > 0)
-       passes.add(createGVNPass());                 // Remove redundancies
-@@ -367,11 +367,11 @@ namespace gbe
-     passes.add(createScalarizePass());             // Expand all vector ops
-     passes.add(createExpandLargeIntegersPass());   // legalize large integer operation
-     passes.add(createInstructionCombiningPass());  // legalize will generate some silly instructions
--    passes.add(createConstantPropagationPass());   // propagate constant after scalarize/legalize
-+    //passes.add(createConstantPropagationPass());   // propagate constant after scalarize/legalize
-     passes.add(createExpandConstantExprPass());    // constant prop may generate ConstantExpr
-     passes.add(createPromoteIntegersPass());       // align integer size to power of two
-     passes.add(createRemoveGEPPass(unit));         // Constant prop may generate gep
--    passes.add(createDeadInstEliminationPass());   // Remove simplified instructions
-+    //passes.add(createDeadInstEliminationPass());   // Remove simplified instructions
-     passes.add(createCFGSimplificationPass());     // Merge & remove BBs
-     passes.add(createLowerSwitchPass());           // simplify cfg will generate switch-case instruction
-     if (profiling) {
diff --git a/srcpkgs/beignet/patches/musl.patch b/srcpkgs/beignet/patches/musl.patch
deleted file mode 100644
index cefafbb65588..000000000000
--- a/srcpkgs/beignet/patches/musl.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/backend/src/backend/gen/gen_mesa_disasm.c
-+++ b/backend/src/backend/gen/gen_mesa_disasm.c
-@@ -1137,7 +1137,7 @@ static uint32_t __conv_half_to_float(uint16_t h)
-       // Adjust mantissa so it's normalized (and keep
-       // track of exponent adjustment)
-       int e = -1;
--      uint m = i.mantissa;
-+      unsigned int m = i.mantissa;
-       do {
-         e++;
-         m <<= 1;
diff --git a/srcpkgs/beignet/template b/srcpkgs/beignet/template
deleted file mode 100644
index dce6bbb7ae24..000000000000
--- a/srcpkgs/beignet/template
+++ /dev/null
@@ -1,22 +0,0 @@
-# Template file for 'beignet'
-pkgname=beignet
-version=1.3.2
-revision=10
-archs="i686* x86_64*"
-wrksrc="Beignet-${version}-Source"
-build_style=cmake
-hostmakedepends="clang llvm pkg-config"
-makedepends="MesaLib-devel libedit-devel libffi-devel ocl-icd-devel zlib-devel
- libXfixes-devel"
-depends="ocl-icd"
-short_desc="Beignet GPGPU System for Intel GPUs"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://www.freedesktop.org/wiki/Software/Beignet/"
-distfiles="https://01.org/sites/default/files/${pkgname}-${version}-source.tar.gz"
-checksum=c555edba149de23243965a703f39f79fa06f15bcff5a3762b5544b0925010b43
-
-post_install() {
-	# remove CL headers, we do use opencl-headers instead.
-	rm -r ${DESTDIR}/usr/include
-}
diff --git a/srcpkgs/beignet/update b/srcpkgs/beignet/update
deleted file mode 100644
index ca41e0afe60c..000000000000
--- a/srcpkgs/beignet/update
+++ /dev/null
@@ -1 +0,0 @@
-site="https://01.org/beignet/downloads"
diff --git a/srcpkgs/removed-packages/template b/srcpkgs/removed-packages/template
index a6d94cc051d6..e4facbda1607 100644
--- a/srcpkgs/removed-packages/template
+++ b/srcpkgs/removed-packages/template
@@ -1,7 +1,7 @@
 # Template file for 'removed-packages'
 pkgname=removed-packages
 version=0.1
-revision=69
+revision=70
 build_style=meta
 short_desc="Uninstalls packages removed from repository"
 maintainer="Piotr Wójcik <chocimier@tlen.pl>"
@@ -25,6 +25,7 @@ replaces="
  atom<=1.44.0_1
  avogadro-devel<=1.2.0_8
  avogadro<=1.2.0_8
+ beignet<=1.3.2_10
  bokken<=1.8_3
  bomi<=0.9.11_17
  burp-client<=1.4.40_13

From db608788b8b9326ef21a87e54676c47bfbcf2f73 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 22:31:25 +0200
Subject: [PATCH 20/23] ldc: update to 1.29.0.

---
 common/shlibs        | 10 +++++-----
 srcpkgs/ldc/template |  9 ++++-----
 2 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/common/shlibs b/common/shlibs
index 3333740b2881..70888a227367 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -2181,11 +2181,11 @@ libFcitx5Config.so.6 libfcitx5-5.0.5_1
 libFcitx5GClient.so.2 fcitx5-gtk-5.0.4_1
 libFcitx5Qt5DBusAddons.so.1 fcitx5-qt5-5.0.3_1
 libFcitx5Qt5WidgetsAddons.so.2 fcitx5-qt5-5.0.3_1
-libdruntime-ldc-debug-shared.so.98 ldc-runtime-1.28.0_1
-libdruntime-ldc-shared.so.98 ldc-runtime-1.28.0_1
-libphobos2-ldc-shared.so.98 ldc-runtime-1.28.0_1
-libphobos2-ldc-debug-shared.so.98 ldc-runtime-1.28.0_1
-libldc-jit.so.99 ldc-runtime-1.29.0_1
+libdruntime-ldc-debug-shared.so.99 ldc-runtime-1.29.0_1
+libdruntime-ldc-shared.so.99 ldc-runtime-1.29.0_1
+libphobos2-ldc-shared.so.99 ldc-runtime-1.29.0_1
+libphobos2-ldc-debug-shared.so.99 ldc-runtime-1.29.0_1
+libldc-jit.so.98 ldc-runtime-1.28.0_1
 libmarblewidget-qt5.so.28 marble5-17.12.2_1
 libastro.so.2 marble5-17.12.2_1
 libparrot.so.6.9.0 parrot-6.9.0_1
diff --git a/srcpkgs/ldc/template b/srcpkgs/ldc/template
index e849b272501e..1d72a8805eb6 100644
--- a/srcpkgs/ldc/template
+++ b/srcpkgs/ldc/template
@@ -1,8 +1,7 @@
 # Template file for 'ldc'
 pkgname=ldc
-version=1.28.0
-revision=2
-reverts="1.29.0_1"
+version=1.29.0
+revision=1
 wrksrc="ldc-${version}-src"
 build_style=cmake
 configure_args="
@@ -12,7 +11,7 @@ configure_args="
  -DBASH_COMPLETION_COMPLETIONSDIR=/usr/share/bash-completion
  -DC_SYSTEM_LIBS='unwind;m;pthread;rt;dl'"
 conf_files="/etc/ldc2.conf"
-hostmakedepends="dmd llvm12 perl pkg-config"
+hostmakedepends="dmd llvm14 perl pkg-config"
 makedepends="libcurl-devel libffi-devel ncurses-devel zlib-devel
  llvm-libunwind-devel"
 depends="ldc-runtime llvm-libunwind-devel"
@@ -23,7 +22,7 @@ license="BSD-3-Clause, BSL-1.0"
 homepage="https://wiki.dlang.org/LDC"
 changelog="https://raw.githubusercontent.com/ldc-developers/ldc/master/CHANGELOG.md"
 distfiles="https://github.com/ldc-developers/ldc/releases/download/v${version}/ldc-${version}-src.tar.gz"
-checksum=17fee8bb535bcb8cda0a45947526555c46c045f302a7349cc8711b254e54cf09
+checksum=d0c066eb965467625d9c5e75c00c583451b9ffa363601f9e37275ca8a8aea140
 nopie=yes
 nocross="dmd compilation fails on cross"
 # tests timeout on musl; also require unpackaged python3-lit

From 4b5d7680aff0dcb7f5d0fcb3567d005bf2159e05 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 21/23] include-what-you-use: update to 0.18.

---
 srcpkgs/include-what-you-use/template | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/include-what-you-use/template b/srcpkgs/include-what-you-use/template
index b13bb7ee56af..297669f60459 100644
--- a/srcpkgs/include-what-you-use/template
+++ b/srcpkgs/include-what-you-use/template
@@ -1,6 +1,6 @@
 # Template file for 'include-what-you-use'
 pkgname=include-what-you-use
-version=0.16
+version=0.18
 revision=1
 wrksrc="${pkgname}"
 build_style=cmake
@@ -12,7 +12,7 @@ maintainer="Leah Neukirchen <leah@vuxu.org>"
 license="NCSA"
 homepage="https://include-what-you-use.org/"
 distfiles="https://include-what-you-use.org/downloads/${pkgname}-${version}.src.tar.gz"
-checksum=8d6fc9b255343bc1e5ec459e39512df1d51c60e03562985e0076036119ff5a1c
+checksum=9102fc8419294757df86a89ce6ec305f8d90a818d1f2598a139d15eb1894b8f3
 python_version=3
 
 post_install() {

From 47be507d78bcbaa05a38e7a885f797c9d2a75015 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:18:24 +0200
Subject: [PATCH 22/23] SPIRV-LLVM-Translator: update to 14.0.0.

---
 common/shlibs                          |  1 +
 srcpkgs/SPIRV-LLVM-Translator/template | 13 +++++++------
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/common/shlibs b/common/shlibs
index 70888a227367..40efd29d5b71 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -981,6 +981,7 @@ libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
 libLLVM-14.so libllvm14-14.0.3_1
+libLLVMSPIRVLib.so.14 SPIRV-LLVM-Translator-14.0.0_1
 libisofs.so.6 libisofs-0.6.24_1
 libmpack.so.0 libmpack-1.0.5_1
 libGeoIP.so.1 libgeoip-1.4.8_1
diff --git a/srcpkgs/SPIRV-LLVM-Translator/template b/srcpkgs/SPIRV-LLVM-Translator/template
index 2504cabed367..fde9689f710c 100644
--- a/srcpkgs/SPIRV-LLVM-Translator/template
+++ b/srcpkgs/SPIRV-LLVM-Translator/template
@@ -1,19 +1,20 @@
 # Template file for 'SPIRV-LLVM-Translator'
 pkgname=SPIRV-LLVM-Translator
-version=12.0.0
+version=14.0.0
 revision=1
 build_style=cmake
 make_build_args="llvm-spirv"
-configure_args="-Wno-dev -DLLVM_LINK_LLVM_DYLIB=ON -DCMAKE_SKIP_RPATH=ON
- -DLLVM_SPIRV_INCLUDE_TESTS=OFF -DBUILD_SHARED_LIBS=ON"
-hostmakedepends="clang clang-tools-extra llvm"
-makedepends="llvm"
+configure_args="-DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release
+ -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_SKIP_RPATH=ON -DLLVM_INCLUDE_TESTS=OFF
+ -DLLVM_LINK_LLVM_DYLIB=ON -DLLVM_EXTERNAL_LIT=/usr/bin/lit -Wno-dev -DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=/usr/include/spirv/ "
+hostmakedepends="clang clang-tools-extra llvm14"
+makedepends="llvm14 SPIRV-Headers"
 short_desc="API and commands for processing SPIR-V modules"
 maintainer="Orphaned <orphan@voidlinux.org>"
 license="NCSA"
 homepage="https://github.com/KhronosGroup/SPIRV-LLVM-Translator"
 distfiles="https://github.com/KhronosGroup/${pkgname}/archive/refs/tags/v${version}.tar.gz"
-checksum=6e4fad04203f25fcde4c308c53e9f59bd05a390978992db3212d4b63aff62108
+checksum=1afc52bb4e39aeb9b5b69324a201c81bd986364f347b559995eff6fd6f013318
 make_check=no
 
 post_install() {

From 6e9d90c108b23787900456f4a2cf3687230a7454 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:35:43 +0200
Subject: [PATCH 23/23] ispc: update to 1.17.0.

---
 .../ispc/patches/cmake-build-type-none.patch  |   18 -
 srcpkgs/ispc/patches/llvm12-001.patch         |   57 -
 srcpkgs/ispc/patches/llvm12-002.patch         |  923 --------
 srcpkgs/ispc/patches/llvm12-003.patch         | 1504 ------------
 srcpkgs/ispc/patches/llvm12-004.patch         |   34 -
 srcpkgs/ispc/patches/llvm12-005.patch         |  372 ---
 srcpkgs/ispc/patches/llvm12-006.patch         |  126 -
 srcpkgs/ispc/patches/llvm12-007.patch         |  160 --
 srcpkgs/ispc/patches/llvm12-008.patch         |  149 --
 srcpkgs/ispc/patches/llvm12-009.patch         | 2109 -----------------
 srcpkgs/ispc/template                         |    8 +-
 11 files changed, 4 insertions(+), 5456 deletions(-)
 delete mode 100644 srcpkgs/ispc/patches/cmake-build-type-none.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-001.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-002.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-003.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-004.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-005.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-006.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-007.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-008.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-009.patch

diff --git a/srcpkgs/ispc/patches/cmake-build-type-none.patch b/srcpkgs/ispc/patches/cmake-build-type-none.patch
deleted file mode 100644
index 411e353c7314..000000000000
--- a/srcpkgs/ispc/patches/cmake-build-type-none.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Index: ispc-1.15.0/CMakeLists.txt
-===================================================================
---- ispc-1.15.0.orig/CMakeLists.txt
-+++ ispc-1.15.0/CMakeLists.txt
-@@ -157,13 +157,6 @@ set(OUTPUT_RELEASE Release/bin)
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin )
- 
- if(CMAKE_BUILD_TYPE)
--    # Validate build type
--    set(CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo")
--
--    string(FIND "${CONFIGURATION_TYPES}" "${CMAKE_BUILD_TYPE}" MATCHED_CONFIG)
--    if (${MATCHED_CONFIG} EQUAL -1)
--         message(FATAL_ERROR "CMAKE_BUILD_TYPE (${CMAKE_BUILD_TYPE}) allows only the following values: ${CONFIGURATION_TYPES}")
--    endif()
- else(NOT CMAKE_BUILD_TYPE)
-     set(CMAKE_BUILD_TYPE "Release")
-     message(STATUS "Build type not specified: Use Release by default.")
diff --git a/srcpkgs/ispc/patches/llvm12-001.patch b/srcpkgs/ispc/patches/llvm12-001.patch
deleted file mode 100644
index 5f2d3f5a409e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-001.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 1c0f89dccb774f216c7f6e76a99ee907a1e641cb Mon Sep 17 00:00:00 2001
-From: Dmitry Babokin <dmitry.y.babokin@intel.com>
-Date: Tue, 22 Dec 2020 17:03:59 -0800
-Subject: [PATCH] Fix to work with LLVM trunk after llvm/llvm-project@41c3b2713
-
----
- src/ctx.cpp | 18 ++++++++++++------
- 1 file changed, 12 insertions(+), 6 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 6fbb8b9cf..977e9d222 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1473,11 +1473,15 @@ void FunctionEmitContext::AddDebugPos(llvm::Value *value, const SourcePos *pos,
-     llvm::Instruction *inst = llvm::dyn_cast<llvm::Instruction>(value);
-     if (inst != NULL && m->diBuilder) {
-         SourcePos p = pos ? *pos : currentPos;
--        if (p.first_line != 0)
-+        if (p.first_line != 0) {
-             // If first_line == 0, then we're in the middle of setting up
-             // the standard library or the like; don't add debug positions
-             // for those functions
--            inst->setDebugLoc(llvm::DebugLoc::get(p.first_line, p.first_column, scope ? scope : GetDIScope()));
-+            scope = scope ? scope : GetDIScope();
-+            llvm::DebugLoc diLoc =
-+                llvm::DILocation::get(scope->getContext(), p.first_line, p.first_column, scope, nullptr, false);
-+            inst->setDebugLoc(diLoc);
-+        }
-     }
- }
- 
-@@ -1518,9 +1522,10 @@ void FunctionEmitContext::EmitVariableDebugInfo(Symbol *sym) {
-     llvm::DILocalVariable *var = m->diBuilder->createAutoVariable(
-         scope, sym->name, sym->pos.GetDIFile(), sym->pos.first_line, diType, true /* preserve through opts */);
- 
-+    llvm::DebugLoc diLoc =
-+        llvm::DILocation::get(scope->getContext(), sym->pos.first_line, sym->pos.first_column, scope, nullptr, false);
-     llvm::Instruction *declareInst =
--        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(),
--                                    llvm::DebugLoc::get(sym->pos.first_line, sym->pos.first_column, scope), bblock);
-+        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(), diLoc, bblock);
-     AddDebugPos(declareInst, &sym->pos, scope);
- }
- 
-@@ -1535,9 +1540,10 @@ void FunctionEmitContext::EmitFunctionParameterDebugInfo(Symbol *sym, int argNum
-         m->diBuilder->createParameterVariable(scope, sym->name, argNum + 1, sym->pos.GetDIFile(), sym->pos.first_line,
-                                               diType, true /* preserve through opts */, flags);
- 
-+    llvm::DebugLoc diLoc =
-+        llvm::DILocation::get(scope->getContext(), sym->pos.first_line, sym->pos.first_column, scope, nullptr, false);
-     llvm::Instruction *declareInst =
--        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(),
--                                    llvm::DebugLoc::get(sym->pos.first_line, sym->pos.first_column, scope), bblock);
-+        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(), diLoc, bblock);
-     AddDebugPos(declareInst, &sym->pos, scope);
- }
- 
diff --git a/srcpkgs/ispc/patches/llvm12-002.patch b/srcpkgs/ispc/patches/llvm12-002.patch
deleted file mode 100644
index 0903f30da10d..000000000000
--- a/srcpkgs/ispc/patches/llvm12-002.patch
+++ /dev/null
@@ -1,923 +0,0 @@
-From 0597a79d084c014780136da906afe21d15e982cb Mon Sep 17 00:00:00 2001
-From: DeepakRajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Tue, 5 Jan 2021 13:53:30 -0800
-Subject: [PATCH] Remove LLVM 8.0 and LLVM 9.0. (#1966)
-
----
- .appveyor.yml                        |  3 --
- .travis.yml                          |  7 ---
- CMakeLists.txt                       | 12 ++----
- src/ast.cpp                          |  4 --
- src/ctx.cpp                          | 30 -------------
- src/gen/GlobalsLocalization.cpp      |  4 --
- src/ispc.cpp                         | 20 ---------
- src/ispc.h                           |  3 +-
- src/ispc_version.h                   |  4 +-
- src/main.cpp                         | 13 ------
- src/module.cpp                       | 27 ------------
- src/module.h                         |  2 -
- src/opt.cpp                          | 64 ++--------------------------
- src/type.cpp                         | 10 ++---
- tests/lit-tests/1771.ispc            |  1 -
- tests/lit-tests/1844.ispc            |  3 --
- tests/lit-tests/1926.ispc            |  2 -
- tests/lit-tests/cpus_x86.ispc        |  2 +
- tests/lit-tests/cpus_x86_llvm10.ispc | 11 -----
- tests/lit-tests/lit.cfg              |  5 ---
- 20 files changed, 14 insertions(+), 213 deletions(-)
- delete mode 100644 tests/lit-tests/cpus_x86_llvm10.ispc
-
-diff --git a/.appveyor.yml b/.appveyor.yml
-index 451a7b3e0..7945cca2a 100644
---- a/.appveyor.yml
-+++ b/.appveyor.yml
-@@ -41,8 +41,6 @@ environment:
-       LLVM_VERSION: latest
-     - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
-       LLVM_VERSION: 10.0
--    - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
--      LLVM_VERSION: 9.0
- 
- for:
- -
-@@ -62,7 +60,6 @@ for:
-         if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2019" ( (set generator="Visual Studio 16") & (set vsversion=2019))
-         set LLVM_TAR=llvm-11.0.0-win.vs2019-Release+Asserts-x86.arm.wasm.7z
-         if "%LLVM_VERSION%"=="10.0" (set LLVM_TAR=llvm-10.0.1-win.vs2019-Release+Asserts-x86.arm.wasm.zip)
--        if "%LLVM_VERSION%"=="9.0" (set LLVM_TAR=llvm-9.0.1-win.vs2017-Release+Asserts-x86.arm.wasm.zip)
-   install:
-     - ps: choco install --no-progress winflexbison3 wget 7zip
-     - cmd: |-
-diff --git a/.travis.yml b/.travis.yml
-index 2e96017a6..3a6b85264 100644
---- a/.travis.yml
-+++ b/.travis.yml
-@@ -108,13 +108,6 @@ jobs:
-         - LLVM_TAR=llvm-10.0.1-ubuntu16.04-Release+Asserts-x86.arm.wasm.tar.xz
-         - LLVM_REPO=https://github.com/dbabokin/llvm-project
-         - ISPC_HOME=$TRAVIS_BUILD_DIR
--    # LLVM 9.0 + Ubuntu 16.04: build, lit tests, examples (build + run), benchmarks (build + trial run)
--    - <<: *my_tag
--      env:
--        - LLVM_VERSION=9.0 OS=Ubuntu16.04
--        - LLVM_TAR=llvm-9.0.1-ubuntu16.04-Release+Asserts-x86.arm.wasm.tar.xz
--        - LLVM_REPO=https://github.com/dbabokin/llvm-project
--        - ISPC_HOME=$TRAVIS_BUILD_DIR
-     # WASM enabled build
-     # LLVM 11.0 + Ubuntu 16.04: build, lit tests, examples (build), benchmarks (build + trial run)
-     - <<: *my_tag
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 5fa863fcf..a6b3ed251 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -241,10 +241,8 @@ if (X86_ENABLED)
-         avx2-i8x32 avx2-i16x16
-         avx2-i32x4 avx2-i32x8 avx2-i32x16 avx2-i64x4
-         avx512knl-i32x16
--        avx512skx-i32x16 avx512skx-i32x8)
--    if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "10.0.0")
--        list(APPEND ISPC_TARGETS avx512skx-i8x64 avx512skx-i16x32)
--    endif()
-+        avx512skx-i32x16 avx512skx-i32x8
-+        avx512skx-i8x64 avx512skx-i16x32)
- endif()
- if (ARM_ENABLED)
-     list(APPEND ISPC_TARGETS neon-i8x16 neon-i16x8 neon-i32x4 neon-i32x8)
-@@ -259,11 +257,7 @@ if (WASM_ENABLED)
- endif()
- 
- set(CLANG_LIBRARY_LIST clangFrontend clangDriver clangSerialization clangParse clangSema clangAnalysis clangAST clangBasic clangEdit clangLex)
--set(LLVM_COMPONENTS engine ipo bitreader bitwriter instrumentation linker option)
--
--if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "10.0.0")
--    list(APPEND LLVM_COMPONENTS frontendopenmp)
--endif()
-+set(LLVM_COMPONENTS engine ipo bitreader bitwriter instrumentation linker option frontendopenmp)
- 
- if (X86_ENABLED)
-     list(APPEND LLVM_COMPONENTS x86)
-diff --git a/src/ast.cpp b/src/ast.cpp
-index 20f75a29c..5a43c4854 100644
---- a/src/ast.cpp
-+++ b/src/ast.cpp
-@@ -44,9 +44,7 @@
- #include "sym.h"
- #include "util.h"
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/TimeProfiler.h>
--#endif
- ///////////////////////////////////////////////////////////////////////////
- // ASTNode
- 
-@@ -62,9 +60,7 @@ void AST::AddFunction(Symbol *sym, Stmt *code) {
- }
- 
- void AST::GenerateIR() {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope TimeScope("GenerateIR");
--#endif
-     for (unsigned int i = 0; i < functions.size(); ++i)
-         functions[i]->GenerateIR();
- }
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 977e9d222..42c4ea09d 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -309,21 +309,13 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym, llvm::F
-             char buf[256];
-             snprintf(buf, sizeof(buf), "__off_all_on_mask_%s", g->target->GetISAString());
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_8_0
--            llvm::Constant *offFunc = m->module->getOrInsertFunction(buf, LLVMTypes::VoidType);
--#else // LLVM 9.0+
-             llvm::FunctionCallee offFuncCallee = m->module->getOrInsertFunction(buf, LLVMTypes::VoidType);
-             llvm::Constant *offFunc = llvm::cast<llvm::Constant>(offFuncCallee.getCallee());
--#endif
-             AssertPos(currentPos, llvm::isa<llvm::Function>(offFunc));
-             llvm::BasicBlock *offBB = llvm::BasicBlock::Create(*g->ctx, "entry", (llvm::Function *)offFunc, 0);
-             llvm::StoreInst *inst = new llvm::StoreInst(LLVMMaskAllOff, globalAllOnMaskPtr, offBB);
-             if (g->opt.forceAlignedMemory) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-                 inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-             }
-             llvm::ReturnInst::Create(*g->ctx, offBB);
-         }
-@@ -2288,11 +2280,7 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
- #endif
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-     }
- 
-     AddDebugPos(inst);
-@@ -2431,11 +2419,7 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-                 // vs the proper alignment in practice.)
-                 int align = 1;
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                inst->setAlignment(align);
--#else // LLVM 10.0+
-                 inst->setAlignment(llvm::MaybeAlign(align).valueOrOne());
--#endif
-             }
- 
-             AddDebugPos(inst);
-@@ -2649,11 +2633,7 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-         align = g->target->getNativeVectorAlignment();
- 
-     if (align != 0) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(align);
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(align).valueOrOne());
--#endif
-     }
-     // Don't add debugging info to alloca instructions
-     return inst;
-@@ -2926,11 +2906,7 @@ void FunctionEmitContext::StoreInst(llvm::Value *value, llvm::Value *ptr, const
-     llvm::StoreInst *inst = new llvm::StoreInst(value, ptr, bblock);
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-     }
- 
- #ifdef ISPC_GENX_ENABLED
-@@ -3025,16 +3001,10 @@ void FunctionEmitContext::MemcpyInst(llvm::Value *dest, llvm::Value *src, llvm::
-     }
-     if (align == NULL)
-         align = LLVMInt32(1);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_8_0
--    llvm::Constant *mcFunc =
--        m->module->getOrInsertFunction("llvm.memcpy.p0i8.p0i8.i64", LLVMTypes::VoidType, LLVMTypes::VoidPointerType,
--                                       LLVMTypes::VoidPointerType, LLVMTypes::Int64Type, LLVMTypes::BoolType);
--#else // LLVM 9.0+
-     llvm::FunctionCallee mcFuncCallee =
-         m->module->getOrInsertFunction("llvm.memcpy.p0i8.p0i8.i64", LLVMTypes::VoidType, LLVMTypes::VoidPointerType,
-                                        LLVMTypes::VoidPointerType, LLVMTypes::Int64Type, LLVMTypes::BoolType);
-     llvm::Constant *mcFunc = llvm::cast<llvm::Constant>(mcFuncCallee.getCallee());
--#endif
-     AssertPos(currentPos, mcFunc != NULL);
-     AssertPos(currentPos, llvm::isa<llvm::Function>(mcFunc));
- 
-diff --git a/src/gen/GlobalsLocalization.cpp b/src/gen/GlobalsLocalization.cpp
-index 193a66289..a176e9462 100644
---- a/src/gen/GlobalsLocalization.cpp
-+++ b/src/gen/GlobalsLocalization.cpp
-@@ -470,11 +470,7 @@ void GlobalsLocalization::LocalizeGlobals(LocalizationInfo &LI) {
-         Instruction &FirstI = *Fn->getEntryBlock().begin();
-         Type *ElemTy = GV->getType()->getElementType();
-         AllocaInst *Alloca = new AllocaInst(ElemTy, 0, GV->getName() + ".local", &FirstI);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        Alloca->setAlignment(GV->getAlignment());
--#else // LLVM 10.0+
-         Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()));
--#endif
-         if (!isa<UndefValue>(GV->getInitializer()))
-             new StoreInst(GV->getInitializer(), Alloca, &FirstI);
- 
-diff --git a/src/ispc.cpp b/src/ispc.cpp
-index e2d0f206e..fac5233f7 100644
---- a/src/ispc.cpp
-+++ b/src/ispc.cpp
-@@ -272,9 +272,7 @@ typedef enum {
-     CPU_Silvermont,
- 
-     CPU_ICX,
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     CPU_TGL,
--#endif
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-     CPU_ADL,
-     CPU_SPR,
-@@ -365,10 +363,8 @@ class AllCPUs {
- 
-         names[CPU_ICX].push_back("icelake-server");
-         names[CPU_ICX].push_back("icx");
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         names[CPU_TGL].push_back("tigerlake");
-         names[CPU_TGL].push_back("tgl");
--#endif
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-         names[CPU_ADL].push_back("alderlake");
-         names[CPU_ADL].push_back("adl");
-@@ -411,11 +407,9 @@ class AllCPUs {
-         compat[CPU_ADL] = Set(CPU_ADL, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont,
-                               CPU_SandyBridge, CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_None);
- #endif
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         compat[CPU_TGL] =
-             Set(CPU_TGL, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont, CPU_SandyBridge,
-                 CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_SKX, CPU_ICL, CPU_ICX, CPU_None);
--#endif
-         compat[CPU_ICX] = Set(CPU_ICX, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont,
-                               CPU_SandyBridge, CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_SKX, CPU_ICL, CPU_None);
- 
-@@ -556,9 +550,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-         case CPU_SPR:
- #endif
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         case CPU_TGL:
--#endif
-         case CPU_ICX:
-         case CPU_ICL:
-         case CPU_SKX:
-@@ -916,7 +908,6 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         }
-         break;
-     case ISPCTarget::avx512skx_i8x64:
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0 // LLVM 10.0+
-         // This target is enabled only for LLVM 10.0 and later
-         // because LLVM requires a number of fixes, which are
-         // committed to LLVM 11.0 and can be applied to 10.0, but not
-@@ -937,12 +928,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         this->m_hasVecPrefetch = false;
-         CPUfromISA = CPU_SKX;
-         break;
--#else
--        unsupported_target = true;
--        break;
--#endif
-     case ISPCTarget::avx512skx_i16x32:
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0 // LLVM 10.0+
-         // This target is enabled only for LLVM 10.0 and later
-         // because LLVM requires a number of fixes, which are
-         // committed to LLVM 11.0 and can be applied to 10.0, but not
-@@ -963,10 +949,6 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         this->m_hasVecPrefetch = false;
-         CPUfromISA = CPU_SKX;
-         break;
--#else
--        unsupported_target = true;
--        break;
--#endif
- #ifdef ISPC_ARM_ENABLED
-     case ISPCTarget::neon_i8x16:
-         this->m_isa = Target::NEON;
-@@ -1662,11 +1644,9 @@ Globals::Globals() {
-     isMultiTargetCompilation = false;
-     errorLimit = -1;
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     enableTimeTrace = false;
-     // set default granularity to 500.
-     timeTraceGranularity = 500;
--#endif
-     target = NULL;
-     ctx = new llvm::LLVMContext;
- 
-diff --git a/src/ispc.h b/src/ispc.h
-index e25d8830e..de357a21c 100644
---- a/src/ispc.h
-+++ b/src/ispc.h
-@@ -695,13 +695,12 @@ struct Globals {
- 
-     /* Number of errors to show in ISPC. */
-     int errorLimit;
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-+
-     /* When true, enable compile time tracing. */
-     bool enableTimeTrace;
- 
-     /* When compile time tracing is enabled, set time granularity. */
-     int timeTraceGranularity;
--#endif
- };
- 
- enum {
-diff --git a/src/ispc_version.h b/src/ispc_version.h
-index d781347fd..434b2d678 100644
---- a/src/ispc_version.h
-+++ b/src/ispc_version.h
-@@ -44,13 +44,11 @@
- 
- #define ISPC_LLVM_VERSION (LLVM_VERSION_MAJOR * 10000 + LLVM_VERSION_MINOR * 100)
- 
--#define ISPC_LLVM_8_0 80000
--#define ISPC_LLVM_9_0 90000
- #define ISPC_LLVM_10_0 100000
- #define ISPC_LLVM_11_0 110000
- #define ISPC_LLVM_12_0 120000
- 
--#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_8_0
-+#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_10_0
- #define LATEST_SUPPORTED_LLVM ISPC_LLVM_12_0
- 
- #ifdef __ispc__xstr
-diff --git a/src/main.cpp b/src/main.cpp
-index 8f64330cc..5c920eabc 100644
---- a/src/main.cpp
-+++ b/src/main.cpp
-@@ -55,9 +55,7 @@
- #include <llvm/Support/Signals.h>
- #include <llvm/Support/TargetRegistry.h>
- #include <llvm/Support/TargetSelect.h>
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/ToolOutputFile.h>
--#endif
- 
- #ifdef ISPC_HOST_IS_WINDOWS
- #define strcasecmp stricmp
-@@ -181,11 +179,9 @@ static void lPrintVersion() {
-     snprintf(targetHelp, sizeof(targetHelp), "[--target-os=<os>]\t\t\tSelect target OS.  <os>={%s}",
-              g->target_registry->getSupportedOSes().c_str());
-     PrintWithWordBreaks(targetHelp, 24, TerminalWidth(), stdout);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     printf("    [--time-trace]\t\t\tTurn on time profiler. Generates JSON file based on output filename.\n");
-     printf("    [--time-trace-granularity=<value>\tMinimum time granularity (in microseconds) traced by time "
-            "profiler.\n");
--#endif
-     printf("    [--version]\t\t\t\tPrint ispc version\n");
- #ifdef ISPC_GENX_ENABLED
-     printf("    [--vc-options=<\"-option1 -option2...\">]\t\t\t\tPass additional options to Vector Compiler backend\n");
-@@ -462,7 +458,6 @@ static void setCallingConv(VectorCallStatus vectorCall, Arch arch) {
-     }
- }
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- static void writeCompileTimeFile(const char *outFileName) {
-     llvm::SmallString<128> jsonFileName(outFileName);
-     jsonFileName.append(".json");
-@@ -479,7 +474,6 @@ static void writeCompileTimeFile(const char *outFileName) {
-     of->keep();
-     return;
- }
--#endif
- 
- static std::set<int> ParsingPhases(char *stages, ArgErrors &errorHandler) {
-     constexpr int parsing_limit = 100;
-@@ -791,12 +785,10 @@ int main(int Argc, char *Argv[]) {
-             }
-         } else if (!strncmp(argv[i], "--force-alignment=", 18)) {
-             g->forceAlignment = atoi(argv[i] + 18);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         } else if (!strcmp(argv[i], "--time-trace")) {
-             g->enableTimeTrace = true;
-         } else if (!strncmp(argv[i], "--time-trace-granularity=", 25)) {
-             g->timeTraceGranularity = atoi(argv[i] + 25);
--#endif
-         } else if (!strcmp(argv[i], "--woff") || !strcmp(argv[i], "-woff")) {
-             g->disableWarnings = true;
-             g->emitPerfWarnings = false;
-@@ -1059,7 +1051,6 @@ int main(int Argc, char *Argv[]) {
- 
-     // This needs to happen after the TargetOS is decided.
-     setCallingConv(vectorCall, arch);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     if (g->enableTimeTrace) {
-         llvm::timeTraceProfilerInitialize(g->timeTraceGranularity, "ispc");
-     }
-@@ -1077,9 +1068,5 @@ int main(int Argc, char *Argv[]) {
-         }
-         llvm::timeTraceProfilerCleanup();
-     }
--#else
--    int ret = Module::CompileAndOutput(file, arch, cpu, targets, flags, ot, outFileName, headerFileName, depsFileName,
--                                       depsTargetName, hostStubFileName, devStubFileName);
--#endif
-     return ret;
- }
-diff --git a/src/module.cpp b/src/module.cpp
-index fe7452df1..a85fec77a 100644
---- a/src/module.cpp
-+++ b/src/module.cpp
-@@ -170,9 +170,7 @@ Module::Module(const char *fn) {
-     module->setDataLayout(g->target->getDataLayout()->getStringRepresentation());
- 
-     if (g->generateDebuggingSymbols) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Create Debug Data");
--#endif
-         // To enable debug information on Windows, we have to let llvm know, that
-         // debug information should be emitted in CodeView format.
-         if (g->target_os == TargetOS::windows) {
-@@ -226,10 +224,8 @@ extern YY_BUFFER_STATE yy_create_buffer(FILE *, int);
- extern void yy_delete_buffer(YY_BUFFER_STATE);
- 
- int Module::CompileFile() {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope CompileFileTimeScope(
-         "CompileFile", llvm::StringRef(filename + ("_" + std::string(g->target->GetISAString()))));
--#endif
-     extern void ParserInit();
-     ParserInit();
- 
-@@ -238,18 +234,14 @@ int Module::CompileFile() {
-     // variable 'm' to be initialized and available (which it isn't until
-     // the Module constructor returns...)
-     {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("DefineStdlib");
--#endif
-         DefineStdlib(symbolTable, g->ctx, module, g->includeStdlib);
-     }
- 
-     bool runPreprocessor = g->runCPP;
- 
-     if (runPreprocessor) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Frontend parser");
--#endif
-         if (!IsStdin(filename)) {
-             // Try to open the file first, since otherwise we crash in the
-             // preprocessor if the file doesn't exist.
-@@ -268,9 +260,7 @@ int Module::CompileFile() {
-         yyparse();
-         yy_delete_buffer(strbuf);
-     } else {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Frontend parser");
--#endif
-         // No preprocessor, just open up the file if it's not stdin..
-         FILE *f = NULL;
-         if (IsStdin(filename)) {
-@@ -297,9 +287,7 @@ int Module::CompileFile() {
- 
-     if (diBuilder)
-         diBuilder->finalize();
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope TimeScope("Optimize");
--#endif
-     if (errorCount == 0)
-         Optimize(module, g->opt.level);
- 
-@@ -1243,15 +1231,8 @@ bool Module::writeObjectFileOrAssembly(llvm::TargetMachine *targetMachine, llvm:
-                                        const char *outFileName) {
-     // Figure out if we're generating object file or assembly output, and
-     // set binary output for object files
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    Assert(!g->target->isGenXTarget());
--    llvm::TargetMachine::CodeGenFileType fileType =
--        (outputType == Object) ? llvm::TargetMachine::CGFT_ObjectFile : llvm::TargetMachine::CGFT_AssemblyFile;
--    bool binary = (fileType == llvm::TargetMachine::CGFT_ObjectFile);
--#else // LLVM 10.0+
-     llvm::CodeGenFileType fileType = (outputType == Object) ? llvm::CGFT_ObjectFile : llvm::CGFT_AssemblyFile;
-     bool binary = (fileType == llvm::CGFT_ObjectFile);
--#endif
- 
-     llvm::sys::fs::OpenFlags flags = binary ? llvm::sys::fs::F_None : llvm::sys::fs::F_Text;
- 
-@@ -2219,11 +2200,7 @@ void Module::execPreprocessor(const char *infilename, llvm::raw_string_ostream *
-     inst.setTarget(target);
-     inst.createSourceManager(inst.getFileManager());
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    clang::FrontendInputFile inputFile(infilename, clang::InputKind::Unknown);
--#else // LLVM 10.0+
-     clang::FrontendInputFile inputFile(infilename, clang::InputKind());
--#endif
- 
-     inst.InitializeSourceManager(inputFile);
- 
-@@ -2722,9 +2699,7 @@ int Module::CompileAndOutput(const char *srcFile, Arch arch, const char *cpu, st
- 
-         m = new Module(srcFile);
-         if (m->CompileFile() == 0) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-             llvm::TimeTraceScope TimeScope("Backend");
--#endif
- #ifdef ISPC_GENX_ENABLED
-             if (outputType == Asm || outputType == Object) {
-                 if (g->target->isGenXTarget()) {
-@@ -2855,9 +2830,7 @@ int Module::CompileAndOutput(const char *srcFile, Arch arch, const char *cpu, st
- 
-             m = new Module(srcFile);
-             int compileFileError = m->CompileFile();
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-             llvm::TimeTraceScope TimeScope("Backend");
--#endif
-             if (compileFileError == 0) {
-                 // Create the dispatch module, unless already created;
-                 // in the latter case, just do the checking
-diff --git a/src/module.h b/src/module.h
-index 61d3cfea0..603124d50 100644
---- a/src/module.h
-+++ b/src/module.h
-@@ -43,9 +43,7 @@
- 
- #include <llvm/IR/DebugInfo.h>
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/TimeProfiler.h>
--#endif
- 
- #ifdef ISPC_GENX_ENABLED
- #include "ocl_igc_interface/igc_ocl_device_ctx.h"
-diff --git a/src/opt.cpp b/src/opt.cpp
-index a655a8344..5b1ac7b63 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -66,6 +66,7 @@
- #include <llvm/IR/Instructions.h>
- #include <llvm/IR/IntrinsicInst.h>
- #include <llvm/IR/Intrinsics.h>
-+#include <llvm/IR/IntrinsicsX86.h>
- #include <llvm/IR/LegacyPassManager.h>
- #include <llvm/IR/Module.h>
- #include <llvm/IR/PatternMatch.h>
-@@ -85,9 +86,6 @@
- #include <llvm/Transforms/Scalar/InstSimplifyPass.h>
- #include <llvm/Transforms/Utils.h>
- #include <llvm/Transforms/Utils/BasicBlockUtils.h>
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
--#include <llvm/IR/IntrinsicsX86.h>
--#endif
- 
- #ifdef ISPC_HOST_IS_LINUX
- #include <alloca.h>
-@@ -1003,10 +1001,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
-                 name = LLVMGetName(callInst->getArgOperand(0), "_load");
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                llvm::Instruction *loadInst =
--                    new llvm::LoadInst(castPtr, name, false /* not volatile */, align, (llvm::Instruction *)NULL);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-                 llvm::Instruction *loadInst = new llvm::LoadInst(castPtr, name, false /* not volatile */,
-                                                                  llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
- #else
-@@ -1043,13 +1038,8 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedStore32 ? 4 : 8;
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                llvm::StoreInst *storeInst = new llvm::StoreInst(rvalue, castPtr, (llvm::Instruction *)NULL);
--                storeInst->setAlignment(align);
--#else
-                 llvm::StoreInst *storeInst = new llvm::StoreInst(rvalue, castPtr, (llvm::Instruction *)NULL,
-                                                                  llvm::MaybeAlign(align).valueOrOne());
--#endif
-                 lCopyMetadata(storeInst, callInst);
-                 llvm::ReplaceInstWithInst(callInst, storeInst);
- 
-@@ -1066,9 +1056,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool IntrinsicsOpt::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("IntrinsicsOpt::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -1239,9 +1227,7 @@ bool InstructionSimplifyPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool InstructionSimplifyPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("InstructionSimplifyPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -2974,16 +2960,10 @@ static bool lImproveMaskedStore(llvm::CallInst *callInst) {
- 
-             lvalue = new llvm::BitCastInst(lvalue, ptrType, "lvalue_to_ptr_type", callInst);
-             lCopyMetadata(lvalue, callInst);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--            store =
--                new llvm::StoreInst(rvalue, lvalue, false /* not volatile */,
--                                    g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align);
--#else
-             store = new llvm::StoreInst(
-                 rvalue, lvalue, false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-                     .valueOrOne());
--#endif
-         }
-         if (store != NULL) {
-             lCopyMetadata(store, callInst);
-@@ -3059,11 +3039,7 @@ static bool lImproveMaskedLoad(llvm::CallInst *callInst, llvm::BasicBlock::itera
-         {
-             llvm::Type *ptrType = llvm::PointerType::get(callInst->getType(), 0);
-             ptr = new llvm::BitCastInst(ptr, ptrType, "ptr_cast_for_load", callInst);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--            load = new llvm::LoadInst(ptr, callInst->getName(), false /* not volatile */,
--                                      g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align,
--                                      (llvm::Instruction *)NULL);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-             load = new llvm::LoadInst(
-                 ptr, callInst->getName(), false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-@@ -3129,9 +3105,7 @@ bool ImproveMemoryOpsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ImproveMemoryOpsPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ImproveMemoryOpsPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -3424,9 +3398,7 @@ llvm::Value *lGEPAndLoad(llvm::Value *basePtr, int64_t offset, int align, llvm::
-                          llvm::Type *type) {
-     llvm::Value *ptr = lGEPInst(basePtr, LLVMInt64(offset), "new_base", insertBefore);
-     ptr = new llvm::BitCastInst(ptr, llvm::PointerType::get(type, 0), "ptr_cast", insertBefore);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, align, insertBefore);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-     return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, llvm::MaybeAlign(align), insertBefore);
- #else // LLVM 11.0+
-     return new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-@@ -4135,9 +4107,7 @@ bool GatherCoalescePass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool GatherCoalescePass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("GatherCoalescePass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -4467,9 +4437,7 @@ bool ReplacePseudoMemoryOpsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplacePseudoMemoryOpsPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplacePseudoMemoryOpsPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -4573,9 +4541,7 @@ bool IsCompileTimeConstantPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool IsCompileTimeConstantPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("IsCompileTimeConstantPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5201,9 +5167,7 @@ bool PeepholePass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool PeepholePass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("PeepholePass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5299,9 +5263,7 @@ bool ReplaceStdlibShiftPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceStdlibShiftPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceStdlibShiftPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5399,9 +5361,7 @@ llvm::Instruction *FixBooleanSelectPass::fixSelect(llvm::SelectInst *sel, llvm::
- }
- 
- bool FixBooleanSelectPass::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("FixBooleanSelectPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
- 
-     return modifiedAny;
-@@ -5964,9 +5924,7 @@ bool GenXGatherCoalescing::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool GenXGatherCoalescing::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("GenXGatherCoalescing::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6113,9 +6071,7 @@ bool PromoteToPrivateMemoryPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool PromoteToPrivateMemoryPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("PromoteToPrivateMemoryPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6181,9 +6137,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceLLVMIntrinsics::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceLLVMIntrinsics::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6278,9 +6232,7 @@ bool ReplaceUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceUnsupportedInsts::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceUnsupportedInsts::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6369,9 +6321,7 @@ bool CheckUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool CheckUnsupportedInsts::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("CheckUnsupportedInsts::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6440,9 +6390,7 @@ bool MangleOpenCLBuiltins::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool MangleOpenCLBuiltins::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("MangleOpenCLBuiltins::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6828,9 +6776,7 @@ bool FixAddressSpace::runOnFunction(llvm::Function &F) {
-     // Transformations are correct when the function is not internal.
-     // This is due to address space calculation algorithm.
-     // TODO: problems can be met in case of Stack Calls
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("FixAddressSpace::runOnFunction", F.getName());
--#endif
-     if (F.getLinkage() == llvm::GlobalValue::LinkageTypes::InternalLinkage)
-         return false;
- 
-@@ -6854,9 +6800,7 @@ class DemotePHIs : public llvm::FunctionPass {
- char DemotePHIs::ID = 0;
- 
- bool DemotePHIs::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("DemotePHIs::runOnFunction", F.getName());
--#endif
-     if (F.isDeclaration() || skipFunction(F))
-         return false;
-     std::vector<llvm::Instruction *> WorkList;
-diff --git a/src/type.cpp b/src/type.cpp
-index 688a4e874..fa0cb04db 100644
---- a/src/type.cpp
-+++ b/src/type.cpp
-@@ -1822,14 +1822,10 @@ llvm::DIType *StructType::GetDIType(llvm::DIScope *scope) const {
-     llvm::DIFile *diFile = pos.GetDIFile();
-     llvm::DINamespace *diSpace = pos.GetDINamespace();
-     return m->diBuilder->createStructType(diSpace, GetString(), diFile,
--                                          pos.first_line,          // Line number
--                                          layout->getSizeInBits(), // Size in bits
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                                          layout->getAlignment() * 8, // Alignment in bits
--#else                                                                 // LLVM 10.0+
-+                                          pos.first_line,                     // Line number
-+                                          layout->getSizeInBits(),            // Size in bits
-                                           layout->getAlignment().value() * 8, // Alignment in bits
--#endif
--                                          llvm::DINode::FlagZero, // Flags
-+                                          llvm::DINode::FlagZero,             // Flags
-                                           NULL, elements);
- }
- 
-diff --git a/tests/lit-tests/1771.ispc b/tests/lit-tests/1771.ispc
-index 98064d84d..4feb73dd7 100644
---- a/tests/lit-tests/1771.ispc
-+++ b/tests/lit-tests/1771.ispc
-@@ -5,7 +5,6 @@
- // RUN: %{ispc} %s --target=sse4-i16x8 --emit-asm -o - | FileCheck %s -check-prefix=CHECKSSE4_I16X8
- // RUN: %{ispc} %s --target=sse4-i8x16 --emit-asm -o - | FileCheck %s -check-prefix=CHECKSSE4_I8X16
- 
--// REQUIRES: LLVM_10_0+
- // REQUIRES: X86_ENABLED
- 
- // CHECKAVX2_I32X8: {{[a-z]*xor[a-z]*}}  %xmm0, %xmm0, %xmm0
-diff --git a/tests/lit-tests/1844.ispc b/tests/lit-tests/1844.ispc
-index 793a8866c..189edf4c3 100644
---- a/tests/lit-tests/1844.ispc
-+++ b/tests/lit-tests/1844.ispc
-@@ -6,9 +6,6 @@
- 
- // REQUIRES: X86_ENABLED
- 
--// It doesn't work for anything earlier than 10.0, but it will not be fixed, so don't run.
--// REQUIRES: LLVM_10_0+
--
- extern uniform unsigned int64 var_6;
- extern uniform unsigned int16 var_11;
- extern uniform bool arr_201 [1] [15] [20];
-diff --git a/tests/lit-tests/1926.ispc b/tests/lit-tests/1926.ispc
-index 70f7cc3c2..7921c91a6 100644
---- a/tests/lit-tests/1926.ispc
-+++ b/tests/lit-tests/1926.ispc
-@@ -2,8 +2,6 @@
- // RUN: cat %T/1926.o.json \
- // RUN:   | FileCheck %s
- 
--// REQUIRES: LLVM_10_0+
--
- // CHECK: "traceEvents"
- // CHECK: "detail"
- export uniform int foo(uniform int a[], uniform int count) {
-diff --git a/tests/lit-tests/cpus_x86.ispc b/tests/lit-tests/cpus_x86.ispc
-index 516efdd4c..4d60186f6 100644
---- a/tests/lit-tests/cpus_x86.ispc
-+++ b/tests/lit-tests/cpus_x86.ispc
-@@ -24,6 +24,8 @@
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icl
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icelake-server
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icx
-+//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tigerlake
-+//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tgl
- 
- // REQUIRES: X86_ENABLED
- 
-diff --git a/tests/lit-tests/cpus_x86_llvm10.ispc b/tests/lit-tests/cpus_x86_llvm10.ispc
-deleted file mode 100644
-index ef00000e5..000000000
---- a/tests/lit-tests/cpus_x86_llvm10.ispc
-+++ /dev/null
-@@ -1,11 +0,0 @@
--// The test checks that cpu definitions (including all synonyms) are successfully consumed by compiler.
--
--//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tigerlake
--//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tgl
--
--// REQUIRES: X86_ENABLED
--// REQUIRES: LLVM_10_0+
--
--uniform int i;
--
--void foo() {}
-diff --git a/tests/lit-tests/lit.cfg b/tests/lit-tests/lit.cfg
-index 17016579d..045e69437 100644
---- a/tests/lit-tests/lit.cfg
-+++ b/tests/lit-tests/lit.cfg
-@@ -30,11 +30,6 @@ print("Config:")
- 
- # LLVM version
- llvm_version = LooseVersion(ispc_llvm_version_number)
--if llvm_version >= LooseVersion("10.0.0"):
--    print("LLVM_10_0+: YES")
--    config.available_features.add("LLVM_10_0+")
--else:
--    print("LLVM_10_0+: NO")
- 
- if llvm_version >= LooseVersion("12.0.0"):
-     print("LLVM_12_0+: YES")
diff --git a/srcpkgs/ispc/patches/llvm12-003.patch b/srcpkgs/ispc/patches/llvm12-003.patch
deleted file mode 100644
index 0423afc9e3f9..000000000000
--- a/srcpkgs/ispc/patches/llvm12-003.patch
+++ /dev/null
@@ -1,1504 +0,0 @@
-From 1851d18b213dbad169937076176b2d5509733c76 Mon Sep 17 00:00:00 2001
-From: Deepak Rajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Tue, 12 Jan 2021 22:15:12 -0800
-Subject: [PATCH] fixes #1821 - Removing LLVMGetName() and switching to
- LLVM::Twine.
-
----
- src/ctx.cpp      | 304 ++++++++++++++++++++++-------------------------
- src/ctx.h        |  72 +++++------
- src/expr.cpp     |  36 +++---
- src/llvmutil.cpp |  17 ---
- src/llvmutil.h   |   5 -
- src/opt.cpp      | 103 +++++++++-------
- 6 files changed, 255 insertions(+), 282 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 42c4ea09d..ded524b71 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1020,8 +1020,8 @@ void FunctionEmitContext::EmitCaseLabel(int value, bool checkMask, SourcePos pos
-     llvm::BasicBlock *bbCaseImpl = NULL;
-     if (emitGenXHardwareMask()) {
-         // Create basic block with actual case implementation
--        std::string bbName = bbCase->getName().str() + "_impl";
--        bbCaseImpl = CreateBasicBlock(bbName.c_str(), bbCase);
-+        llvm::Twine bbName = llvm::Twine(bbCase->getName()) + "_impl";
-+        bbCaseImpl = CreateBasicBlock(bbName, bbCase);
-     }
- #endif
- 
-@@ -1185,7 +1185,7 @@ bool FunctionEmitContext::initLabelBBlocks(ASTNode *node, void *data) {
-     if (ctx->labelMap.find(ls->name) != ctx->labelMap.end())
-         Error(ls->pos, "Multiple labels named \"%s\" in function.", ls->name.c_str());
-     else {
--        llvm::BasicBlock *bb = ctx->CreateBasicBlock(ls->name.c_str());
-+        llvm::BasicBlock *bb = ctx->CreateBasicBlock(ls->name);
-         ctx->labelMap[ls->name] = bb;
-     }
-     return true;
-@@ -1299,7 +1299,7 @@ llvm::Value *FunctionEmitContext::Any(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_any"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_any");
- }
- 
- llvm::Value *FunctionEmitContext::All(llvm::Value *mask) {
-@@ -1315,7 +1315,7 @@ llvm::Value *FunctionEmitContext::All(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_all"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_all");
- }
- 
- llvm::Value *FunctionEmitContext::None(llvm::Value *mask) {
-@@ -1331,7 +1331,7 @@ llvm::Value *FunctionEmitContext::None(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_none"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_none");
- }
- 
- llvm::Value *FunctionEmitContext::LaneMask(llvm::Value *v) {
-@@ -1349,7 +1349,7 @@ llvm::Value *FunctionEmitContext::LaneMask(llvm::Value *v) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, v, LLVMGetName(v, "_movmsk"));
-+    return CallInst(fmm, NULL, v, llvm::Twine(v->getName()) + "_movmsk");
- }
- 
- llvm::Value *FunctionEmitContext::MasksAllEqual(llvm::Value *v1, llvm::Value *v2) {
-@@ -1364,11 +1364,12 @@ llvm::Value *FunctionEmitContext::MasksAllEqual(llvm::Value *v1, llvm::Value *v2
- #else
-     if (g->target->getArch() == Arch::wasm32) {
-         llvm::Function *fmm = m->module->getFunction("__wasm_cmp_msk_eq");
--        return CallInst(fmm, NULL, {v1, v2}, LLVMGetName("wasm_cmp_msk_eq", v1, v2));
-+        return CallInst(fmm, NULL, {v1, v2}, ((llvm::Twine("wasm_cmp_msk_eq_") + v1->getName()) + "_") + v2->getName());
-     }
-     llvm::Value *mm1 = LaneMask(v1);
-     llvm::Value *mm2 = LaneMask(v2);
--    return CmpInst(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_EQ, mm1, mm2, LLVMGetName("equal", v1, v2));
-+    return CmpInst(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_EQ, mm1, mm2,
-+                   ((llvm::Twine("equal_") + v1->getName()) + "_") + v2->getName());
- #endif
- }
- 
-@@ -1392,7 +1393,7 @@ llvm::Value *FunctionEmitContext::GetStringPtr(const std::string &str) {
-     return new llvm::BitCastInst(lstrPtr, LLVMTypes::VoidPointerType, "str_void_ptr", bblock);
- }
- 
--llvm::BasicBlock *FunctionEmitContext::CreateBasicBlock(const char *name, llvm::BasicBlock *insertAfter) {
-+llvm::BasicBlock *FunctionEmitContext::CreateBasicBlock(const llvm::Twine &name, llvm::BasicBlock *insertAfter) {
-     llvm::BasicBlock *newBB = llvm::BasicBlock::Create(*g->ctx, name, llvmFunction);
-     if (insertAfter)
-         newBB->moveAfter(insertAfter);
-@@ -1416,14 +1417,15 @@ llvm::Value *FunctionEmitContext::I1VecToBoolVec(llvm::Value *b) {
- 
-         for (unsigned int i = 0; i < at->getNumElements(); ++i) {
-             llvm::Value *elt = ExtractInst(b, i);
--            llvm::Value *sext = SwitchBoolSize(elt, LLVMTypes::BoolVectorStorageType, LLVMGetName(elt, "_to_boolvec"));
-+            llvm::Value *sext =
-+                SwitchBoolSize(elt, LLVMTypes::BoolVectorStorageType, llvm::Twine(elt->getName()) + "_to_boolvec");
-             ret = InsertInst(ret, sext, i);
-         }
-         return ret;
-     } else {
-         // For non-array types, convert to 'LLVMTypes::BoolVectorType' if
-         // necessary.
--        return SwitchBoolSize(b, LLVMTypes::BoolVectorType, LLVMGetName(b, "_to_boolvec"));
-+        return SwitchBoolSize(b, LLVMTypes::BoolVectorType, llvm::Twine(b->getName()) + "_to_boolvec");
-     }
- }
- 
-@@ -1563,7 +1565,7 @@ static int lArrayVectorWidth(llvm::Type *t) {
- }
- 
- llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps inst, llvm::Value *v0, llvm::Value *v1,
--                                                 const char *name) {
-+                                                 const llvm::Twine &name) {
-     if (v0 == NULL || v1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1573,7 +1575,7 @@ llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps in
-     llvm::Type *type = v0->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *bop = llvm::BinaryOperator::Create(inst, v0, v1, name ? name : "", bblock);
-+        llvm::Instruction *bop = llvm::BinaryOperator::Create(inst, v0, v1, name, bblock);
-         AddDebugPos(bop);
-         return bop;
-     } else {
-@@ -1591,7 +1593,7 @@ llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps in
-     }
- }
- 
--llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const char *name) {
-+llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const llvm::Twine &name) {
-     if (v == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1603,14 +1605,14 @@ llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const char *name)
-     llvm::Type *type = v->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *binst = llvm::BinaryOperator::CreateNot(v, name ? name : "not", bblock);
-+        llvm::Instruction *binst = llvm::BinaryOperator::CreateNot(v, name.isTriviallyEmpty() ? "not" : name, bblock);
-         AddDebugPos(binst);
-         return binst;
-     } else {
-         llvm::Value *ret = llvm::UndefValue::get(type);
-         for (int i = 0; i < arraySize; ++i) {
-             llvm::Value *a = ExtractInst(v, i);
--            llvm::Value *op = llvm::BinaryOperator::CreateNot(a, name ? name : "not", bblock);
-+            llvm::Value *op = llvm::BinaryOperator::CreateNot(a, name.isTriviallyEmpty() ? "not" : name, bblock);
-             AddDebugPos(op);
-             ret = InsertInst(ret, op, i);
-         }
-@@ -1638,7 +1640,7 @@ static llvm::Type *lGetMatchingBoolVectorType(llvm::Type *type) {
- }
- 
- llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm::CmpInst::Predicate pred,
--                                          llvm::Value *v0, llvm::Value *v1, const char *name) {
-+                                          llvm::Value *v0, llvm::Value *v1, const llvm::Twine &name) {
-     if (v0 == NULL || v1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1648,7 +1650,8 @@ llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm
-     llvm::Type *type = v0->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *ci = llvm::CmpInst::Create(inst, pred, v0, v1, name ? name : "cmp", bblock);
-+        llvm::Instruction *ci =
-+            llvm::CmpInst::Create(inst, pred, v0, v1, name.isTriviallyEmpty() ? "cmp" : name, bblock);
-         AddDebugPos(ci);
-         return ci;
-     } else {
-@@ -1657,14 +1660,14 @@ llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm
-         for (int i = 0; i < arraySize; ++i) {
-             llvm::Value *a = ExtractInst(v0, i);
-             llvm::Value *b = ExtractInst(v1, i);
--            llvm::Value *op = CmpInst(inst, pred, a, b, name);
-+            llvm::Value *op = CmpInst(inst, pred, a, b, name.isTriviallyEmpty() ? "cmp" : name);
-             ret = InsertInst(ret, op, i);
-         }
-         return ret;
-     }
- }
- 
--llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const char *name) {
-+llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1704,21 +1707,19 @@ llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const char *n
-     return ret;
- }
- 
--llvm::Value *FunctionEmitContext::BitCastInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Value *FunctionEmitContext::BitCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_bitcast");
--
--    llvm::Instruction *inst = new llvm::BitCastInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::BitCastInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_bitcast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const char *name) {
-+llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1728,23 +1729,19 @@ llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const char *n
-         // no-op for varying pointers; they're already vectors of ints
-         return value;
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_ptr2int");
-     llvm::Type *type = LLVMTypes::PointerIntType;
--    llvm::Instruction *inst = new llvm::PtrToIntInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::PtrToIntInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_ptr2int");
--
-     llvm::Type *fromType = value->getType();
-     if (llvm::isa<llvm::VectorType>(fromType)) {
-         // varying pointer
-@@ -1752,27 +1749,26 @@ llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *t
-             // already the right type--done
-             return value;
-         else if (fromType->getScalarSizeInBits() > toType->getScalarSizeInBits())
--            return TruncInst(value, toType, name);
-+            return TruncInst(value, toType,
-+                             name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name);
-         else {
-             AssertPos(currentPos, fromType->getScalarSizeInBits() < toType->getScalarSizeInBits());
--            return ZExtInst(value, toType, name);
-+            return ZExtInst(value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name);
-         }
-     }
- 
--    llvm::Instruction *inst = new llvm::PtrToIntInst(value, toType, name, bblock);
-+    llvm::Instruction *inst = new llvm::PtrToIntInst(
-+        value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_int2ptr");
--
-     llvm::Type *fromType = value->getType();
-     if (llvm::isa<llvm::VectorType>(fromType)) {
-         // varying pointer
-@@ -1780,95 +1776,87 @@ llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *t
-             // done
-             return value;
-         else if (fromType->getScalarSizeInBits() > toType->getScalarSizeInBits())
--            return TruncInst(value, toType, name);
-+            return TruncInst(value, toType,
-+                             name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name);
-         else {
-             AssertPos(currentPos, fromType->getScalarSizeInBits() < toType->getScalarSizeInBits());
--            return ZExtInst(value, toType, name);
-+            return ZExtInst(value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name);
-         }
-     }
- 
--    llvm::Instruction *inst = new llvm::IntToPtrInst(value, toType, name, bblock);
-+    llvm::Instruction *inst = new llvm::IntToPtrInst(
-+        value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::TruncInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::TruncInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_trunc");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::TruncInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::TruncInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_trunc" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
- llvm::Instruction *FunctionEmitContext::CastInst(llvm::Instruction::CastOps op, llvm::Value *value, llvm::Type *type,
--                                                 const char *name) {
-+                                                 const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_cast");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = llvm::CastInst::Create(op, value, type, name, bblock);
-+    llvm::Instruction *inst = llvm::CastInst::Create(
-+        op, value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_cast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::FPCastInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::FPCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_cast");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = llvm::CastInst::CreateFPCast(value, type, name, bblock);
-+    llvm::Instruction *inst = llvm::CastInst::CreateFPCast(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_cast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::SExtInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::SExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_sext");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::SExtInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::SExtInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_sext" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::ZExtInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::ZExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_zext");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::ZExtInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::ZExtInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_zext" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
-@@ -1913,14 +1901,15 @@ llvm::Value *FunctionEmitContext::applyVaryingGEP(llvm::Value *basePtr, llvm::Va
-         scale = SmearUniform(scale);
-         Assert(index != NULL);
-         // offset = index * scale
--        offset = BinaryOperator(llvm::Instruction::Mul, scale, index, LLVMGetName("mul", scale, index));
-+        offset = BinaryOperator(llvm::Instruction::Mul, scale, index,
-+                                ((llvm::Twine("mul_") + scale->getName()) + "_") + index->getName());
-     }
- 
-     // For 64-bit targets, if we've been doing our offset calculations in
-     // 32 bits, we still have to convert to a 64-bit value before we
-     // actually add the offset to the pointer.
-     if (g->target->is32Bit() == false && g->opt.force32BitAddressing == true)
--        offset = SExtInst(offset, LLVMTypes::Int64VectorType, LLVMGetName(offset, "_to_64"));
-+        offset = SExtInst(offset, LLVMTypes::Int64VectorType, llvm::Twine(offset->getName()) + "_to_64");
- 
-     // Smear out the pointer to be varying; either the base pointer or the
-     // index must be varying for this method to be called.
-@@ -1929,7 +1918,7 @@ llvm::Value *FunctionEmitContext::applyVaryingGEP(llvm::Value *basePtr, llvm::Va
-     llvm::Value *varyingPtr = baseIsUniform ? SmearUniform(basePtr) : basePtr;
- 
-     // newPtr = ptr + offset
--    return BinaryOperator(llvm::Instruction::Add, varyingPtr, offset, LLVMGetName(basePtr, "_offset"));
-+    return BinaryOperator(llvm::Instruction::Add, varyingPtr, offset, llvm::Twine(basePtr->getName()) + "_offset");
- }
- 
- void FunctionEmitContext::MatchIntegerTypes(llvm::Value **v0, llvm::Value **v1) {
-@@ -2006,13 +1995,13 @@ llvm::Value *FunctionEmitContext::MakeSlicePointer(llvm::Value *ptr, llvm::Value
-     llvm::StructType *st = llvm::StructType::get(*g->ctx, eltTypes);
- 
-     llvm::Value *ret = llvm::UndefValue::get(st);
--    ret = InsertInst(ret, ptr, 0, LLVMGetName(ret, "_slice_ptr"));
--    ret = InsertInst(ret, offset, 1, LLVMGetName(ret, "_slice_offset"));
-+    ret = InsertInst(ret, ptr, 0, llvm::Twine(ret->getName()) + "_slice_ptr");
-+    ret = InsertInst(ret, offset, 1, llvm::Twine(ret->getName()) + "_slice_offset");
-     return ret;
- }
- 
- llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index, const Type *ptrRefType,
--                                                    const char *name) {
-+                                                    const llvm::Twine &name) {
-     if (basePtr == NULL || index == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2065,8 +2054,8 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
-         // uniform, so just emit the regular LLVM GEP instruction
-         llvm::Value *ind[1] = {index};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&ind[0], &ind[1]);
--        llvm::Instruction *inst =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "gep", bblock);
-+        llvm::Instruction *inst = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                                  name.isTriviallyEmpty() ? "gep" : name, bblock);
-         AddDebugPos(inst);
-         return inst;
-     } else
-@@ -2074,7 +2063,7 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
- }
- 
- llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0, llvm::Value *index1,
--                                                    const Type *ptrRefType, const char *name) {
-+                                                    const Type *ptrRefType, const llvm::Twine &name) {
-     if (basePtr == NULL || index0 == NULL || index1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2114,8 +2103,8 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
-         // uniform, so just emit the regular LLVM GEP instruction
-         llvm::Value *indices[2] = {index0, index1};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&indices[0], &indices[2]);
--        llvm::Instruction *inst =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "gep", bblock);
-+        llvm::Instruction *inst = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                                  name.isTriviallyEmpty() ? "gep" : name, bblock);
-         AddDebugPos(inst);
-         return inst;
-     } else {
-@@ -2138,7 +2127,7 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
- }
- 
- llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int elementNum, const Type *ptrRefType,
--                                                   const char *name, const PointerType **resultPtrType) {
-+                                                   const llvm::Twine &name, const PointerType **resultPtrType) {
-     if (resultPtrType != NULL)
-         AssertPos(currentPos, ptrRefType != NULL);
- 
-@@ -2195,8 +2184,8 @@ llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int
-         // If the pointer is uniform, we can use the regular LLVM GEP.
-         llvm::Value *offsets[2] = {LLVMInt32(0), LLVMInt32(elementNum)};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&offsets[0], &offsets[2]);
--        resultPtr =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "struct_offset", bblock);
-+        resultPtr = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                    name.isTriviallyEmpty() ? "struct_offset" : name, bblock);
-     } else {
-         // Otherwise do the math to find the offset and add it to the given
-         // varying pointers
-@@ -2237,7 +2226,7 @@ llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int
-         return resultPtr;
- }
- 
--llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if ((value == NULL) || (toType == NULL)) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2248,20 +2237,18 @@ llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type
-     llvm::Value *newBool = value;
-     if (g->target->getDataLayout()->getTypeSizeInBits(fromType) >
-         g->target->getDataLayout()->getTypeSizeInBits(toType)) {
--        if (name == NULL)
--            name = LLVMGetName(value, "_switchBool");
--        newBool = TruncInst(value, toType, name);
-+        newBool =
-+            TruncInst(value, toType, name.isTriviallyEmpty() ? (llvm::Twine(value->getName()) + "_switchBool") : name);
-     } else if (g->target->getDataLayout()->getTypeSizeInBits(fromType) <
-                g->target->getDataLayout()->getTypeSizeInBits(toType)) {
--        if (name == NULL)
--            name = LLVMGetName(value, "_switchBool");
--        newBool = SExtInst(value, toType, name);
-+        newBool =
-+            SExtInst(value, toType, name.isTriviallyEmpty() ? (llvm::Twine(value->getName()) + "_switchBool") : name);
-     }
- 
-     return newBool;
- }
- 
--llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, const char *name) {
-+llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, const llvm::Twine &name) {
-     if (ptr == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2270,13 +2257,13 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
-     llvm::PointerType *pt = llvm::dyn_cast<llvm::PointerType>(ptr->getType());
-     AssertPos(currentPos, pt != NULL);
- 
--    if (name == NULL)
--        name = LLVMGetName(ptr, "_load");
--
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    llvm::LoadInst *inst = new llvm::LoadInst(pt->getPointerElementType(), ptr, name, bblock);
-+    llvm::LoadInst *inst =
-+        new llvm::LoadInst(pt->getPointerElementType(), ptr,
-+                           name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name, bblock);
- #else
--    llvm::LoadInst *inst = new llvm::LoadInst(ptr, name, bblock);
-+    llvm::LoadInst *inst =
-+        new llvm::LoadInst(ptr, name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name, bblock);
- #endif
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
-@@ -2307,8 +2294,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
- static llvm::Value *lFinalSliceOffset(FunctionEmitContext *ctx, llvm::Value *ptr, const PointerType **ptrType) {
-     Assert(CastType<PointerType>(*ptrType) != NULL);
- 
--    llvm::Value *slicePtr = ctx->ExtractInst(ptr, 0, LLVMGetName(ptr, "_ptr"));
--    llvm::Value *sliceOffset = ctx->ExtractInst(ptr, 1, LLVMGetName(ptr, "_offset"));
-+    llvm::Value *slicePtr = ctx->ExtractInst(ptr, 0, llvm::Twine(ptr->getName()) + "_ptr");
-+    llvm::Value *sliceOffset = ctx->ExtractInst(ptr, 1, llvm::Twine(ptr->getName()) + "_offset");
- 
-     // slicePtr should be a pointer to an soa-width wide array of the
-     // final atomic/enum/pointer type
-@@ -2327,14 +2314,14 @@ static llvm::Value *lFinalSliceOffset(FunctionEmitContext *ctx, llvm::Value *ptr
-         slicePtr = ctx->BitCastInst(slicePtr, (*ptrType)->LLVMType(g->ctx));
- 
-     // And finally index based on the slice offset
--    return ctx->GetElementPtrInst(slicePtr, sliceOffset, *ptrType, LLVMGetName(slicePtr, "_final_gep"));
-+    return ctx->GetElementPtrInst(slicePtr, sliceOffset, *ptrType, llvm::Twine(slicePtr->getName()) + "_final_gep");
- }
- 
- /** Utility routine that loads from a uniform pointer to soa<> data,
-     returning a regular uniform (non-SOA result).
-  */
- llvm::Value *FunctionEmitContext::loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType,
--                                                     const char *name) {
-+                                                     const llvm::Twine &name) {
-     const Type *unifType = ptrType->GetBaseType()->GetAsUniformType();
- 
-     const CollectionType *ct = CastType<CollectionType>(ptrType->GetBaseType());
-@@ -2363,7 +2350,7 @@ llvm::Value *FunctionEmitContext::loadUniformFromSOA(llvm::Value *ptr, llvm::Val
- }
- 
- llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrRefType,
--                                           const char *name, bool one_elem) {
-+                                           const llvm::Twine &name, bool one_elem) {
-     if (ptr == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2371,9 +2358,6 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
- 
-     AssertPos(currentPos, ptrRefType != NULL && mask != NULL);
- 
--    if (name == NULL)
--        name = LLVMGetName(ptr, "_load");
--
-     const PointerType *ptrType;
-     const Type *elType;
-     if (CastType<ReferenceType>(ptrRefType) != NULL) {
-@@ -2393,7 +2377,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
- 
-     if (ptrType->IsUniformType()) {
-         if (ptrType->IsSlice()) {
--            return loadUniformFromSOA(ptr, mask, ptrType, name);
-+            return loadUniformFromSOA(ptr, mask, ptrType,
-+                                      name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name);
-         } else {
-             // FIXME: same issue as above load inst regarding alignment...
-             //
-@@ -2405,11 +2390,15 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-             const AtomicType *atomicType = CastType<AtomicType>(ptrType->GetBaseType());
- 
- #if ISPC_LLVM_VERSION <= ISPC_LLVM_10_0
--            llvm::LoadInst *inst = new llvm::LoadInst(ptr, name, false /* not volatile */, bblock);
-+            llvm::LoadInst *inst =
-+                new llvm::LoadInst(ptr, name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name,
-+                                   false /* not volatile */, bblock);
- #else // LLVM 11.0+
-             llvm::PointerType *ptr_type = llvm::dyn_cast<llvm::PointerType>(ptr->getType());
-             llvm::LoadInst *inst =
--                new llvm::LoadInst(ptr_type->getPointerElementType(), ptr, name, false /* not volatile */, bblock);
-+                new llvm::LoadInst(ptr_type->getPointerElementType(), ptr,
-+                                   name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name,
-+                                   false /* not volatile */, bblock);
- #endif
- 
-             if (atomicType != NULL && atomicType->IsVaryingType()) {
-@@ -2433,7 +2422,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-     } else {
-         // Otherwise we should have a varying ptr and it's time for a
-         // gather.
--        llvm::Value *gather_result = gather(ptr, ptrType, GetFullMask(), name);
-+        llvm::Value *gather_result = gather(ptr, ptrType, GetFullMask(),
-+                                            name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name);
-         if (!one_elem)
-             return gather_result;
- 
-@@ -2453,19 +2443,19 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-         // We can actually call either one, since both are i32s as far as
-         // LLVM's type system is concerned...
-         llvm::Function *fmm = mm[0]->function;
--        llvm::Value *int_mask = CallInst(fmm, NULL, mask, LLVMGetName(mask, "_movmsk"));
-+        llvm::Value *int_mask = CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_movmsk");
-         std::vector<Symbol *> lz;
-         m->symbolTable->LookupFunction("__count_trailing_zeros_i64", &lz);
-         llvm::Function *flz = lz[0]->function;
--        llvm::Value *elem_idx = CallInst(flz, NULL, int_mask, LLVMGetName(mask, "_clz"));
--        llvm::Value *elem = llvm::ExtractElementInst::Create(gather_result, elem_idx,
--                                                             LLVMGetName(gather_result, "_umasked_elem"), bblock);
-+        llvm::Value *elem_idx = CallInst(flz, NULL, int_mask, llvm::Twine(mask->getName()) + "_clz");
-+        llvm::Value *elem = llvm::ExtractElementInst::Create(
-+            gather_result, elem_idx, llvm::Twine(gather_result->getName()) + "_umasked_elem", bblock);
-         return elem;
-     }
- }
- 
- llvm::Value *FunctionEmitContext::gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask,
--                                         const char *name) {
-+                                         const llvm::Twine &name) {
-     // We should have a varying pointer if we get here...
-     AssertPos(currentPos, ptrType->IsVaryingType());
- 
-@@ -2602,7 +2592,8 @@ void FunctionEmitContext::addGSMetadata(llvm::Value *v, SourcePos pos) {
-     inst->setMetadata("last_column", md);
- }
- 
--llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *name, int align, bool atEntryBlock) {
-+llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const llvm::Twine &name, int align,
-+                                             bool atEntryBlock) {
-     if (llvmType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2615,12 +2606,12 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-         llvm::Instruction *retInst = allocaBlock->getTerminator();
-         AssertPos(currentPos, retInst);
-         unsigned AS = llvmFunction->getParent()->getDataLayout().getAllocaAddrSpace();
--        inst = new llvm::AllocaInst(llvmType, AS, name ? name : "", retInst);
-+        inst = new llvm::AllocaInst(llvmType, AS, name, retInst);
-     } else {
-         // Unless the caller overrode the default and wants it in the
-         // current basic block
-         unsigned AS = llvmFunction->getParent()->getDataLayout().getAllocaAddrSpace();
--        inst = new llvm::AllocaInst(llvmType, AS, name ? name : "", bblock);
-+        inst = new llvm::AllocaInst(llvmType, AS, name, bblock);
-     }
- 
-     // If no alignment was specified but we have an array of a uniform
-@@ -2639,7 +2630,8 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::AllocaInst(const Type *ptrType, const char *name, int align, bool atEntryBlock) {
-+llvm::Value *FunctionEmitContext::AllocaInst(const Type *ptrType, const llvm::Twine &name, int align,
-+                                             bool atEntryBlock) {
-     if (ptrType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3075,66 +3067,59 @@ llvm::Instruction *FunctionEmitContext::BranchInst(llvm::BasicBlock *trueBlock,
-     return b;
- }
- 
--llvm::Value *FunctionEmitContext::ExtractInst(llvm::Value *v, int elt, const char *name) {
-+llvm::Value *FunctionEmitContext::ExtractInst(llvm::Value *v, int elt, const llvm::Twine &name) {
-     if (v == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_extract_%d", elt);
--        name = LLVMGetName(v, buf);
--    }
-     llvm::Instruction *ei = NULL;
-     if (llvm::isa<llvm::VectorType>(v->getType()))
--        ei = llvm::ExtractElementInst::Create(v, LLVMInt32(elt), name, bblock);
-+        ei = llvm::ExtractElementInst::Create(
-+            v, LLVMInt32(elt),
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_extract_") + llvm::Twine(elt)) : name, bblock);
-     else
--        ei = llvm::ExtractValueInst::Create(v, elt, name, bblock);
-+        ei = llvm::ExtractValueInst::Create(
-+            v, elt, name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_extract_") + llvm::Twine(elt)) : name,
-+            bblock);
-     AddDebugPos(ei);
-     return ei;
- }
- 
--llvm::Value *FunctionEmitContext::InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const char *name) {
-+llvm::Value *FunctionEmitContext::InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const llvm::Twine &name) {
-     if (v == NULL || eltVal == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_insert_%d", elt);
--        name = LLVMGetName(v, buf);
--    }
--
-     llvm::Instruction *ii = NULL;
-     if (llvm::isa<llvm::VectorType>(v->getType()))
--        ii = llvm::InsertElementInst::Create(v, eltVal, LLVMInt32(elt), name, bblock);
-+        ii = llvm::InsertElementInst::Create(
-+            v, eltVal, LLVMInt32(elt),
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_insert_") + llvm::Twine(elt)) : name, bblock);
-     else
--        ii = llvm::InsertValueInst::Create(v, eltVal, elt, name, bblock);
-+        ii = llvm::InsertValueInst::Create(
-+            v, eltVal, elt,
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_insert_") + llvm::Twine(elt)) : name, bblock);
-     AddDebugPos(ii);
-     return ii;
- }
- 
--llvm::Value *FunctionEmitContext::ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const char *name) {
-+llvm::Value *FunctionEmitContext::ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask,
-+                                              const llvm::Twine &name) {
-     if (v1 == NULL || v2 == NULL || mask == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_shuffle");
--        name = LLVMGetName(v1, buf);
--    }
--
--    llvm::Instruction *ii = new llvm::ShuffleVectorInst(v1, v2, mask, name, bblock);
-+    llvm::Instruction *ii = new llvm::ShuffleVectorInst(
-+        v1, v2, mask, name.isTriviallyEmpty() ? (llvm::Twine(v1->getName()) + "_shuffle") : name, bblock);
- 
-     AddDebugPos(ii);
-     return ii;
- }
- 
--llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vecType, const char *name) {
-+llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vecType, const llvm::Twine &name) {
-     if (v == NULL || vecType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3148,12 +3133,6 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     Assert(ty && ty->getVectorElementType() == v->getType());
- #endif
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_broadcast");
--        name = LLVMGetName(v, buf);
--    }
--
-     // Generate the following sequence:
-     //   %name_init.i = insertelement <4 x i32> undef, i32 %val, i32 0
-     //   %name.i = shufflevector <4 x i32> %name_init.i, <4 x i32> undef,
-@@ -3163,7 +3142,7 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     llvm::Value *undef2 = llvm::UndefValue::get(vecType);
- 
-     // InsertElement
--    llvm::Twine tw = llvm::Twine(name) + llvm::Twine("_init");
-+    llvm::Twine tw = name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + llvm::Twine("_init");
-     llvm::Value *insert = InsertInst(undef1, v, 0, tw.str().c_str());
- 
-     // ShuffleVector
-@@ -3179,28 +3158,27 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-         llvm::ConstantVector::getSplat(llvm::ElementCount::get(static_cast<unsigned int>(ty->getNumElements()), false),
-                                        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
- #endif
--    llvm::Value *ret = ShuffleInst(insert, undef2, zeroVec, name);
-+    llvm::Value *ret = ShuffleInst(insert, undef2, zeroVec,
-+                                   name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name);
- 
-     return ret;
- }
- 
--llvm::PHINode *FunctionEmitContext::PhiNode(llvm::Type *type, int count, const char *name) {
--    llvm::PHINode *pn = llvm::PHINode::Create(type, count, name ? name : "phi", bblock);
-+llvm::PHINode *FunctionEmitContext::PhiNode(llvm::Type *type, int count, const llvm::Twine &name) {
-+    llvm::PHINode *pn = llvm::PHINode::Create(type, count, name.isTriviallyEmpty() ? "phi" : name, bblock);
-     AddDebugPos(pn);
-     return pn;
- }
- 
- llvm::Instruction *FunctionEmitContext::SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1,
--                                                   const char *name) {
-+                                                   const llvm::Twine &name) {
-     if (test == NULL || val0 == NULL || val1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(test, "_select");
--
--    llvm::Instruction *inst = llvm::SelectInst::Create(test, val0, val1, name, bblock);
-+    llvm::Instruction *inst = llvm::SelectInst::Create(
-+        test, val0, val1, name.isTriviallyEmpty() ? (llvm::Twine(test->getName()) + "_select") : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
-@@ -3226,7 +3204,7 @@ static unsigned int lCalleeArgCount(llvm::Value *callee, const FunctionType *fun
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType,
--                                           const std::vector<llvm::Value *> &args, const char *name) {
-+                                           const std::vector<llvm::Value *> &args, const llvm::Twine &name) {
-     if (func == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3258,9 +3236,9 @@ llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-         llvm::PointerType *func_ptr_type = llvm::dyn_cast<llvm::PointerType>(func->getType());
-         llvm::FunctionType *func_type = llvm::dyn_cast<llvm::FunctionType>(func_ptr_type->getPointerElementType());
--        llvm::CallInst *callinst = llvm::CallInst::Create(func_type, func, argVals, name ? name : "", bblock);
-+        llvm::CallInst *callinst = llvm::CallInst::Create(func_type, func, argVals, name, bblock);
- #else
--        llvm::CallInst *callinst = llvm::CallInst::Create(func, argVals, name ? name : "", bblock);
-+        llvm::CallInst *callinst = llvm::CallInst::Create(func, argVals, name, bblock);
- #endif
- 
-         // We could be dealing with a function pointer in which case this will not be a 'llvm::Function'.
-@@ -3464,14 +3442,14 @@ llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg,
--                                           const char *name) {
-+                                           const llvm::Twine &name) {
-     std::vector<llvm::Value *> args;
-     args.push_back(arg);
-     return CallInst(func, funcType, args, name);
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg0,
--                                           llvm::Value *arg1, const char *name) {
-+                                           llvm::Value *arg1, const llvm::Twine &name) {
-     std::vector<llvm::Value *> args;
-     args.push_back(arg0);
-     args.push_back(arg1);
-diff --git a/src/ctx.h b/src/ctx.h
-index 6e5ad74ba..48b3bb826 100644
---- a/src/ctx.h
-+++ b/src/ctx.h
-@@ -302,7 +302,7 @@ class FunctionEmitContext {
-     llvm::Value *GetStringPtr(const std::string &str);
- 
-     /** Create a new basic block with given name */
--    llvm::BasicBlock *CreateBasicBlock(const char *name, llvm::BasicBlock *insertAfter = NULL);
-+    llvm::BasicBlock *CreateBasicBlock(const llvm::Twine &name, llvm::BasicBlock *insertAfter = NULL);
- 
-     /** Given a vector with element type i1, return a vector of type
-         LLVMTypes::BoolVectorType.  This method handles the conversion for
-@@ -380,33 +380,33 @@ class FunctionEmitContext {
-         this also handles applying the given operation to the vector
-         elements. */
-     llvm::Value *BinaryOperator(llvm::Instruction::BinaryOps inst, llvm::Value *v0, llvm::Value *v1,
--                                const char *name = NULL);
-+                                const llvm::Twine &name = "");
- 
-     /** Emit the "not" operator.  Like BinaryOperator(), this also handles
-         a VectorType-based operand. */
--    llvm::Value *NotOperator(llvm::Value *v, const char *name = NULL);
-+    llvm::Value *NotOperator(llvm::Value *v, const llvm::Twine &name = "");
- 
-     /** Emit a comparison instruction.  If the operands are VectorTypes,
-         then a value for the corresponding boolean VectorType is
-         returned. */
-     llvm::Value *CmpInst(llvm::Instruction::OtherOps inst, llvm::CmpInst::Predicate pred, llvm::Value *v0,
--                         llvm::Value *v1, const char *name = NULL);
-+                         llvm::Value *v1, const llvm::Twine &name = "");
- 
-     /** Given a scalar value, return a vector of the same type (or an
-         array, for pointer types). */
--    llvm::Value *SmearUniform(llvm::Value *value, const char *name = NULL);
-+    llvm::Value *SmearUniform(llvm::Value *value, const llvm::Twine &name = "");
- 
--    llvm::Value *BitCastInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Value *PtrToIntInst(llvm::Value *value, const char *name = NULL);
--    llvm::Value *PtrToIntInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Value *IntToPtrInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+    llvm::Value *BitCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Value *PtrToIntInst(llvm::Value *value, const llvm::Twine &name = "");
-+    llvm::Value *PtrToIntInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Value *IntToPtrInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
- 
--    llvm::Instruction *TruncInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+    llvm::Instruction *TruncInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-     llvm::Instruction *CastInst(llvm::Instruction::CastOps op, llvm::Value *value, llvm::Type *type,
--                                const char *name = NULL);
--    llvm::Instruction *FPCastInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Instruction *SExtInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Instruction *ZExtInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+                                const llvm::Twine &name = "");
-+    llvm::Instruction *FPCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Instruction *SExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Instruction *ZExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
- 
-     /** Given two integer-typed values (but possibly one vector and the
-         other not, and or of possibly-different bit-widths), update their
-@@ -426,9 +426,9 @@ class FunctionEmitContext {
-         pointers.  The underlying type of the base pointer must be provided
-         via the ptrType parameter */
-     llvm::Value *GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index, const Type *ptrType,
--                                   const char *name = NULL);
-+                                   const llvm::Twine &name = "");
-     llvm::Value *GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0, llvm::Value *index1, const Type *ptrType,
--                                   const char *name = NULL);
-+                                   const llvm::Twine &name = "");
- 
-     /** This method returns a new pointer that represents offsetting the
-         given base pointer to point at the given element number of the
-@@ -436,26 +436,26 @@ class FunctionEmitContext {
-         pointer must be a pointer to a structure type.  The ptrType gives
-         the type of the pointer, though it may be NULL if the base pointer
-         is uniform. */
--    llvm::Value *AddElementOffset(llvm::Value *basePtr, int elementNum, const Type *ptrType, const char *name = NULL,
--                                  const PointerType **resultPtrType = NULL);
-+    llvm::Value *AddElementOffset(llvm::Value *basePtr, int elementNum, const Type *ptrType,
-+                                  const llvm::Twine &name = "", const PointerType **resultPtrType = NULL);
- 
-     /** Bool is stored as i8 and <WIDTH x i8> but represented in IR as i1 and
-      * <WIDTH x MASK>. This is a helper function to match bool size at storage
-      * interface. */
--    llvm::Value *SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const char *name = NULL);
-+    llvm::Value *SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name = "");
-     /** Load from the memory location(s) given by lvalue, using the given
-         mask.  The lvalue may be varying, in which case this corresponds to
-         a gather from the multiple memory locations given by the array of
-         pointer values given by the lvalue.  If the lvalue is not varying,
-         then both the mask pointer and the type pointer may be NULL. */
--    llvm::Value *LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrType, const char *name = NULL,
-+    llvm::Value *LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrType, const llvm::Twine &name = "",
-                           bool one_elem = false);
- 
-     /* Load from memory location(s) given.
-      * 'type' needs to be provided when storage type is different from IR type. For example,
-      * 'unform bool' is 'i1' in IR but stored as 'i8'.
-      * Otherwise leave this as NULL. */
--    llvm::Value *LoadInst(llvm::Value *ptr, const Type *type = NULL, const char *name = NULL);
-+    llvm::Value *LoadInst(llvm::Value *ptr, const Type *type = NULL, const llvm::Twine &name = "");
- 
-     /** Emits an alloca instruction to allocate stack storage for the given
-         type.  If a non-zero alignment is specified, the object is also
-@@ -463,7 +463,8 @@ class FunctionEmitContext {
-         instruction is added at the start of the function in the entry
-         basic block; if it should be added to the current basic block, then
-         the atEntryBlock parameter should be false. */
--    llvm::Value *AllocaInst(llvm::Type *llvmType, const char *name = NULL, int align = 0, bool atEntryBlock = true);
-+    llvm::Value *AllocaInst(llvm::Type *llvmType, const llvm::Twine &name = "", int align = 0,
-+                            bool atEntryBlock = true);
- 
-     /** Emits an alloca instruction to allocate stack storage for the given
-         type.  If a non-zero alignment is specified, the object is also
-@@ -474,7 +475,7 @@ class FunctionEmitContext {
-         This implementation is preferred when possible. It is needed when
-         storage type is different from IR type. For example,
-         'unform bool' is 'i1' in IR but stored as 'i8'. */
--    llvm::Value *AllocaInst(const Type *ptrType, const char *name = NULL, int align = 0, bool atEntryBlock = true);
-+    llvm::Value *AllocaInst(const Type *ptrType, const llvm::Twine &name = "", int align = 0, bool atEntryBlock = true);
- 
-     /** Standard store instruction; for this variant, the lvalue must be a
-         single pointer, not a varying lvalue.
-@@ -502,39 +503,41 @@ class FunctionEmitContext {
-     /** This convenience method maps to an llvm::ExtractElementInst if the
-         given value is a llvm::VectorType, and to an llvm::ExtractValueInst
-         otherwise. */
--    llvm::Value *ExtractInst(llvm::Value *v, int elt, const char *name = NULL);
-+    llvm::Value *ExtractInst(llvm::Value *v, int elt, const llvm::Twine &name = "");
- 
-     /** This convenience method maps to an llvm::InsertElementInst if the
-         given value is a llvm::VectorType, and to an llvm::InsertValueInst
-         otherwise. */
--    llvm::Value *InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const char *name = NULL);
-+    llvm::Value *InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const llvm::Twine &name = "");
- 
-     /** This convenience method maps to an llvm::ShuffleVectorInst. */
--    llvm::Value *ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const char *name = NULL);
-+    llvm::Value *ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const llvm::Twine &name = "");
- 
-     /** This convenience method to generate broadcast pattern. It takes a value
-         and a vector type. Type of the value must match element type of the
-         vector. */
--    llvm::Value *BroadcastValue(llvm::Value *v, llvm::Type *vecType, const char *name = NULL);
-+    llvm::Value *BroadcastValue(llvm::Value *v, llvm::Type *vecType, const llvm::Twine &name = "");
- 
--    llvm::PHINode *PhiNode(llvm::Type *type, int count, const char *name = NULL);
--    llvm::Instruction *SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1, const char *name = NULL);
-+    llvm::PHINode *PhiNode(llvm::Type *type, int count, const llvm::Twine &name = "");
-+    llvm::Instruction *SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1,
-+                                  const llvm::Twine &name = "");
- 
-     /** Emits IR to do a function call with the given arguments.  If the
-         function type is a varying function pointer type, its full type
-         must be provided in funcType.  funcType can be NULL if func is a
-         uniform function pointer. */
-     llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, const std::vector<llvm::Value *> &args,
--                          const char *name = NULL);
-+                          const llvm::Twine &name = "");
- 
-     /** This is a convenience method that issues a call instruction to a
-         function that takes just a single argument. */
--    llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg, const char *name = NULL);
-+    llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg,
-+                          const llvm::Twine &name = "");
- 
-     /** This is a convenience method that issues a call instruction to a
-         function that takes two arguments. */
-     llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg0, llvm::Value *arg1,
--                          const char *name = NULL);
-+                          const llvm::Twine &name = "");
- 
-     /** Launch an asynchronous task to run the given function, passing it
-         he given argument values. */
-@@ -756,9 +759,10 @@ class FunctionEmitContext {
-     void maskedStore(llvm::Value *value, llvm::Value *ptr, const Type *ptrType, llvm::Value *mask);
-     void storeUniformToSOA(llvm::Value *value, llvm::Value *ptr, llvm::Value *mask, const Type *valueType,
-                            const PointerType *ptrType);
--    llvm::Value *loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType, const char *name);
-+    llvm::Value *loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType,
-+                                    const llvm::Twine &name = "");
- 
--    llvm::Value *gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask, const char *name);
-+    llvm::Value *gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask, const llvm::Twine &name = "");
- 
-     llvm::Value *addVaryingOffsetsIfNeeded(llvm::Value *ptr, const Type *ptrType);
- };
-diff --git a/src/expr.cpp b/src/expr.cpp
-index 80cc3020a..6d38d1889 100644
---- a/src/expr.cpp
-+++ b/src/expr.cpp
-@@ -1021,11 +1021,11 @@ static llvm::Value *lEmitNegate(Expr *arg, SourcePos pos, FunctionEmitContext *c
-     ctx->SetDebugPos(pos);
-     if (type->IsFloatType()) {
-         llvm::Value *zero = llvm::ConstantFP::getZeroValueForNegation(type->LLVMType(g->ctx));
--        return ctx->BinaryOperator(llvm::Instruction::FSub, zero, argVal, LLVMGetName(argVal, "_negate"));
-+        return ctx->BinaryOperator(llvm::Instruction::FSub, zero, argVal, llvm::Twine(argVal->getName()) + "_negate");
-     } else {
-         llvm::Value *zero = lLLVMConstantValue(type, g->ctx, 0.);
-         AssertPos(pos, type->IsIntType());
--        return ctx->BinaryOperator(llvm::Instruction::Sub, zero, argVal, LLVMGetName(argVal, "_negate"));
-+        return ctx->BinaryOperator(llvm::Instruction::Sub, zero, argVal, llvm::Twine(argVal->getName()) + "_negate");
-     }
- }
- 
-@@ -1047,11 +1047,11 @@ llvm::Value *UnaryExpr::GetValue(FunctionEmitContext *ctx) const {
-         return lEmitNegate(expr, pos, ctx);
-     case LogicalNot: {
-         llvm::Value *argVal = expr->GetValue(ctx);
--        return ctx->NotOperator(argVal, LLVMGetName(argVal, "_logicalnot"));
-+        return ctx->NotOperator(argVal, llvm::Twine(argVal->getName()) + "_logicalnot");
-     }
-     case BitNot: {
-         llvm::Value *argVal = expr->GetValue(ctx);
--        return ctx->NotOperator(argVal, LLVMGetName(argVal, "_bitnot"));
-+        return ctx->NotOperator(argVal, llvm::Twine(argVal->getName()) + "_bitnot");
-     }
-     default:
-         FATAL("logic error");
-@@ -1518,7 +1518,8 @@ static llvm::Value *lEmitBinaryArith(BinaryExpr::Op op, llvm::Value *value0, llv
-             return NULL;
-         }
- 
--        return ctx->BinaryOperator(inst, value0, value1, LLVMGetName(opName, value0, value1));
-+        return ctx->BinaryOperator(inst, value0, value1,
-+                                   (((llvm::Twine(opName) + "_") + value0->getName()) + "_") + value1->getName());
-     }
- }
- 
-@@ -1563,7 +1564,7 @@ static llvm::Value *lEmitBinaryCmp(BinaryExpr::Op op, llvm::Value *e0Val, llvm::
-     }
- 
-     llvm::Value *cmp = ctx->CmpInst(isFloatOp ? llvm::Instruction::FCmp : llvm::Instruction::ICmp, pred, e0Val, e1Val,
--                                    LLVMGetName(opName, e0Val, e1Val));
-+                                    (((llvm::Twine(opName) + "_") + e0Val->getName()) + "_") + e1Val->getName());
-     // This is a little ugly: CmpInst returns i1 values, but we use vectors
-     // of i32s for varying bool values; type convert the result here if
-     // needed.
-@@ -4177,7 +4178,7 @@ static llvm::Value *lConvertToSlicePointer(FunctionEmitContext *ctx, llvm::Value
-     // offsets
-     llvm::Value *result = llvm::Constant::getNullValue(sliceStructType);
-     // And replace the pointer in the struct with the given pointer
--    return ctx->InsertInst(result, ptr, 0, LLVMGetName(ptr, "_slice"));
-+    return ctx->InsertInst(result, ptr, 0, llvm::Twine(ptr->getName()) + "_slice");
- }
- 
- /** If the given array index is a compile time constant, check to see if it
-@@ -4258,8 +4259,8 @@ llvm::Value *IndexExpr::GetLValue(FunctionEmitContext *ctx) const {
-         // Convert to a slice pointer if we're indexing into SOA data
-         basePtrValue = lConvertPtrToSliceIfNeeded(ctx, basePtrValue, &baseExprType);
- 
--        llvm::Value *ptr =
--            ctx->GetElementPtrInst(basePtrValue, indexValue, baseExprType, LLVMGetName(basePtrValue, "_offset"));
-+        llvm::Value *ptr = ctx->GetElementPtrInst(basePtrValue, indexValue, baseExprType,
-+                                                  llvm::Twine(basePtrValue->getName()) + "_offset");
-         return lAddVaryingOffsetsIfNeeded(ctx, ptr, GetLValueType());
-     }
- 
-@@ -4290,8 +4291,8 @@ llvm::Value *IndexExpr::GetLValue(FunctionEmitContext *ctx) const {
-     ctx->SetDebugPos(pos);
- 
-     // And do the actual indexing calculation..
--    llvm::Value *ptr =
--        ctx->GetElementPtrInst(basePtr, LLVMInt32(0), indexValue, basePtrType, LLVMGetName(basePtr, "_offset"));
-+    llvm::Value *ptr = ctx->GetElementPtrInst(basePtr, LLVMInt32(0), indexValue, basePtrType,
-+                                              llvm::Twine(basePtr->getName()) + "_offset");
-     return lAddVaryingOffsetsIfNeeded(ctx, ptr, GetLValueType());
- }
- 
-@@ -4788,15 +4789,14 @@ llvm::Value *VectorMemberExpr::GetValue(FunctionEmitContext *ctx) const {
-         for (size_t i = 0; i < identifier.size(); ++i) {
-             char idStr[2] = {identifier[i], '\0'};
-             llvm::Value *elementPtr =
--                ctx->AddElementOffset(basePtr, indices[i], basePtrType, LLVMGetName(basePtr, idStr));
-+                ctx->AddElementOffset(basePtr, indices[i], basePtrType, llvm::Twine(basePtr->getName()) + idStr);
-             llvm::Value *elementValue = ctx->LoadInst(elementPtr, elementMask, elementPtrType);
- 
--            const char *resultName = LLVMGetName(resultPtr, idStr);
--            llvm::Value *ptmp = ctx->AddElementOffset(resultPtr, i, NULL, resultName);
-+            llvm::Value *ptmp = ctx->AddElementOffset(resultPtr, i, NULL, llvm::Twine(resultPtr->getName()) + idStr);
-             ctx->StoreInst(elementValue, ptmp, elementPtrType, expr->GetType()->IsUniformType());
-         }
- 
--        return ctx->LoadInst(resultPtr, memberType, LLVMGetName(basePtr, "_swizzle"));
-+        return ctx->LoadInst(resultPtr, memberType, llvm::Twine(basePtr->getName()) + "_swizzle");
-     }
- }
- 
-@@ -4932,7 +4932,7 @@ llvm::Value *MemberExpr::GetValue(FunctionEmitContext *ctx) const {
- 
-     ctx->SetDebugPos(pos);
-     std::string suffix = std::string("_") + identifier;
--    return ctx->LoadInst(lvalue, mask, lvalueType, LLVMGetName(lvalue, suffix.c_str()));
-+    return ctx->LoadInst(lvalue, mask, lvalueType, llvm::Twine(lvalue->getName()) + suffix);
- }
- 
- const Type *MemberExpr::GetType() const { return NULL; }
-@@ -6502,7 +6502,7 @@ static llvm::Value *lTypeConvAtomic(FunctionEmitContext *ctx, llvm::Value *exprV
-                 // does for everyone else...
-                 Assert(cast);
-                 cast = ctx->SwitchBoolSize(cast, LLVMTypes::BoolVectorType->getElementType(),
--                                           LLVMGetName(cast, "to_i_bool"));
-+                                           llvm::Twine(cast->getName()) + "to_i_bool");
-             }
-         } else {
-             // fromType->IsVaryingType())
-@@ -8246,7 +8246,7 @@ llvm::Value *NewExpr::GetValue(FunctionEmitContext *ctx) const {
-         // pointer of the return type and to run the code for initializers,
-         // if present.
-         llvm::Type *ptrType = retType->LLVMType(g->ctx);
--        ptrValue = ctx->BitCastInst(ptrValue, ptrType, LLVMGetName(ptrValue, "_cast_ptr"));
-+        ptrValue = ctx->BitCastInst(ptrValue, ptrType, llvm::Twine(ptrValue->getName()) + "_cast_ptr");
- 
-         if (initExpr != NULL)
-             InitSymbol(ptrValue, allocType, initExpr, ctx, pos);
-diff --git a/src/llvmutil.cpp b/src/llvmutil.cpp
-index 970175dbf..d0becb9f5 100644
---- a/src/llvmutil.cpp
-+++ b/src/llvmutil.cpp
-@@ -1605,23 +1605,6 @@ llvm::Value *LLVMShuffleVectors(llvm::Value *v1, llvm::Value *v2, int32_t shuf[]
-     return new llvm::ShuffleVectorInst(v1, v2, vec, "shuffle", insertBefore);
- }
- 
--const char *LLVMGetName(llvm::Value *v, const char *s) {
--    if (v == NULL)
--        return s;
--    std::string ret = std::string(v->getName());
--    ret += s;
--    return strdup(ret.c_str());
--}
--
--const char *LLVMGetName(const char *op, llvm::Value *v1, llvm::Value *v2) {
--    std::string r = op;
--    r += "_";
--    r += v1->getName().str();
--    r += "_";
--    r += v2->getName().str();
--    return strdup(r.c_str());
--}
--
- #ifdef ISPC_GENX_ENABLED
- bool lIsSVMLoad(llvm::Instruction *inst) {
-     Assert(inst);
-diff --git a/src/llvmutil.h b/src/llvmutil.h
-index 42cce4d83..07d089bb4 100644
---- a/src/llvmutil.h
-+++ b/src/llvmutil.h
-@@ -328,11 +328,6 @@ extern llvm::Value *LLVMConcatVectors(llvm::Value *v1, llvm::Value *v2, llvm::In
- extern llvm::Value *LLVMShuffleVectors(llvm::Value *v1, llvm::Value *v2, int32_t shuf[], int shufSize,
-                                        llvm::Instruction *insertBefore);
- 
--/** Utility routines to concat strings with the names of existing values to
--    create meaningful new names for instruction values.
--*/
--extern const char *LLVMGetName(llvm::Value *v, const char *);
--extern const char *LLVMGetName(const char *op, llvm::Value *v1, llvm::Value *v2);
- #ifdef ISPC_GENX_ENABLED
- enum AddressSpace { Local, Global, External };
- 
-diff --git a/src/opt.cpp b/src/opt.cpp
-index 5b1ac7b63..9d6cae058 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -257,7 +257,7 @@ static bool lGetSourcePosFromMetadata(const llvm::Instruction *inst, SourcePos *
-     return true;
- }
- 
--static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, const char *name,
-+static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[2] = {arg0, arg1};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[2]);
-@@ -265,21 +265,22 @@ static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llv
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    const char *name, llvm::Instruction *insertBefore = NULL) {
-+                                    const llvm::Twine &name, llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[3] = {arg0, arg1, arg2};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[3]);
-     return llvm::CallInst::Create(func, newArgArray, name, insertBefore);
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, const char *name, llvm::Instruction *insertBefore = NULL) {
-+                                    llvm::Value *arg3, const llvm::Twine &name,
-+                                    llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[4] = {arg0, arg1, arg2, arg3};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[4]);
-     return llvm::CallInst::Create(func, newArgArray, name, insertBefore);
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, llvm::Value *arg4, const char *name,
-+                                    llvm::Value *arg3, llvm::Value *arg4, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[5] = {arg0, arg1, arg2, arg3, arg4};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[5]);
-@@ -287,7 +288,7 @@ static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llv
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, llvm::Value *arg4, llvm::Value *arg5, const char *name,
-+                                    llvm::Value *arg3, llvm::Value *arg4, llvm::Value *arg5, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[6] = {arg0, arg1, arg2, arg3, arg4, arg5};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[6]);
-@@ -991,23 +992,24 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 llvm::Type *returnType = callInst->getType();
-                 Assert(llvm::isa<llvm::VectorType>(returnType));
-                 // cast the i8 * to the appropriate type
--                const char *name = LLVMGetName(callInst->getArgOperand(0), "_cast");
--                llvm::Value *castPtr = new llvm::BitCastInst(callInst->getArgOperand(0),
--                                                             llvm::PointerType::get(returnType, 0), name, callInst);
-+                llvm::Value *castPtr =
-+                    new llvm::BitCastInst(callInst->getArgOperand(0), llvm::PointerType::get(returnType, 0),
-+                                          llvm::Twine(callInst->getArgOperand(0)->getName()) + "_cast", callInst);
-                 lCopyMetadata(castPtr, callInst);
-                 int align;
-                 if (g->opt.forceAlignedMemory)
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
--                name = LLVMGetName(callInst->getArgOperand(0), "_load");
- #if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
--                llvm::Instruction *loadInst = new llvm::LoadInst(castPtr, name, false /* not volatile */,
--                                                                 llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
-+                llvm::Instruction *loadInst =
-+                    new llvm::LoadInst(castPtr, llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load",
-+                                       false /* not volatile */, llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
- #else
-                 llvm::Instruction *loadInst = new llvm::LoadInst(
--                    llvm::dyn_cast<llvm::PointerType>(castPtr->getType())->getPointerElementType(), castPtr, name,
--                    false /* not volatile */, llvm::MaybeAlign(align).valueOrOne(), (llvm::Instruction *)NULL);
-+                    llvm::dyn_cast<llvm::PointerType>(castPtr->getType())->getPointerElementType(), castPtr,
-+                    llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load", false /* not volatile */,
-+                    llvm::MaybeAlign(align).valueOrOne(), (llvm::Instruction *)NULL);
- #endif
-                 lCopyMetadata(loadInst, callInst);
-                 llvm::ReplaceInstWithInst(callInst, loadInst);
-@@ -1028,9 +1030,9 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 // all lanes storing, so replace with a regular store
-                 llvm::Value *rvalue = callInst->getArgOperand(2);
-                 llvm::Type *storeType = rvalue->getType();
--                const char *name = LLVMGetName(callInst->getArgOperand(0), "_ptrcast");
--                llvm::Value *castPtr = new llvm::BitCastInst(callInst->getArgOperand(0),
--                                                             llvm::PointerType::get(storeType, 0), name, callInst);
-+                llvm::Value *castPtr =
-+                    new llvm::BitCastInst(callInst->getArgOperand(0), llvm::PointerType::get(storeType, 0),
-+                                          llvm::Twine(callInst->getArgOperand(0)->getName()) + "_ptrcast", callInst);
-                 lCopyMetadata(castPtr, callInst);
- 
-                 int align;
-@@ -1339,8 +1341,8 @@ static llvm::Value *lGetBasePointer(llvm::Value *v, llvm::Instruction *insertBef
-         if (t == NULL) {
-             return NULL;
-         } else {
--            return llvm::CastInst::Create(ci->getOpcode(), t, ci->getType()->getScalarType(), LLVMGetName(t, "_cast"),
--                                          insertBefore);
-+            return llvm::CastInst::Create(ci->getOpcode(), t, ci->getType()->getScalarType(),
-+                                          llvm::Twine(t->getName()) + "_cast", insertBefore);
-         }
-     }
- 
-@@ -1583,13 +1585,13 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-         if (co == NULL)
-             *constOffset = NULL;
-         else
--            *constOffset =
--                llvm::CastInst::Create(cast->getOpcode(), co, cast->getType(), LLVMGetName(co, "_cast"), insertBefore);
-+            *constOffset = llvm::CastInst::Create(cast->getOpcode(), co, cast->getType(),
-+                                                  llvm::Twine(co->getName()) + "_cast", insertBefore);
-         if (vo == NULL)
-             *variableOffset = NULL;
-         else
--            *variableOffset =
--                llvm::CastInst::Create(cast->getOpcode(), vo, cast->getType(), LLVMGetName(vo, "_cast"), insertBefore);
-+            *variableOffset = llvm::CastInst::Create(cast->getOpcode(), vo, cast->getType(),
-+                                                     llvm::Twine(vo->getName()) + "_cast", insertBefore);
-         return;
-     }
- 
-@@ -1608,16 +1610,18 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-             else if (c1 == NULL || llvm::isa<llvm::ConstantAggregateZero>(c1))
-                 *constOffset = c0;
-             else
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, c0, c1, LLVMGetName("add", c0, c1),
--                                                            insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, c0, c1, ((llvm::Twine("add_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
- 
-             if (v0 == NULL || llvm::isa<llvm::ConstantAggregateZero>(v0))
-                 *variableOffset = v1;
-             else if (v1 == NULL || llvm::isa<llvm::ConstantAggregateZero>(v1))
-                 *variableOffset = v0;
-             else
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, v0, v1,
--                                                               LLVMGetName("add", v0, v1), insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, v0, v1, ((llvm::Twine("add_") + v0->getName()) + "_") + v1->getName(),
-+                    insertBefore);
-             return;
-         } else if (bop->getOpcode() == llvm::Instruction::Shl) {
-             lExtractConstantOffset(op0, &c0, &v0, insertBefore);
-@@ -1633,10 +1637,12 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-                 *constOffset = vec;
-                 *variableOffset = NULL;
-             } else {
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Shl, c0, c1, LLVMGetName("shl", c0, c1),
--                                                            insertBefore);
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Shl, v0, c1,
--                                                               LLVMGetName("shl", v0, c1), insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Shl, c0, c1, ((llvm::Twine("shl_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Shl, v0, c1, ((llvm::Twine("shl_") + v0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-             }
-             return;
-         } else if (bop->getOpcode() == llvm::Instruction::Mul) {
-@@ -1648,25 +1654,30 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-             // Note that the first term is a constant and the last three are
-             // variable.
-             if (c0 != NULL && c1 != NULL)
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, c1, LLVMGetName("mul", c0, c1),
--                                                            insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Mul, c0, c1, ((llvm::Twine("mul_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-             else
-                 *constOffset = NULL;
- 
-             llvm::Value *va = NULL, *vb = NULL, *vc = NULL;
-             if (v0 != NULL && c1 != NULL)
--                va = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, c1, LLVMGetName("mul", v0, c1),
-+                va = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, c1,
-+                                                  ((llvm::Twine("mul_") + v0->getName()) + "_") + c1->getName(),
-                                                   insertBefore);
-             if (c0 != NULL && v1 != NULL)
--                vb = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, v1, LLVMGetName("mul", c0, v1),
-+                vb = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, v1,
-+                                                  ((llvm::Twine("mul_") + c0->getName()) + "_") + v1->getName(),
-                                                   insertBefore);
-             if (v0 != NULL && v1 != NULL)
--                vc = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, v1, LLVMGetName("mul", v0, v1),
-+                vc = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, v1,
-+                                                  ((llvm::Twine("mul_") + v0->getName()) + "_") + v1->getName(),
-                                                   insertBefore);
- 
-             llvm::Value *vab = NULL;
-             if (va != NULL && vb != NULL)
--                vab = llvm::BinaryOperator::Create(llvm::Instruction::Add, va, vb, LLVMGetName("add", va, vb),
-+                vab = llvm::BinaryOperator::Create(llvm::Instruction::Add, va, vb,
-+                                                   ((llvm::Twine("add_") + va->getName()) + "_") + vb->getName(),
-                                                    insertBefore);
-             else if (va != NULL)
-                 vab = va;
-@@ -1674,8 +1685,9 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-                 vab = vb;
- 
-             if (vab != NULL && vc != NULL)
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, vab, vc,
--                                                               LLVMGetName("add", vab, vc), insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, vab, vc, ((llvm::Twine("add_") + vab->getName()) + "_") + vc->getName(),
-+                    insertBefore);
-             else if (vab != NULL)
-                 *variableOffset = vab;
-             else
-@@ -1943,7 +1955,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-             // all zeros (i.e. a ConstantAggregateZero, but just in case,
-             // do the more general check with lVectorIs32BitInts().
-             variableOffset = new llvm::TruncInst(variableOffset, LLVMTypes::Int32VectorType,
--                                                 LLVMGetName(variableOffset, "_trunc"), insertBefore);
-+                                                 llvm::Twine(variableOffset->getName()) + "_trunc", insertBefore);
-         else
-             return false;
-     }
-@@ -1952,7 +1964,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-         if (lVectorIs32BitInts(constOffset)) {
-             // Truncate them so we have a 32-bit vector type for them.
-             constOffset = new llvm::TruncInst(constOffset, LLVMTypes::Int32VectorType,
--                                              LLVMGetName(constOffset, "_trunc"), insertBefore);
-+                                              llvm::Twine(constOffset->getName()) + "_trunc", insertBefore);
-         } else {
-             // FIXME: otherwise we just assume that all constant offsets
-             // can actually always fit into 32-bits...  (This could be
-@@ -1963,7 +1975,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-             // llvm::ConstantFoldInstruction() doesn't seem to be doing
-             // enough for us in some cases if we call it from here.
-             constOffset = new llvm::TruncInst(constOffset, LLVMTypes::Int32VectorType,
--                                              LLVMGetName(constOffset, "_trunc"), insertBefore);
-+                                              llvm::Twine(constOffset->getName()) + "_trunc", insertBefore);
-         }
-     }
- 
-@@ -2012,8 +2024,8 @@ static bool lOffsets32BitSafe(llvm::Value **offsetPtr, llvm::Instruction *insert
- 
-         // Alternatively, offset could be a sequence of adds terminating
-         // in safe constant vectors or a SExt.
--        *offsetPtr =
--            new llvm::TruncInst(offset, LLVMTypes::Int32VectorType, LLVMGetName(offset, "_trunc"), insertBefore);
-+        *offsetPtr = new llvm::TruncInst(offset, LLVMTypes::Int32VectorType, llvm::Twine(offset->getName()) + "_trunc",
-+                                         insertBefore);
-         return true;
-     } else
-         return false;
-@@ -2229,7 +2241,8 @@ static bool lGSToGSBaseOffsets(llvm::CallInst *callInst) {
-     }
-     // Cast the base pointer to a void *, since that's what the
-     // __pseudo_*_base_offsets_* functions want.
--    basePtr = new llvm::IntToPtrInst(basePtr, LLVMTypes::VoidPointerType, LLVMGetName(basePtr, "_2void"), callInst);
-+    basePtr = new llvm::IntToPtrInst(basePtr, LLVMTypes::VoidPointerType, llvm::Twine(basePtr->getName()) + "_2void",
-+                                     callInst);
-     lCopyMetadata(basePtr, callInst);
-     llvm::Function *gatherScatterFunc = info->baseOffsetsFunc;
- 
-@@ -2803,7 +2816,7 @@ static bool lGSToLoadStore(llvm::CallInst *callInst) {
-                 lCopyMetadata(ptr, callInst);
-                 Debug(pos, "Transformed gather to unaligned vector load!");
-                 llvm::Instruction *newCall =
--                    lCallInst(gatherInfo->loadMaskedFunc, ptr, mask, LLVMGetName(ptr, "_masked_load"));
-+                    lCallInst(gatherInfo->loadMaskedFunc, ptr, mask, llvm::Twine(ptr->getName()) + "_masked_load");
-                 lCopyMetadata(newCall, callInst);
-                 llvm::ReplaceInstWithInst(callInst, newCall);
-                 return true;
diff --git a/srcpkgs/ispc/patches/llvm12-004.patch b/srcpkgs/ispc/patches/llvm12-004.patch
deleted file mode 100644
index 3a94d8443a5e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-004.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From c03a5142444476a1caa5c2ba7fa2d92d7793d6f1 Mon Sep 17 00:00:00 2001
-From: Deepak Rajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Mon, 25 Jan 2021 09:22:49 -0800
-Subject: [PATCH] Fixing build on llvm trunk.
-
----
- src/ctx.cpp | 7 +++----
- 1 file changed, 3 insertions(+), 4 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index ded524b71..b60e6fe84 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1020,8 +1020,7 @@ void FunctionEmitContext::EmitCaseLabel(int value, bool checkMask, SourcePos pos
-     llvm::BasicBlock *bbCaseImpl = NULL;
-     if (emitGenXHardwareMask()) {
-         // Create basic block with actual case implementation
--        llvm::Twine bbName = llvm::Twine(bbCase->getName()) + "_impl";
--        bbCaseImpl = CreateBasicBlock(bbName, bbCase);
-+        bbCaseImpl = CreateBasicBlock(llvm::Twine(bbCase->getName()) + "_impl", bbCase);
-     }
- #endif
- 
-@@ -3142,8 +3141,8 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     llvm::Value *undef2 = llvm::UndefValue::get(vecType);
- 
-     // InsertElement
--    llvm::Twine tw = name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + llvm::Twine("_init");
--    llvm::Value *insert = InsertInst(undef1, v, 0, tw.str().c_str());
-+    llvm::Value *insert =
-+        InsertInst(undef1, v, 0, name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + "_init");
- 
-     // ShuffleVector
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
diff --git a/srcpkgs/ispc/patches/llvm12-005.patch b/srcpkgs/ispc/patches/llvm12-005.patch
deleted file mode 100644
index e3e96b00abfa..000000000000
--- a/srcpkgs/ispc/patches/llvm12-005.patch
+++ /dev/null
@@ -1,372 +0,0 @@
-From c1d0a51bf8416d42144de9e2bdd59825eaeff1ac Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Fri, 8 Jan 2021 14:13:49 -0800
-Subject: [PATCH] LLVM 11 support for gen code
-
----
- src/ctx.cpp                     |  13 ++-
- src/gen/GlobalsLocalization.cpp |   9 +-
- src/opt.cpp                     | 143 ++++++++++++++++++++++++--------
- 3 files changed, 124 insertions(+), 41 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index b60e6fe84..2a72e6837 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1,5 +1,5 @@
- /*
--  Copyright (c) 2010-2020, Intel Corporation
-+  Copyright (c) 2010-2021, Intel Corporation
-   All rights reserved.
- 
-   Redistribution and use in source and binary forms, with or without
-@@ -3685,8 +3685,17 @@ llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::
-     AssertPos(currentPos, llvm::isa<llvm::VectorType>(value->getType()));
-     llvm::VectorType *vt = llvm::dyn_cast<llvm::VectorType>(value->getType());
-     if (defaults == NULL) {
--        defaults = llvm::ConstantVector::getSplat(value->getType()->getVectorNumElements(),
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+        defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-+                                                  llvm::Constant::getNullValue(vt->getElementType()));
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+        defaults = llvm::ConstantVector::getSplat({static_cast<unsigned int>(vt->getNumElements()), false},
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
-+#else
-+        defaults = llvm::ConstantVector::getSplat(
-+            llvm::ElementCount::get(static_cast<unsigned int>(vt->getNumElements()), false),
-+            llvm::Constant::getNullValue(vt->getElementType()));
-+#endif
-     }
- 
-     auto Fn = llvm::GenXIntrinsic::getGenXDeclaration(m->module, llvm::GenXIntrinsic::genx_simdcf_predicate,
-diff --git a/src/gen/GlobalsLocalization.cpp b/src/gen/GlobalsLocalization.cpp
-index a176e9462..41f3b00e2 100644
---- a/src/gen/GlobalsLocalization.cpp
-+++ b/src/gen/GlobalsLocalization.cpp
-@@ -1,5 +1,5 @@
- /*
--  Copyright (c) 2014, 2016-2020, Intel Corporation
-+  Copyright (c) 2014, 2016-2021, Intel Corporation
-   All rights reserved.
- 
-   Redistribution and use in source and binary forms, with or without
-@@ -53,8 +53,10 @@
- #include <llvm/GenXIntrinsics/GenXIntrOpts.h>
- #include <llvm/GenXIntrinsics/GenXIntrinsics.h>
- #include <llvm/GenXIntrinsics/GenXMetadata.h>
--#include <llvm/IR/CFG.h>
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
- #include <llvm/IR/CallSite.h>
-+#endif
-+#include <llvm/IR/CFG.h>
- #include <llvm/IR/DebugInfo.h>
- #include <llvm/IR/Dominators.h>
- #include <llvm/IR/Function.h>
-@@ -470,7 +472,8 @@ void GlobalsLocalization::LocalizeGlobals(LocalizationInfo &LI) {
-         Instruction &FirstI = *Fn->getEntryBlock().begin();
-         Type *ElemTy = GV->getType()->getElementType();
-         AllocaInst *Alloca = new AllocaInst(ElemTy, 0, GV->getName() + ".local", &FirstI);
--        Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()));
-+        Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()).valueOrOne());
-+
-         if (!isa<UndefValue>(GV->getInitializer()))
-             new StoreInst(GV->getInitializer(), Alloca, &FirstI);
- 
-diff --git a/src/opt.cpp b/src/opt.cpp
-index d58d77f73..1789b8476 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -2899,15 +2899,17 @@ static llvm::Function *lGenXMaskedInt8Inst(llvm::Instruction *inst, bool isStore
- static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::Instruction *inst) {
-     Assert(g->target->isGenXTarget());
-     Assert(llvm::isa<llvm::VectorType>(val->getType()));
--    Assert(llvm::isPowerOf2_32(val->getType()->getVectorNumElements()));
--    Assert(val->getType()->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-+
-+    llvm::VectorType *valVecType = llvm::dyn_cast<llvm::VectorType>(val->getType());
-+    Assert(llvm::isPowerOf2_32(valVecType->getNumElements()));
-+    Assert(valVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
- 
-     // The data write of svm store must have a size that is a power of two from 16 to 128
-     // bytes. However for int8 type and simd width = 8, the data write size is 8.
-     // So we use masked store function here instead of svm store which process int8 type
-     // correctly.
--    if (val->getType()->getPrimitiveSizeInBits() / 8 < 16) {
--        Assert(val->getType()->getScalarType() == LLVMTypes::Int8Type);
-+    if (valVecType->getPrimitiveSizeInBits() / 8 < 16) {
-+        Assert(valVecType->getScalarType() == LLVMTypes::Int8Type);
-         if (llvm::Function *maskedFunc = lGenXMaskedInt8Inst(inst, true))
-             return llvm::dyn_cast<llvm::CallInst>(lCallInst(maskedFunc, ptr, val, LLVMMaskAllOn, ""));
-         else {
-@@ -2923,15 +2925,17 @@ static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::
- 
- static llvm::CallInst *lGenXLoadInst(llvm::Value *ptr, llvm::Type *retType, llvm::Instruction *inst) {
-     Assert(llvm::isa<llvm::VectorType>(retType));
--    Assert(llvm::isPowerOf2_32(retType->getVectorNumElements()));
--    Assert(retType->getPrimitiveSizeInBits());
--    Assert(retType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-+
-+    llvm::VectorType *retVecType = llvm::dyn_cast<llvm::VectorType>(retType);
-+    Assert(llvm::isPowerOf2_32(retVecType->getNumElements()));
-+    Assert(retVecType->getPrimitiveSizeInBits());
-+    Assert(retVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-     // The data read of svm load must have a size that is a power of two from 16 to 128
-     // bytes. However for int8 type and simd width = 8, the data read size is 8.
-     // So we use masked load function here instead of svm load which process int8 type
-     // correctly.
--    if (retType->getPrimitiveSizeInBits() / 8 < 16) {
--        Assert(retType->getScalarType() == LLVMTypes::Int8Type);
-+    if (retVecType->getPrimitiveSizeInBits() / 8 < 16) {
-+        Assert(retVecType->getScalarType() == LLVMTypes::Int8Type);
-         if (llvm::Function *maskedFunc = lGenXMaskedInt8Inst(inst, false))
-             return llvm::dyn_cast<llvm::CallInst>(lCallInst(maskedFunc, ptr, LLVMMaskAllOn, ""));
-         else {
-@@ -5622,15 +5626,24 @@ static bool lVectorizeGEPs(llvm::Value *ptr, std::vector<PtrUse> &ptrUses, std::
-         llvm::PtrToIntInst *ptrToInt =
-             new llvm::PtrToIntInst(ptr, LLVMTypes::Int64Type, "vectorized_ptrtoint", insertBefore);
-         llvm::Instruction *addr = llvm::BinaryOperator::CreateAdd(ptrToInt, offset, "vectorized_address", insertBefore);
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        llvm::Type *retType = llvm::FixedVectorType::get(scalar_type, reqSize / t_size);
-+#else
-         llvm::Type *retType = llvm::VectorType::get(scalar_type, reqSize / t_size);
-+#endif
-         llvm::Function *fn = llvm::GenXIntrinsic::getGenXDeclaration(
-             m->module, llvm::GenXIntrinsic::genx_svm_block_ld_unaligned, {retType, addr->getType()});
-         llvm::Instruction *ld = llvm::CallInst::Create(fn, {addr}, "vectorized_ld", insertBefore);
- 
-         if (loadingPtr) {
-             // Cast int to ptr via inttoptr
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            ld = new llvm::IntToPtrInst(ld, llvm::FixedVectorType::get(originalType, reqSize / t_size),
-+                                        "vectorized_inttoptr", insertBefore);
-+#else
-             ld = new llvm::IntToPtrInst(ld, llvm::VectorType::get(originalType, reqSize / t_size),
-                                         "vectorized_inttoptr", insertBefore);
-+#endif
-         }
- 
-         // Scalar extracts for all loaded elements
-@@ -6160,19 +6173,34 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-         llvm::Instruction *inst = &*I;
-         if (llvm::CallInst *ci = llvm::dyn_cast<llvm::CallInst>(inst)) {
-             llvm::Function *func = ci->getCalledFunction();
--            if (func && func->getName() == "llvm.trap") {
-+            if (func && func->getName().equals("llvm.trap")) {
-                 llvm::Type *argTypes[] = {LLVMTypes::Int1VectorType, LLVMTypes::Int16VectorType};
-                 // Description of parameters for genx_raw_send_noresult can be found in target-genx.ll
-                 auto Fn = +llvm::GenXIntrinsic::getGenXDeclaration(
-                     m->module, llvm::GenXIntrinsic::genx_raw_send_noresult, argTypes);
-                 llvm::SmallVector<llvm::Value *, 8> Args;
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 0));
--                Args.push_back(llvm::ConstantVector::getSplat(g->target->getNativeVectorWidth(),
--                                                              llvm::ConstantInt::getTrue(*g->ctx)));
-+                Args.push_back(llvm::ConstantVector::getSplat(
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+                    g->target->getNativeVectorWidth(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+                    {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
-+#else // LLVM 12.0+
-+                    llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-+#endif
-+                    llvm::ConstantInt::getTrue(*g->ctx)));
-+
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 39));
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 33554448));
-                 llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
--                    g->target->getNativeVectorWidth(), llvm::Constant::getNullValue(llvm::Type::getInt16Ty(*g->ctx)));
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+                    g->target->getNativeVectorWidth(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+                    {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
-+#else // LLVM 12.0+
-+                    llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-+#endif
-+                    llvm::Constant::getNullValue(llvm::Type::getInt16Ty(*g->ctx)));
-                 Args.push_back(zeroMask);
- 
-                 llvm::Instruction *newInst = llvm::CallInst::Create(Fn, Args, ci->getName());
-@@ -6181,7 +6209,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     modifiedAny = true;
-                     goto restart;
-                 }
--            } else if (func && func->getName() == "llvm.assume") {
-+            } else if (func && func->getName().equals("llvm.assume")) {
-                 ci->eraseFromParent();
-                 modifiedAny = true;
-                 goto restart;
-@@ -6335,7 +6363,7 @@ bool CheckUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 continue;
-             for (int i = 0; i < unsupportedFuncs.size(); i++) {
-                 std::smatch match;
--                std::string funcName = func->getName();
-+                std::string funcName = func->getName().str();
-                 if (std::regex_match(funcName, match, unsupportedFuncs[i])) {
-                     // We found unsupported function. Generate error and stop compilation.
-                     SourcePos pos;
-@@ -6418,12 +6446,14 @@ bool MangleOpenCLBuiltins::runOnBasicBlock(llvm::BasicBlock &bb) {
-             if (func->getName().startswith("__spirv_ocl")) {
-                 std::string mangledName;
-                 llvm::Type *retType = func->getReturnType();
--                std::string funcName = func->getName();
-+                std::string funcName = func->getName().str();
-                 std::vector<llvm::Type *> ArgTy;
-                 // spirv OpenCL builtins are used for double types only
--                Assert(retType->isVectorTy() && retType->getVectorElementType()->isDoubleTy() ||
-+                Assert(retType->isVectorTy() &&
-+                           llvm::dyn_cast<llvm::VectorType>(retType)->getElementType()->isDoubleTy() ||
-                        retType->isSingleValueType() && retType->isDoubleTy());
--                if (retType->isVectorTy() && retType->getVectorElementType()->isDoubleTy()) {
-+                if (retType->isVectorTy() &&
-+                    llvm::dyn_cast<llvm::VectorType>(retType)->getElementType()->isDoubleTy()) {
-                     ArgTy.push_back(LLVMTypes::DoubleVectorType);
-                     // _DvWIDTH suffix is used in target file to differentiate scalar
-                     // and vector versions of intrinsics. Here we remove this
-@@ -6511,8 +6541,15 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- 
-     // Cast offsets to int64
-     Offsets = new llvm::ZExtInst(
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        Offsets,
-+        llvm::FixedVectorType::get(LLVMTypes::Int64Type,
-+                                   llvm::dyn_cast<llvm::VectorType>(Offsets->getType())->getNumElements()),
-+        "svm_offset_zext", InsertBefore);
-+#else
-         Offsets, llvm::VectorType::get(LLVMTypes::Int64Type, Offsets->getType()->getVectorNumElements()),
-         "svm_offset_zext", InsertBefore);
-+#endif
- 
-     if (!llvm::isa<llvm::ConstantPointerNull>(Ptr)) {
-         // Cast ptr to int64
-@@ -6520,13 +6557,31 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- 
-         // Vectorize ptr
-         llvm::Value *undefInsertValue =
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            llvm::UndefValue::get(llvm::FixedVectorType::get(
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+#else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
-+#endif
-         address = llvm::InsertElementInst::Create(undefInsertValue, address, LLVMInt32(0), "svm_ptr_iei", InsertBefore);
-         llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+            {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
-+#else
-+        llvm::ElementCount::get(
-+                                llvm::dyn_cast<llvm::FixedVectorType>(addressType->getNumElements(), false),
-+#endif
-             llvm::Constant::getNullValue(llvm::Type::getInt32Ty(InsertBefore->getContext())));
-+
-         llvm::Value *undefShuffleValue =
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            llvm::UndefValue::get(llvm::FixedVectorType::get(
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+#else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
-+#endif
-         address = new llvm::ShuffleVectorInst(address, undefShuffleValue, zeroVec, "svm_ptr_svi", InsertBefore);
- 
-         // Calculate address
-@@ -6553,9 +6608,12 @@ llvm::Instruction *FixAddressSpace::processVectorLoad(llvm::LoadInst *LI) {
-     if (retType->getScalarType()->isPointerTy()) {
-         isPtrLoad = true;
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        retType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(retType)->getNumElements());
-+#else
-         retType = llvm::VectorType::get(scalarType, retType->getVectorNumElements());
-+#endif
-     }
--
-     llvm::Instruction *res = lGenXLoadInst(ptr, retType, llvm::dyn_cast<llvm::Instruction>(LI));
-     Assert(res);
- 
-@@ -6580,11 +6638,16 @@ llvm::Instruction *FixAddressSpace::processSVMVectorLoad(llvm::Instruction *CI)
-     ptr = new llvm::IntToPtrInst(ptr, llvm::PointerType::get(retType, 0), CI->getName() + "_inttoptr", CI);
-     llvm::Instruction *loadInst = NULL;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    loadInst = new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), loadInst,
--                                  CI->getName(), (llvm::Instruction *)NULL);
-+    loadInst = new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-+                                  CI->getName(), false /* not volatile */,
-+                                  llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne(),
-+                                  (llvm::Instruction *)NULL);
- #else
--    loadInst = new llvm::LoadInst(ptr, CI->getName(), (llvm::Instruction *)NULL);
-+    loadInst = new llvm::LoadInst(ptr, CI->getName(), false,
-+                                  llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne(),
-+                                  (llvm::Instruction *)NULL);
- #endif
-+
-     Assert(loadInst);
-     return loadInst;
- }
-@@ -6606,7 +6669,11 @@ llvm::Instruction *FixAddressSpace::processVectorStore(llvm::StoreInst *SI) {
-     // Note: it doesn't look like a normal case for GenX target
-     if (valType->getScalarType()->isPointerTy()) {
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        valType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(valType)->getNumElements());
-+#else
-         valType = llvm::VectorType::get(scalarType, valType->getVectorNumElements());
-+#endif
-         val = new llvm::PtrToIntInst(val, valType, "svm_st_val_ptrtoint", SI);
-     }
- 
-@@ -6631,12 +6698,8 @@ llvm::Instruction *FixAddressSpace::processSVMVectorStore(llvm::Instruction *CI)
-     ptr = new llvm::IntToPtrInst(ptr, llvm::PointerType::get(valType, 0), CI->getName() + "_inttoptr", CI);
- 
-     llvm::Instruction *storeInst = NULL;
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    loadInst = new llvm::StoreInst(val, llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(),
--                                   storeInst, CI->getName(), (llvm::Instruction *)NULL);
--#else
--    storeInst = new llvm::StoreInst(val, ptr, (llvm::Instruction *)NULL);
--#endif
-+    storeInst = new llvm::StoreInst(val, ptr, (llvm::Instruction *)NULL,
-+                                    llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
-     Assert(storeInst);
-     return storeInst;
- }
-@@ -6645,15 +6708,18 @@ llvm::Instruction *FixAddressSpace::createInt8WrRegion(llvm::Value *Val, llvm::V
-     int width = g->target->getVectorWidth();
- 
-     llvm::Value *Args[8];
--
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Args[0] = llvm::UndefValue::get(llvm::FixedVectorType::get(LLVMTypes::Int8Type, width * 4)); // old value
-+#else
-     Args[0] = llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int8Type, width * 4)); // old value
--    Args[1] = Val;                                                                          // value to store
--    Args[2] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);                              // vstride
--    Args[3] = llvm::ConstantInt::get(LLVMTypes::Int32Type, width);                          // width
--    Args[4] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 4);                              // stride
--    Args[5] = llvm::ConstantInt::get(LLVMTypes::Int16Type, 0);                              // offsets
--    Args[6] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);                              // parent width (ignored)
--    Args[7] = Mask;                                                                         // mask
-+#endif
-+    Args[1] = Val;                                                 // value to store
-+    Args[2] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);     // vstride
-+    Args[3] = llvm::ConstantInt::get(LLVMTypes::Int32Type, width); // width
-+    Args[4] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 4);     // stride
-+    Args[5] = llvm::ConstantInt::get(LLVMTypes::Int16Type, 0);     // offsets
-+    Args[6] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);     // parent width (ignored)
-+    Args[7] = Mask;                                                // mask
- 
-     llvm::Type *Tys[4];
- 
-@@ -6708,7 +6774,12 @@ llvm::Instruction *FixAddressSpace::processGatherScatterPrivate(llvm::CallInst *
-         return NULL;
- 
-     llvm::Value *address = calculateGatherScatterAddress(ptr, offsets, CI);
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    llvm::Type *i8VecType = llvm::FixedVectorType::get(LLVMTypes::Int8Type, width * 4);
-+#else
-     llvm::Type *i8VecType = llvm::VectorType::get(LLVMTypes::Int8Type, width * 4);
-+#endif
-+
-     bool isInt8 = (value->getType()->getScalarType() == LLVMTypes::Int8Type);
- 
-     Assert(address && "Bad gather/scatter address!");
diff --git a/srcpkgs/ispc/patches/llvm12-006.patch b/srcpkgs/ispc/patches/llvm12-006.patch
deleted file mode 100644
index a829ea48391e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-006.patch
+++ /dev/null
@@ -1,126 +0,0 @@
-From bb3f493d1fbd45c79e1d9dee67a0430ba313eaad Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 19 Jan 2021 11:07:33 -0800
-Subject: [PATCH] Fixed ifdefs for LLVM_11
-
----
- src/ctx.cpp |  6 +++---
- src/opt.cpp | 18 +++++++++---------
- 2 files changed, 12 insertions(+), 12 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 2a72e6837..527a02f30 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1691,7 +1691,7 @@ llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const llvm::T
-     if (llvm::Constant *const_val = llvm::dyn_cast<llvm::Constant>(value)) {
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         ret = llvm::ConstantVector::getSplat(g->target->getVectorWidth(), const_val);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-         ret =
-             llvm::ConstantVector::getSplat({static_cast<unsigned int>(g->target->getVectorWidth()), false}, const_val);
- #else // LLVM 12.0+
-@@ -3148,7 +3148,7 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-     llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
-         vecType->getVectorNumElements(), llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-     llvm::Constant *zeroVec =
-         llvm::ConstantVector::getSplat({static_cast<unsigned int>(ty->getNumElements()), false},
-                                        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
-@@ -3688,7 +3688,7 @@ llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-         defaults = llvm::ConstantVector::getSplat({static_cast<unsigned int>(vt->getNumElements()), false},
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
- #else
-diff --git a/src/opt.cpp b/src/opt.cpp
-index 1789b8476..3ff191a0a 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -1045,7 +1045,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                 llvm::Instruction *loadInst =
-                     new llvm::LoadInst(castPtr, llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load",
-                                        false /* not volatile */, llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
-@@ -1472,7 +1472,7 @@ static llvm::Value *lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offse
-                     llvm::Value *zeroMask =
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                         llvm::ConstantVector::getSplat(cv->getType()->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                         llvm::ConstantVector::getSplat(
-                             {llvm::dyn_cast<llvm::VectorType>(cv->getType())->getNumElements(), false},
- #else // LLVM 12.0+
-@@ -1495,7 +1495,7 @@ static llvm::Value *lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offse
-                         llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                             bop_var_type->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                             {llvm::dyn_cast<llvm::VectorType>(bop_var_type)->getNumElements(), false},
- #else // LLVM 12.0+
-                             llvm::ElementCount::get(
-@@ -2803,7 +2803,7 @@ static bool lGSToLoadStore(llvm::CallInst *callInst) {
-             llvm::Value *zeroMask =
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                 llvm::ConstantVector::getSplat(callInst->getType()->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                 llvm::ConstantVector::getSplat(
-                     {llvm::dyn_cast<llvm::VectorType>(callInst->getType())->getNumElements(), false},
- 
-@@ -3100,7 +3100,7 @@ static bool lImproveMaskedLoad(llvm::CallInst *callInst, llvm::BasicBlock::itera
-         {
-             llvm::Type *ptrType = llvm::PointerType::get(callInst->getType(), 0);
-             ptr = new llvm::BitCastInst(ptr, ptrType, "ptr_cast_for_load", callInst);
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             load = new llvm::LoadInst(
-                 ptr, callInst->getName(), false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-@@ -3459,7 +3459,7 @@ llvm::Value *lGEPAndLoad(llvm::Value *basePtr, int64_t offset, int align, llvm::
-                          llvm::Type *type) {
-     llvm::Value *ptr = lGEPInst(basePtr, LLVMInt64(offset), "new_base", insertBefore);
-     ptr = new llvm::BitCastInst(ptr, llvm::PointerType::get(type, 0), "ptr_cast", insertBefore);
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-     return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, llvm::MaybeAlign(align), insertBefore);
- #else // LLVM 11.0+
-     return new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-@@ -6183,7 +6183,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 Args.push_back(llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                     g->target->getNativeVectorWidth(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                     {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
- #else // LLVM 12.0+
-                     llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-@@ -6195,7 +6195,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                     g->target->getNativeVectorWidth(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                     {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
- #else // LLVM 12.0+
-                     llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-@@ -6567,7 +6567,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
-         llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-             {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
- #else
-         llvm::ElementCount::get(
diff --git a/srcpkgs/ispc/patches/llvm12-007.patch b/srcpkgs/ispc/patches/llvm12-007.patch
deleted file mode 100644
index 1b975f896c7e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-007.patch
+++ /dev/null
@@ -1,160 +0,0 @@
-From 62f5a6c37bf26fc25a7cf81868052d3472874610 Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 23 Mar 2021 23:07:30 -0700
-Subject: [PATCH] Do not generate function mask when it is not required
-
----
- src/ctx.cpp                    | 39 ++++++++++++++-------
- tests/lit-tests/full_mask.ispc | 63 ++++++++++++++++++++++++++++++++++
- 2 files changed, 90 insertions(+), 12 deletions(-)
- create mode 100644 tests/lit-tests/full_mask.ispc
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 527a02f30..9e775fc5c 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -231,10 +231,18 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym, llvm::F
-     internalMaskPointer = AllocaInst(LLVMTypes::MaskType, "internal_mask_memory");
-     StoreInst(LLVMMaskAllOn, internalMaskPointer);
- 
--    functionMaskValue = LLVMMaskAllOn;
--
--    fullMaskPointer = AllocaInst(LLVMTypes::MaskType, "full_mask_memory");
--    StoreInst(LLVMMaskAllOn, fullMaskPointer);
-+    // If the function doesn't have __mask in parameters, there is no need to
-+    // have function mask
-+    if ((func->GetType()->isExported &&
-+         (lf->getFunctionType()->getNumParams() == func->GetType()->GetNumParameters())) ||
-+        (func->GetType()->isUnmasked) || (func->GetType()->isTask)) {
-+        functionMaskValue = NULL;
-+        fullMaskPointer = NULL;
-+    } else {
-+        functionMaskValue = LLVMMaskAllOn;
-+        fullMaskPointer = AllocaInst(LLVMTypes::MaskType, "full_mask_memory");
-+        StoreInst(LLVMMaskAllOn, fullMaskPointer);
-+    }
- 
-     blockEntryMask = NULL;
-     breakLanesPtr = continueLanesPtr = NULL;
-@@ -389,20 +397,26 @@ llvm::BasicBlock *FunctionEmitContext::GetCurrentBasicBlock() { return bblock; }
- 
- void FunctionEmitContext::SetCurrentBasicBlock(llvm::BasicBlock *bb) { bblock = bb; }
- 
--llvm::Value *FunctionEmitContext::GetFunctionMask() { return functionMaskValue; }
-+llvm::Value *FunctionEmitContext::GetFunctionMask() { return fullMaskPointer ? functionMaskValue : LLVMMaskAllOn; }
- 
- llvm::Value *FunctionEmitContext::GetInternalMask() { return LoadInst(internalMaskPointer, NULL, "load_mask"); }
- 
- llvm::Value *FunctionEmitContext::GetFullMask() {
--    return BinaryOperator(llvm::Instruction::And, GetInternalMask(), functionMaskValue, "internal_mask&function_mask");
-+    return fullMaskPointer ? BinaryOperator(llvm::Instruction::And, GetInternalMask(), functionMaskValue,
-+                                            "internal_mask&function_mask")
-+                           : GetInternalMask();
- }
- 
--llvm::Value *FunctionEmitContext::GetFullMaskPointer() { return fullMaskPointer; }
-+llvm::Value *FunctionEmitContext::GetFullMaskPointer() {
-+    return fullMaskPointer ? fullMaskPointer : internalMaskPointer;
-+}
- 
- void FunctionEmitContext::SetFunctionMask(llvm::Value *value) {
--    functionMaskValue = value;
--    if (bblock != NULL)
--        StoreInst(GetFullMask(), fullMaskPointer);
-+    if (fullMaskPointer != NULL) {
-+        functionMaskValue = value;
-+        if (bblock != NULL)
-+            StoreInst(GetFullMask(), fullMaskPointer);
-+    }
- }
- 
- void FunctionEmitContext::SetBlockEntryMask(llvm::Value *value) { blockEntryMask = value; }
-@@ -410,7 +424,8 @@ void FunctionEmitContext::SetBlockEntryMask(llvm::Value *value) { blockEntryMask
- void FunctionEmitContext::SetInternalMask(llvm::Value *value) {
-     StoreInst(value, internalMaskPointer);
-     // kludge so that __mask returns the right value in ispc code.
--    StoreInst(GetFullMask(), fullMaskPointer);
-+    if (fullMaskPointer)
-+        StoreInst(GetFullMask(), fullMaskPointer);
- }
- 
- void FunctionEmitContext::SetInternalMaskAnd(llvm::Value *oldMask, llvm::Value *test) {
-@@ -1265,7 +1280,7 @@ void FunctionEmitContext::CurrentLanesReturned(Expr *expr, bool doCoherenceCheck
-         // lanes have returned
-         if (doCoherenceCheck) {
-             // if newReturnedLanes == functionMaskValue, get out of here!
--            llvm::Value *cmp = MasksAllEqual(functionMaskValue, newReturnedLanes);
-+            llvm::Value *cmp = MasksAllEqual(GetFunctionMask(), newReturnedLanes);
-             llvm::BasicBlock *bDoReturn = CreateBasicBlock("do_return");
-             llvm::BasicBlock *bNoReturn = CreateBasicBlock("no_return");
-             BranchInst(bDoReturn, bNoReturn, cmp);
-diff --git a/tests/lit-tests/full_mask.ispc b/tests/lit-tests/full_mask.ispc
-new file mode 100644
-index 000000000..ac0b0bca3
---- /dev/null
-+++ b/tests/lit-tests/full_mask.ispc
-@@ -0,0 +1,63 @@
-+// RUN: %{ispc} %s -DISPC_EXPORT --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_EXPORT %s
-+
-+// RUN: %{ispc} %s -DISPC_UNMASKED --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_UNMASKED %s
-+
-+// RUN: %{ispc} %s -DISPC_NOQUALIF --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_NOQUALIF %s
-+
-+// RUN: %{ispc} %s -DISPC_TASK --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_TASK %s
-+
-+struct Parameters {
-+    float *vout;
-+    int param;
-+};
-+
-+#ifdef ISPC_EXPORT
-+// CHECK_ISPC_EXPORT: define void @simple_export___
-+// CHECK_ISPC_EXPORT: %full_mask_memory = alloca
-+// CHECK_ISPC_EXPORT: define void @simple_export(
-+// CHECK_ISPC_EXPORT-NOT: %full_mask_memory = alloca
-+export void simple_export(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_UNMASKED
-+// CHECK_ISPC_UNMASKED: define void @simple_unmasked
-+// CHECK_ISPC_UNMASKED-NOT: %full_mask_memory = alloca
-+unmasked void simple_unmasked(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_NOQUALIF
-+// CHECK_ISPC_NOQUALIF: define void @simple
-+// CHECK_ISPC_NOQUALIF: %full_mask_memory = alloca
-+void simple(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_TASK
-+
-+// CHECK_ISPC_TASK: define void @simple_task
-+// CHECK_ISPC_TASK-NOT: %full_mask_memory = alloca
-+// CHECK_ISPC_TASK: define void @simple_entry_point__
-+// CHECK_ISPC_TASK: %full_mask_memory = alloca
-+// CHECK_ISPC_TASK: define void @simple_entry_point(
-+// CHECK_ISPC_TASK-NOT: %full_mask_memory = alloca
-+task void simple_task(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+export void simple_entry_point(void *uniform parameters, uniform int dim0, uniform int dim1, uniform int dim2) {
-+    launch[dim0, dim1, dim2] simple_task(parameters);
-+}
-+#endif
-\ No newline at end of file
diff --git a/srcpkgs/ispc/patches/llvm12-008.patch b/srcpkgs/ispc/patches/llvm12-008.patch
deleted file mode 100644
index c8413d8b7887..000000000000
--- a/srcpkgs/ispc/patches/llvm12-008.patch
+++ /dev/null
@@ -1,149 +0,0 @@
-From afad14227d9204a3c8a626ca608f5b43c3218fe9 Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 4 May 2021 11:43:52 -0700
-Subject: [PATCH] Fixed ISPC gen build for LLVM12
-
----
- src/ctx.cpp |  4 ++++
- src/opt.cpp | 43 +++++++++++++++++++++++++++++--------------
- 2 files changed, 33 insertions(+), 14 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 0c7050591..f7dc06939 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -3738,7 +3738,11 @@ llvm::Value *FunctionEmitContext::GenXSimdCFAny(llvm::Value *value) {
- 
- llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::Value *defaults) {
-     AssertPos(currentPos, llvm::isa<llvm::VectorType>(value->getType()));
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    llvm::FixedVectorType *vt = llvm::dyn_cast<llvm::FixedVectorType>(value->getType());
-+#else
-     llvm::VectorType *vt = llvm::dyn_cast<llvm::VectorType>(value->getType());
-+#endif
-     if (defaults == NULL) {
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-diff --git a/src/opt.cpp b/src/opt.cpp
-index cea4afa23..4e33d6b1a 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -2916,9 +2916,13 @@ static llvm::Function *lGenXMaskedInt8Inst(llvm::Instruction *inst, bool isStore
- 
- static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::Instruction *inst) {
-     Assert(g->target->isGenXTarget());
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Assert(llvm::isa<llvm::FixedVectorType>(val->getType()));
-+    llvm::FixedVectorType *valVecType = llvm::dyn_cast<llvm::FixedVectorType>(val->getType());
-+#else
-     Assert(llvm::isa<llvm::VectorType>(val->getType()));
--
-     llvm::VectorType *valVecType = llvm::dyn_cast<llvm::VectorType>(val->getType());
-+#endif
-     Assert(llvm::isPowerOf2_32(valVecType->getNumElements()));
-     Assert(valVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
- 
-@@ -2942,9 +2946,13 @@ static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::
- }
- 
- static llvm::CallInst *lGenXLoadInst(llvm::Value *ptr, llvm::Type *retType, llvm::Instruction *inst) {
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Assert(llvm::isa<llvm::FixedVectorType>(retType));
-+    llvm::FixedVectorType *retVecType = llvm::dyn_cast<llvm::FixedVectorType>(retType);
-+#else
-     Assert(llvm::isa<llvm::VectorType>(retType));
--
-     llvm::VectorType *retVecType = llvm::dyn_cast<llvm::VectorType>(retType);
-+#endif
-     Assert(llvm::isPowerOf2_32(retVecType->getNumElements()));
-     Assert(retVecType->getPrimitiveSizeInBits());
-     Assert(retVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-@@ -5485,8 +5493,13 @@ static void lCreateBlockLDUse(llvm::Instruction *currInst, std::vector<llvm::Ext
-         } else if (auto gather = lGetPseudoGather(llvm::dyn_cast<llvm::Instruction>(ui->getUser()))) {
-             // Collect idxs from gather and fix users
-             llvm::Value *res = llvm::UndefValue::get(gather->getType());
--            for (unsigned i = 0, end = llvm::dyn_cast<llvm::VectorType>(res->getType())->getNumElements(); i < end;
--                 ++i) {
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            for (unsigned i = 0, end = llvm::dyn_cast<llvm::FixedVectorType>(res->getType())->getNumElements(); i < end;
-+                 ++i)
-+#else
-+            for (unsigned i = 0, end = llvm::dyn_cast<llvm::VectorType>(res->getType())->getNumElements(); i < end; ++i)
-+#endif
-+            {
-                 // Get element via IEI
-                 res = llvm::InsertElementInst::Create(res, EEIs[ptrUse.idxs[curr_idx++]],
-                                                       llvm::ConstantInt::get(LLVMTypes::Int32Type, i),
-@@ -5522,10 +5535,11 @@ static bool lVectorizeGEPs(llvm::Value *ptr, std::vector<PtrUse> &ptrUses, std::
- 
-     // Adjust values for vector load
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    if (auto vecTy = llvm::dyn_cast<llvm::FixedVectorType>(type)) {
-+    if (auto vecTy = llvm::dyn_cast<llvm::FixedVectorType>(type))
- #else
--    if (auto vecTy = llvm::dyn_cast<llvm::VectorType>(type)) {
-+    if (auto vecTy = llvm::dyn_cast<llvm::VectorType>(type))
- #endif
-+    {
-         // Get single element size
-         t_size /= vecTy->getNumElements();
-         // Get single element type
-@@ -6477,7 +6491,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-         Offsets,
-         llvm::FixedVectorType::get(LLVMTypes::Int64Type,
--                                   llvm::dyn_cast<llvm::VectorType>(Offsets->getType())->getNumElements()),
-+                                   llvm::dyn_cast<llvm::FixedVectorType>(Offsets->getType())->getNumElements()),
-         "svm_offset_zext", InsertBefore);
- #else
-         Offsets, llvm::VectorType::get(LLVMTypes::Int64Type, Offsets->getType()->getVectorNumElements()),
-@@ -6492,7 +6506,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
-         llvm::Value *undefInsertValue =
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-             llvm::UndefValue::get(llvm::FixedVectorType::get(
--                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements()));
- #else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
- #endif
-@@ -6501,17 +6515,16 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
- #elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
--            {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
-+            {llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements(), false},
- #else
--        llvm::ElementCount::get(
--                                llvm::dyn_cast<llvm::FixedVectorType>(addressType->getNumElements(), false),
-+            llvm::ElementCount::get(llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements(), false),
- #endif
-             llvm::Constant::getNullValue(llvm::Type::getInt32Ty(InsertBefore->getContext())));
- 
-         llvm::Value *undefShuffleValue =
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-             llvm::UndefValue::get(llvm::FixedVectorType::get(
--                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements()));
- #else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
- #endif
-@@ -6542,7 +6555,8 @@ llvm::Instruction *FixAddressSpace::processVectorLoad(llvm::LoadInst *LI) {
-         isPtrLoad = true;
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--        retType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(retType)->getNumElements());
-+        retType =
-+            llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::FixedVectorType>(retType)->getNumElements());
- #else
-         retType = llvm::VectorType::get(scalarType, retType->getVectorNumElements());
- #endif
-@@ -6604,7 +6618,8 @@ llvm::Instruction *FixAddressSpace::processVectorStore(llvm::StoreInst *SI) {
-     if (valType->getScalarType()->isPointerTy()) {
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--        valType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(valType)->getNumElements());
-+        valType =
-+            llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::FixedVectorType>(valType)->getNumElements());
- #else
-         valType = llvm::VectorType::get(scalarType, valType->getVectorNumElements());
- #endif
diff --git a/srcpkgs/ispc/patches/llvm12-009.patch b/srcpkgs/ispc/patches/llvm12-009.patch
deleted file mode 100644
index d3ea67828582..000000000000
--- a/srcpkgs/ispc/patches/llvm12-009.patch
+++ /dev/null
@@ -1,2109 +0,0 @@
-From 97b13c32132e2704a5e3e7b2eae49d854d087e3e Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 4 May 2021 11:31:55 -0700
-Subject: [PATCH] Updated builtins-cm* for switch to LLVM12
-
----
- builtins/builtins-cm-32.ll | 234 ++++++++++++++++++-------------------
- builtins/builtins-cm-64.ll | 232 ++++++++++++++++++------------------
- 2 files changed, 233 insertions(+), 233 deletions(-)
-
-diff --git a/builtins/builtins-cm-32.ll b/builtins/builtins-cm-32.ll
-index 32debf32e..481bbdc48 100644
---- a/builtins/builtins-cm-32.ll
-+++ b/builtins/builtins-cm-32.ll
-@@ -557,7 +557,7 @@ $_ZN13VaryingWriter12WriteVecElemIPvEEvv = comdat any
- @.str.10 = private unnamed_addr constant [5 x i8] c"%08X\00", align 1
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -618,7 +618,7 @@ define internal <1 x i8> @_ZN7details13__impl_divremILi1EEEu2CMvbT__cS1_S1_u2CMv
- declare <1 x i8> @llvm.genx.rdregioni.v1i8.v1i8.i16(<1 x i8>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -634,7 +634,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -680,7 +680,7 @@ define internal <2 x i8> @_ZN7details13__impl_divremILi2EEEu2CMvbT__cS1_S1_u2CMv
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -818,7 +818,7 @@ define internal <16 x i8> @_ZN7details13__impl_divremILi16EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -864,7 +864,7 @@ define internal <32 x i8> @_ZN7details13__impl_divremILi32EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -890,7 +890,7 @@ define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -904,7 +904,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -918,7 +918,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -932,7 +932,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -946,7 +946,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -960,7 +960,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -974,7 +974,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1058,7 +1058,7 @@ define internal <1 x i16> @_ZN7details13__impl_divremILi1EEEu2CMvbT__sS1_S1_u2CM
- declare <1 x i16> @llvm.genx.rdregioni.v1i16.v1i16.i16(<1 x i16>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1074,7 +1074,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1143,7 +1143,7 @@ define internal <2 x i16> @_ZN7details13__impl_divremILi2EEEu2CMvbT__sS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1350,7 +1350,7 @@ define internal <16 x i16> @_ZN7details13__impl_divremILi16EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1419,7 +1419,7 @@ define internal <32 x i16> @_ZN7details13__impl_divremILi32EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1445,7 +1445,7 @@ define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 si
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1459,7 +1459,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1473,7 +1473,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1487,7 +1487,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -1501,7 +1501,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -1515,7 +1515,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1529,7 +1529,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1730,7 +1730,7 @@ define internal <1 x i32> @_ZN7details13__impl_divremILi1EEEu2CMvbT__iS1_S1_u2CM
- declare <1 x i32> @llvm.genx.rdregioni.v1i32.v1i32.i16(<1 x i32>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1746,7 +1746,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -1932,7 +1932,7 @@ define internal <2 x i32> @_ZN7details13__impl_divremILi2EEEu2CMvbT__iS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2490,7 +2490,7 @@ define internal <16 x i32> @_ZN7details13__impl_divremILi16EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2676,7 +2676,7 @@ define internal <32 x i32> @_ZN7details13__impl_divremILi32EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2702,7 +2702,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2716,7 +2716,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -2730,7 +2730,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2744,7 +2744,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -2758,7 +2758,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -2772,7 +2772,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2786,7 +2786,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2844,7 +2844,7 @@ define internal <1 x i8> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2860,7 +2860,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -2906,7 +2906,7 @@ define internal <2 x i8> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3044,7 +3044,7 @@ define internal <16 x i8> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3090,7 +3090,7 @@ define internal <32 x i8> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3116,7 +3116,7 @@ define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3130,7 +3130,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -3144,7 +3144,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3158,7 +3158,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -3172,7 +3172,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -3186,7 +3186,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3200,7 +3200,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3278,7 +3278,7 @@ define internal <1 x i16> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3294,7 +3294,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3360,7 +3360,7 @@ define internal <2 x i16> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3558,7 +3558,7 @@ define internal <16 x i16> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3624,7 +3624,7 @@ define internal <32 x i16> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3650,7 +3650,7 @@ define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 ze
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3664,7 +3664,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3678,7 +3678,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3692,7 +3692,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -3706,7 +3706,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -3720,7 +3720,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3734,7 +3734,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3892,7 +3892,7 @@ define internal <1 x i32> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3908,7 +3908,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4054,7 +4054,7 @@ define internal <2 x i32> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4492,7 +4492,7 @@ define internal <16 x i32> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4638,7 +4638,7 @@ define internal <32 x i32> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4664,7 +4664,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4678,7 +4678,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4692,7 +4692,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4706,7 +4706,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -4720,7 +4720,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -4734,7 +4734,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4748,7 +4748,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-+define internal void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-   %8 = alloca i8*, align 4
-   %9 = alloca i8*, align 4
-   %10 = alloca i32, align 4
-@@ -4988,7 +4988,7 @@ define internal void @_ZN7details16_cm_print_formatILi128EEEv15cm_surfaceindexju
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i32) #26 !dbg !117 {
-+define internal void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i32) #26 !dbg !117 {
-   %10 = alloca i32, align 4
-   %11 = alloca i8*, align 4
-   %12 = alloca i32, align 4
-@@ -5069,7 +5069,7 @@ define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i3
-   %67 = load i64, i64* %13, align 8, !dbg !159, !tbaa !19
-   %68 = load <5 x i32>, <5 x i32>* %21, align 32, !dbg !160, !tbaa !7
-   call void @_ZN13VaryingWriterC2ERjRPKjiyu2CMvb5_i(%class.VaryingWriter* %23, i32* dereferenceable(4) %19, i32** dereferenceable(4) %14, i32 %66, i64 %67, <5 x i32> %68), !dbg !161
--  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval align 32 %22, %class.VaryingWriter* byval align 32 %23), !dbg !162
-+  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval(%class.UniformWriter) align 32 %22, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %23), !dbg !162
-   br label %70, !dbg !163
- 
- ; <label>:70:                                     ; preds = %60
-@@ -5187,7 +5187,7 @@ define internal <5 x i32> @_Z17get_auxiliary_strv() #28 comdat !dbg !178 {
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %class.VaryingWriter* byval align 32) #25 comdat !dbg !191 {
-+define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !191 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %class.VaryingWriter, align 32
-@@ -5196,7 +5196,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %8 = bitcast %class.UniformWriter* %5 to i8*, !dbg !196
-   %9 = bitcast %class.UniformWriter* %1 to i8*, !dbg !196
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %8, i8* align 32 %9, i32 64, i1 false), !dbg !196, !tbaa.struct !197
--  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval align 32 %5), !dbg !198
-+  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5), !dbg !198
-   br i1 %10, label %16, label %11, !dbg !199
- 
- ; <label>:11:                                     ; preds = %3
-@@ -5204,7 +5204,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %13 = bitcast %class.VaryingWriter* %6 to i8*, !dbg !201
-   %14 = bitcast %class.VaryingWriter* %2 to i8*, !dbg !201
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %13, i8* align 32 %14, i32 64, i1 false), !dbg !201, !tbaa.struct !197
--  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval align 32 %6), !dbg !202
-+  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %6), !dbg !202
-   br label %16, !dbg !199
- 
- ; <label>:16:                                     ; preds = %11, %3
-@@ -5279,7 +5279,7 @@ define internal void @_ZN13VaryingWriterC2ERjRPKjiyu2CMvb5_i(%class.VaryingWrite
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @__num_cores() #29 !dbg !236 {
-+define internal i32 @__num_cores() #29 !dbg !236 {
-   ret i32 -1, !dbg !237
- }
- 
-@@ -8860,7 +8860,7 @@ declare dso_local void @_ZN7details37__cm_intrinsic_impl_svm_scatter_writeIiLi1E
- declare void @llvm.genx.svm.scatter.v1i1.v1i64.v1i32(<1 x i1>, i32, <1 x i64>, <1 x i32>) #27
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval align 32) #25 comdat !dbg !1645 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32) #25 comdat !dbg !1645 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.UniformWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8869,7 +8869,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
-   %7 = bitcast %class.UniformWriter* %4 to i8*, !dbg !1647
-   %8 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1647
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %7, i8* align 32 %8, i32 64, i1 false), !dbg !1647, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %5), !dbg !1648
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval(%class.UniformWriter) align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %5), !dbg !1648
-   ret i1 %9, !dbg !1649
- }
- 
-@@ -8877,7 +8877,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
- declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture readonly, i32, i1) #32
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval align 32) #25 comdat !dbg !1650 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !1650 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.VaryingWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -8886,12 +8886,12 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWrite
-   %7 = bitcast %class.VaryingWriter* %4 to i8*, !dbg !1652
-   %8 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !1652
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %7, i8* align 32 %8, i32 64, i1 false), !dbg !1652, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %5), !dbg !1653
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %5), !dbg !1653
-   ret i1 %9, !dbg !1654
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1655 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1655 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8914,7 +8914,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %22 = bitcast %class.UniformWriter* %5 to i8*, !dbg !1657
-   %23 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1657
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %22, i8* align 32 %23, i32 64, i1 false), !dbg !1657, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %6), !dbg !1658
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %6), !dbg !1658
-   br i1 %24, label %60, label %25, !dbg !1659
- 
- ; <label>:25:                                     ; preds = %3
-@@ -8922,7 +8922,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %27 = bitcast %class.UniformWriter* %7 to i8*, !dbg !1661
-   %28 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1661
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %27, i8* align 32 %28, i32 64, i1 false), !dbg !1661, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %8), !dbg !1662
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval(%class.UniformWriter) align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %8), !dbg !1662
-   br i1 %29, label %60, label %30, !dbg !1663
- 
- ; <label>:30:                                     ; preds = %25
-@@ -8930,7 +8930,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %32 = bitcast %class.UniformWriter* %9 to i8*, !dbg !1665
-   %33 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1665
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %32, i8* align 32 %33, i32 64, i1 false), !dbg !1665, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %10), !dbg !1666
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval(%class.UniformWriter) align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %10), !dbg !1666
-   br i1 %34, label %60, label %35, !dbg !1667
- 
- ; <label>:35:                                     ; preds = %30
-@@ -8938,7 +8938,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %37 = bitcast %class.UniformWriter* %11 to i8*, !dbg !1669
-   %38 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1669
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %37, i8* align 32 %38, i32 64, i1 false), !dbg !1669, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %12), !dbg !1670
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval(%class.UniformWriter) align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %12), !dbg !1670
-   br i1 %39, label %60, label %40, !dbg !1671
- 
- ; <label>:40:                                     ; preds = %35
-@@ -8946,7 +8946,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %42 = bitcast %class.UniformWriter* %13 to i8*, !dbg !1673
-   %43 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1673
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %42, i8* align 32 %43, i32 64, i1 false), !dbg !1673, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %14), !dbg !1674
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval(%class.UniformWriter) align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %14), !dbg !1674
-   br i1 %44, label %60, label %45, !dbg !1675
- 
- ; <label>:45:                                     ; preds = %40
-@@ -8954,7 +8954,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %47 = bitcast %class.UniformWriter* %15 to i8*, !dbg !1677
-   %48 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1677
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %47, i8* align 32 %48, i32 64, i1 false), !dbg !1677, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %16), !dbg !1678
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval(%class.UniformWriter) align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %16), !dbg !1678
-   br i1 %49, label %60, label %50, !dbg !1679
- 
- ; <label>:50:                                     ; preds = %45
-@@ -8962,7 +8962,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %52 = bitcast %class.UniformWriter* %17 to i8*, !dbg !1681
-   %53 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1681
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %52, i8* align 32 %53, i32 64, i1 false), !dbg !1681, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %18), !dbg !1682
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval(%class.UniformWriter) align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %18), !dbg !1682
-   br i1 %54, label %60, label %55, !dbg !1683
- 
- ; <label>:55:                                     ; preds = %50
-@@ -8970,7 +8970,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %57 = bitcast %class.UniformWriter* %19 to i8*, !dbg !1685
-   %58 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1685
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %57, i8* align 32 %58, i32 64, i1 false), !dbg !1685, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %20), !dbg !1686
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval(%class.UniformWriter) align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %20), !dbg !1686
-   br label %60, !dbg !1683
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -8979,7 +8979,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1688 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1688 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9005,7 +9005,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1697 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1697 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9031,7 +9031,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1706 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1706 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9057,7 +9057,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1715 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1715 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9083,7 +9083,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1724 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1724 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9109,7 +9109,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1733 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1733 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9135,7 +9135,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1742 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1742 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9161,7 +9161,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1751 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1751 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9984,7 +9984,7 @@ define internal i32 @_ZN7details18_cm_print_type_oclIPvEENS_18SHADER_PRINTF_TYPE
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2055 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2055 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.VaryingWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -10007,7 +10007,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %22 = bitcast %class.VaryingWriter* %5 to i8*, !dbg !2057
-   %23 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2057
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %22, i8* align 32 %23, i32 64, i1 false), !dbg !2057, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %6), !dbg !2058
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %6), !dbg !2058
-   br i1 %24, label %60, label %25, !dbg !2059
- 
- ; <label>:25:                                     ; preds = %3
-@@ -10015,7 +10015,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %27 = bitcast %class.VaryingWriter* %7 to i8*, !dbg !2061
-   %28 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2061
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %27, i8* align 32 %28, i32 64, i1 false), !dbg !2061, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %8), !dbg !2062
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %8), !dbg !2062
-   br i1 %29, label %60, label %30, !dbg !2063
- 
- ; <label>:30:                                     ; preds = %25
-@@ -10023,7 +10023,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %32 = bitcast %class.VaryingWriter* %9 to i8*, !dbg !2065
-   %33 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2065
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %32, i8* align 32 %33, i32 64, i1 false), !dbg !2065, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %10), !dbg !2066
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %10), !dbg !2066
-   br i1 %34, label %60, label %35, !dbg !2067
- 
- ; <label>:35:                                     ; preds = %30
-@@ -10031,7 +10031,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %37 = bitcast %class.VaryingWriter* %11 to i8*, !dbg !2069
-   %38 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2069
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %37, i8* align 32 %38, i32 64, i1 false), !dbg !2069, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %12), !dbg !2070
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %12), !dbg !2070
-   br i1 %39, label %60, label %40, !dbg !2071
- 
- ; <label>:40:                                     ; preds = %35
-@@ -10039,7 +10039,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %42 = bitcast %class.VaryingWriter* %13 to i8*, !dbg !2073
-   %43 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2073
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %42, i8* align 32 %43, i32 64, i1 false), !dbg !2073, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %14), !dbg !2074
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %14), !dbg !2074
-   br i1 %44, label %60, label %45, !dbg !2075
- 
- ; <label>:45:                                     ; preds = %40
-@@ -10047,7 +10047,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %47 = bitcast %class.VaryingWriter* %15 to i8*, !dbg !2077
-   %48 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2077
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %47, i8* align 32 %48, i32 64, i1 false), !dbg !2077, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %16), !dbg !2078
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %16), !dbg !2078
-   br i1 %49, label %60, label %50, !dbg !2079
- 
- ; <label>:50:                                     ; preds = %45
-@@ -10055,7 +10055,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %52 = bitcast %class.VaryingWriter* %17 to i8*, !dbg !2081
-   %53 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2081
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %52, i8* align 32 %53, i32 64, i1 false), !dbg !2081, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %18), !dbg !2082
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %18), !dbg !2082
-   br i1 %54, label %60, label %55, !dbg !2083
- 
- ; <label>:55:                                     ; preds = %50
-@@ -10063,7 +10063,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %57 = bitcast %class.VaryingWriter* %19 to i8*, !dbg !2085
-   %58 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2085
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %57, i8* align 32 %58, i32 64, i1 false), !dbg !2085, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %20), !dbg !2086
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %20), !dbg !2086
-   br label %60, !dbg !2083
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -10072,7 +10072,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2088 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2088 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10098,7 +10098,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2097 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2097 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10124,7 +10124,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2106 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2106 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10150,7 +10150,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2115 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2115 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10176,7 +10176,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2124 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2124 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10202,7 +10202,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2133 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2133 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10228,7 +10228,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2142 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2142 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10254,7 +10254,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2151 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2151 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-diff --git a/builtins/builtins-cm-64.ll b/builtins/builtins-cm-64.ll
-index 39a2dd8be..375d01bed 100644
---- a/builtins/builtins-cm-64.ll
-+++ b/builtins/builtins-cm-64.ll
-@@ -557,7 +557,7 @@ $_ZN13VaryingWriter12WriteVecElemIPvEEvv = comdat any
- @.str.10 = private unnamed_addr constant [8 x i8] c"%016llX\00", align 1
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -618,7 +618,7 @@ define internal <1 x i8> @_ZN7details13__impl_divremILi1EEEu2CMvbT__cS1_S1_u2CMv
- declare <1 x i8> @llvm.genx.rdregioni.v1i8.v1i8.i16(<1 x i8>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -634,7 +634,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -680,7 +680,7 @@ define internal <2 x i8> @_ZN7details13__impl_divremILi2EEEu2CMvbT__cS1_S1_u2CMv
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -818,7 +818,7 @@ define internal <16 x i8> @_ZN7details13__impl_divremILi16EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -864,7 +864,7 @@ define internal <32 x i8> @_ZN7details13__impl_divremILi32EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -890,7 +890,7 @@ define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -904,7 +904,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -918,7 +918,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -932,7 +932,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -946,7 +946,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -960,7 +960,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -974,7 +974,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1058,7 +1058,7 @@ define internal <1 x i16> @_ZN7details13__impl_divremILi1EEEu2CMvbT__sS1_S1_u2CM
- declare <1 x i16> @llvm.genx.rdregioni.v1i16.v1i16.i16(<1 x i16>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1074,7 +1074,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1143,7 +1143,7 @@ define internal <2 x i16> @_ZN7details13__impl_divremILi2EEEu2CMvbT__sS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1350,7 +1350,7 @@ define internal <16 x i16> @_ZN7details13__impl_divremILi16EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1419,7 +1419,7 @@ define internal <32 x i16> @_ZN7details13__impl_divremILi32EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1445,7 +1445,7 @@ define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 si
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1459,7 +1459,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1473,7 +1473,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1487,7 +1487,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -1501,7 +1501,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -1515,7 +1515,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1529,7 +1529,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1730,7 +1730,7 @@ define internal <1 x i32> @_ZN7details13__impl_divremILi1EEEu2CMvbT__iS1_S1_u2CM
- declare <1 x i32> @llvm.genx.rdregioni.v1i32.v1i32.i16(<1 x i32>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1746,7 +1746,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -1932,7 +1932,7 @@ define internal <2 x i32> @_ZN7details13__impl_divremILi2EEEu2CMvbT__iS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2490,7 +2490,7 @@ define internal <16 x i32> @_ZN7details13__impl_divremILi16EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2676,7 +2676,7 @@ define internal <32 x i32> @_ZN7details13__impl_divremILi32EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2702,7 +2702,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2716,7 +2716,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -2730,7 +2730,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2744,7 +2744,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -2758,7 +2758,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -2772,7 +2772,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2786,7 +2786,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2844,7 +2844,7 @@ define internal <1 x i8> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2860,7 +2860,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -2906,7 +2906,7 @@ define internal <2 x i8> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3044,7 +3044,7 @@ define internal <16 x i8> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3090,7 +3090,7 @@ define internal <32 x i8> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3116,7 +3116,7 @@ define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3130,7 +3130,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -3144,7 +3144,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3158,7 +3158,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -3172,7 +3172,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -3186,7 +3186,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3200,7 +3200,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3278,7 +3278,7 @@ define internal <1 x i16> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3294,7 +3294,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3360,7 +3360,7 @@ define internal <2 x i16> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3558,7 +3558,7 @@ define internal <16 x i16> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3624,7 +3624,7 @@ define internal <32 x i16> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3650,7 +3650,7 @@ define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 ze
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3664,7 +3664,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3678,7 +3678,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3692,7 +3692,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -3706,7 +3706,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -3720,7 +3720,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3734,7 +3734,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3892,7 +3892,7 @@ define internal <1 x i32> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3908,7 +3908,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4054,7 +4054,7 @@ define internal <2 x i32> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4492,7 +4492,7 @@ define internal <16 x i32> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4638,7 +4638,7 @@ define internal <32 x i32> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4664,7 +4664,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4678,7 +4678,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4692,7 +4692,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4706,7 +4706,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -4720,7 +4720,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -4734,7 +4734,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4748,7 +4748,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-+define internal void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-   %8 = alloca i8*, align 8
-   %9 = alloca i8*, align 8
-   %10 = alloca i32, align 4
-@@ -5070,7 +5070,7 @@ define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i3
-   %67 = load i64, i64* %13, align 8, !dbg !159, !tbaa !19
-   %68 = load <5 x i32>, <5 x i32>* %21, align 32, !dbg !160, !tbaa !7
-   call void @_ZN13VaryingWriterC2ERyRPKjiyu2CMvb5_i(%class.VaryingWriter* %23, i64* dereferenceable(8) %19, i32** dereferenceable(8) %14, i32 %66, i64 %67, <5 x i32> %68), !dbg !161
--  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval align 32 %22, %class.VaryingWriter* byval align 32 %23), !dbg !162
-+  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval(%class.UniformWriter) align 32 %22, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %23), !dbg !162
-   br label %70, !dbg !163
- 
- ; <label>:70:                                     ; preds = %60
-@@ -5188,7 +5188,7 @@ define internal <5 x i32> @_Z17get_auxiliary_strv() #28 comdat !dbg !178 {
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %class.VaryingWriter* byval align 32) #25 comdat !dbg !191 {
-+define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !191 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %class.VaryingWriter, align 32
-@@ -5197,7 +5197,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %8 = bitcast %class.UniformWriter* %5 to i8*, !dbg !196
-   %9 = bitcast %class.UniformWriter* %1 to i8*, !dbg !196
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %8, i8* align 32 %9, i64 64, i1 false), !dbg !196, !tbaa.struct !197
--  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval align 32 %5), !dbg !198
-+  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5), !dbg !198
-   br i1 %10, label %16, label %11, !dbg !199
- 
- ; <label>:11:                                     ; preds = %3
-@@ -5205,7 +5205,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %13 = bitcast %class.VaryingWriter* %6 to i8*, !dbg !201
-   %14 = bitcast %class.VaryingWriter* %2 to i8*, !dbg !201
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %13, i8* align 32 %14, i64 64, i1 false), !dbg !201, !tbaa.struct !197
--  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval align 32 %6), !dbg !202
-+  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %6), !dbg !202
-   br label %16, !dbg !199
- 
- ; <label>:16:                                     ; preds = %11, %3
-@@ -5280,7 +5280,7 @@ define internal void @_ZN13VaryingWriterC2ERyRPKjiyu2CMvb5_i(%class.VaryingWrite
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @__num_cores() #29 !dbg !236 {
-+define internal i32 @__num_cores() #29 !dbg !236 {
-   ret i32 -1, !dbg !237
- }
- 
-@@ -8870,7 +8870,7 @@ declare dso_local void @_ZN7details37__cm_intrinsic_impl_svm_scatter_writeIiLi1E
- declare void @llvm.genx.svm.scatter.v1i1.v1i64.v1i32(<1 x i1>, i32, <1 x i64>, <1 x i32>) #27
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval align 32) #25 comdat !dbg !1645 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32) #25 comdat !dbg !1645 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.UniformWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8879,7 +8879,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
-   %7 = bitcast %class.UniformWriter* %4 to i8*, !dbg !1647
-   %8 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1647
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %7, i8* align 32 %8, i64 64, i1 false), !dbg !1647, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %5), !dbg !1648
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval(%class.UniformWriter) align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %5), !dbg !1648
-   ret i1 %9, !dbg !1649
- }
- 
-@@ -8887,7 +8887,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
- declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1) #32
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval align 32) #25 comdat !dbg !1650 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !1650 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.VaryingWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -8896,12 +8896,12 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWrite
-   %7 = bitcast %class.VaryingWriter* %4 to i8*, !dbg !1652
-   %8 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !1652
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %7, i8* align 32 %8, i64 64, i1 false), !dbg !1652, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %5), !dbg !1653
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %5), !dbg !1653
-   ret i1 %9, !dbg !1654
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1655 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1655 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8924,7 +8924,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %22 = bitcast %class.UniformWriter* %5 to i8*, !dbg !1657
-   %23 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1657
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %22, i8* align 32 %23, i64 64, i1 false), !dbg !1657, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %6), !dbg !1658
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %6), !dbg !1658
-   br i1 %24, label %60, label %25, !dbg !1659
- 
- ; <label>:25:                                     ; preds = %3
-@@ -8932,7 +8932,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %27 = bitcast %class.UniformWriter* %7 to i8*, !dbg !1661
-   %28 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1661
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %27, i8* align 32 %28, i64 64, i1 false), !dbg !1661, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %8), !dbg !1662
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval(%class.UniformWriter) align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %8), !dbg !1662
-   br i1 %29, label %60, label %30, !dbg !1663
- 
- ; <label>:30:                                     ; preds = %25
-@@ -8940,7 +8940,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %32 = bitcast %class.UniformWriter* %9 to i8*, !dbg !1665
-   %33 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1665
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %32, i8* align 32 %33, i64 64, i1 false), !dbg !1665, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %10), !dbg !1666
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval(%class.UniformWriter) align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %10), !dbg !1666
-   br i1 %34, label %60, label %35, !dbg !1667
- 
- ; <label>:35:                                     ; preds = %30
-@@ -8948,7 +8948,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %37 = bitcast %class.UniformWriter* %11 to i8*, !dbg !1669
-   %38 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1669
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %37, i8* align 32 %38, i64 64, i1 false), !dbg !1669, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %12), !dbg !1670
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval(%class.UniformWriter) align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %12), !dbg !1670
-   br i1 %39, label %60, label %40, !dbg !1671
- 
- ; <label>:40:                                     ; preds = %35
-@@ -8956,7 +8956,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %42 = bitcast %class.UniformWriter* %13 to i8*, !dbg !1673
-   %43 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1673
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %42, i8* align 32 %43, i64 64, i1 false), !dbg !1673, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %14), !dbg !1674
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval(%class.UniformWriter) align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %14), !dbg !1674
-   br i1 %44, label %60, label %45, !dbg !1675
- 
- ; <label>:45:                                     ; preds = %40
-@@ -8964,7 +8964,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %47 = bitcast %class.UniformWriter* %15 to i8*, !dbg !1677
-   %48 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1677
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %47, i8* align 32 %48, i64 64, i1 false), !dbg !1677, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %16), !dbg !1678
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval(%class.UniformWriter) align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %16), !dbg !1678
-   br i1 %49, label %60, label %50, !dbg !1679
- 
- ; <label>:50:                                     ; preds = %45
-@@ -8972,7 +8972,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %52 = bitcast %class.UniformWriter* %17 to i8*, !dbg !1681
-   %53 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1681
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %52, i8* align 32 %53, i64 64, i1 false), !dbg !1681, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %18), !dbg !1682
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval(%class.UniformWriter) align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %18), !dbg !1682
-   br i1 %54, label %60, label %55, !dbg !1683
- 
- ; <label>:55:                                     ; preds = %50
-@@ -8980,7 +8980,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %57 = bitcast %class.UniformWriter* %19 to i8*, !dbg !1685
-   %58 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1685
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %57, i8* align 32 %58, i64 64, i1 false), !dbg !1685, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %20), !dbg !1686
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval(%class.UniformWriter) align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %20), !dbg !1686
-   br label %60, !dbg !1683
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -8989,7 +8989,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1688 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1688 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9015,7 +9015,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1697 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1697 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9041,7 +9041,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1706 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1706 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9067,7 +9067,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1715 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1715 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9093,7 +9093,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1724 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1724 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9119,7 +9119,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1733 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1733 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9145,7 +9145,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1742 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1742 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9171,7 +9171,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1751 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1751 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10013,7 +10013,7 @@ define internal i32 @_ZN7details18_cm_print_type_oclIPvEENS_18SHADER_PRINTF_TYPE
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2061 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2061 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.VaryingWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -10036,7 +10036,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %22 = bitcast %class.VaryingWriter* %5 to i8*, !dbg !2063
-   %23 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2063
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %22, i8* align 32 %23, i64 64, i1 false), !dbg !2063, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %6), !dbg !2064
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %6), !dbg !2064
-   br i1 %24, label %60, label %25, !dbg !2065
- 
- ; <label>:25:                                     ; preds = %3
-@@ -10044,7 +10044,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %27 = bitcast %class.VaryingWriter* %7 to i8*, !dbg !2067
-   %28 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2067
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %27, i8* align 32 %28, i64 64, i1 false), !dbg !2067, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %8), !dbg !2068
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %8), !dbg !2068
-   br i1 %29, label %60, label %30, !dbg !2069
- 
- ; <label>:30:                                     ; preds = %25
-@@ -10052,7 +10052,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %32 = bitcast %class.VaryingWriter* %9 to i8*, !dbg !2071
-   %33 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2071
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %32, i8* align 32 %33, i64 64, i1 false), !dbg !2071, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %10), !dbg !2072
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %10), !dbg !2072
-   br i1 %34, label %60, label %35, !dbg !2073
- 
- ; <label>:35:                                     ; preds = %30
-@@ -10060,7 +10060,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %37 = bitcast %class.VaryingWriter* %11 to i8*, !dbg !2075
-   %38 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2075
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %37, i8* align 32 %38, i64 64, i1 false), !dbg !2075, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %12), !dbg !2076
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %12), !dbg !2076
-   br i1 %39, label %60, label %40, !dbg !2077
- 
- ; <label>:40:                                     ; preds = %35
-@@ -10068,7 +10068,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %42 = bitcast %class.VaryingWriter* %13 to i8*, !dbg !2079
-   %43 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2079
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %42, i8* align 32 %43, i64 64, i1 false), !dbg !2079, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %14), !dbg !2080
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %14), !dbg !2080
-   br i1 %44, label %60, label %45, !dbg !2081
- 
- ; <label>:45:                                     ; preds = %40
-@@ -10076,7 +10076,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %47 = bitcast %class.VaryingWriter* %15 to i8*, !dbg !2083
-   %48 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2083
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %47, i8* align 32 %48, i64 64, i1 false), !dbg !2083, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %16), !dbg !2084
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %16), !dbg !2084
-   br i1 %49, label %60, label %50, !dbg !2085
- 
- ; <label>:50:                                     ; preds = %45
-@@ -10084,7 +10084,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %52 = bitcast %class.VaryingWriter* %17 to i8*, !dbg !2087
-   %53 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2087
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %52, i8* align 32 %53, i64 64, i1 false), !dbg !2087, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %18), !dbg !2088
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %18), !dbg !2088
-   br i1 %54, label %60, label %55, !dbg !2089
- 
- ; <label>:55:                                     ; preds = %50
-@@ -10092,7 +10092,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %57 = bitcast %class.VaryingWriter* %19 to i8*, !dbg !2091
-   %58 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2091
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %57, i8* align 32 %58, i64 64, i1 false), !dbg !2091, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %20), !dbg !2092
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %20), !dbg !2092
-   br label %60, !dbg !2089
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -10101,7 +10101,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2094 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2094 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10127,7 +10127,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2103 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2103 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10153,7 +10153,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2112 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2112 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10179,7 +10179,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2121 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2121 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10205,7 +10205,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2130 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2130 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10231,7 +10231,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2139 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2139 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10257,7 +10257,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2148 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2148 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10283,7 +10283,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2157 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2157 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
diff --git a/srcpkgs/ispc/template b/srcpkgs/ispc/template
index 9c3acb42a9cf..68fed5a4c659 100644
--- a/srcpkgs/ispc/template
+++ b/srcpkgs/ispc/template
@@ -1,10 +1,10 @@
 # Template file for 'ispc'
 pkgname=ispc
-version=1.15.0
-revision=2
+version=1.17.0
+revision=1
 archs="x86_64*"
 build_style=cmake
-configure_args="-DISPC_NO_DUMPS=ON -DARM_ENABLED=OFF"
+configure_args="-DISPC_NO_DUMPS=ON -DARM_ENABLED=OFF -DCMAKE_BUILD_TYPE=Release"
 hostmakedepends="clang clang-tools-extra python3 m4 bison flex llvm"
 makedepends="ncurses-devel ncurses-libtinfo-devel zlib-devel"
 short_desc="Compiler for high-performance SIMD programming on the CPU"
@@ -12,7 +12,7 @@ maintainer="Andrea Brancaleoni <abc@pompel.me>"
 license="BSD-3-Clause"
 homepage="https://ispc.github.io"
 distfiles="https://github.com/ispc/ispc/archive/v${version}.tar.gz"
-checksum=2658ff00dc045ac9fcefbf6bd26dffaf723b059a942a27df91bbb61bc503a285
+checksum=37fb1055d6c6b232e112d8d50145d726824ed4d8da93a7396315dceba6c76e62
 nocross=yes
 nopie=yes
 

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (39 preceding siblings ...)
  2022-06-07 20:04 ` [PR PATCH] [Updated] Llvm14 prez
@ 2022-06-07 20:06 ` prez
  2022-06-07 20:12 ` Llvm14 prez
                   ` (28 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-06-07 20:06 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 159 bytes --]

New comment by prez on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1149112549

Comment:
rebased and squashed

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (40 preceding siblings ...)
  2022-06-07 20:06 ` Llvm14 prez
@ 2022-06-07 20:12 ` prez
  2022-06-07 20:26 ` Llvm14 Duncaen
                   ` (27 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-06-07 20:12 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 224 bytes --]

New comment by prez on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1149118017

Comment:
@Duncaen could you please check/verify whether Chromium still segfaults with llvm14? 

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (41 preceding siblings ...)
  2022-06-07 20:12 ` Llvm14 prez
@ 2022-06-07 20:26 ` Duncaen
  2022-06-08  1:20 ` [PR PATCH] [Updated] Llvm14 prez
                   ` (26 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: Duncaen @ 2022-06-07 20:26 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 270 bytes --]

New comment by Duncaen on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1149132462

Comment:
Don't change chromium in this PR, pgo/lto can't be just enabled because of constrained resources even if it would work ootb now.

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: [PR PATCH] [Updated] Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (42 preceding siblings ...)
  2022-06-07 20:26 ` Llvm14 Duncaen
@ 2022-06-08  1:20 ` prez
  2022-06-12  9:17 ` Llvm14 motorto
                   ` (25 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-06-08  1:20 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 488 bytes --]

There is an updated pull request by prez against master on the void-packages repository

https://github.com/prez/void-packages llvm
https://github.com/void-linux/void-packages/pull/36962

Llvm14
Supersedes https://github.com/void-linux/void-packages/pull/36229, https://github.com/void-linux/void-packages/pull/34800 - thank you @motorto and @DBLouis.

Updated patches, ping @q66 .

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/36962.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-llvm-36962.patch --]
[-- Type: text/x-diff, Size: 543370 bytes --]

From 0769371bd292ca132bb357d122e2d4242532bcfc Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:15:06 +0200
Subject: [PATCH 01/23] New package: llvm14-14.0.3

---
 common/shlibs                                 |  16 +-
 srcpkgs/clang                                 |   2 +-
 srcpkgs/clang-analyzer                        |   2 +-
 srcpkgs/clang-tools-extra                     |   2 +-
 srcpkgs/libclang                              |   2 +-
 srcpkgs/libclang-cpp                          |   2 +-
 srcpkgs/libcxx                                |   2 +-
 srcpkgs/libcxx-devel                          |   2 +-
 srcpkgs/libcxxabi                             |   2 +-
 srcpkgs/libcxxabi-devel                       |   2 +-
 srcpkgs/libllvm14                             |   1 +
 srcpkgs/libomp                                |   2 +-
 srcpkgs/libomp-devel                          |   2 +-
 srcpkgs/lld                                   |   2 +-
 srcpkgs/lld-devel                             |   2 +-
 srcpkgs/lldb                                  |   2 +-
 srcpkgs/lldb-devel                            |   2 +-
 srcpkgs/llvm-libunwind                        |   2 +-
 srcpkgs/llvm-libunwind-devel                  |   2 +-
 .../patches/clang-002-add-musl-triples.patch  | 110 +++++
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 +
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ++
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 ++
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 +++
 srcpkgs/llvm14/patches/libcxx-musl.patch      |  26 ++
 srcpkgs/llvm14/patches/libcxx-ppc.patch       |  22 +
 .../llvm14/patches/libcxx-ssp-nonshared.patch |  11 +
 srcpkgs/llvm14/patches/libcxxabi-dl.patch     |  25 ++
 srcpkgs/llvm14/patches/lldb-musl.patch        |  31 ++
 srcpkgs/llvm14/patches/llvm-001-musl.patch    |  57 +++
 .../patches/llvm-002-musl-ppc64-elfv2.patch   |  30 ++
 .../patches/llvm-003-ppc-secureplt.patch      |  11 +
 .../patches/llvm-004-override-opt.patch       |  18 +
 .../llvm14/patches/llvm-005-ppc-bigpic.patch  |  36 ++
 .../patches/llvm-006-aarch64-mf_exec.patch    |  25 ++
 srcpkgs/llvm14/template                       | 424 ++++++++++++++++++
 srcpkgs/llvm14/update                         |   3 +
 37 files changed, 1018 insertions(+), 20 deletions(-)
 create mode 120000 srcpkgs/libllvm14
 create mode 100644 srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
 create mode 100644 srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
 create mode 100644 srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
 create mode 100644 srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-ppc.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
 create mode 100644 srcpkgs/llvm14/patches/libcxxabi-dl.patch
 create mode 100644 srcpkgs/llvm14/patches/lldb-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-001-musl.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-004-override-opt.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
 create mode 100644 srcpkgs/llvm14/template
 create mode 100644 srcpkgs/llvm14/update

diff --git a/common/shlibs b/common/shlibs
index e04037a9f2f0..7658c1d2531e 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -973,11 +973,12 @@ libuchardet.so.0 uchardet-0.0.6_1
 libgtksourceviewmm-3.0.so.0 gtksourceviewmm-3.2.0_1
 libyajl.so.2 yajl-2.0.1_1
 libconfuse.so.2 confuse-3.2.1_1
-liblldb.so.12 lldb-12.0.0_1
-libclang.so.12 libclang-12.0.0_1
-libclang-cpp.so.12 libclang-cpp-12.0.0_1
+liblldb.so.14 lldb-14.0.3_1
+libclang.so.14 libclang-14.0.3_1
+libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
+libLLVM-14.so libllvm14-14.0.3_1
 libisofs.so.6 libisofs-0.6.24_1
 libmpack.so.0 libmpack-1.0.5_1
 libGeoIP.so.1 libgeoip-1.4.8_1
@@ -4165,3 +4166,12 @@ libTMVA.so root-6.24.06_1
 libMathCore.so root-6.24.06_1
 liblowdown.so lowdown-0.11.2_1
 libjaylink.so.0 libjaylink-0.2.0_1
+libomp.so libomp-14.0.3_1
+libomptarget.rtl.amdgpu.so libomp-14.0.3_1
+libomptarget.rtl.cuda.so libomp-14.0.3_1
+libomptarget.rtl.x86_64.so libomp-14.0.3_1
+libarcher.so libomp-14.0.3_1
+libomptarget.so libomp-14.0.3_1
+liblldbIntelFeatures.so.14 lldb-14.0.3_1
+libLTO.so.14 llvm14-14.0.3_1
+libRemarks.so.14 llvm14-14.0.3_1
diff --git a/srcpkgs/clang b/srcpkgs/clang
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang
+++ b/srcpkgs/clang
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/clang-analyzer b/srcpkgs/clang-analyzer
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang-analyzer
+++ b/srcpkgs/clang-analyzer
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/clang-tools-extra b/srcpkgs/clang-tools-extra
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/clang-tools-extra
+++ b/srcpkgs/clang-tools-extra
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libclang b/srcpkgs/libclang
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libclang
+++ b/srcpkgs/libclang
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libclang-cpp b/srcpkgs/libclang-cpp
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libclang-cpp
+++ b/srcpkgs/libclang-cpp
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxx b/srcpkgs/libcxx
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxx
+++ b/srcpkgs/libcxx
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxx-devel b/srcpkgs/libcxx-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxx-devel
+++ b/srcpkgs/libcxx-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxxabi b/srcpkgs/libcxxabi
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxxabi
+++ b/srcpkgs/libcxxabi
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libcxxabi-devel b/srcpkgs/libcxxabi-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libcxxabi-devel
+++ b/srcpkgs/libcxxabi-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libllvm14 b/srcpkgs/libllvm14
new file mode 120000
index 000000000000..1d42ed7632a6
--- /dev/null
+++ b/srcpkgs/libllvm14
@@ -0,0 +1 @@
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libomp b/srcpkgs/libomp
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libomp
+++ b/srcpkgs/libomp
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/libomp-devel b/srcpkgs/libomp-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/libomp-devel
+++ b/srcpkgs/libomp-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lld b/srcpkgs/lld
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lld
+++ b/srcpkgs/lld
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lld-devel b/srcpkgs/lld-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lld-devel
+++ b/srcpkgs/lld-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lldb b/srcpkgs/lldb
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lldb
+++ b/srcpkgs/lldb
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/lldb-devel b/srcpkgs/lldb-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/lldb-devel
+++ b/srcpkgs/lldb-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm-libunwind b/srcpkgs/llvm-libunwind
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/llvm-libunwind
+++ b/srcpkgs/llvm-libunwind
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm-libunwind-devel b/srcpkgs/llvm-libunwind-devel
index cd60fd7a981b..1d42ed7632a6 120000
--- a/srcpkgs/llvm-libunwind-devel
+++ b/srcpkgs/llvm-libunwind-devel
@@ -1 +1 @@
-llvm12
\ No newline at end of file
+llvm14
\ No newline at end of file
diff --git a/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
new file mode 100644
index 000000000000..7b640e102bed
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-002-add-musl-triples.patch
@@ -0,0 +1,110 @@
+--- a/clang/lib/Driver/ToolChains/Gnu.cpp
++++ b/clang/lib/Driver/ToolChains/Gnu.cpp
+@@ -2083,7 +2083,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
+                                              "armv7hl-redhat-linux-gnueabi",
+                                              "armv6hl-suse-linux-gnueabi",
+-                                             "armv7hl-suse-linux-gnueabi"};
++                                             "armv7hl-suse-linux-gnueabi",
++                                             "armv7l-linux-gnueabihf"};
+   static const char *const ARMebLibDirs[] = {"/lib"};
+   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi"};
+   static const char *const ARMebHFTriples[] = {
+@@ -2151,8 +2152,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
+   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
+   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
+-                                             "powerpcle-unknown-linux-gnu",
+-                                             "powerpcle-linux-musl"};
++                                             "powerpcle-unknown-linux-gnu"};
+
+   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
+   static const char *const PPC64Triples[] = {
+@@ -2231,6 +2231,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+     return;
+   }
+
++  if (TargetTriple.isMusl()) {
++    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
++    static const char *const ARMHFMuslTriples[] = {
++        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
++    };
++    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
++    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
++    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
++    static const char *const MIPSMuslTriples[] = {
++        "mips-linux-musl", "mipsel-linux-musl",
++        "mipsel-linux-muslhf", "mips-linux-muslhf"
++    };
++    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
++    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
++    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
++    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
++
++    switch (TargetTriple.getArch()) {
++    case llvm::Triple::aarch64:
++      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      break;
++    case llvm::Triple::arm:
++      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
++      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
++        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
++      } else {
++        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
++      }
++      break;
++    case llvm::Triple::x86_64:
++      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      break;
++    case llvm::Triple::x86:
++      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      break;
++    case llvm::Triple::mips:
++      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
++      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
++      break;
++    case llvm::Triple::ppc:
++      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      break;
++    case llvm::Triple::ppcle:
++      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      break;
++    case llvm::Triple::ppc64:
++      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      break;
++    case llvm::Triple::ppc64le:
++      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      break;
++    default:
++      break;
++    }
++    TripleAliases.push_back(TargetTriple.str());
++    if (TargetTriple.str() != BiarchTriple.str())
++      BiarchTripleAliases.push_back(BiarchTriple.str());
++    return;
++  }
++
+   // Android targets should not use GNU/Linux tools or libraries.
+   if (TargetTriple.isAndroid()) {
+     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
new file mode 100644
index 000000000000..47128af79b7f
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-003-ppc64-dynamic-linker-path.patch
@@ -0,0 +1,13 @@
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -490,10 +490,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+     Loader = "ld.so.1";
+     break;
+   case llvm::Triple::ppc64:
+-    LibDir = "lib64";
+-    Loader =
+-        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
+-    break;
+   case llvm::Triple::ppc64le:
+     LibDir = "lib64";
+     Loader =
diff --git a/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
new file mode 100644
index 000000000000..21fc8003c5f1
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-004-ppc64-musl-elfv2.patch
@@ -0,0 +1,48 @@
+--- a/clang/lib/Basic/Targets/PPC.h
++++ b/clang/lib/Basic/Targets/PPC.h
+@@ -415,11 +415,10 @@ public:
+       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
+     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
+       DataLayout = "e-m:e-i64:64-n32:64";
+-      ABI = "elfv2";
+     } else {
+       DataLayout = "E-m:e-i64:64-n32:64";
+-      ABI = "elfv1";
+     }
++    ABI = "elfv2";
+ 
+     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
+       LongDoubleWidth = LongDoubleAlign = 64;
+--- a/clang/lib/CodeGen/TargetInfo.cpp
++++ b/clang/lib/CodeGen/TargetInfo.cpp
+@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
+       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
+ 
+     if (Triple.isOSBinFormatELF()) {
+-      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
+-      if (getTarget().getABI() == "elfv2")
+-        Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      if (getTarget().getABI() == "elfv1")
++        Kind = PPC64_SVR4_ABIInfo::ELFv1;
+       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
+ 
+       return SetCGInfo(
+--- a/clang/lib/Driver/ToolChains/Clang.cpp
++++ b/clang/lib/Driver/ToolChains/Clang.cpp
+@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
+   const llvm::Triple &T = getToolChain().getTriple();
+   if (T.isOSBinFormatELF()) {
+     switch (getToolChain().getArch()) {
+-    case llvm::Triple::ppc64: {
+-      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
+-          T.isOSOpenBSD() || T.isMusl())
+-        ABIName = "elfv2";
+-      else
+-        ABIName = "elfv1";
+-      break;
+-    }
++    case llvm::Triple::ppc64:
+     case llvm::Triple::ppc64le:
+       ABIName = "elfv2";
+       break;
diff --git a/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch b/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
new file mode 100644
index 000000000000..4135bfd4486a
--- /dev/null
+++ b/srcpkgs/llvm14/patches/compiler-rt-sanitizer-ppc64-musl.patch
@@ -0,0 +1,35 @@
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
+@@ -74,6 +74,10 @@
+ #include <sys/utsname.h>
+ #endif
+
++#if SANITIZER_LINUX && defined(__powerpc__)
++#include <asm/ptrace.h>
++#endif
++
+ #if SANITIZER_LINUX && !SANITIZER_ANDROID
+ #include <sys/personality.h>
+ #endif
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
+@@ -92,7 +92,7 @@
+ # include <utime.h>
+ # include <sys/ptrace.h>
+ #    if defined(__mips64) || defined(__aarch64__) || defined(__arm__) || \
+-        defined(__hexagon__) || SANITIZER_RISCV64
++        defined(__hexagon__) || defined(__powerpc__) || SANITIZER_RISCV64
+ #      include <asm/ptrace.h>
+ #      ifdef __arm__
+ typedef struct user_fpregs elf_fpregset_t;
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
+@@ -31,7 +31,7 @@
+ #include <sys/types.h> // for pid_t
+ #include <sys/uio.h> // for iovec
+ #include <elf.h> // for NT_PRSTATUS
+-#if (defined(__aarch64__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
++#if (defined(__aarch64__) || defined(__powerpc__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
+ // GLIBC 2.20+ sys/user does not include asm/ptrace.h
+ # include <asm/ptrace.h>
+ #endif
diff --git a/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch b/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
new file mode 100644
index 000000000000..d0b61c80c897
--- /dev/null
+++ b/srcpkgs/llvm14/patches/compiler-rt-xray-ppc64-musl.patch
@@ -0,0 +1,62 @@
+--- a/compiler-rt/lib/xray/xray_powerpc64.inc
++++ b/compiler-rt/lib/xray/xray_powerpc64.inc
+@@ -12,7 +12,13 @@
+ 
+ #include <cstdint>
+ #include <mutex>
++#ifdef __GLIBC__
+ #include <sys/platform/ppc.h>
++#else
++#include <cctype>
++#include <cstring>
++#include <cstdlib>
++#endif
+ 
+ #include "xray_defs.h"
+ 
+@@ -20,13 +26,45 @@ namespace __xray {
+ 
+ ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
+   CPU = 0;
++#ifdef __GLIBC__
+   return __ppc_get_timebase();
++#else
++  return __builtin_ppc_get_timebase();
++#endif
+ }
+ 
+ inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
+   static std::mutex M;
+   std::lock_guard<std::mutex> Guard(M);
++#ifdef __GLIBC__
+   return __ppc_get_timebase_freq();
++#else
++  /* FIXME: a less dirty implementation? */
++  static uint64_t base;
++  if (!base) {
++    FILE *f = fopen("/proc/cpuinfo", "rb");
++    if (f) {
++      ssize_t nr;
++      /* virtually always big enough to hold the line */
++      char buf[512];
++      while (fgets(buf, sizeof(buf), f)) {
++        char *ret = strstr(buf, "timebase");
++        if (!ret) {
++          continue;
++        }
++        ret += sizeof("timebase") - 1;
++        ret = strchr(ret, ':');
++        if (!ret) {
++          continue;
++        }
++        base = strtoul(ret + 1, nullptr, 10);
++        break;
++      }
++      fclose(f);
++    }
++  }
++  return base;
++#endif
+ }
+ 
+ inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
diff --git a/srcpkgs/llvm14/patches/libcxx-musl.patch b/srcpkgs/llvm14/patches/libcxx-musl.patch
new file mode 100644
index 000000000000..bbd31ffc2cb1
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-musl.patch
@@ -0,0 +1,26 @@
+--- a/libcxx/include/locale
++++ b/libcxx/include/locale
+@@ -742,7 +742,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
+         typename remove_reference<decltype(errno)>::type __save_errno = errno;
+         errno = 0;
+         char *__p2;
++#if defined(__linux__) && !defined(__GLIBC__)
++        long long __ll = strtoll(__a, &__p2, __base);
++#else
+         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
++#endif
+         typename remove_reference<decltype(errno)>::type __current_errno = errno;
+         if (__current_errno == 0)
+             errno = __save_errno;
+@@ -782,7 +786,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
+         typename remove_reference<decltype(errno)>::type __save_errno = errno;
+         errno = 0;
+         char *__p2;
++#if defined(__linux__) && !defined(__GLIBC__)
++        unsigned long long __ll = strtoull(__a, &__p2, __base);
++#else
+         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
++#endif
+         typename remove_reference<decltype(errno)>::type __current_errno = errno;
+         if (__current_errno == 0)
+             errno = __save_errno;
diff --git a/srcpkgs/llvm14/patches/libcxx-ppc.patch b/srcpkgs/llvm14/patches/libcxx-ppc.patch
new file mode 100644
index 000000000000..7a92f8004e1c
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-ppc.patch
@@ -0,0 +1,22 @@
+This ensures `is_iec559` is defined correctly under all long double ABIs,
+including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__`
+is not defined on gcc.
+
+--- a/libcxx/include/limits
++++ b/libcxx/include/limits
+@@ -426,8 +426,14 @@ protected:
+     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
+     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
+ 
+-#if (defined(__ppc__) || defined(__ppc64__))
++#if defined(__powerpc__) || defined(__powerpc64__)
++#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__)
++    /* IEEE 754 quadruple or double precision */
++    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
++#else
++    /* 128-bit IBM double-double */
+     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
++#endif
+ #else
+     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
+ #endif
diff --git a/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch b/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
new file mode 100644
index 000000000000..70292beb2fcd
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxx-ssp-nonshared.patch
@@ -0,0 +1,11 @@
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -769,6 +769,8 @@ function(cxx_link_system_libraries target)
+     target_link_libraries(${target} PRIVATE atomic)
+   endif()
+ 
++#ssp  target_link_libraries(${target} PRIVATE ssp_nonshared)
++
+   if (MINGW)
+     target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
+   endif()
diff --git a/srcpkgs/llvm14/patches/libcxxabi-dl.patch b/srcpkgs/llvm14/patches/libcxxabi-dl.patch
new file mode 100644
index 000000000000..3a15f9db8c98
--- /dev/null
+++ b/srcpkgs/llvm14/patches/libcxxabi-dl.patch
@@ -0,0 +1,25 @@
+Also link to -ldl to prevent undefined references.
+
+--- a/libcxxabi/src/CMakeLists.txt
++++ b/libcxxabi/src/CMakeLists.txt
+@@ -73,6 +73,7 @@
+   endif()
+ 
+   add_library_flags_if(LIBCXXABI_HAS_C_LIB c)
++  add_library_flags_if(LIBCXXABI_HAS_C_LIB dl)
+ endif()
+ 
+ if (LIBCXXABI_USE_LLVM_UNWINDER)
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -745,6 +745,10 @@
+     target_link_libraries(${target} PRIVATE m)
+   endif()
+ 
++  if (LIBCXX_HAS_C_LIB)
++    target_link_libraries(${target} PRIVATE dl)
++  endif()
++
+   if (LIBCXX_HAS_RT_LIB)
+     target_link_libraries(${target} PRIVATE rt)
+   endif()
diff --git a/srcpkgs/llvm14/patches/lldb-musl.patch b/srcpkgs/llvm14/patches/lldb-musl.patch
new file mode 100644
index 000000000000..601c0d138523
--- /dev/null
+++ b/srcpkgs/llvm14/patches/lldb-musl.patch
@@ -0,0 +1,31 @@
+--- a/lldb/source/Plugins/Process/Linux/Procfs.h
++++ b/lldb/source/Plugins/Process/Linux/Procfs.h
+@@ -10,21 +10,12 @@
+ // sys/procfs.h on Android/Linux for all supported architectures.
+ 
+ #include <sys/ptrace.h>
++#include <asm/ptrace.h>
+ 
+-#ifdef __ANDROID__
+-#if defined(__arm64__) || defined(__aarch64__)
+-typedef unsigned long elf_greg_t;
+-typedef elf_greg_t
+-    elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
+-typedef struct user_fpsimd_state elf_fpregset_t;
+-#ifndef NT_FPREGSET
+-#define NT_FPREGSET NT_PRFPREG
+-#endif // NT_FPREGSET
+-#elif defined(__mips__)
+-#ifndef NT_FPREGSET
+-#define NT_FPREGSET NT_PRFPREG
+-#endif // NT_FPREGSET
+-#endif
+-#else // __ANDROID__
++#if !defined(__GLIBC__) && defined(__powerpc__)
++#define pt_regs musl_pt_regs
++#include <sys/procfs.h>
++#undef pt_regs
++#else
+ #include <sys/procfs.h>
+-#endif // __ANDROID__
++#endif
diff --git a/srcpkgs/llvm14/patches/llvm-001-musl.patch b/srcpkgs/llvm14/patches/llvm-001-musl.patch
new file mode 100644
index 000000000000..f2a3f8d62813
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-001-musl.patch
@@ -0,0 +1,57 @@
+From faca3fbd15d0c3108493c3c54cd93138e049ac43 Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe@gmail.com>
+Date: Tue, 8 Sep 2015 22:03:02 +0200
+Subject: [PATCH 3/3] musl
+
+---
+ include/llvm/Analysis/TargetLibraryInfo.h | 9 +++++++++
+ lib/Support/DynamicLibrary.cpp            | 2 +-
+ lib/Support/Unix/Signals.inc              | 6 +++---
+ utils/unittest/googletest/src/gtest.cc    | 1 +
+ 5 files changed, 17 insertions(+), 6 deletions(-)
+
+diff --git a/include/llvm/Analysis/TargetLibraryInfo.h b/include/llvm/Analysis/TargetLibraryInfo.h
+index 34a8a1e3..1214ece5 100644
+--- a/llvm/include/llvm/Analysis/TargetLibraryInfo.h
++++ b/llvm/include/llvm/Analysis/TargetLibraryInfo.h
+@@ -18,6 +18,15 @@
+ #include "llvm/IR/PassManager.h"
+ #include "llvm/Pass.h"
+ 
++#undef fopen64
++#undef fseeko64
++#undef fstat64
++#undef fstatvfs64
++#undef ftello64
++#undef lstat64
++#undef stat64
++#undef tmpfile64
++
+ namespace llvm {
+ template <typename T> class ArrayRef;
+ class Triple;
+diff --git a/lib/Support/Unix/DynamicLibrary.inc b/lib/Support/Unix/DynamicLibrary.inc
+index a2a37996..2f86c470 100644
+--- a/llvm/lib/Support/Unix/DynamicLibrary.inc
++++ b/llvm/lib/Support/Unix/DynamicLibrary.inc
+@@ -102,7 +102,7 @@ static void *DoSearch(const char* SymbolName) {
+ 
+ // This macro returns the address of a well-known, explicit symbol
+ #define EXPLICIT_SYMBOL(SYM) \
+-   if (!strcmp(SymbolName, #SYM)) return &SYM
++   if (!strcmp(SymbolName, #SYM)) return (void *)&SYM
+ 
+ // Under glibc we have a weird situation. The stderr/out/in symbols are both
+ // macros and global variables because of standards requirements. So, we
+diff --git a/utils/unittest/googletest/src/gtest.cc b/utils/unittest/googletest/src/gtest.cc
+index d882ab2e..f1fb12d0 100644
+--- a/llvm/utils/unittest/googletest/src/gtest.cc
++++ b/llvm/utils/unittest/googletest/src/gtest.cc
+@@ -128,6 +128,7 @@
+ 
+ #if GTEST_CAN_STREAM_RESULTS_
+ # include <arpa/inet.h>  // NOLINT
++# include <sys/socket.h>  // NOLINT
+ # include <netdb.h>  // NOLINT
+ # include <sys/socket.h>  // NOLINT
+ # include <sys/types.h>  // NOLINT
diff --git a/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch b/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
new file mode 100644
index 000000000000..0071d964bd37
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-002-musl-ppc64-elfv2.patch
@@ -0,0 +1,30 @@
+This patches LLVM to use ELFv2 on ppc64 unconditionally unless overridden. We
+need this because unlike most distros we use ELFv2 for both glibc and musl
+on big endian ppc64.
+
+diff --git a/lib/Target/PowerPC/PPCTargetMachine.cpp b/lib/Target/PowerPC/PPCTargetMachine.cpp
+index 0634833e..b7cbc2e7 100644
+--- a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
++++ b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
+@@ -222,9 +222,8 @@ static PPCTargetMachine::PPCABI computeTargetABI(const Triple &TT,
+ 
+   switch (TT.getArch()) {
+   case Triple::ppc64le:
+-    return PPCTargetMachine::PPC_ABI_ELFv2;
+   case Triple::ppc64:
+-    return PPCTargetMachine::PPC_ABI_ELFv1;
++    return PPCTargetMachine::PPC_ABI_ELFv2;
+   default:
+     return PPCTargetMachine::PPC_ABI_UNKNOWN;
+   }
+diff --git a/test/CodeGen/PowerPC/ppc64-elf-abi.ll b/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+index 8b1cf6b5..296a2afa 100644
+--- a/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
++++ b/llvm/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+@@ -1,4 +1,5 @@
+-; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv1
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-musl < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv1 < %s | FileCheck %s -check-prefix=CHECK-ELFv1
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv2 < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
diff --git a/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch b/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
new file mode 100644
index 000000000000..b5d15974375d
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-003-ppc-secureplt.patch
@@ -0,0 +1,11 @@
+--- a/llvm/lib/Target/PowerPC/PPCSubtarget.cpp
++++ b/llvm/lib/Target/PowerPC/PPCSubtarget.cpp
+@@ -165,7 +165,7 @@ void PPCSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) {
+ 
+   if ((TargetTriple.isOSFreeBSD() && TargetTriple.getOSMajorVersion() >= 13) ||
+       TargetTriple.isOSNetBSD() || TargetTriple.isOSOpenBSD() ||
+-      TargetTriple.isMusl())
++      isTargetLinux())
+     SecurePlt = true;
+ 
+   if (HasSPE && IsPPC64)
diff --git a/srcpkgs/llvm14/patches/llvm-004-override-opt.patch b/srcpkgs/llvm14/patches/llvm-004-override-opt.patch
new file mode 100644
index 000000000000..51d0e4b31b32
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-004-override-opt.patch
@@ -0,0 +1,18 @@
+This allows us to override the optimization level as not all platforms can
+deal with -O3.
+
+--- a/llvm/CMakeLists.txt
++++ b/llvm/CMakeLists.txt
+@@ -918,6 +918,12 @@ if( MINGW AND NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" )
+   llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "-O2")
+ endif()
+ 
++set(VOID_CXX_OPT_FLAGS "" CACHE STRING "Optimization level to use")
++
++if (NOT VOID_CXX_OPT_FLAGS STREQUAL "")
++    llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "${VOID_CXX_OPT_FLAGS}")
++endif()
++
+ # Put this before tblgen. Else we have a circular dependence.
+ add_subdirectory(lib/Demangle)
+ add_subdirectory(lib/Support)
diff --git a/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch b/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
new file mode 100644
index 000000000000..d332687b9d92
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-005-ppc-bigpic.patch
@@ -0,0 +1,36 @@
+From f3dbdd49c06bfafc1d6138094cf42889c14d38b6 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Sun, 3 Nov 2019 10:57:27 -0600
+Subject: [PATCH] [LLVM][PowerPC] Assume BigPIC if no PIC level is specified
+
+---
+ llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp  | 2 +-
+ llvm/lib/Target/PowerPC/PPCMCInstLower.cpp | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/Target/PowerPC/PPCAsmPrinter.cpp b/lib/Target/PowerPC/PPCAsmPrinter.cpp
+index cce21f32..87ca5f9b 100644
+--- a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
++++ b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
+@@ -520,7 +520,7 @@ void PPCAsmPrinter::EmitTlsCall(const MachineInstr *MI,
+ 
+   // Add 32768 offset to the symbol so we follow up the latest GOT/PLT ABI.
+   if (Kind == MCSymbolRefExpr::VK_PLT && Subtarget->isSecurePlt() &&
+-      M->getPICLevel() == PICLevel::BigPIC)
++      M->getPICLevel() != PICLevel::SmallPIC)
+     TlsRef = MCBinaryExpr::createAdd(
+         TlsRef, MCConstantExpr::create(32768, OutContext), OutContext);
+   const MachineOperand &MO = MI->getOperand(2);
+diff --git a/lib/Target/PowerPC/PPCMCInstLower.cpp b/lib/Target/PowerPC/PPCMCInstLower.cpp
+index 5cc180d7..a5b02565 100644
+--- a/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
++++ b/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
+@@ -117,7 +117,7 @@ static MCOperand GetSymbolRef(const MachineOperand &MO, const MCSymbol *Symbol,
+   const MCExpr *Expr = MCSymbolRefExpr::create(Symbol, RefKind, Ctx);
+   // If -msecure-plt -fPIC, add 32768 to symbol.
+   if (Subtarget->isSecurePlt() && TM.isPositionIndependent() &&
+-      M->getPICLevel() == PICLevel::BigPIC &&
++      M->getPICLevel() != PICLevel::SmallPIC &&
+       MO.getTargetFlags() == PPCII::MO_PLT)
+     Expr =
+         MCBinaryExpr::createAdd(Expr, MCConstantExpr::create(32768, Ctx), Ctx);
diff --git a/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch b/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
new file mode 100644
index 000000000000..a00abd216665
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-006-aarch64-mf_exec.patch
@@ -0,0 +1,25 @@
+Fix failures in AllocationTests/MappedMemoryTest.* on aarch64:
+
+    Failing Tests (8):
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.AllocAndRelease/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.DuplicateNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.EnabledWrite/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.MultipleAllocAndRelease/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.SuccessiveNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.UnalignedNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.ZeroNear/3
+        LLVM-Unit :: Support/./SupportTests/AllocationTests/MappedMemoryTest.ZeroSizeNear/3
+
+Upstream-Issue: https://bugs.llvm.org/show_bug.cgi?id=14278#c10
+
+--- a/llvm/lib/Support/Unix/Memory.inc
++++ b/llvm/lib/Support/Unix/Memory.inc
+@@ -58,7 +58,7 @@ static int getPosixProtectionFlags(unsigned Flags) {
+     return PROT_READ | PROT_WRITE | PROT_EXEC;
+   case llvm::sys::Memory::MF_EXEC:
+ #if (defined(__FreeBSD__) || defined(__POWERPC__) || defined (__ppc__) || \
+-     defined(_POWER) || defined(_ARCH_PPC))
++     defined(_POWER) || defined(_ARCH_PPC) || (defined(__linux__) && defined(__aarch64__)))
+     // On PowerPC, having an executable page that has no read permission
+     // can have unintended consequences.  The function InvalidateInstruction-
+     // Cache uses instructions dcbf and icbi, both of which are treated by
diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
new file mode 100644
index 000000000000..3e7e6ab2c00b
--- /dev/null
+++ b/srcpkgs/llvm14/template
@@ -0,0 +1,424 @@
+# Template file for 'llvm14'
+pkgname=llvm14
+version=14.0.3
+revision=1
+wrksrc="llvm-project-${version}.src"
+build_wrksrc=llvm
+build_style=cmake
+configure_args="
+ -DCMAKE_BUILD_TYPE=Release -Wno-dev
+ -DENABLE_LINKER_BUILD_ID=YES
+ -DLLDB_USE_SYSTEM_SIX=YES
+ -DLIBCXX_CXX_ABI=libcxxabi
+ -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
+ -DLIBCXXABI_USE_LLVM_UNWINDER=YES
+ -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
+ -DLIBOMP_ENABLE_SHARED=YES
+ -DLIBOMP_INSTALL_ALIASES=NO
+ -DLLVM_INCLUDE_DOCS=YES
+ -DLLVM_BUILD_DOCS=YES
+ -DLLVM_ENABLE_SPHINX=YES
+ -DSPHINX_WARNINGS_AS_ERRORS=NO
+ -DLLVM_INSTALL_UTILS=YES
+ -DLLVM_BUILD_LLVM_DYLIB=YES
+ -DLLVM_LINK_LLVM_DYLIB=YES
+ -DLLVM_ENABLE_RTTI=YES
+ -DLLVM_ENABLE_FFI=YES
+ -DLLVM_BINUTILS_INCDIR=/usr/include"
+hostmakedepends="perl python3 zlib-devel libffi-devel swig python3-Sphinx
+ python3-recommonmark python3-sphinx-automodapi"
+makedepends="python3-devel zlib-devel elfutils-devel libffi-devel libedit-devel
+ libxml2-devel binutils-devel libatomic-devel"
+depends="libllvm14>=${version}_${revision}"
+short_desc="Low Level Virtual Machine"
+maintainer="q66 <daniel@octaforge.org>"
+license="Apache-2.0"
+homepage="https://www.llvm.org"
+distfiles="https://github.com/llvm/llvm-project/releases/download/llvmorg-${version}/llvm-project-${version}.src.tar.xz"
+checksum=44d3e7a784d5cf805e72853bb03f218bd1058d448c03ca883dabbebc99204e0c
+lib32disabled=yes
+python_version=3
+
+if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+	configure_args+=" -DLIBCXX_HAS_MUSL_LIBC=YES"
+	makedepends+=" libexecinfo-devel"
+	depends+=" libexecinfo-devel"
+fi
+
+# "operand out of range" assembler failures
+case "$XBPS_TARGET_MACHINE" in
+	ppc64*) ;;
+	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
+esac
+
+_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
+
+_lldb_enable=yes
+_libomp_enable=no
+
+case "$XBPS_TARGET_MACHINE" in
+	ppc64le*) ;;
+	ppc*|i686*) _lldb_enable=no ;;
+esac
+
+case "$XBPS_TARGET_MACHINE" in
+	x86_64*|aarch64*|ppc64*) _libomp_enable=yes;;
+esac
+
+subpackages="clang-tools-extra"
+
+# must go before clang
+if [ "$_libomp_enable" = "yes" ]; then
+	_enabled_projects+=";openmp"
+	subpackages+=" libomp libomp-devel"
+	# because of cmake nonsense referencing libomptarget.so.*
+	depends+=" libomp>=${version}_${revision}"
+fi
+
+subpackages+=" clang clang-analyzer libclang libclang-cpp
+ llvm-libunwind llvm-libunwind-devel libcxx libcxx-devel
+ libcxxabi libcxxabi-devel libllvm14"
+
+if [ "$_lldb_enable" = "yes" ]; then
+	# XXX fails to cross compile due to python
+	_enabled_projects+=";lldb"
+	subpackages+=" lldb lldb-devel"
+fi
+
+subpackages+=" lld lld-devel"
+
+configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+
+post_patch() {
+	if [ "$_lldb_enable" = "yes" ]; then
+		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
+			vsed -i 's|__ptrace_request|int|g' \
+				${wrksrc}/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
+		fi
+		# disable docs for lldb as they fail to generate
+		vsed -i '/add_subdirectory(docs)/d' \
+			${wrksrc}/lldb/CMakeLists.txt
+	fi
+
+	# update config.guess for better platform detection
+	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
+		${wrksrc}/llvm/cmake
+
+	# fix linker failures on some archs
+	vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
+		${wrksrc}/libcxxabi/cmake/config-ix.cmake
+	vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
+		${wrksrc}/libcxxabi/cmake/config-ix.cmake
+
+	# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*) ;;
+		ppc*-musl|i686-musl|mips*-musl)
+			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
+				${wrksrc}/libunwind/src/CMakeLists.txt
+			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
+				${wrksrc}/libcxxabi/src/CMakeLists.txt
+			vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
+			;;
+	esac
+
+	case "$XBPS_TARGET_MACHINE" in
+		x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
+			vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
+				${wrksrc}/compiler-rt/CMakeLists.txt
+			;;
+		arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
+			vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
+				${wrksrc}/compiler-rt/cmake/config-ix.cmake
+			;;
+	esac
+}
+
+pre_configure() {
+	local triplet
+
+	# Vastly reduce size of debugging symbols:
+	CFLAGS=${CFLAGS/ -g/ -g1}
+	CXXFLAGS=${CXXFLAGS/ -g/ -g1}
+
+	# since gcc9, the build likes to blow up for ppc32 apparently because
+	# of clang being too large for a 24-bit relative call to the PLT, so
+	# optimize for size instead
+	case "$XBPS_TARGET_MACHINE" in
+		ppc64*) ;;
+		mips*-musl|ppc*) configure_args+=" -DVOID_CXX_OPT_FLAGS=-Os" ;;
+	esac
+
+	if [ "$CROSS_BUILD" ]; then
+		msg_normal "Building host tblgen\n"
+		mkdir -p build/HOST
+		cd build/HOST
+		CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
+			CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
+			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
+			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
+		make ${makejobs} -C utils/TableGen
+		make ${makejobs} -C tools/clang/utils/TableGen
+		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
+		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
+		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
+		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
+		cd ../..
+	fi
+
+	case "$XBPS_TARGET_MACHINE" in
+		i686*) _arch="X86";;
+		x86_64*) _arch="X86";;
+		armv5*) _arch="Armv5te";;
+		armv6*) _arch="Armv6";;
+		armv7*) _arch="Armv7";;
+		aarch64*) _arch="AArch64";;
+		mips*) _arch="Mips";;
+		ppc*) _arch="PowerPC";;
+		riscv64*) _arch="RISCV64";;
+	esac
+
+	triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
+
+	configure_args+=" -DLLVM_TARGET_ARCH=${_arch}"
+	configure_args+=" -DLLVM_HOST_TRIPLE=${triplet}"
+	configure_args+=" -DLLVM_DEFAULT_TARGET_TRIPLE=${triplet}"
+}
+
+do_install() {
+	cd build
+	cmake -DCMAKE_INSTALL_PREFIX=${DESTDIR}/usr -P cmake_install.cmake
+
+	# Required for multilib.
+	if [ "$XBPS_TARGET_MACHINE" = "x86_64" ]; then
+		for _header in llvm-config; do
+			mv ${DESTDIR}/usr/include/llvm/Config/${_header}{,-64}.h
+			vinstall ${FILESDIR}/llvm-Config-${_header}.h 644 \
+				usr/include/llvm/Config ${_header}.h
+		done
+	fi
+
+	# Remove llvm-config-host in cross builds.
+	if [ "$CROSS_BUILD" ]; then
+		rm -f ${DESTDIR}/usr/bin/llvm-config-host
+	fi
+
+	# Install libcxxabi headers
+	vinstall ${wrksrc}/libcxxabi/include/__cxxabi_config.h 644 usr/include
+	vinstall ${wrksrc}/libcxxabi/include/cxxabi.h 644 usr/include
+
+	# Install libunwind headers
+	vinstall ${wrksrc}/libunwind/include/__libunwind_config.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/libunwind.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/unwind.h 644 usr/include
+	vinstall ${wrksrc}/libunwind/include/mach-o/compact_unwind_encoding.h \
+		644 usr/include/mach-o
+}
+
+clang-analyzer_package() {
+	pycompile_dirs="usr/share/scan-view"
+	depends="clang-${version}_${revision} python3 perl"
+	short_desc+=" - A source code analysis framework"
+	homepage="https://clang-analyzer.llvm.org/"
+	pkg_install() {
+		vmove usr/share/man/man1/scan-build.1
+		vmove "/usr/bin/scan-*"
+		vmove "/usr/share/scan-*"
+		vmove "/usr/libexec/*analyzer"
+	}
+}
+
+clang-tools-extra_package() {
+	lib32disabled=yes
+	depends="clang-${version}_${revision} python3"
+	short_desc+=" - Extra Clang tools"
+	homepage="https://clang.llvm.org/extra/"
+	pkg_install() {
+		vmove usr/include/clang-tidy
+		vmove usr/bin/clang-apply-replacements
+		vmove usr/bin/clang-query
+		vmove usr/bin/clang-rename
+		vmove usr/bin/clang-tidy
+		vmove usr/bin/diagtool
+		vmove usr/bin/find-all-symbols
+		vmove usr/bin/hmaptool
+		vmove usr/bin/modularize
+		vmove usr/bin/pp-trace
+		vmove usr/bin/sancov
+		vmove "usr/lib/libclangApplyReplacements*"
+		vmove "usr/lib/libclangQuery*"
+		vmove "usr/lib/libclangTidy*"
+		vmove "usr/share/clang/*tidy*"
+		vmove usr/share/doc/clang-tools
+		vmove usr/share/man/man1/extraclangtools.1
+		vmove usr/share/man/man1/diagtool.1
+	}
+}
+
+clang_package() {
+	lib32disabled=yes
+	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
+	 libclang-${version}_${revision}"
+	short_desc+=" - C language family frontend"
+	homepage="https://clang.llvm.org/"
+	pkg_install() {
+		vmove usr/include/clang
+		vmove usr/include/clang-c
+		vmove "usr/bin/*clang*"
+		vmove usr/bin/c-index-test
+		vmove usr/lib/clang
+		vmove usr/lib/cmake/clang
+		vmove "usr/lib/libclang*.a"
+		vmove "usr/lib/libclang*.so"
+		vmove usr/share/clang
+		vmove usr/share/doc/clang
+		vmove usr/share/man/man1/clang.1
+	}
+}
+
+libclang_package() {
+	short_desc+=" - C frontend runtime library"
+	pkg_install() {
+		vmove "usr/lib/libclang.so.*"
+	}
+}
+
+libclang-cpp_package() {
+	short_desc+=" - C frontend runtime library (C++ interface)"
+	pkg_install() {
+		vmove "usr/lib/libclang-cpp.so.*"
+	}
+}
+
+lld_package() {
+	lib32disabled=yes
+	short_desc+=" - linker"
+	homepage="https://lld.llvm.org"
+	pkg_install() {
+		vmove usr/bin/lld*
+		vmove usr/bin/wasm-ld
+		vmove usr/bin/ld.lld*
+		vmove usr/bin/ld64.lld*
+		vmove usr/share/doc/lld
+	}
+}
+
+lld-devel_package() {
+	lib32disabled=yes
+	short_desc+=" - linker - development files"
+	homepage="https://lld.llvm.org"
+	depends="lld>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include/lld
+		vmove usr/lib/cmake/lld
+		vmove "usr/lib/liblld*a"
+	}
+}
+
+lldb_package() {
+	lib32disabled=yes
+	depends+=" python3-six"
+	short_desc+=" - LLDB debugger"
+	homepage="https://lldb.llvm.org/"
+	pkg_install() {
+		vmove usr/bin/*lldb*
+		vmove usr/lib/liblldb*so.*
+		vmove /usr/lib/python*
+	}
+}
+
+lldb-devel_package() {
+	lib32disabled=yes
+	depends="lldb>=${version}_${revision}"
+	short_desc+=" - LLDB debugger - development files"
+	pkg_install() {
+		vmove usr/include/lldb
+		vmove "usr/lib/liblldb*.so"
+	}
+}
+
+llvm-libunwind_package() {
+	short_desc+=" - libunwind"
+	pkg_install() {
+		vmove "usr/lib/libunwind.so.*"
+	}
+}
+
+llvm-libunwind-devel_package() {
+	short_desc+=" - libunwind - development files"
+	depends="llvm-libunwind>=${version}_${revision}"
+	conflicts="libunwind-devel>=0"
+	pkg_install() {
+		vmove usr/lib/libunwind.so
+		vmove usr/lib/libunwind.a
+		vmove "usr/include/*unwind*"
+		vmove usr/include/mach-o
+		vmove usr/share/doc/libunwind
+	}
+}
+
+libcxxabi_package() {
+	short_desc+=" - low level support for libc++"
+	pkg_install() {
+		vmove "usr/lib/libc++abi.so.*"
+	}
+}
+
+libcxxabi-devel_package() {
+	short_desc+=" - low level support for libc++ - development files"
+	depends="libcxxabi>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/lib/libc++abi.so
+		vmove usr/lib/libc++abi.a
+		vmove "usr/include/*cxxabi*"
+	}
+}
+
+libcxx_package() {
+	short_desc+=" - C++ standard library"
+	pkg_install() {
+		vmove "usr/lib/libc++.so.*"
+	}
+}
+
+libcxx-devel_package() {
+	short_desc+=" - C++ standard library - development files"
+	depends="libcxx>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/lib/libc++.so
+		vmove usr/lib/libc++.a
+		vmove usr/lib/libc++experimental.a
+		vmove usr/include/c++
+		vmove usr/share/doc/libcxx
+	}
+}
+
+libomp_package() {
+	short_desc+=" - Clang OpenMP support library"
+	pkg_install() {
+		vmove usr/lib/libomp.so
+		vmove "usr/lib/libomptarget.rtl.*.so"
+		vmove usr/lib/libarcher.so
+		vmove "usr/lib/libomp*.so.*"
+	}
+}
+
+libomp-devel_package() {
+	short_desc+=" - Clang OpenMP support library - development files"
+	depends="libomp>=${version}_${revision}"
+	pkg_install() {
+		vmove "usr/lib/libomp*.so"
+		vmove "usr/lib/libarcher*"
+		vmove "usr/include/omp*.h"
+		vmove "usr/lib/clang/${version}/include/omp*.h"
+		vmove usr/share/man/man1/llvmopenmp.1
+		vmove usr/share/doc/openmp
+	}
+}
+
+libllvm14_package() {
+	short_desc+=" - runtime library"
+	pkg_install() {
+		vmove "usr/lib/libLLVM-*.so*"
+	}
+}
diff --git a/srcpkgs/llvm14/update b/srcpkgs/llvm14/update
new file mode 100644
index 000000000000..e95cf26b3586
--- /dev/null
+++ b/srcpkgs/llvm14/update
@@ -0,0 +1,3 @@
+site="https://github.com/llvm/llvm-project/releases"
+pattern="llvmorg-\K(\d+.){2}\d+(-rc\d+)?"
+ignore="*-rc*"

From b4ebe6e62cd8d03d22cf5b02097b5c499e0f58a1 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:16:07 +0200
Subject: [PATCH 02/23] llvm: update to 14.0.3.

switch to runtimes build:
https://reviews.llvm.org/rGac7031b2b2fa
https://reviews.llvm.org/D110338#3022952
---
 common/shlibs                                 |  5 +-
 srcpkgs/llvm/template                         |  6 +-
 .../llvm14/files/llvm-Config-llvm-config.h    |  9 +++
 ...le-mutliarch-layout-on-musl-in-clang.patch | 31 +++++++++
 ...ch-locations-for-libunwind-libc-libc.patch | 68 +++++++++++++++++++
 srcpkgs/llvm14/template                       | 28 ++++----
 6 files changed, 126 insertions(+), 21 deletions(-)
 create mode 100644 srcpkgs/llvm14/files/llvm-Config-llvm-config.h
 create mode 100644 srcpkgs/llvm14/patches/clang-005-disable-mutliarch-layout-on-musl-in-clang.patch
 create mode 100644 srcpkgs/llvm14/patches/llvm-007-disable-multiarch-locations-for-libunwind-libc-libc.patch

diff --git a/common/shlibs b/common/shlibs
index 7658c1d2531e..9180c68d8419 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -974,7 +974,7 @@ libgtksourceviewmm-3.0.so.0 gtksourceviewmm-3.2.0_1
 libyajl.so.2 yajl-2.0.1_1
 libconfuse.so.2 confuse-3.2.1_1
 liblldb.so.14 lldb-14.0.3_1
-libclang.so.14 libclang-14.0.3_1
+libclang.so.13 libclang-14.0.3_1
 libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
@@ -4171,7 +4171,8 @@ libomptarget.rtl.amdgpu.so libomp-14.0.3_1
 libomptarget.rtl.cuda.so libomp-14.0.3_1
 libomptarget.rtl.x86_64.so libomp-14.0.3_1
 libarcher.so libomp-14.0.3_1
-libomptarget.so libomp-14.0.3_1
+libompd.so libomp-devel-14.0.3_1
+libomptarget.so libomp-devel-14.0.3_1
 liblldbIntelFeatures.so.14 lldb-14.0.3_1
 libLTO.so.14 llvm14-14.0.3_1
 libRemarks.so.14 llvm14-14.0.3_1
diff --git a/srcpkgs/llvm/template b/srcpkgs/llvm/template
index a92db6f94f9f..d226c61c734e 100644
--- a/srcpkgs/llvm/template
+++ b/srcpkgs/llvm/template
@@ -1,10 +1,10 @@
 # Template file for 'llvm'
 pkgname=llvm
-version=12.0.0
+version=14.0.3
 revision=1
 build_style=meta
-depends="llvm12"
-replaces="llvm11>=0 llvm10>=0 llvm9>=0 llvm8>=0 llvm7>=0 llvm6.0>=0 llvm3.9>=0"
+depends="llvm14"
+replaces="llvm13>=0 llvm12>=0 llvm11>=0 llvm10>=0 llvm9>=0 llvm8>=0 llvm7>=0 llvm6.0>=0 llvm3.9>=0"
 short_desc="LLVM meta package"
 maintainer="Enno Boland <gottox@voidlinux.org>"
 license="Public Domain"
diff --git a/srcpkgs/llvm14/files/llvm-Config-llvm-config.h b/srcpkgs/llvm14/files/llvm-Config-llvm-config.h
new file mode 100644
index 000000000000..2fa08c9be696
--- /dev/null
+++ b/srcpkgs/llvm14/files/llvm-Config-llvm-config.h
@@ -0,0 +1,9 @@
+#include <bits/wordsize.h>
+
+#if __WORDSIZE == 32
+#include "llvm-config-32.h"
+#elif __WORDSIZE == 64
+#include "llvm-config-64.h"
+#else
+#error "Unknown word size"
+#endif
diff --git a/srcpkgs/llvm14/patches/clang-005-disable-mutliarch-layout-on-musl-in-clang.patch b/srcpkgs/llvm14/patches/clang-005-disable-mutliarch-layout-on-musl-in-clang.patch
new file mode 100644
index 000000000000..348d99b10de2
--- /dev/null
+++ b/srcpkgs/llvm14/patches/clang-005-disable-mutliarch-layout-on-musl-in-clang.patch
@@ -0,0 +1,31 @@
+From cff917c85b509789ec75b1e2343831c5729a193c Mon Sep 17 00:00:00 2001
+From: Daniel Kolesa <daniel@octaforge.org>
+Date: Wed, 6 Apr 2022 00:52:23 +0200
+Subject: [PATCH 05/22] disable mutliarch layout on musl in clang
+
+We don't use a multiarch layout and we don't really care for
+debianisms, so emulate whatever a non-multiarch gcc toolchain
+would do and use an empty thing.
+---
+ clang/lib/Driver/ToolChains/Linux.cpp | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp
+index f85c04df4..13cbdbdc7 100644
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -46,6 +46,11 @@ std::string Linux::getMultiarchTriple(const Driver &D,
+   bool IsMipsR6 = TargetTriple.getSubArch() == llvm::Triple::MipsSubArch_r6;
+   bool IsMipsN32Abi = TargetTriple.getEnvironment() == llvm::Triple::GNUABIN32;
+ 
++  /* we are not multiarch */
++  if (TargetTriple.isMusl()) {
++    return "";
++  }
++
+   // For most architectures, just use whatever we have rather than trying to be
+   // clever.
+   switch (TargetTriple.getArch()) {
+-- 
+2.35.1
+
diff --git a/srcpkgs/llvm14/patches/llvm-007-disable-multiarch-locations-for-libunwind-libc-libc.patch b/srcpkgs/llvm14/patches/llvm-007-disable-multiarch-locations-for-libunwind-libc-libc.patch
new file mode 100644
index 000000000000..3ef7499d6082
--- /dev/null
+++ b/srcpkgs/llvm14/patches/llvm-007-disable-multiarch-locations-for-libunwind-libc-libc.patch
@@ -0,0 +1,68 @@
+From 92a3b73dfec9c85a536ed99c5570231c333ad1e8 Mon Sep 17 00:00:00 2001
+From: Daniel Kolesa <daniel@octaforge.org>
+Date: Wed, 6 Apr 2022 00:57:58 +0200
+Subject: [PATCH 08/22] disable multiarch locations for
+ libunwind/libc++/libc++abi
+
+---
+ libcxx/CMakeLists.txt            | 2 +-
+ libcxx/benchmarks/CMakeLists.txt | 2 +-
+ libcxxabi/CMakeLists.txt         | 2 +-
+ libunwind/CMakeLists.txt         | 2 +-
+ 4 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt
+index 35c2ce515..19f423bf0 100644
+--- a/libcxx/CMakeLists.txt
++++ b/libcxx/CMakeLists.txt
+@@ -432,7 +432,7 @@ set(LIBCXX_INSTALL_INCLUDE_DIR "${CMAKE_INSTALL_INCLUDEDIR}/c++/v1" CACHE PATH
+ set(LIBCXX_INSTALL_RUNTIME_DIR "${CMAKE_INSTALL_BINDIR}" CACHE PATH
+     "Path where built libc++ runtime libraries should be installed.")
+ 
+-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
++if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME MATCHES "Linux")
+   set(LIBCXX_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/${LLVM_DEFAULT_TARGET_TRIPLE})
+   set(LIBCXX_GENERATED_INCLUDE_DIR "${LLVM_BINARY_DIR}/include/c++/v1")
+   set(LIBCXX_GENERATED_INCLUDE_TARGET_DIR "${LLVM_BINARY_DIR}/include/${LLVM_DEFAULT_TARGET_TRIPLE}/c++/v1")
+diff --git a/libcxx/benchmarks/CMakeLists.txt b/libcxx/benchmarks/CMakeLists.txt
+index 95e28618b..906abdb4e 100644
+--- a/libcxx/benchmarks/CMakeLists.txt
++++ b/libcxx/benchmarks/CMakeLists.txt
+@@ -26,7 +26,7 @@ set(BENCHMARK_LIBCXX_COMPILE_FLAGS
+     -Wl,-rpath,${LIBCXX_LIBRARY_DIR}
+     ${SANITIZER_FLAGS}
+     )
+-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
++if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME MATCHES "Linux")
+   list(APPEND BENCHMARK_LIBCXX_COMPILE_FLAGS
+     -isystem "${LIBCXX_GENERATED_INCLUDE_TARGET_DIR}")
+ endif()
+diff --git a/libcxxabi/CMakeLists.txt b/libcxxabi/CMakeLists.txt
+index 8e8cdf8ad..94e625f44 100644
+--- a/libcxxabi/CMakeLists.txt
++++ b/libcxxabi/CMakeLists.txt
+@@ -226,7 +226,7 @@ set(CMAKE_MODULE_PATH
+ set(LIBCXXABI_INSTALL_RUNTIME_DIR "${CMAKE_INSTALL_BINDIR}" CACHE PATH
+     "Path where built libc++abi runtime libraries should be installed.")
+ 
+-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
++if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME MATCHES "Linux")
+   set(LIBCXXABI_HEADER_DIR ${LLVM_BINARY_DIR})
+   set(LIBCXXABI_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/${LLVM_DEFAULT_TARGET_TRIPLE})
+   set(LIBCXXABI_INSTALL_LIBRARY_DIR lib${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE} CACHE PATH
+diff --git a/libunwind/CMakeLists.txt b/libunwind/CMakeLists.txt
+index 6523fb0d3..a63b88f31 100644
+--- a/libunwind/CMakeLists.txt
++++ b/libunwind/CMakeLists.txt
+@@ -158,7 +158,7 @@ set(LIBUNWIND_INSTALL_INCLUDE_DIR "${CMAKE_INSTALL_INCLUDEDIR}" CACHE PATH
+ set(LIBUNWIND_INSTALL_RUNTIME_DIR "${CMAKE_INSTALL_BINDIR}" CACHE PATH
+     "Path where built libunwind runtime libraries should be installed.")
+ 
+-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
++if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME MATCHES "Linux")
+   set(LIBUNWIND_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/${LLVM_DEFAULT_TARGET_TRIPLE})
+   set(LIBUNWIND_INSTALL_LIBRARY_DIR lib${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE} CACHE PATH
+       "Path where built libunwind libraries should be installed.")
+-- 
+2.35.1
+
diff --git a/srcpkgs/llvm14/template b/srcpkgs/llvm14/template
index 3e7e6ab2c00b..8107c1d339e2 100644
--- a/srcpkgs/llvm14/template
+++ b/srcpkgs/llvm14/template
@@ -15,6 +15,7 @@ configure_args="
  -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
  -DLIBOMP_ENABLE_SHARED=YES
  -DLIBOMP_INSTALL_ALIASES=NO
+ -DCOMPILER_RT_DEFAULT_TARGET_ONLY=YES
  -DLLVM_INCLUDE_DOCS=YES
  -DLLVM_BUILD_DOCS=YES
  -DLLVM_ENABLE_SPHINX=YES
@@ -38,6 +39,7 @@ distfiles="https://github.com/llvm/llvm-project/releases/download/llvmorg-${vers
 checksum=44d3e7a784d5cf805e72853bb03f218bd1058d448c03ca883dabbebc99204e0c
 lib32disabled=yes
 python_version=3
+nopie_files="/usr/bin/llvm-omp-device-info"
 
 if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
 	configure_args+=" -DLIBCXX_HAS_MUSL_LIBC=YES"
@@ -51,7 +53,8 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
-_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
+_enabled_projects="clang;clang-tools-extra;lld"
+_enabled_runtimes="compiler-rt;libcxx;libcxxabi;libunwind"
 
 _lldb_enable=yes
 _libomp_enable=no
@@ -67,9 +70,8 @@ esac
 
 subpackages="clang-tools-extra"
 
-# must go before clang
 if [ "$_libomp_enable" = "yes" ]; then
-	_enabled_projects+=";openmp"
+	_enabled_runtimes+=";openmp"
 	subpackages+=" libomp libomp-devel"
 	# because of cmake nonsense referencing libomptarget.so.*
 	depends+=" libomp>=${version}_${revision}"
@@ -88,6 +90,7 @@ fi
 subpackages+=" lld lld-devel"
 
 configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+configure_args+=" -DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}"
 
 post_patch() {
 	if [ "$_lldb_enable" = "yes" ]; then
@@ -135,8 +138,7 @@ post_patch() {
 }
 
 pre_configure() {
-	local triplet
-
+	local triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
 	# Vastly reduce size of debugging symbols:
 	CFLAGS=${CFLAGS/ -g/ -g1}
 	CXXFLAGS=${CXXFLAGS/ -g/ -g1}
@@ -156,7 +158,8 @@ pre_configure() {
 		CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
 			CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
-			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
+			-DLLVM_ENABLE_PROJECTS=${_enabled_projects} \
+			-DLLVM_ENABLE_RUNTIMES=${_enabled_runtimes}
 		make ${makejobs} -C utils/TableGen
 		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
@@ -178,8 +181,6 @@ pre_configure() {
 		riscv64*) _arch="RISCV64";;
 	esac
 
-	triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
-
 	configure_args+=" -DLLVM_TARGET_ARCH=${_arch}"
 	configure_args+=" -DLLVM_HOST_TRIPLE=${triplet}"
 	configure_args+=" -DLLVM_DEFAULT_TARGET_TRIPLE=${triplet}"
@@ -249,7 +250,7 @@ clang-tools-extra_package() {
 		vmove "usr/lib/libclangQuery*"
 		vmove "usr/lib/libclangTidy*"
 		vmove "usr/share/clang/*tidy*"
-		vmove usr/share/doc/clang-tools
+		vmove usr/share/doc/LLVM/clang-tools
 		vmove usr/share/man/man1/extraclangtools.1
 		vmove usr/share/man/man1/diagtool.1
 	}
@@ -271,7 +272,7 @@ clang_package() {
 		vmove "usr/lib/libclang*.a"
 		vmove "usr/lib/libclang*.so"
 		vmove usr/share/clang
-		vmove usr/share/doc/clang
+		vmove usr/share/doc/LLVM/clang
 		vmove usr/share/man/man1/clang.1
 	}
 }
@@ -299,7 +300,7 @@ lld_package() {
 		vmove usr/bin/wasm-ld
 		vmove usr/bin/ld.lld*
 		vmove usr/bin/ld64.lld*
-		vmove usr/share/doc/lld
+		vmove usr/share/doc/LLVM/lld
 	}
 }
 
@@ -353,7 +354,6 @@ llvm-libunwind-devel_package() {
 		vmove usr/lib/libunwind.a
 		vmove "usr/include/*unwind*"
 		vmove usr/include/mach-o
-		vmove usr/share/doc/libunwind
 	}
 }
 
@@ -389,7 +389,6 @@ libcxx-devel_package() {
 		vmove usr/lib/libc++.a
 		vmove usr/lib/libc++experimental.a
 		vmove usr/include/c++
-		vmove usr/share/doc/libcxx
 	}
 }
 
@@ -399,7 +398,6 @@ libomp_package() {
 		vmove usr/lib/libomp.so
 		vmove "usr/lib/libomptarget.rtl.*.so"
 		vmove usr/lib/libarcher.so
-		vmove "usr/lib/libomp*.so.*"
 	}
 }
 
@@ -411,8 +409,6 @@ libomp-devel_package() {
 		vmove "usr/lib/libarcher*"
 		vmove "usr/include/omp*.h"
 		vmove "usr/lib/clang/${version}/include/omp*.h"
-		vmove usr/share/man/man1/llvmopenmp.1
-		vmove usr/share/doc/openmp
 	}
 }
 

From 10eddcb54f455e358c4b74ef21248fac98618364 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:36:32 +0200
Subject: [PATCH 03/23] llvm12: drop non-llvm components

---
 ...clang-001-fix-unwind-chain-inclusion.patch |  44 ---
 .../patches/clang-002-add-musl-triples.patch  | 110 -------
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 -
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ---
 .../compiler-rt-aarch64-ucontext.patch        |  11 -
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 --
 .../llvm12/patches/compiler-rt-size_t.patch   |  10 -
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 ----
 srcpkgs/llvm12/patches/libcxx-musl.patch      |  26 --
 srcpkgs/llvm12/patches/libcxx-ppc.patch       |  22 --
 .../llvm12/patches/libcxx-ssp-nonshared.patch |  11 -
 srcpkgs/llvm12/patches/libcxxabi-dl.patch     |  25 --
 srcpkgs/llvm12/patches/libunwind-ppc32.patch  |  63 ----
 srcpkgs/llvm12/patches/lldb-musl.patch        |  31 --
 .../llvm12/patches/ppc32-compiler-rt.patch    |  21 --
 srcpkgs/llvm12/template                       | 301 +-----------------
 16 files changed, 1 insertion(+), 832 deletions(-)
 delete mode 100644 srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
 delete mode 100644 srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-size_t.patch
 delete mode 100644 srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-ppc.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
 delete mode 100644 srcpkgs/llvm12/patches/libcxxabi-dl.patch
 delete mode 100644 srcpkgs/llvm12/patches/libunwind-ppc32.patch
 delete mode 100644 srcpkgs/llvm12/patches/lldb-musl.patch
 delete mode 100644 srcpkgs/llvm12/patches/ppc32-compiler-rt.patch

diff --git a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
deleted file mode 100644
index e4eaa7783e7a..000000000000
--- a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 352974169f0d2b5da3d5321f588f5e3b5941330e Mon Sep 17 00:00:00 2001
-From: Andrea Brancaleoni <miwaxe@gmail.com>
-Date: Tue, 8 Sep 2015 22:14:57 +0200
-Subject: [PATCH 2/7] fix unwind chain inclusion
-
----
- lib/Headers/unwind.h | 9 +++++----
- 1 file changed, 5 insertions(+), 4 deletions(-)
-
-diff --git a/lib/Headers/unwind.h b/lib/Headers/unwind.h
-index 303d792..44e10cc 100644
---- a/clang/lib/Headers/unwind.h
-+++ b/clang/lib/Headers/unwind.h
-@@ -9,9 +9,6 @@
- 
- /* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/
- 
--#ifndef __CLANG_UNWIND_H
--#define __CLANG_UNWIND_H
--
- #if defined(__APPLE__) && __has_include_next(<unwind.h>)
- /* Darwin (from 11.x on) provide an unwind.h. If that's available,
-  * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE,
-@@ -39,6 +36,9 @@
- # endif
- #else
- 
-+#ifndef __CLANG_UNWIND_H
-+#define __CLANG_UNWIND_H
-+
- #include <stdint.h>
- 
- #ifdef __cplusplus
-@@ -322,6 +322,7 @@ _Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *);
- }
- #endif
- 
-+#endif /* __CLANG_UNWIND_H */
-+
- #endif
- 
--#endif /* __CLANG_UNWIND_H */
--- 
-2.5.1
diff --git a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
deleted file mode 100644
index 25688d40dbc2..000000000000
--- a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
+++ /dev/null
@@ -1,110 +0,0 @@
---- a/clang/lib/Driver/ToolChains/Gnu.cpp
-+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
-@@ -2086,7 +2086,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
-                                              "armv7hl-redhat-linux-gnueabi",
-                                              "armv6hl-suse-linux-gnueabi",
--                                             "armv7hl-suse-linux-gnueabi"};
-+                                             "armv7hl-suse-linux-gnueabi",
-+                                             "armv7l-linux-gnueabihf"};
-   static const char *const ARMebLibDirs[] = {"/lib"};
-   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
-                                              "armeb-linux-androideabi"};
-@@ -2153,8 +2154,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
-   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
-   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
--                                             "powerpcle-unknown-linux-gnu",
--                                             "powerpcle-linux-musl"};
-+                                             "powerpcle-unknown-linux-gnu"};
- 
-   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
-   static const char *const PPC64Triples[] = {
-@@ -2235,6 +2235,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
-     return;
-   }
- 
-+  if (TargetTriple.isMusl()) {
-+    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
-+    static const char *const ARMHFMuslTriples[] = {
-+        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
-+    };
-+    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
-+    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
-+    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
-+    static const char *const MIPSMuslTriples[] = {
-+        "mips-linux-musl", "mipsel-linux-musl",
-+        "mipsel-linux-muslhf", "mips-linux-muslhf"
-+    };
-+    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
-+    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
-+    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
-+    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
-+
-+    switch (TargetTriple.getArch()) {
-+    case llvm::Triple::aarch64:
-+      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
-+      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
-+      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
-+      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
-+      break;
-+    case llvm::Triple::arm:
-+      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
-+      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
-+        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
-+      } else {
-+        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
-+      }
-+      break;
-+    case llvm::Triple::x86_64:
-+      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-+      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
-+      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-+      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
-+      break;
-+    case llvm::Triple::x86:
-+      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
-+      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
-+      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
-+      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
-+      break;
-+    case llvm::Triple::mips:
-+      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
-+      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
-+      break;
-+    case llvm::Triple::ppc:
-+      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
-+      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
-+      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
-+      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
-+      break;
-+    case llvm::Triple::ppcle:
-+      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
-+      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
-+      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
-+      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
-+      break;
-+    case llvm::Triple::ppc64:
-+      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
-+      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
-+      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
-+      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
-+      break;
-+    case llvm::Triple::ppc64le:
-+      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
-+      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
-+      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
-+      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
-+      break;
-+    default:
-+      break;
-+    }
-+    TripleAliases.push_back(TargetTriple.str());
-+    if (TargetTriple.str() != BiarchTriple.str())
-+      BiarchTripleAliases.push_back(BiarchTriple.str());
-+    return;
-+  }
-+
-   // Android targets should not use GNU/Linux tools or libraries.
-   if (TargetTriple.isAndroid()) {
-     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
deleted file mode 100644
index 4ad6412d1e6c..000000000000
--- a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/clang/lib/Driver/ToolChains/Linux.cpp
-+++ b/clang/lib/Driver/ToolChains/Linux.cpp
-@@ -504,10 +504,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
-     Loader = "ld.so.1";
-     break;
-   case llvm::Triple::ppc64:
--    LibDir = "lib64";
--    Loader =
--        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
--    break;
-   case llvm::Triple::ppc64le:
-     LibDir = "lib64";
-     Loader =
diff --git a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
deleted file mode 100644
index 21fc8003c5f1..000000000000
--- a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
+++ /dev/null
@@ -1,48 +0,0 @@
---- a/clang/lib/Basic/Targets/PPC.h
-+++ b/clang/lib/Basic/Targets/PPC.h
-@@ -415,11 +415,10 @@ public:
-       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
-     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
-       DataLayout = "e-m:e-i64:64-n32:64";
--      ABI = "elfv2";
-     } else {
-       DataLayout = "E-m:e-i64:64-n32:64";
--      ABI = "elfv1";
-     }
-+    ABI = "elfv2";
- 
-     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
-       LongDoubleWidth = LongDoubleAlign = 64;
---- a/clang/lib/CodeGen/TargetInfo.cpp
-+++ b/clang/lib/CodeGen/TargetInfo.cpp
-@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
-       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
- 
-     if (Triple.isOSBinFormatELF()) {
--      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
--      if (getTarget().getABI() == "elfv2")
--        Kind = PPC64_SVR4_ABIInfo::ELFv2;
-+      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
-+      if (getTarget().getABI() == "elfv1")
-+        Kind = PPC64_SVR4_ABIInfo::ELFv1;
-       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
- 
-       return SetCGInfo(
---- a/clang/lib/Driver/ToolChains/Clang.cpp
-+++ b/clang/lib/Driver/ToolChains/Clang.cpp
-@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
-   const llvm::Triple &T = getToolChain().getTriple();
-   if (T.isOSBinFormatELF()) {
-     switch (getToolChain().getArch()) {
--    case llvm::Triple::ppc64: {
--      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
--          T.isOSOpenBSD() || T.isMusl())
--        ABIName = "elfv2";
--      else
--        ABIName = "elfv1";
--      break;
--    }
-+    case llvm::Triple::ppc64:
-     case llvm::Triple::ppc64le:
-       ABIName = "elfv2";
-       break;
diff --git a/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch b/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
deleted file mode 100644
index 893c059d7b8d..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-aarch64-ucontext.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp.orig
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-@@ -1799,7 +1799,7 @@
- 
- static bool Aarch64GetESR(ucontext_t *ucontext, u64 *esr) {
-   static const u32 kEsrMagic = 0x45535201;
--  u8 *aux = ucontext->uc_mcontext.__reserved;
-+  u8 *aux = reinterpret_cast<u8 *>(ucontext->uc_mcontext.__reserved);
-   while (true) {
-     _aarch64_ctx *ctx = (_aarch64_ctx *)aux;
-     if (ctx->size == 0) break;
diff --git a/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch b/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
deleted file mode 100644
index 35f16d24f340..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-sanitizer-ppc64-musl.patch
+++ /dev/null
@@ -1,35 +0,0 @@
---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
-@@ -74,6 +74,10 @@
- #include <sys/utsname.h>
- #endif
- 
-+#if SANITIZER_LINUX && defined(__powerpc__)
-+#include <asm/ptrace.h>
-+#endif
-+
- #if SANITIZER_LINUX && !SANITIZER_ANDROID
- #include <sys/personality.h>
- #endif
---- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
-@@ -92,7 +92,7 @@
- # include <utime.h>
- # include <sys/ptrace.h>
- #if defined(__mips64) || defined(__aarch64__) || defined(__arm__) || \
--    SANITIZER_RISCV64
-+    defined(__powerpc__) || SANITIZER_RISCV64
- #  include <asm/ptrace.h>
- #  ifdef __arm__
- typedef struct user_fpregs elf_fpregset_t;
---- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
-+++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
-@@ -31,7 +31,7 @@
- #include <sys/types.h> // for pid_t
- #include <sys/uio.h> // for iovec
- #include <elf.h> // for NT_PRSTATUS
--#if (defined(__aarch64__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
-+#if (defined(__aarch64__) || defined(__powerpc__) || SANITIZER_RISCV64) && !SANITIZER_ANDROID
- // GLIBC 2.20+ sys/user does not include asm/ptrace.h
- # include <asm/ptrace.h>
- #endif
diff --git a/srcpkgs/llvm12/patches/compiler-rt-size_t.patch b/srcpkgs/llvm12/patches/compiler-rt-size_t.patch
deleted file mode 100644
index 2c63063a5e9e..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-size_t.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/compiler-rt/lib/fuzzer/FuzzerInterceptors.cpp.orig
-+++ b/compiler-rt/lib/fuzzer/FuzzerInterceptors.cpp
-@@ -25,6 +25,7 @@
-   }
- 
- #include <cassert>
-+#include <cstddef>
- #include <cstdint>
- #include <dlfcn.h> // for dlsym()
- 
diff --git a/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch b/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
deleted file mode 100644
index d0b61c80c897..000000000000
--- a/srcpkgs/llvm12/patches/compiler-rt-xray-ppc64-musl.patch
+++ /dev/null
@@ -1,62 +0,0 @@
---- a/compiler-rt/lib/xray/xray_powerpc64.inc
-+++ b/compiler-rt/lib/xray/xray_powerpc64.inc
-@@ -12,7 +12,13 @@
- 
- #include <cstdint>
- #include <mutex>
-+#ifdef __GLIBC__
- #include <sys/platform/ppc.h>
-+#else
-+#include <cctype>
-+#include <cstring>
-+#include <cstdlib>
-+#endif
- 
- #include "xray_defs.h"
- 
-@@ -20,13 +26,45 @@ namespace __xray {
- 
- ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
-   CPU = 0;
-+#ifdef __GLIBC__
-   return __ppc_get_timebase();
-+#else
-+  return __builtin_ppc_get_timebase();
-+#endif
- }
- 
- inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
-   static std::mutex M;
-   std::lock_guard<std::mutex> Guard(M);
-+#ifdef __GLIBC__
-   return __ppc_get_timebase_freq();
-+#else
-+  /* FIXME: a less dirty implementation? */
-+  static uint64_t base;
-+  if (!base) {
-+    FILE *f = fopen("/proc/cpuinfo", "rb");
-+    if (f) {
-+      ssize_t nr;
-+      /* virtually always big enough to hold the line */
-+      char buf[512];
-+      while (fgets(buf, sizeof(buf), f)) {
-+        char *ret = strstr(buf, "timebase");
-+        if (!ret) {
-+          continue;
-+        }
-+        ret += sizeof("timebase") - 1;
-+        ret = strchr(ret, ':');
-+        if (!ret) {
-+          continue;
-+        }
-+        base = strtoul(ret + 1, nullptr, 10);
-+        break;
-+      }
-+      fclose(f);
-+    }
-+  }
-+  return base;
-+#endif
- }
- 
- inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
diff --git a/srcpkgs/llvm12/patches/libcxx-musl.patch b/srcpkgs/llvm12/patches/libcxx-musl.patch
deleted file mode 100644
index bbd31ffc2cb1..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-musl.patch
+++ /dev/null
@@ -1,26 +0,0 @@
---- a/libcxx/include/locale
-+++ b/libcxx/include/locale
-@@ -742,7 +742,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
-         typename remove_reference<decltype(errno)>::type __save_errno = errno;
-         errno = 0;
-         char *__p2;
-+#if defined(__linux__) && !defined(__GLIBC__)
-+        long long __ll = strtoll(__a, &__p2, __base);
-+#else
-         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
-+#endif
-         typename remove_reference<decltype(errno)>::type __current_errno = errno;
-         if (__current_errno == 0)
-             errno = __save_errno;
-@@ -782,7 +786,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
-         typename remove_reference<decltype(errno)>::type __save_errno = errno;
-         errno = 0;
-         char *__p2;
-+#if defined(__linux__) && !defined(__GLIBC__)
-+        unsigned long long __ll = strtoull(__a, &__p2, __base);
-+#else
-         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
-+#endif
-         typename remove_reference<decltype(errno)>::type __current_errno = errno;
-         if (__current_errno == 0)
-             errno = __save_errno;
diff --git a/srcpkgs/llvm12/patches/libcxx-ppc.patch b/srcpkgs/llvm12/patches/libcxx-ppc.patch
deleted file mode 100644
index 7a92f8004e1c..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-ppc.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-This ensures `is_iec559` is defined correctly under all long double ABIs,
-including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__`
-is not defined on gcc.
-
---- a/libcxx/include/limits
-+++ b/libcxx/include/limits
-@@ -426,8 +426,14 @@ protected:
-     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
-     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
- 
--#if (defined(__ppc__) || defined(__ppc64__))
-+#if defined(__powerpc__) || defined(__powerpc64__)
-+#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__)
-+    /* IEEE 754 quadruple or double precision */
-+    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
-+#else
-+    /* 128-bit IBM double-double */
-     static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
-+#endif
- #else
-     static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
- #endif
diff --git a/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch b/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
deleted file mode 100644
index 70292beb2fcd..000000000000
--- a/srcpkgs/llvm12/patches/libcxx-ssp-nonshared.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/libcxx/CMakeLists.txt
-+++ b/libcxx/CMakeLists.txt
-@@ -769,6 +769,8 @@ function(cxx_link_system_libraries target)
-     target_link_libraries(${target} PRIVATE atomic)
-   endif()
- 
-+#ssp  target_link_libraries(${target} PRIVATE ssp_nonshared)
-+
-   if (MINGW)
-     target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
-   endif()
diff --git a/srcpkgs/llvm12/patches/libcxxabi-dl.patch b/srcpkgs/llvm12/patches/libcxxabi-dl.patch
deleted file mode 100644
index 3a15f9db8c98..000000000000
--- a/srcpkgs/llvm12/patches/libcxxabi-dl.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-Also link to -ldl to prevent undefined references.
-
---- a/libcxxabi/src/CMakeLists.txt
-+++ b/libcxxabi/src/CMakeLists.txt
-@@ -73,6 +73,7 @@
-   endif()
- 
-   add_library_flags_if(LIBCXXABI_HAS_C_LIB c)
-+  add_library_flags_if(LIBCXXABI_HAS_C_LIB dl)
- endif()
- 
- if (LIBCXXABI_USE_LLVM_UNWINDER)
---- a/libcxx/CMakeLists.txt
-+++ b/libcxx/CMakeLists.txt
-@@ -745,6 +745,10 @@
-     target_link_libraries(${target} PRIVATE m)
-   endif()
- 
-+  if (LIBCXX_HAS_C_LIB)
-+    target_link_libraries(${target} PRIVATE dl)
-+  endif()
-+
-   if (LIBCXX_HAS_RT_LIB)
-     target_link_libraries(${target} PRIVATE rt)
-   endif()
diff --git a/srcpkgs/llvm12/patches/libunwind-ppc32.patch b/srcpkgs/llvm12/patches/libunwind-ppc32.patch
deleted file mode 100644
index 74aa7576ecf9..000000000000
--- a/srcpkgs/llvm12/patches/libunwind-ppc32.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-This fixes build at least with gcc9 which does not define `__ppc__`.
-
---- a/libunwind/include/__libunwind_config.h
-+++ b/libunwind/include/__libunwind_config.h
-@@ -49,7 +49,7 @@
- #  define _LIBUNWIND_CONTEXT_SIZE 167
- #  define _LIBUNWIND_CURSOR_SIZE 179
- #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64
--# elif defined(__ppc__)
-+# elif defined(__powerpc__)
- #  define _LIBUNWIND_TARGET_PPC 1
- #  define _LIBUNWIND_CONTEXT_SIZE 117
- #  define _LIBUNWIND_CURSOR_SIZE 124
---- a/libunwind/src/UnwindRegistersRestore.S
-+++ b/libunwind/src/UnwindRegistersRestore.S
-@@ -392,7 +392,7 @@ Lnovec:
-   PPC64_LR(3)
-   bctr
- 
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- 
- DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind13Registers_ppc6jumptoEv)
- //
---- a/libunwind/src/UnwindRegistersSave.S
-+++ b/libunwind/src/UnwindRegistersSave.S
-@@ -554,7 +554,7 @@ DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext)
-   blr
- 
- 
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- 
- //
- // extern int unw_getcontext(unw_context_t* thread_state)
---- a/libunwind/src/config.h
-+++ b/libunwind/src/config.h
-@@ -95,12 +95,12 @@
- #define _LIBUNWIND_BUILD_SJLJ_APIS
- #endif
- 
--#if defined(__i386__) || defined(__x86_64__) || defined(__ppc__) || defined(__ppc64__) || defined(__powerpc64__)
-+#if defined(__i386__) || defined(__x86_64__) || defined(__powerpc__) || defined(__powerpc64__)
- #define _LIBUNWIND_SUPPORT_FRAME_APIS
- #endif
- 
- #if defined(__i386__) || defined(__x86_64__) ||                                \
--    defined(__ppc__) || defined(__ppc64__) || defined(__powerpc64__) ||        \
-+    defined(__powerpc__) || defined(__powerpc64__) ||                          \
-     (!defined(__APPLE__) && defined(__arm__)) ||                               \
-     (defined(__arm64__) || defined(__aarch64__)) ||                            \
-     defined(__mips__)
---- a/libunwind/src/libunwind.cpp
-+++ b/libunwind/src/libunwind.cpp
-@@ -42,7 +42,7 @@ _LIBUNWIND_HIDDEN int __unw_init_local(unw_cursor_t *cursor,
- # define REGISTER_KIND Registers_x86_64
- #elif defined(__powerpc64__)
- # define REGISTER_KIND Registers_ppc64
--#elif defined(__ppc__)
-+#elif defined(__powerpc__)
- # define REGISTER_KIND Registers_ppc
- #elif defined(__aarch64__)
- # define REGISTER_KIND Registers_arm64
diff --git a/srcpkgs/llvm12/patches/lldb-musl.patch b/srcpkgs/llvm12/patches/lldb-musl.patch
deleted file mode 100644
index 601c0d138523..000000000000
--- a/srcpkgs/llvm12/patches/lldb-musl.patch
+++ /dev/null
@@ -1,31 +0,0 @@
---- a/lldb/source/Plugins/Process/Linux/Procfs.h
-+++ b/lldb/source/Plugins/Process/Linux/Procfs.h
-@@ -10,21 +10,12 @@
- // sys/procfs.h on Android/Linux for all supported architectures.
- 
- #include <sys/ptrace.h>
-+#include <asm/ptrace.h>
- 
--#ifdef __ANDROID__
--#if defined(__arm64__) || defined(__aarch64__)
--typedef unsigned long elf_greg_t;
--typedef elf_greg_t
--    elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
--typedef struct user_fpsimd_state elf_fpregset_t;
--#ifndef NT_FPREGSET
--#define NT_FPREGSET NT_PRFPREG
--#endif // NT_FPREGSET
--#elif defined(__mips__)
--#ifndef NT_FPREGSET
--#define NT_FPREGSET NT_PRFPREG
--#endif // NT_FPREGSET
--#endif
--#else // __ANDROID__
-+#if !defined(__GLIBC__) && defined(__powerpc__)
-+#define pt_regs musl_pt_regs
-+#include <sys/procfs.h>
-+#undef pt_regs
-+#else
- #include <sys/procfs.h>
--#endif // __ANDROID__
-+#endif
diff --git a/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch b/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch
deleted file mode 100644
index 8e0a9a779d1b..000000000000
--- a/srcpkgs/llvm12/patches/ppc32-compiler-rt.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-commit ba4ede595ff9599232f5dd2b4384c243137b53fc
-Author: Daniel Kolesa <daniel@octaforge.org>
-Date:   Tue Jun 22 23:40:54 2021 +0200
-
-    enable compiler-rt support for ppc32
-
-diff --git a/compiler-rt/cmake/base-config-ix.cmake b/compiler-rt/cmake/base-config-ix.cmake
-index 1edab43..5c0c8a2 100644
---- a/compiler-rt/cmake/base-config-ix.cmake
-+++ b/compiler-rt/cmake/base-config-ix.cmake
-@@ -182,9 +182,7 @@ macro(test_targets)
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc64le")
-       test_target_arch(powerpc64le "" "-m64")
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc")
--      if(CMAKE_SYSTEM_NAME MATCHES "AIX")
--        test_target_arch(powerpc "" "-m32")
--      endif()
-+      test_target_arch(powerpc "" "-m32")
-       test_target_arch(powerpc64 "" "-m64")
-     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "s390x")
-       test_target_arch(s390x "" "")
diff --git a/srcpkgs/llvm12/template b/srcpkgs/llvm12/template
index 7ce18028e4a3..7b361bbbf5bc 100644
--- a/srcpkgs/llvm12/template
+++ b/srcpkgs/llvm12/template
@@ -1,25 +1,17 @@
 # Template file for 'llvm12'
 pkgname=llvm12
 version=12.0.1
-revision=2
+revision=3
 wrksrc="llvm-project-${version}.src"
 build_wrksrc=llvm
 build_style=cmake
 configure_args="
  -DCMAKE_BUILD_TYPE=Release -Wno-dev
  -DENABLE_LINKER_BUILD_ID=YES
- -DLLDB_USE_SYSTEM_SIX=YES
- -DLIBCXX_CXX_ABI=libcxxabi
- -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
- -DLIBCXXABI_USE_LLVM_UNWINDER=YES
- -DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
- -DLIBOMP_ENABLE_SHARED=YES
- -DLIBOMP_INSTALL_ALIASES=NO
  -DLLVM_INCLUDE_DOCS=YES
  -DLLVM_BUILD_DOCS=YES
  -DLLVM_ENABLE_SPHINX=YES
  -DSPHINX_WARNINGS_AS_ERRORS=NO
- -DLLVM_INSTALL_UTILS=YES
  -DLLVM_BUILD_LLVM_DYLIB=YES
  -DLLVM_LINK_LLVM_DYLIB=YES
  -DLLVM_ENABLE_RTTI=YES
@@ -51,87 +43,10 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
-_enabled_projects="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld"
-
-_lldb_enable=yes
-_libomp_enable=no
-
-case "$XBPS_TARGET_MACHINE" in
-	ppc64le*) ;;
-	ppc*|i686*) _lldb_enable=no ;;
-esac
-
-case "$XBPS_TARGET_MACHINE" in
-	x86_64*|aarch64*|ppc64*) _libomp_enable=yes;;
-esac
-
-subpackages="clang-tools-extra"
-
-# must go before clang
-if [ "$_libomp_enable" = "yes" ]; then
-	_enabled_projects+=";openmp"
-	subpackages+=" libomp libomp-devel"
-	# because of cmake nonsense referencing libomptarget.so.*
-	depends+=" libomp>=${version}_${revision}"
-fi
-
-subpackages+=" clang clang-analyzer libclang libclang-cpp
- llvm-libunwind llvm-libunwind-devel libcxx libcxx-devel
- libcxxabi libcxxabi-devel libllvm12"
-
-if [ "$_lldb_enable" = "yes" ]; then
-	# XXX fails to cross compile due to python
-	_enabled_projects+=";lldb"
-	subpackages+=" lldb lldb-devel"
-fi
-
-subpackages+=" lld lld-devel"
-
-configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
-
 post_patch() {
-	if [ "$_lldb_enable" = "yes" ]; then
-		if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
-			vsed -i 's|__ptrace_request|int|g' \
-				${wrksrc}/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
-		fi
-		# disable docs for lldb as they fail to generate
-		vsed -i '/add_subdirectory(docs)/d' \
-			${wrksrc}/lldb/CMakeLists.txt
-	fi
-
 	# update config.guess for better platform detection
 	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
 		${wrksrc}/llvm/cmake
-
-	# fix linker failures on some archs
-	vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
-		${wrksrc}/libcxxabi/cmake/config-ix.cmake
-	vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
-		${wrksrc}/libcxxabi/cmake/config-ix.cmake
-
-	# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
-	case "$XBPS_TARGET_MACHINE" in
-		ppc64*) ;;
-		ppc*-musl|i686-musl|mips*-musl)
-			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
-				${wrksrc}/libunwind/src/CMakeLists.txt
-			vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
-				${wrksrc}/libcxxabi/src/CMakeLists.txt
-			vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
-			;;
-	esac
-
-	case "$XBPS_TARGET_MACHINE" in
-		x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
-			vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
-				${wrksrc}/compiler-rt/CMakeLists.txt
-			;;
-		arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
-			vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
-				${wrksrc}/compiler-rt/cmake/config-ix.cmake
-			;;
-	esac
 }
 
 pre_configure() {
@@ -158,10 +73,8 @@ pre_configure() {
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
 			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
 		make ${makejobs} -C utils/TableGen
-		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
 		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
-		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
 		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
 		cd ../..
 	fi
@@ -202,218 +115,6 @@ do_install() {
 	if [ "$CROSS_BUILD" ]; then
 		rm -f ${DESTDIR}/usr/bin/llvm-config-host
 	fi
-
-	# Install libcxxabi headers
-	vinstall ${wrksrc}/libcxxabi/include/__cxxabi_config.h 644 usr/include
-	vinstall ${wrksrc}/libcxxabi/include/cxxabi.h 644 usr/include
-
-	# Install libunwind headers
-	vinstall ${wrksrc}/libunwind/include/__libunwind_config.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/libunwind.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/unwind.h 644 usr/include
-	vinstall ${wrksrc}/libunwind/include/mach-o/compact_unwind_encoding.h \
-		644 usr/include/mach-o
-}
-
-clang-analyzer_package() {
-	pycompile_dirs="usr/share/scan-view"
-	depends="clang-${version}_${revision} python3 perl"
-	short_desc+=" - A source code analysis framework"
-	homepage="https://clang-analyzer.llvm.org/"
-	pkg_install() {
-		vmove usr/share/man/man1/scan-build.1
-		vmove "/usr/bin/scan-*"
-		vmove "/usr/share/scan-*"
-		vmove "/usr/libexec/*analyzer"
-	}
-}
-
-clang-tools-extra_package() {
-	lib32disabled=yes
-	depends="clang-${version}_${revision} python3"
-	short_desc+=" - Extra Clang tools"
-	homepage="https://clang.llvm.org/extra/"
-	pkg_install() {
-		vmove usr/include/clang-tidy
-		vmove usr/bin/clang-apply-replacements
-		vmove usr/bin/clang-query
-		vmove usr/bin/clang-rename
-		vmove usr/bin/clang-tidy
-		vmove usr/bin/diagtool
-		vmove usr/bin/find-all-symbols
-		vmove usr/bin/hmaptool
-		vmove usr/bin/modularize
-		vmove usr/bin/pp-trace
-		vmove usr/bin/sancov
-		vmove "usr/lib/libclangApplyReplacements*"
-		vmove "usr/lib/libclangQuery*"
-		vmove "usr/lib/libclangTidy*"
-		vmove "usr/share/clang/*tidy*"
-		vmove usr/share/doc/clang-tools
-		vmove usr/share/man/man1/extraclangtools.1
-		vmove usr/share/man/man1/diagtool.1
-	}
-}
-
-clang_package() {
-	lib32disabled=yes
-	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
-	 libclang-${version}_${revision}"
-	short_desc+=" - C language family frontend"
-	homepage="https://clang.llvm.org/"
-	pkg_install() {
-		vmove usr/include/clang
-		vmove usr/include/clang-c
-		vmove "usr/bin/*clang*"
-		vmove usr/bin/c-index-test
-		vmove usr/lib/clang
-		vmove usr/lib/cmake/clang
-		vmove "usr/lib/libclang*.a"
-		vmove "usr/lib/libclang*.so"
-		vmove usr/share/clang
-		vmove usr/share/doc/clang
-		vmove usr/share/man/man1/clang.1
-	}
-}
-
-libclang_package() {
-	short_desc+=" - C frontend runtime library"
-	pkg_install() {
-		vmove "usr/lib/libclang.so.*"
-	}
-}
-
-libclang-cpp_package() {
-	short_desc+=" - C frontend runtime library (C++ interface)"
-	pkg_install() {
-		vmove "usr/lib/libclang-cpp.so.*"
-	}
-}
-
-lld_package() {
-	lib32disabled=yes
-	short_desc+=" - linker"
-	homepage="https://lld.llvm.org"
-	pkg_install() {
-		vmove usr/bin/lld*
-		vmove usr/bin/wasm-ld
-		vmove usr/bin/ld.lld*
-		vmove usr/bin/ld64.lld*
-		vmove usr/share/doc/lld
-	}
-}
-
-lld-devel_package() {
-	lib32disabled=yes
-	short_desc+=" - linker - development files"
-	homepage="https://lld.llvm.org"
-	depends="lld>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/include/lld
-		vmove usr/lib/cmake/lld
-		vmove "usr/lib/liblld*a"
-	}
-}
-
-lldb_package() {
-	lib32disabled=yes
-	depends+=" python3-six"
-	short_desc+=" - LLDB debugger"
-	homepage="https://lldb.llvm.org/"
-	pkg_install() {
-		vmove usr/bin/*lldb*
-		vmove usr/lib/liblldb*so.*
-		vmove /usr/lib/python*
-	}
-}
-
-lldb-devel_package() {
-	lib32disabled=yes
-	depends="lldb>=${version}_${revision}"
-	short_desc+=" - LLDB debugger - development files"
-	pkg_install() {
-		vmove usr/include/lldb
-		vmove "usr/lib/liblldb*.so"
-	}
-}
-
-llvm-libunwind_package() {
-	short_desc+=" - libunwind"
-	pkg_install() {
-		vmove "usr/lib/libunwind.so.*"
-	}
-}
-
-llvm-libunwind-devel_package() {
-	short_desc+=" - libunwind - development files"
-	depends="llvm-libunwind>=${version}_${revision}"
-	conflicts="libunwind-devel>=0"
-	pkg_install() {
-		vmove usr/lib/libunwind.so
-		vmove usr/lib/libunwind.a
-		vmove "usr/include/*unwind*"
-		vmove usr/include/mach-o
-		vmove usr/share/doc/libunwind
-	}
-}
-
-libcxxabi_package() {
-	short_desc+=" - low level support for libc++"
-	pkg_install() {
-		vmove "usr/lib/libc++abi.so.*"
-	}
-}
-
-libcxxabi-devel_package() {
-	short_desc+=" - low level support for libc++ - development files"
-	depends="libcxxabi>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/lib/libc++abi.so
-		vmove usr/lib/libc++abi.a
-		vmove "usr/include/*cxxabi*"
-	}
-}
-
-libcxx_package() {
-	short_desc+=" - C++ standard library"
-	pkg_install() {
-		vmove "usr/lib/libc++.so.*"
-	}
-}
-
-libcxx-devel_package() {
-	short_desc+=" - C++ standard library - development files"
-	depends="libcxx>=${version}_${revision}"
-	pkg_install() {
-		vmove usr/lib/libc++.so
-		vmove usr/lib/libc++.a
-		vmove usr/lib/libc++experimental.a
-		vmove usr/include/c++
-		vmove usr/share/doc/libcxx
-	}
-}
-
-libomp_package() {
-	short_desc+=" - Clang OpenMP support library"
-	pkg_install() {
-		vmove usr/lib/libomp.so
-		vmove "usr/lib/libomptarget.rtl.*.so"
-		vmove usr/lib/libarcher.so
-		vmove "usr/lib/libomp*.so.*"
-	}
-}
-
-libomp-devel_package() {
-	short_desc+=" - Clang OpenMP support library - development files"
-	depends="libomp>=${version}_${revision}"
-	pkg_install() {
-		vmove "usr/lib/libomp*.so"
-		vmove "usr/lib/libarcher*"
-		vmove "usr/include/omp*.h"
-		vmove "usr/lib/clang/${version}/include/omp*.h"
-		vmove usr/share/man/man1/llvmopenmp.1
-		vmove usr/share/doc/openmp
-	}
 }
 
 libllvm12_package() {

From e99c9cefdcd892c68de8b38ad2c6c236defaf362 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 14:00:28 +0200
Subject: [PATCH 04/23] New packages: clang12, libclang12, libclang12-cpp,
 lld12, lld12-devel.

---
 common/shlibs                                 |   2 +
 srcpkgs/clang12                               |   1 +
 srcpkgs/libclang12                            |   1 +
 srcpkgs/libclang12-cpp                        |   1 +
 srcpkgs/lld12                                 |   1 +
 srcpkgs/lld12-devel                           |   1 +
 ...clang-001-fix-unwind-chain-inclusion.patch |  44 +++++++
 .../patches/clang-002-add-musl-triples.patch  | 110 ++++++++++++++++++
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 +++
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ++++++++
 srcpkgs/llvm12/template                       |  71 +++++++++++
 11 files changed, 293 insertions(+)
 create mode 120000 srcpkgs/clang12
 create mode 120000 srcpkgs/libclang12
 create mode 120000 srcpkgs/libclang12-cpp
 create mode 120000 srcpkgs/lld12
 create mode 120000 srcpkgs/lld12-devel
 create mode 100644 srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
 create mode 100644 srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch

diff --git a/common/shlibs b/common/shlibs
index 9180c68d8419..3333740b2881 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -973,6 +973,8 @@ libuchardet.so.0 uchardet-0.0.6_1
 libgtksourceviewmm-3.0.so.0 gtksourceviewmm-3.2.0_1
 libyajl.so.2 yajl-2.0.1_1
 libconfuse.so.2 confuse-3.2.1_1
+libclang.so.12 libclang12-12.0.0_1
+libclang-cpp.so.12 libclang12-cpp-12.0.0_1
 liblldb.so.14 lldb-14.0.3_1
 libclang.so.13 libclang-14.0.3_1
 libclang-cpp.so.14 libclang-cpp-14.0.3_1
diff --git a/srcpkgs/clang12 b/srcpkgs/clang12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/clang12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/libclang12 b/srcpkgs/libclang12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/libclang12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/libclang12-cpp b/srcpkgs/libclang12-cpp
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/libclang12-cpp
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/lld12 b/srcpkgs/lld12
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/lld12
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/lld12-devel b/srcpkgs/lld12-devel
new file mode 120000
index 000000000000..cd60fd7a981b
--- /dev/null
+++ b/srcpkgs/lld12-devel
@@ -0,0 +1 @@
+llvm12
\ No newline at end of file
diff --git a/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
new file mode 100644
index 000000000000..e4eaa7783e7a
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-001-fix-unwind-chain-inclusion.patch
@@ -0,0 +1,44 @@
+From 352974169f0d2b5da3d5321f588f5e3b5941330e Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe@gmail.com>
+Date: Tue, 8 Sep 2015 22:14:57 +0200
+Subject: [PATCH 2/7] fix unwind chain inclusion
+
+---
+ lib/Headers/unwind.h | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/lib/Headers/unwind.h b/lib/Headers/unwind.h
+index 303d792..44e10cc 100644
+--- a/clang/lib/Headers/unwind.h
++++ b/clang/lib/Headers/unwind.h
+@@ -9,9 +9,6 @@
+ 
+ /* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/
+ 
+-#ifndef __CLANG_UNWIND_H
+-#define __CLANG_UNWIND_H
+-
+ #if defined(__APPLE__) && __has_include_next(<unwind.h>)
+ /* Darwin (from 11.x on) provide an unwind.h. If that's available,
+  * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE,
+@@ -39,6 +36,9 @@
+ # endif
+ #else
+ 
++#ifndef __CLANG_UNWIND_H
++#define __CLANG_UNWIND_H
++
+ #include <stdint.h>
+ 
+ #ifdef __cplusplus
+@@ -322,6 +322,7 @@ _Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *);
+ }
+ #endif
+ 
++#endif /* __CLANG_UNWIND_H */
++
+ #endif
+ 
+-#endif /* __CLANG_UNWIND_H */
+-- 
+2.5.1
diff --git a/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
new file mode 100644
index 000000000000..25688d40dbc2
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-002-add-musl-triples.patch
@@ -0,0 +1,110 @@
+--- a/clang/lib/Driver/ToolChains/Gnu.cpp
++++ b/clang/lib/Driver/ToolChains/Gnu.cpp
+@@ -2086,7 +2086,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+   static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
+                                              "armv7hl-redhat-linux-gnueabi",
+                                              "armv6hl-suse-linux-gnueabi",
+-                                             "armv7hl-suse-linux-gnueabi"};
++                                             "armv7hl-suse-linux-gnueabi",
++                                             "armv7l-linux-gnueabihf"};
+   static const char *const ARMebLibDirs[] = {"/lib"};
+   static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
+                                              "armeb-linux-androideabi"};
+@@ -2153,8 +2154,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+       "powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
+   static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
+   static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
+-                                             "powerpcle-unknown-linux-gnu",
+-                                             "powerpcle-linux-musl"};
++                                             "powerpcle-unknown-linux-gnu"};
+ 
+   static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
+   static const char *const PPC64Triples[] = {
+@@ -2235,6 +2235,87 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+     return;
+   }
+ 
++  if (TargetTriple.isMusl()) {
++    static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"};
++    static const char *const ARMHFMuslTriples[] = {
++        "arm-linux-musleabihf", "armv7l-linux-musleabihf"
++    };
++    static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"};
++    static const char *const X86_64MuslTriples[] = {"x86_64-linux-musl"};
++    static const char *const X86MuslTriples[] = {"i686-linux-musl"};
++    static const char *const MIPSMuslTriples[] = {
++        "mips-linux-musl", "mipsel-linux-musl",
++        "mipsel-linux-muslhf", "mips-linux-muslhf"
++    };
++    static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"};
++    static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"};
++    static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"};
++    static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"};
++
++    switch (TargetTriple.getArch()) {
++    case llvm::Triple::aarch64:
++      LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
++      BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples));
++      break;
++    case llvm::Triple::arm:
++      LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs));
++      if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) {
++        TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples));
++      } else {
++        TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples));
++      }
++      break;
++    case llvm::Triple::x86_64:
++      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      break;
++    case llvm::Triple::x86:
++      LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
++      TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples));
++      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
++      BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples));
++      break;
++    case llvm::Triple::mips:
++      LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs));
++      TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples));
++      break;
++    case llvm::Triple::ppc:
++      LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      break;
++    case llvm::Triple::ppcle:
++      LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      break;
++    case llvm::Triple::ppc64:
++      LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
++      TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples));
++      BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs));
++      BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples));
++      break;
++    case llvm::Triple::ppc64le:
++      LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
++      TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples));
++      BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
++      BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples));
++      break;
++    default:
++      break;
++    }
++    TripleAliases.push_back(TargetTriple.str());
++    if (TargetTriple.str() != BiarchTriple.str())
++      BiarchTripleAliases.push_back(BiarchTriple.str());
++    return;
++  }
++
+   // Android targets should not use GNU/Linux tools or libraries.
+   if (TargetTriple.isAndroid()) {
+     static const char *const AArch64AndroidTriples[] = {
diff --git a/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
new file mode 100644
index 000000000000..4ad6412d1e6c
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-003-ppc64-dynamic-linker-path.patch
@@ -0,0 +1,13 @@
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -504,10 +504,6 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+     Loader = "ld.so.1";
+     break;
+   case llvm::Triple::ppc64:
+-    LibDir = "lib64";
+-    Loader =
+-        (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
+-    break;
+   case llvm::Triple::ppc64le:
+     LibDir = "lib64";
+     Loader =
diff --git a/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
new file mode 100644
index 000000000000..21fc8003c5f1
--- /dev/null
+++ b/srcpkgs/llvm12/patches/clang-004-ppc64-musl-elfv2.patch
@@ -0,0 +1,48 @@
+--- a/clang/lib/Basic/Targets/PPC.h
++++ b/clang/lib/Basic/Targets/PPC.h
+@@ -415,11 +415,10 @@ public:
+       LongDoubleFormat = &llvm::APFloat::IEEEdouble();
+     } else if ((Triple.getArch() == llvm::Triple::ppc64le)) {
+       DataLayout = "e-m:e-i64:64-n32:64";
+-      ABI = "elfv2";
+     } else {
+       DataLayout = "E-m:e-i64:64-n32:64";
+-      ABI = "elfv1";
+     }
++    ABI = "elfv2";
+ 
+     if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() || Triple.isMusl()) {
+       LongDoubleWidth = LongDoubleAlign = 64;
+--- a/clang/lib/CodeGen/TargetInfo.cpp
++++ b/clang/lib/CodeGen/TargetInfo.cpp
+@@ -10927,9 +10927,9 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
+       return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
+ 
+     if (Triple.isOSBinFormatELF()) {
+-      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
+-      if (getTarget().getABI() == "elfv2")
+-        Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
++      if (getTarget().getABI() == "elfv1")
++        Kind = PPC64_SVR4_ABIInfo::ELFv1;
+       bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
+ 
+       return SetCGInfo(
+--- a/clang/lib/Driver/ToolChains/Clang.cpp
++++ b/clang/lib/Driver/ToolChains/Clang.cpp
+@@ -1920,14 +1920,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
+   const llvm::Triple &T = getToolChain().getTriple();
+   if (T.isOSBinFormatELF()) {
+     switch (getToolChain().getArch()) {
+-    case llvm::Triple::ppc64: {
+-      if ((T.isOSFreeBSD() && T.getOSMajorVersion() >= 13) ||
+-          T.isOSOpenBSD() || T.isMusl())
+-        ABIName = "elfv2";
+-      else
+-        ABIName = "elfv1";
+-      break;
+-    }
++    case llvm::Triple::ppc64:
+     case llvm::Triple::ppc64le:
+       ABIName = "elfv2";
+       break;
diff --git a/srcpkgs/llvm12/template b/srcpkgs/llvm12/template
index 7b361bbbf5bc..274b57183654 100644
--- a/srcpkgs/llvm12/template
+++ b/srcpkgs/llvm12/template
@@ -43,6 +43,12 @@ case "$XBPS_TARGET_MACHINE" in
 	ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
 esac
 
+_enabled_projects="clang;lld"
+
+subpackages+=" clang12 libclang12 libclang12-cpp libllvm12 lld12 lld12-devel"
+
+configure_args+=" -DLLVM_ENABLE_PROJECTS=${_enabled_projects}"
+
 post_patch() {
 	# update config.guess for better platform detection
 	cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
@@ -73,8 +79,10 @@ pre_configure() {
 			cmake ../.. -DCMAKE_BUILD_TYPE=Release \
 			-DLLVM_ENABLE_PROJECTS=${_enabled_projects}
 		make ${makejobs} -C utils/TableGen
+		make ${makejobs} -C tools/clang/utils/TableGen
 		[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
 		configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
+		configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
 		[ "$_lldb_enable" = "yes" ] && configure_args+=" -DLLDB_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/lldb-tblgen"
 		cd ../..
 	fi
@@ -117,6 +125,69 @@ do_install() {
 	fi
 }
 
+clang12_package() {
+	conflicts="clang"
+	lib32disabled=yes
+	depends="libstdc++-devel libgcc-devel  binutils ${XBPS_TARGET_LIBC}-devel
+	 libclang12-${version}_${revision}"
+	short_desc+=" - C language family frontend"
+	homepage="https://clang.llvm.org/"
+	pkg_install() {
+		vmove usr/include/clang
+		vmove usr/include/clang-c
+		vmove "usr/bin/*clang*"
+		vmove usr/bin/c-index-test
+		vmove usr/lib/clang
+		vmove usr/lib/cmake/clang
+		vmove "usr/lib/libclang*.a"
+		vmove "usr/lib/libclang*.so"
+		vmove usr/share/clang
+		vmove usr/share/doc/clang
+		vmove usr/share/man/man1/clang.1
+	}
+}
+
+libclang12_package() {
+	short_desc+=" - C frontend runtime library"
+	pkg_install() {
+		vmove "usr/lib/libclang.so.*"
+	}
+}
+
+libclang12-cpp_package() {
+	short_desc+=" - C frontend runtime library (C++ interface)"
+	pkg_install() {
+		vmove "usr/lib/libclang-cpp.so.*"
+	}
+}
+
+lld12_package() {
+	conflicts="lld"
+	lib32disabled=yes
+	short_desc+=" - linker"
+	homepage="https://lld.llvm.org"
+	pkg_install() {
+		vmove usr/bin/lld*
+		vmove usr/bin/wasm-ld
+		vmove usr/bin/ld.lld*
+		vmove usr/bin/ld64.lld*
+		vmove usr/share/doc/lld
+	}
+}
+
+lld12-devel_package() {
+	conflicts="lld-devel"
+	lib32disabled=yes
+	short_desc+=" - linker - development files"
+	homepage="https://lld.llvm.org"
+	depends="lld12>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include/lld
+		vmove usr/lib/cmake/lld
+		vmove "usr/lib/liblld*a"
+	}
+}
+
 libllvm12_package() {
 	short_desc+=" - runtime library"
 	pkg_install() {

From 473225c582d305539cb1ea8c74808d0bb654d650 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 05/23] chromium: update for llvm14

---
 srcpkgs/chromium/template | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/chromium/template b/srcpkgs/chromium/template
index fe400b74c129..60b6f5cd3828 100644
--- a/srcpkgs/chromium/template
+++ b/srcpkgs/chromium/template
@@ -2,7 +2,7 @@
 pkgname=chromium
 # See https://chromiumdash.appspot.com/releases?platform=Linux for the latest version
 version=102.0.5005.61
-revision=1
+revision=2
 archs="i686* x86_64* aarch64* armv7l* ppc64le*"
 short_desc="Google's attempt at creating a safer, faster, and more stable browser"
 maintainer="Duncaen <duncaen@voidlinux.org>"
@@ -20,7 +20,7 @@ desc_option_debug="Build with debug symbols"
 desc_option_js_optimize="Optimize the JS used for Chromium's UI"
 desc_option_pipewire="Enable support for screen sharing for WebRTC via PipeWire"
 
-hostmakedepends="$(vopt_if clang "clang lld llvm12") python python3 pkgconf perl gperf bison ninja nodejs hwids
+hostmakedepends="$(vopt_if clang "clang lld llvm14") python python3 pkgconf perl gperf bison ninja nodejs hwids
  libatomic-devel libevent-devel libglib-devel $(vopt_if js_optimize openjdk) wayland-devel libepoxy-devel git"
 makedepends="libpng-devel gtk+-devel gtk+3-devel nss-devel pciutils-devel
  libXi-devel libgcrypt-devel libgnome-keyring-devel cups-devel elfutils-devel
@@ -267,7 +267,7 @@ do_configure() {
 
 		'is_official_build=true'
 
-		# segfaults with llvm-12.0.1
+		# disabled due to constrained resources
 		'is_cfi=false'
 		'use_thin_lto=false'
 		'use_cfi_icall=false'

From 7c3df24d5ea4dbabc0c27c4db53f61d5ee1e9729 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 06/23] ghdl: update for llvm14

---
 srcpkgs/ghdl/patches/{llvm12.patch => llvm.patch} | 2 ++
 srcpkgs/ghdl/template                             | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)
 rename srcpkgs/ghdl/patches/{llvm12.patch => llvm.patch} (82%)

diff --git a/srcpkgs/ghdl/patches/llvm12.patch b/srcpkgs/ghdl/patches/llvm.patch
similarity index 82%
rename from srcpkgs/ghdl/patches/llvm12.patch
rename to srcpkgs/ghdl/patches/llvm.patch
index 8d2f76bfda06..9201816ae053 100644
--- a/srcpkgs/ghdl/patches/llvm12.patch
+++ b/srcpkgs/ghdl/patches/llvm.patch
@@ -7,6 +7,8 @@ index c1c1a6d..dad7c38 100755
         check_version 10.0 $llvm_version ||
         check_version 11.0 $llvm_version ||
 +       check_version 12.0 $llvm_version ||
++       check_version 13.0 $llvm_version ||
++       check_version 14.0 $llvm_version ||
         false; then
      echo "Debugging is enabled with llvm $llvm_version"
    else
diff --git a/srcpkgs/ghdl/template b/srcpkgs/ghdl/template
index e756d8c3cd87..9ca1169b22bd 100644
--- a/srcpkgs/ghdl/template
+++ b/srcpkgs/ghdl/template
@@ -7,7 +7,7 @@
 pkgname=ghdl
 reverts="20181129_1"
 version=1.0.0
-revision=1
+revision=2
 build_style=configure
 configure_args="--prefix=/usr --srcdir=.. --incdir=lib/ghdl/include"
 makedepends="zlib-devel"

From 3e2974e04139f4d3971f02b2887f143251185904 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Wed, 4 May 2022 14:07:14 +0200
Subject: [PATCH 07/23] zig: update for llvm14

---
 srcpkgs/zig/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/zig/template b/srcpkgs/zig/template
index 728c5a64e9df..c175de62c5f7 100644
--- a/srcpkgs/zig/template
+++ b/srcpkgs/zig/template
@@ -5,7 +5,7 @@ revision=2
 archs="x86_64* aarch64*"
 build_style=cmake
 make_cmd=make
-makedepends="clang llvm12 lld-devel"
+makedepends="clang12 llvm12 lld12-devel"
 short_desc="Programming language designed for robustness, optimality, and clarity"
 maintainer="Isaac Freund <mail@isaacfreund.com>"
 license="MIT"

From 675a843ff6742c050c9b4578d6b17421012f517b Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 08/23] qt5: rebuild for llvm14

---
 srcpkgs/qt5/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index ee788fad2019..25f15583a42d 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -3,7 +3,7 @@ pkgname=qt5
 version=5.15.3+20220222
 # commit fcca82ca40a5d8a02a4ddd90846d070f2c58cfad
 # base repo: https://invent.kde.org/qt/qt/qt5
-revision=3
+revision=4
 build_style=meta
 hostmakedepends="cmake clang flex perl glib-devel pkg-config
  python re2c ruby which"

From 60574ff9bf976ae071d6c28acf2c47e9615e5ed9 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:38 +0200
Subject: [PATCH 09/23] shiboken2: rebuild for llvm14

---
 srcpkgs/shiboken2/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/shiboken2/template b/srcpkgs/shiboken2/template
index b56613229c13..ab9d2c4cb8f9 100644
--- a/srcpkgs/shiboken2/template
+++ b/srcpkgs/shiboken2/template
@@ -1,7 +1,7 @@
 # Template file for 'shiboken2'
 pkgname=shiboken2
 version=5.15.2
-revision=4
+revision=5
 _pkgname="pyside-setup-opensource-src-${version}"
 wrksrc="${_pkgname/%5.14.2.1/5.14.2}"
 build_wrksrc="sources/shiboken2"

From bac55a3e23097b2a8907f267603cd30e26b2a317 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 10/23] gnome-builder: rebuild for llvm14

---
 srcpkgs/gnome-builder/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/gnome-builder/template b/srcpkgs/gnome-builder/template
index 93559b21774f..5a5a51893ae8 100644
--- a/srcpkgs/gnome-builder/template
+++ b/srcpkgs/gnome-builder/template
@@ -1,7 +1,7 @@
 # Template file for 'gnome-builder'
 pkgname=gnome-builder
 version=41.3
-revision=1
+revision=2
 build_style=meson
 build_helper=qemu
 configure_args="-Dhelp=true -Dnetwork_tests=false"

From 30234376f03dfc982dd775a0b7c57aedeef055d3 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 11/23] bcc: rebuild for llvm14

---
 srcpkgs/bcc/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/bcc/template b/srcpkgs/bcc/template
index 54509b63d5a7..2cfa0a2977d0 100644
--- a/srcpkgs/bcc/template
+++ b/srcpkgs/bcc/template
@@ -1,7 +1,7 @@
 # Template file for 'bcc'
 pkgname=bcc
 version=0.24.0
-revision=1
+revision=2
 wrksrc="bcc"
 build_style=cmake
 configure_args="-DREVISION=${version} -DENABLE_LLVM_SHARED=1"

From fabacce0edf7cab8019fc550ee1d3f8303bfaf96 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:39 +0200
Subject: [PATCH 12/23] mesa: rebuild for llvm14

---
 srcpkgs/mesa/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/mesa/template b/srcpkgs/mesa/template
index c90500de7416..8f08262fb135 100644
--- a/srcpkgs/mesa/template
+++ b/srcpkgs/mesa/template
@@ -1,7 +1,7 @@
 # Template file for 'mesa'
 pkgname=mesa
 version=21.3.7
-revision=1
+revision=2
 build_style=meson
 configure_args="-Dglvnd=true -Dshared-glapi=enabled -Dgbm=enabled -Degl=enabled
  -Dosmesa=true -Dgles1=enabled -Dgles2=enabled -Dglx=dri -Ddri3=enabled

From 2c6cd9fde24be4bfafb1ec2b9566d077eaeb1b87 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 13/23] juCi++: rebuild for llvm14

---
 srcpkgs/juCi++/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/juCi++/template b/srcpkgs/juCi++/template
index 1a7604b44a00..5103324dec20 100644
--- a/srcpkgs/juCi++/template
+++ b/srcpkgs/juCi++/template
@@ -1,7 +1,7 @@
 # Template file for 'juCi++'
 pkgname=juCi++
 version=1.6.2
-revision=2
+revision=3
 _libclangmm_commit="b342f4dd6de4fe509a692a4b4fcfc7e24aae9590"
 _tiny_commit="c9c8bf810ddad8cd17882b9a9ee628a690e779f5"
 wrksrc="jucipp-v${version}"

From 156d8b357f452d4bd45a81099a9fc3a4ae28988d Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 14/23] codelite: rebuild for llvm14

---
 srcpkgs/codelite/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/codelite/template b/srcpkgs/codelite/template
index 3a993a2c0cfb..24e2c879dd45 100644
--- a/srcpkgs/codelite/template
+++ b/srcpkgs/codelite/template
@@ -1,7 +1,7 @@
 # Template file for 'codelite'
 pkgname=codelite
 version=15.0.6
-revision=1
+revision=2
 build_style=cmake
 build_helper=cmake-wxWidgets-gtk3
 configure_args="-DWITH_PCH=0 -DWITH_WX_CONFIG=wx-config-gtk3

From c32cc22c3087d2692f846e0d295d6ac92039221a Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 15/23] ccls: rebuild for llvm14

---
 srcpkgs/ccls/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/ccls/template b/srcpkgs/ccls/template
index fbb7c6847bc1..40aba3b55bfe 100644
--- a/srcpkgs/ccls/template
+++ b/srcpkgs/ccls/template
@@ -1,7 +1,7 @@
 # Template file for 'ccls'
 pkgname=ccls
 version=0.20210330
-revision=2
+revision=3
 build_style=cmake
 hostmakedepends="clang-tools-extra"
 makedepends="llvm ncurses-devel rapidjson zlib-devel clang-tools-extra"

From 7535498d5a30b1da21077676d8faa0c06346f7f1 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 16/23] clazy: rebuild for llvm14

---
 srcpkgs/clazy/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/clazy/template b/srcpkgs/clazy/template
index 11f3bab55aef..f81de08ab836 100644
--- a/srcpkgs/clazy/template
+++ b/srcpkgs/clazy/template
@@ -1,7 +1,7 @@
 # Template file for 'clazy'
 pkgname=clazy
 version=1.11
-revision=1
+revision=2
 build_style=cmake
 build_helper=qemu
 hostmakedepends="llvm"

From 08ff3e32d4d2d2903d335d8947a77d710633421e Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 17/23] bpftrace: rebuild for llvm14

---
 srcpkgs/bpftrace/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/bpftrace/template b/srcpkgs/bpftrace/template
index 190cebb8e3bc..a13224b82b08 100644
--- a/srcpkgs/bpftrace/template
+++ b/srcpkgs/bpftrace/template
@@ -1,7 +1,7 @@
 # Template file for 'bpftrace'
 pkgname=bpftrace
 version=0.15.0
-revision=1
+revision=2
 archs="x86_64* aarch64* ppc64*"
 build_style=cmake
 configure_args="-DBUILD_TESTING=OFF"  # needs root to run

From 334f0ab41fe7324c28fe6fa3f7a8ab4c0b38c891 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:41 +0200
Subject: [PATCH 18/23] rtags: rebuild for llvm14

---
 srcpkgs/rtags/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/rtags/template b/srcpkgs/rtags/template
index b496a1b0e721..9b161e690d76 100644
--- a/srcpkgs/rtags/template
+++ b/srcpkgs/rtags/template
@@ -1,7 +1,7 @@
 # Template file for 'rtags'
 pkgname=rtags
 version=2.38
-revision=5
+revision=6
 build_style=cmake
 # Don't run tests in do_install, please.
 configure_args="-DSKIP_CTEST=TRUE"

From 4c168af2238df3f3e1d2b856dd4cfbd0d77024c4 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:07:19 +0200
Subject: [PATCH 19/23] beignet: remove package

---
 srcpkgs/beignet/patches/cl_uint.patch         |  22 -
 ...419a0008e38ef2d9d255d9e9c74e9fba084b.patch | 134 ---
 srcpkgs/beignet/patches/llvm06.patch          |  33 -
 srcpkgs/beignet/patches/llvm08.patch          |  56 --
 srcpkgs/beignet/patches/llvm09.patch          | 111 ---
 srcpkgs/beignet/patches/llvm10.patch          | 347 -------
 srcpkgs/beignet/patches/llvm11.patch          | 937 ------------------
 srcpkgs/beignet/patches/llvm12.patch          | 115 ---
 srcpkgs/beignet/patches/musl.patch            |  11 -
 srcpkgs/beignet/template                      |  22 -
 srcpkgs/beignet/update                        |   1 -
 srcpkgs/removed-packages/template             |   3 +-
 12 files changed, 2 insertions(+), 1790 deletions(-)
 delete mode 100644 srcpkgs/beignet/patches/cl_uint.patch
 delete mode 100644 srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm06.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm08.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm09.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm10.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm11.patch
 delete mode 100644 srcpkgs/beignet/patches/llvm12.patch
 delete mode 100644 srcpkgs/beignet/patches/musl.patch
 delete mode 100644 srcpkgs/beignet/template
 delete mode 100644 srcpkgs/beignet/update

diff --git a/srcpkgs/beignet/patches/cl_uint.patch b/srcpkgs/beignet/patches/cl_uint.patch
deleted file mode 100644
index 86ba00f04e95..000000000000
--- a/srcpkgs/beignet/patches/cl_uint.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/src/cl_api_kernel.c	2017-09-22 10:05:22.000000000 +0200
-+++ b/src/cl_api_kernel.c	2020-03-24 18:27:40.186485887 +0100
-@@ -151,7 +151,7 @@
-         fixed_local_sz[0] = 16;
-         fixed_local_sz[1] = 1;
-       } else {
--        uint j, maxDimSize = 64 /* from 64? */, maxGroupSize = 256; //MAX_WORK_GROUP_SIZE may too large
-+        cl_uint j, maxDimSize = 64 /* from 64? */, maxGroupSize = 256; //MAX_WORK_GROUP_SIZE may too large
-         size_t realGroupSize = 1;
-         for (i = 0; i < work_dim; i++) {
-           for (j = maxDimSize; j > 1; j--) {
---- a/src/cl_enqueue.c	2017-09-22 10:05:22.000000000 +0200
-+++ b/src/cl_enqueue.c	2020-03-24 18:30:12.031479833 +0100
-@@ -494,7 +494,7 @@
- cl_int cl_enqueue_svm_free(enqueue_data *data, cl_int status) {
-   int i;
-   void **pointers = data->pointers;
--  uint num_svm_ptrs = data->size;
-+  cl_uint num_svm_ptrs = data->size;
-   cl_int err = CL_SUCCESS;
- 
-   if (status != CL_COMPLETE)
diff --git a/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch b/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
deleted file mode 100644
index 8de9e6e2f093..000000000000
--- a/srcpkgs/beignet/patches/e1b2419a0008e38ef2d9d255d9e9c74e9fba084b.patch
+++ /dev/null
@@ -1,134 +0,0 @@
-From e1b2419a0008e38ef2d9d255d9e9c74e9fba084b Mon Sep 17 00:00:00 2001
-From: "Rebecca N. Palmer" <rebecca_palmer@zoho.com>
-Date: Sat, 21 Jul 2018 20:05:54 +0100
-Subject: Add preliminary LLVM 7 support
-
-This is preliminary because LLVM 7 has not been released yet:
-it was tested with the snapshot from Debian experimental (svn336894).
-
-1.Change linking order, as clangCodeGen now links to clangFrontend
-2.Pass references not pointers to WriteBitcodeToFile and CloneModule
-3.Add the headers that LoopSimplifyID, LCSSAID and
-some create*Pass have moved to
-4.Define our DEBUG whether or not we just undefined LLVM's
-(theirs is now LLVM_DEBUG, but we never actually use it)
-
-Signed-off-by: Rebecca N. Palmer <rebecca_palmer@zoho.com>
-Reviewed-by: Yang Rong <rong.r.yang@intel.com>
----
- CMake/FindLLVM.cmake                     | 2 +-
- backend/src/backend/gen_program.cpp      | 8 ++++++++
- backend/src/backend/program.cpp          | 4 ++++
- backend/src/llvm/ExpandLargeIntegers.cpp | 2 +-
- backend/src/llvm/llvm_bitcode_link.cpp   | 4 ++++
- backend/src/llvm/llvm_includes.hpp       | 4 ++++
- 6 files changed, 22 insertions(+), 2 deletions(-)
-
-diff --git a/CMake/FindLLVM.cmake b/CMake/FindLLVM.cmake
-index 5457f24..f882589 100644
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -113,10 +113,10 @@ macro(add_one_lib name)
- endmacro()
- 
- #Assume clang lib path same as llvm lib path
-+add_one_lib("clangCodeGen")
- add_one_lib("clangFrontend")
- add_one_lib("clangSerialization")
- add_one_lib("clangDriver")
--add_one_lib("clangCodeGen")
- add_one_lib("clangSema")
- add_one_lib("clangStaticAnalyzerFrontend")
- add_one_lib("clangStaticAnalyzerCheckers")
-diff --git a/backend/src/backend/gen_program.cpp b/backend/src/backend/gen_program.cpp
-index 274c99c..4159234 100644
---- a/backend/src/backend/gen_program.cpp
-+++ b/backend/src/backend/gen_program.cpp
-@@ -454,7 +454,11 @@ namespace gbe {
- #ifdef GBE_COMPILER_AVAILABLE
-       std::string str;
-       llvm::raw_string_ostream OS(str);
-+#if LLVM_VERSION_MAJOR >= 7
-+      llvm::WriteBitcodeToFile(*((llvm::Module*)prog->module), OS);
-+#else
-       llvm::WriteBitcodeToFile((llvm::Module*)prog->module, OS);
-+#endif
-       std::string& bin_str = OS.str();
-       int llsz = bin_str.size();
-       *binary = (char *)malloc(sizeof(char) * (llsz+1) );
-@@ -545,7 +549,11 @@ namespace gbe {
-                                     &modRef);
-         src = llvm::unwrap(modRef);
-       }
-+#if LLVM_VERSION_MAJOR >= 7
-+      llvm::Module* clone = llvm::CloneModule(*src).release();
-+#else
-       llvm::Module* clone = llvm::CloneModule(src).release();
-+#endif
-       if (LLVMLinkModules2(wrap(dst), wrap(clone))) {
- #elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-       if (LLVMLinkModules(wrap(dst), wrap(src), LLVMLinkerPreserveSource_Removed, &errMsg)) {
-diff --git a/backend/src/backend/program.cpp b/backend/src/backend/program.cpp
-index c37c595..b36f7b4 100644
---- a/backend/src/backend/program.cpp
-+++ b/backend/src/backend/program.cpp
-@@ -794,7 +794,11 @@ namespace gbe {
-       llvm::raw_fd_ostream ostream (dumpSPIRBinaryName.c_str(),
-                                     err, llvm::sys::fs::F_None);
-       if (!err)
-+#if LLVM_VERSION_MAJOR<7
-         llvm::WriteBitcodeToFile(*out_module, ostream);
-+#else
-+        llvm::WriteBitcodeToFile(**out_module, ostream);
-+#endif
-     }
- #endif
-     return true;
-diff --git a/backend/src/llvm/ExpandLargeIntegers.cpp b/backend/src/llvm/ExpandLargeIntegers.cpp
-index 8515dc1..4aec44e 100644
---- a/backend/src/llvm/ExpandLargeIntegers.cpp
-+++ b/backend/src/llvm/ExpandLargeIntegers.cpp
-@@ -99,8 +99,8 @@ using namespace llvm;
- 
- #ifdef DEBUG
-   #undef DEBUG
--  #define DEBUG(...)
- #endif
-+#define DEBUG(...)
- // Break instructions up into no larger than 64-bit chunks.
- static const unsigned kChunkBits = 64;
- static const unsigned kChunkBytes = kChunkBits / CHAR_BIT;
-diff --git a/backend/src/llvm/llvm_bitcode_link.cpp b/backend/src/llvm/llvm_bitcode_link.cpp
-index ef56e4c..4c3e20e 100644
---- a/backend/src/llvm/llvm_bitcode_link.cpp
-+++ b/backend/src/llvm/llvm_bitcode_link.cpp
-@@ -340,7 +340,11 @@ namespace gbe
-     /* We use beignet's bitcode as dst because it will have a lot of
-        lazy functions which will not be loaded. */
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 39
-+#if LLVM_VERSION_MAJOR >= 7
-+    llvm::Module * linked_module = llvm::CloneModule(*(llvm::Module*)mod).release();
-+#else
-     llvm::Module * linked_module = llvm::CloneModule((llvm::Module*)mod).release();
-+#endif
-     if(LLVMLinkModules2(wrap(clonedLib), wrap(linked_module))) {
- #else
-     char* errorMsg;
-diff --git a/backend/src/llvm/llvm_includes.hpp b/backend/src/llvm/llvm_includes.hpp
-index 184553a..ffccf02 100644
---- a/backend/src/llvm/llvm_includes.hpp
-+++ b/backend/src/llvm/llvm_includes.hpp
-@@ -89,6 +89,10 @@
- #include "llvm/CodeGen/IntrinsicLowering.h"
- 
- #include "llvm/Transforms/Scalar.h"
-+#if LLVM_VERSION_MAJOR >= 7
-+#include "llvm/Transforms/Utils.h"
-+#include "llvm/Transforms/InstCombine/InstCombine.h"
-+#endif
- #include "llvm/MC/MCAsmInfo.h"
- #include "llvm/MC/MCContext.h"
- #include "llvm/MC/MCInstrInfo.h"
--- 
-cgit v1.1
-
diff --git a/srcpkgs/beignet/patches/llvm06.patch b/srcpkgs/beignet/patches/llvm06.patch
deleted file mode 100644
index 3389e66c82df..000000000000
--- a/srcpkgs/beignet/patches/llvm06.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-Source: Arch Linux
-Upstream: unknown
-Reason: fixes llvm6 compilation
-
---- a/backend/src/llvm/llvm_to_gen.cpp	2017-10-24 09:04:48.000000000 +0300
-+++ b/backend/src/llvm/llvm_to_gen.cpp	2018-03-16 16:08:54.669963824 +0200
-@@ -322,7 +322,11 @@ namespace gbe
-     DataLayout DL(&mod);
-     
-     gbeDiagnosticContext dc;
-+#if LLVM_VERSION_MAJOR >= 6
-+    mod.getContext().setDiagnosticHandlerCallBack(&gbeDiagnosticHandler,&dc);
-+#else
-     mod.getContext().setDiagnosticHandler(&gbeDiagnosticHandler,&dc);
-+#endif
- 
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-     mod.setDataLayout(DL);
---- a/backend/src/llvm/llvm_unroll.cpp	2017-10-24 09:04:48.000000000 +0300
-+++ b/backend/src/llvm/llvm_unroll.cpp	2018-03-16 16:09:47.736403557 +0200
-@@ -205,7 +205,9 @@ namespace gbe {
-           if (parentTripCount != 0 && currTripCount * parentTripCount > 32) {
-             //Don't change the unrollID if doesn't force unroll.
-             //setUnrollID(parentL, false);
--#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-+#if LLVM_VERSION_MAJOR >= 6
-+            loopInfo.erase(parentL);
-+#elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-             loopInfo.markAsRemoved(parentL);
- #else
-             LPM.deleteLoopFromQueue(parentL);
-Only in Beignet-1.3.2-Source: build
-
diff --git a/srcpkgs/beignet/patches/llvm08.patch b/srcpkgs/beignet/patches/llvm08.patch
deleted file mode 100644
index a0c5e7a7c4f7..000000000000
--- a/srcpkgs/beignet/patches/llvm08.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 75c152599a7c1739e6dadcdb9b377acf7e44d9cf Mon Sep 17 00:00:00 2001
-From: Jan Beich <jbeich@FreeBSD.org>
-Date: Wed, 30 Jan 2019 12:42:34 +0000
-Subject: [PATCH] lang/beignet: unbreak with llvm80
-
-Regressed by https://github.com/llvm/llvm-project/commit/721d95713a9e
-
-unable to load /usr/local/lib/beignet//libgbeinterp.so which is part of the driver, please check!
-ld-elf.so.1: /usr/local/lib/beignet//libgbeinterp.so: Undefined symbol "_ZN4llvm24DisableABIBreakingChecksE"
-
-Regressed by https://github.com/llvm/llvm-project/commit/4a2d58e16acc
-
-backend/src/llvm/llvm_gen_backend.cpp:3076:5: error:
-      unknown type name 'TerminatorInst'
-    TerminatorInst *term = bb->getTerminator();
-    ^
-backend/src/llvm/llvm_gen_backend.cpp:3083:5: error:
-      unknown type name 'TerminatorInst'
-    TerminatorInst *term = bb->getTerminator();
-    ^
-
---- a/backend/src/CMakeLists.txt	2017-09-22 08:05:22 UTC
-+++ b/backend/src/CMakeLists.txt
-@@ -168,6 +168,7 @@ add_dependencies(gbe beignet_bitcode)
- endif (NOT (USE_STANDALONE_GBE_COMPILER STREQUAL "true"))
- 
- add_library(gbeinterp SHARED gbe_bin_interpreter.cpp)
-+target_link_libraries(gbeinterp ${LLVM_MODULE_LIBS})
- 
- if (LLVM_VERSION_NODOT VERSION_EQUAL 34)
-   find_library(TERMINFO NAMES tinfo ncurses)
---- a/backend/src/llvm/llvm_gen_backend.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -3073,14 +3073,22 @@ namespace gbe
- 
- 
-   static unsigned getChildNo(BasicBlock *bb) {
-+#if LLVM_VERSION_MAJOR < 8
-     TerminatorInst *term = bb->getTerminator();
-+#else
-+    Instruction *term = bb->getTerminator();
-+#endif
-     return term->getNumSuccessors();
-   }
- 
-   // return NULL if index out-range of children number
-   static BasicBlock *getChildPossible(BasicBlock *bb, unsigned index) {
- 
-+#if LLVM_VERSION_MAJOR < 8
-     TerminatorInst *term = bb->getTerminator();
-+#else
-+    Instruction *term = bb->getTerminator();
-+#endif
-     unsigned childNo = term->getNumSuccessors();
-     BasicBlock *child = NULL;
-     if(index < childNo) {
diff --git a/srcpkgs/beignet/patches/llvm09.patch b/srcpkgs/beignet/patches/llvm09.patch
deleted file mode 100644
index acaeceabb6dd..000000000000
--- a/srcpkgs/beignet/patches/llvm09.patch
+++ /dev/null
@@ -1,111 +0,0 @@
-Source: FreeBSD + q66
-
-Mostly FreeBSD other than FindLLVM.cmake changes.
-Linking against clang-cpp does not work for us.
-
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -140,6 +140,7 @@ add_one_lib("clangStaticAnalyzerCore")
- add_one_lib("clangAnalysis")
- add_one_lib("clangEdit")
- add_one_lib("clangAST")
-+add_one_lib("clangASTMatchers")
- add_one_lib("clangParse")
- add_one_lib("clangSema")
- add_one_lib("clangLex")
---- a/backend/src/llvm/llvm_intrinsic_lowering.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_intrinsic_lowering.cpp
-@@ -77,7 +77,11 @@ namespace gbe {
-         std::vector<Type *> ParamTys;
-         for (Value** I = ArgBegin; I != ArgEnd; ++I)
-           ParamTys.push_back((*I)->getType());
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+        FunctionCallee FCache = M->getOrInsertFunction(NewFn,
-+#else
-         Constant* FCache = M->getOrInsertFunction(NewFn,
-+#endif
-                                         FunctionType::get(RetTy, ParamTys, false));
- 
-         IRBuilder<> Builder(CI->getParent(), BasicBlock::iterator(CI));
---- a/backend/src/llvm/llvm_sampler_fix.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp
-@@ -82,7 +82,11 @@ namespace gbe {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-           Module *M = I->getParent()->getParent()->getParent();
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+          FunctionCallee samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#endif
- #else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType(), nullptr);
- #endif
-@@ -124,7 +128,11 @@ namespace gbe {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-           Module *M = I->getParent()->getParent()->getParent();
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+          FunctionCallee samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType());
-+#endif
- #else
-           Value* samplerCvt = M->getOrInsertFunction("__gen_ocl_sampler_to_int", i32Ty, I->getOperand(0)->getType(), nullptr);
- #endif
---- a/backend/src/llvm/llvm_profiling.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_profiling.cpp
-@@ -163,10 +163,18 @@ namespace gbe
-       // __gen_ocl_store_timestamp(int nth, int type);
-       Value *Args[2] = {ConstantInt::get(intTy, pointNum++), ConstantInt::get(intTy, profilingType)};
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+      builder->CreateCall(module->getOrInsertFunction(
-+#else
-       builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-+#endif
-               "__gen_ocl_calc_timestamp", Type::getVoidTy(module->getContext()),
-               IntegerType::getInt32Ty(module->getContext()),
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+              IntegerType::getInt32Ty(module->getContext())),
-+#else
-               IntegerType::getInt32Ty(module->getContext()))),
-+#endif
-               ArrayRef<Value*>(Args));
- #else
-       builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-@@ -185,10 +193,18 @@ namespace gbe
-     Value *Args2[2] = {profilingBuf, ConstantInt::get(intTy, profilingType)};
- 
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 50
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+    builder->CreateCall(module->getOrInsertFunction(
-+#else
-     builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
-+#endif
-             "__gen_ocl_store_profiling", Type::getVoidTy(module->getContext()),
-             ptrTy,
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+            IntegerType::getInt32Ty(module->getContext())),
-+#else
-             IntegerType::getInt32Ty(module->getContext()))),
-+#endif
-             ArrayRef<Value*>(Args2));
- #else
-     builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
---- a/backend/src/llvm/llvm_device_enqueue.cpp	2017-10-24 06:04:48 UTC
-+++ b/backend/src/llvm/llvm_device_enqueue.cpp
-@@ -398,8 +398,13 @@ namespace gbe {
-               std::vector<Type *> ParamTys;
-               for (Value** iter = args.begin(); iter != args.end(); ++iter)
-                 ParamTys.push_back((*iter)->getType());
-+#if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 90
-+              CallInst* newCI = builder.CreateCall(mod->getOrInsertFunction(
-+                              "__gen_enqueue_kernel_slm", FunctionType::get(intTy, ParamTys, false)), args);
-+#else
-               CallInst* newCI = builder.CreateCall(cast<llvm::Function>(mod->getOrInsertFunction(
-                               "__gen_enqueue_kernel_slm", FunctionType::get(intTy, ParamTys, false))), args);
-+#endif
-               CI->replaceAllUsesWith(newCI);
-               deadInsnSet.insert(CI);
-             }
diff --git a/srcpkgs/beignet/patches/llvm10.patch b/srcpkgs/beignet/patches/llvm10.patch
deleted file mode 100644
index 8aafe48a240d..000000000000
--- a/srcpkgs/beignet/patches/llvm10.patch
+++ /dev/null
@@ -1,347 +0,0 @@
-diff --git CMake/FindLLVM.cmake CMake/FindLLVM.cmake
-index 0a59e47..6e90923 100644
---- a/CMake/FindLLVM.cmake
-+++ b/CMake/FindLLVM.cmake
-@@ -104,28 +104,16 @@ string(REGEX REPLACE " *\n" "" LLVM_SYSTEM_LIBS ${LLVM_SYSTEM_LIBS_ORIG})
- endif (LLVM_SYSTEM_LIBS_ORIG)
- endif (LLVM_VERSION_NODOT VERSION_GREATER 34)
- 
-+#something harmless because whitespace at start is an error
-+set(CLANG_LIBRARIES "-ldl")
- macro(add_one_lib name)
-   FIND_LIBRARY(CLANG_LIB
-     NAMES ${name}
-     PATHS ${LLVM_LIBRARY_DIR} NO_DEFAULT_PATH)
--  set(CLANG_LIBRARIES ${CLANG_LIBRARIES} ${CLANG_LIB})
-+  set(CLANG_LIBRARIES "${CLANG_LIBRARIES} ${CLANG_LIB}")
-+  message(STATUS "clanglibs name ${name} this ${CLANG_LIB} all ${CLANG_LIBRARIES} ")
- 	unset(CLANG_LIB CACHE)
- endmacro()
- 
- #Assume clang lib path same as llvm lib path
--add_one_lib("clangCodeGen")
--add_one_lib("clangFrontend")
--add_one_lib("clangSerialization")
--add_one_lib("clangDriver")
--add_one_lib("clangSema")
--add_one_lib("clangStaticAnalyzerFrontend")
--add_one_lib("clangStaticAnalyzerCheckers")
--add_one_lib("clangStaticAnalyzerCore")
--add_one_lib("clangAnalysis")
--add_one_lib("clangEdit")
--add_one_lib("clangAST")
--add_one_lib("clangASTMatchers")
--add_one_lib("clangParse")
--add_one_lib("clangSema")
--add_one_lib("clangLex")
--add_one_lib("clangBasic")
-+add_one_lib("clang-cpp")
-diff --git CMakeLists.txt CMakeLists.txt
-index c11acbb..08f427d 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -79,7 +79,7 @@ elseif (COMPILER STREQUAL "CLANG")
- elseif (COMPILER STREQUAL "ICC")
-   set (CMAKE_C_CXX_FLAGS "${CMAKE_C_CXX_FLAGS}  -wd2928 -Wall -fPIC -fstrict-aliasing -fp-model fast -msse4.1 -Wl,-E")
- endif ()
--set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
-+set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof")
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
- set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
- set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
-diff --git backend/src/backend/program.cpp backend/src/backend/program.cpp
-index b36f7b4..e666031 100644
---- a/backend/src/backend/program.cpp
-+++ b/backend/src/backend/program.cpp
-@@ -694,9 +694,9 @@ namespace gbe {
- #endif
-                 );
- 
-+    llvm::cl::ResetAllOptionOccurrences();
-     clang::CompilerInvocation::CreateFromArgs(*CI,
--                                              &args[0],
--                                              &args[0] + args.size(),
-+                                              clang::ArrayRef<const char*>(args),
-                                               Diags);
-     // Create the compiler instance
-     clang::CompilerInstance Clang;
-@@ -1242,8 +1242,7 @@ EXTEND_QUOTE:
-       // Create the compiler invocation
-       std::unique_ptr<clang::CompilerInvocation> CI(new clang::CompilerInvocation);
-       return clang::CompilerInvocation::CreateFromArgs(*CI,
--                                                       &args[0],
--                                                       &args[0] + args.size(),
-+                                                       clang::ArrayRef<const char*>(args),
-                                                        Diags);
-     }
- #endif
-diff --git backend/src/llvm/llvm_gen_backend.cpp backend/src/llvm/llvm_gen_backend.cpp
-index c6fc30d..82441d8 100644
---- a/backend/src/llvm/llvm_gen_backend.cpp
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -575,10 +575,12 @@ namespace gbe
-         has_errors(false),
-         legacyMode(true)
-     {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
-       initializeLoopInfoWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeLoopInfoPass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-       pass = PASS_EMIT_REGISTERS;
-     }
-diff --git backend/src/llvm/llvm_gen_backend.hpp backend/src/llvm/llvm_gen_backend.hpp
-index b4715b1..8e74f7a 100644
---- a/backend/src/llvm/llvm_gen_backend.hpp
-+++ b/backend/src/llvm/llvm_gen_backend.hpp
-@@ -130,10 +130,10 @@ namespace gbe
-   llvm::FunctionPass *createGenPass(ir::Unit &unit);
- 
-   /*! Remove the GEP instructions */
--  llvm::BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit);
-+  llvm::FunctionPass *createRemoveGEPPass(const ir::Unit &unit);
- 
-   /*! Merge load/store if possible */
--  llvm::BasicBlockPass *createLoadStoreOptimizationPass();
-+  llvm::FunctionPass *createLoadStoreOptimizationPass();
- 
-   /*! Scalarize all vector op instructions */
-   llvm::FunctionPass* createScalarizePass();
-@@ -141,7 +141,7 @@ namespace gbe
-   llvm::ModulePass* createBarrierNodupPass(bool);
- 
-   /*! Convert the Intrinsic call to gen function */
--  llvm::BasicBlockPass *createIntrinsicLoweringPass();
-+  llvm::FunctionPass *createIntrinsicLoweringPass();
- 
-   /*! Passer the printf function call. */
-   llvm::FunctionPass* createPrintfParserPass(ir::Unit &unit);
-diff --git backend/src/llvm/llvm_intrinsic_lowering.cpp backend/src/llvm/llvm_intrinsic_lowering.cpp
-index 94f0ce6..b5539e9 100644
---- a/backend/src/llvm/llvm_intrinsic_lowering.cpp
-+++ b/backend/src/llvm/llvm_intrinsic_lowering.cpp
-@@ -29,12 +29,12 @@
- using namespace llvm;
- 
- namespace gbe {
--    class InstrinsicLowering : public BasicBlockPass
-+    class InstrinsicLowering : public FunctionPass
-     {
-     public:
-       static char ID;
-       InstrinsicLowering() :
--        BasicBlockPass(ID) {}
-+        FunctionPass(ID) {}
- 
-       void getAnalysisUsage(AnalysisUsage &AU) const {
- 
-@@ -93,9 +93,9 @@ namespace gbe {
-         CI->eraseFromParent();
-         return NewCI;
-       }
--      virtual bool runOnBasicBlock(BasicBlock &BB)
-+      virtual bool runOnFunction(Function &F)
-       {
--        bool changedBlock = false;
-+        for (BasicBlock &BB : F) {
-         Module *M = BB.getParent()->getParent();
- 
-         DataLayout TD(M);
-@@ -159,13 +159,14 @@ namespace gbe {
-             }
-           }
-         }
--        return changedBlock;
-+        }
-+        return true;
-       }
-     };
- 
-     char InstrinsicLowering::ID = 0;
- 
--    BasicBlockPass *createIntrinsicLoweringPass() {
-+    FunctionPass *createIntrinsicLoweringPass() {
-       return new InstrinsicLowering();
-     }
- } // end namespace
-diff --git backend/src/llvm/llvm_loadstore_optimization.cpp backend/src/llvm/llvm_loadstore_optimization.cpp
-index 5aa38be..e314302 100644
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
-@@ -26,13 +26,13 @@
- 
- using namespace llvm;
- namespace gbe {
--  class GenLoadStoreOptimization : public BasicBlockPass {
-+  class GenLoadStoreOptimization : public FunctionPass {
- 
-   public:
-     static char ID;
-     ScalarEvolution *SE;
-     const DataLayout *TD;
--    GenLoadStoreOptimization() : BasicBlockPass(ID) {}
-+    GenLoadStoreOptimization() : FunctionPass(ID) {}
- 
-     void getAnalysisUsage(AnalysisUsage &AU) const {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-@@ -45,7 +45,9 @@ namespace gbe {
-       AU.setPreservesCFG();
-     }
- 
--    virtual bool runOnBasicBlock(BasicBlock &BB) {
-+    virtual bool runOnFunction(Function &F) {
-+        bool changedAnyBlock = false;
-+        for (BasicBlock &BB : F) {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
-       SE = &getAnalysis<ScalarEvolutionWrapperPass>().getSE();
- #else
-@@ -59,7 +61,9 @@ namespace gbe {
-       #else
-         TD = getAnalysisIfAvailable<DataLayout>();
-       #endif
--      return optimizeLoadStore(BB);
-+           changedAnyBlock = optimizeLoadStore(BB) | changedAnyBlock;
-+        }
-+        return changedAnyBlock;
-     }
-     Type    *getValueType(Value *insn);
-     Value   *getPointerOperand(Value *I);
-@@ -148,7 +152,7 @@ namespace gbe {
-       values.push_back(merged[i]);
-     }
-     LoadInst *ld = cast<LoadInst>(merged[0]);
--    unsigned align = ld->getAlignment();
-+    MaybeAlign align = ld->getAlign();
-     unsigned addrSpace = ld->getPointerAddressSpace();
-     // insert before first load
-     Builder.SetInsertPoint(ld);
-@@ -231,7 +235,7 @@ namespace gbe {
- 
-     unsigned addrSpace = st->getPointerAddressSpace();
- 
--    unsigned align = st->getAlignment();
-+    MaybeAlign align = st->getAlign();
-     // insert before the last store
-     Builder.SetInsertPoint(merged[size-1]);
- 
-@@ -325,7 +329,7 @@ namespace gbe {
-     return changed;
-   }
- 
--  BasicBlockPass *createLoadStoreOptimizationPass() {
-+  FunctionPass *createLoadStoreOptimizationPass() {
-     return new GenLoadStoreOptimization();
-   }
- };
-diff --git backend/src/llvm/llvm_passes.cpp backend/src/llvm/llvm_passes.cpp
-index 10752a3..b8f2282 100644
---- a/backend/src/llvm/llvm_passes.cpp
-+++ b/backend/src/llvm/llvm_passes.cpp
-@@ -37,7 +37,7 @@
- #include "sys/map.hpp"
- 
- using namespace llvm;
--
-+template class cfg::Update<BasicBlock *>;
- namespace gbe
- {
-   bool isKernelFunction(const llvm::Function &F) {
-@@ -219,13 +219,13 @@ namespace gbe
-     return offset;
-   }
- 
--  class GenRemoveGEPPasss : public BasicBlockPass
-+  class GenRemoveGEPPasss : public FunctionPass
-   {
- 
-    public:
-     static char ID;
-     GenRemoveGEPPasss(const ir::Unit &unit) :
--      BasicBlockPass(ID),
-+      FunctionPass(ID),
-       unit(unit) {}
-     const ir::Unit &unit;
-     void getAnalysisUsage(AnalysisUsage &AU) const {
-@@ -242,16 +242,18 @@ namespace gbe
- 
-     bool simplifyGEPInstructions(GetElementPtrInst* GEPInst);
- 
--    virtual bool runOnBasicBlock(BasicBlock &BB)
-+    virtual bool runOnFunction(Function &F)
-     {
--      bool changedBlock = false;
-+      bool changedAnyBlock = false;
-+        for (BasicBlock &BB : F) {
-       iplist<Instruction>::iterator I = BB.getInstList().begin();
-       for (auto nextI = I, E = --BB.getInstList().end(); I != E; I = nextI) {
-         iplist<Instruction>::iterator I = nextI++;
-         if(GetElementPtrInst* gep = dyn_cast<GetElementPtrInst>(&*I))
--          changedBlock = (simplifyGEPInstructions(gep) || changedBlock);
-+          changedAnyBlock = (simplifyGEPInstructions(gep) | changedAnyBlock);
-       }
--      return changedBlock;
-+        }
-+      return changedAnyBlock;
-     }
-   };
- 
-@@ -367,7 +369,7 @@ namespace gbe
-     return true;
-   }
- 
--  BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit) {
-+  FunctionPass *createRemoveGEPPass(const ir::Unit &unit) {
-     return new GenRemoveGEPPasss(unit);
-   }
- } /* namespace gbe */
-diff --git backend/src/llvm/llvm_sampler_fix.cpp backend/src/llvm/llvm_sampler_fix.cpp
-index 2a097c8..863be6d 100644
---- a/backend/src/llvm/llvm_sampler_fix.cpp
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp
-@@ -33,10 +33,12 @@ namespace gbe {
-   class SamplerFix : public FunctionPass {
-   public:
-     SamplerFix() : FunctionPass(ID) {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
-       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-     }
- 
-diff --git backend/src/llvm/llvm_scalarize.cpp backend/src/llvm/llvm_scalarize.cpp
-index e9a2a66..e9d2ee4 100644
---- a/backend/src/llvm/llvm_scalarize.cpp
-+++ b/backend/src/llvm/llvm_scalarize.cpp
-@@ -96,10 +96,12 @@ namespace gbe {
- 
-     Scalarize() : FunctionPass(ID)
-     {
-+#if LLVM_VERSION_MAJOR < 10
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
-       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
- #else
-       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
-+#endif
- #endif
-     }
- 
-diff --git utests/CMakeLists.txt utests/CMakeLists.txt
-index 300d87a..64179c7 100644
---- a/utests/CMakeLists.txt
-+++ b/utests/CMakeLists.txt
-@@ -26,8 +26,8 @@ if (NOT NOT_BUILD_STAND_ALONE_UTEST)
-   # Threads
-   Find_Package(Threads)
- 
--  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
--  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
-+  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof -ffloat-store -fno-strict-aliasing")
-+  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS} -ffloat-store -fno-strict-aliasing") #compiler_{degrees,radians,function_argument2} use equality comparison of floats, compiler_long_bitcast uses aliasing
-   set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
-   set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
-   set (CMAKE_CXX_FLAGS_MINSIZEREL     "-Os -DNDEBUG -DGBE_DEBUG=0")
diff --git a/srcpkgs/beignet/patches/llvm11.patch b/srcpkgs/beignet/patches/llvm11.patch
deleted file mode 100644
index 2c3a4278943c..000000000000
--- a/srcpkgs/beignet/patches/llvm11.patch
+++ /dev/null
@@ -1,937 +0,0 @@
-Source: Snektron
-
-There were a few changes required for LLVM 11:
-* llvm::StringRef requires .str(), implicit conversion was removed
-* llvm::CallSite was removed, but the required methods are available on llvm::CallInst
-* VectorTyID was split into FixedVectorTyID and ScalableVectorTyID, FixedVectorTyID was used
-* CallInst::getCalledValue() was renamed to CallInst::getCalledOperand()
-* Implicit conversion from MaybeAlign to Align was removed, so MaybeAlign::valueOrOne was used instead.
-
---- a/backend/src/llvm/StripAttributes.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/StripAttributes.cpp	2020-11-09 19:04:19.641897141 +0100
-@@ -107,9 +107,8 @@
-        BB != E; ++BB) {
-     for (BasicBlock::iterator Inst = BB->begin(), E = BB->end();
-          Inst != E; ++Inst) {
--      CallSite Call(&*Inst);
--      if (Call)
--        Call.setCallingConv(CallingConv::C);
-+      if (CallInst* callInst = dyn_cast<CallInst>(&*Inst))
-+        callInst->setCallingConv(CallingConv::C);
-     }
-   }
-
---- a/backend/src/llvm/llvm_bitcode_link.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_bitcode_link.cpp	2020-11-09 17:04:09.633753428 +0100
-@@ -98,7 +98,7 @@
-         if (callFunc && callFunc->getIntrinsicID() != 0)
-           continue;
-
--        std::string fnName = call->getCalledValue()->stripPointerCasts()->getName();
-+        std::string fnName = call->getCalledOperand()->stripPointerCasts()->getName().str();
-
-         if (!MFS.insert(fnName).second) {
-           continue;
---- a/backend/src/llvm/llvm_device_enqueue.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_device_enqueue.cpp	2020-11-09 19:01:49.201915008 +0100
-@@ -45,7 +45,7 @@
-       return NULL;
-
-     /* This is a fake, to check the function bitcast is for block or not */
--    std::string fnName = Fn->getName();
-+    std::string fnName = Fn->getName().str();
-     if(fnName.find("_invoke") == std::string::npos)
-       return NULL;
-
-@@ -119,18 +119,18 @@
-       ParamTys.push_back(ty);
-     }
-     FunctionType* NewFT = FunctionType::get(Fn->getReturnType(), ParamTys, false);
--    Function* NewFn = Function::Create(NewFT, Function::ExternalLinkage, Fn->getName());
-+    Function* NewFn = Function::Create(NewFT, Function::ExternalLinkage, Fn->getName().str());
-     SmallVector<ReturnInst*, 8> Returns;
-
-     Function::arg_iterator NewFnArgIt = NewFn->arg_begin();
-     for (Function::arg_iterator I = Fn->arg_begin(), E = Fn->arg_end(); I != E; ++I) {
--      std::string ArgName = I->getName();
-+      std::string ArgName = I->getName().str();
-       NewFnArgIt->setName(ArgName);
-       VMap[&*I] = &(*NewFnArgIt++);
-     }
-     CloneFunctionInto(NewFn, Fn, VMap, /*ModuleLevelChanges=*/true, Returns);
-
--    Fn->setName("__d" + Fn->getName());
-+    Fn->setName("__d" + Fn->getName().str());
-     mod->getFunctionList().push_back(NewFn);
-     //mod->getOrInsertFunction(NewFn->getName(), NewFn->getFunctionType(),
-     //                         NewFn->getAttributes());
-@@ -147,7 +147,7 @@
-       argTypeNames.push_back(llvm::MDString::get(Context, "char*"));
-       argBaseTypeNames.push_back(llvm::MDString::get(Context, "char*"));
-       argTypeQuals.push_back(llvm::MDString::get(Context, ""));
--      argNames.push_back(llvm::MDString::get(Context, I->getName()));
-+      argNames.push_back(llvm::MDString::get(Context, I->getName().str()));
-     }
-
-     //If run to here, llvm version always > 3.9, add the version check just for build.
-@@ -198,7 +198,7 @@
-            * invoke pointer to store the index in the unit's block functions index.*/
-           Function *Fn = dyn_cast<Function>(bt->getOperand(0));
-
--          std::string fnName = Fn->getName();
-+          std::string fnName = Fn->getName().str();
-           int index = -1;
-           for(size_t i=0; i<unit.blockFuncs.size(); i++) {
-             if(unit.blockFuncs[i] == fnName) {
-@@ -241,7 +241,7 @@
-             //unnamed call function, parse the use to find the define of called function
-             SmallVector<Value*, 16> args(CI->op_begin(), CI->op_end()-1);
-
--            Value *v = CI->getCalledValue();
-+            Value *v = CI->getCalledOperand();
-             BitCastInst* bt = dyn_cast<BitCastInst>(v);
-             if(bt == NULL)
-               continue;
-@@ -316,7 +316,7 @@
-                   ConstantExpr *expr = dyn_cast<ConstantExpr>(c->getOperand(3));
-                   BitCastInst *bt = dyn_cast<BitCastInst>(expr->getAsInstruction());
-                   Function* f = dyn_cast<Function>(bt->getOperand(0));
--                  blocks[v] = f->getName();
-+                  blocks[v] = f->getName().str();
-                 }
-               }
-
-@@ -332,7 +332,7 @@
-           } else {
-             //handle enqueue_kernel function call
-             Function *fn = CI->getCalledFunction();
--            if (fn->getName().find("enqueue_kernel") == std::string::npos)
-+            if (fn->getName().str().find("enqueue_kernel") == std::string::npos)
-               continue;
-
-             //block parameter's index, 3 or 6
-@@ -361,7 +361,7 @@
-                   ConstantExpr *expr = dyn_cast<ConstantExpr>(c->getOperand(3));
-                   BitCastInst *bt = dyn_cast<BitCastInst>(expr->getAsInstruction());
-                   Function* f = dyn_cast<Function>(bt->getOperand(0));
--                  blocks[v] = f->getName();
-+                  blocks[v] = f->getName().str();
-                 }
-               }
-             } else if(isa<AllocaInst>(block)) {
---- a/backend/src/llvm/llvm_gen_backend.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_gen_backend.cpp	2020-11-09 18:33:50.919114327 +0100
-@@ -376,7 +376,7 @@
-           GBE_ASSERT(index == 0);
-           return this->_newScalar(value, key, type, index, uniform);
-           break;
--        case Type::VectorTyID:
-+        case Type::FixedVectorTyID:
-         {
-           auto vectorType = cast<VectorType>(type);
-           auto elementType = vectorType->getElementType();
-@@ -743,20 +743,20 @@
- #undef DECL_VISIT_FN
-
-     // Emit rounding instructions from gen native function
--    void emitRoundingCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode);
-+    void emitRoundingCallInst(CallInst &I, ir::Opcode opcode);
-     // Emit unary instructions from gen native function
--    void emitUnaryCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode, ir::Type = ir::TYPE_FLOAT);
-+    void emitUnaryCallInst(CallInst &I, ir::Opcode opcode, ir::Type = ir::TYPE_FLOAT);
-     // Emit unary instructions from gen native function
--    void emitAtomicInst(CallInst &I, CallSite &CS, ir::AtomicOps opcode);
-+    void emitAtomicInst(CallInst &I, ir::AtomicOps opcode);
-     // Emit workgroup instructions
--    void emitWorkGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode);
-+    void emitWorkGroupInst(CallInst &I, ir::WorkGroupOps opcode);
-     // Emit subgroup instructions
--    void emitSubGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode);
-+    void emitSubGroupInst(CallInst &I, ir::WorkGroupOps opcode);
-     // Emit subgroup instructions
--    void emitBlockReadWriteMemInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
--    void emitBlockReadWriteImageInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-+    void emitBlockReadWriteMemInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-+    void emitBlockReadWriteImageInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type = ir::TYPE_U32);
-
--    uint8_t appendSampler(CallSite::arg_iterator AI);
-+    uint8_t appendSampler(User::op_iterator AI);
-     uint8_t getImageID(CallInst &I);
-
-     // These instructions are not supported at all
-@@ -1320,13 +1320,13 @@
- #endif
-
-       if(typeNameNode) {
--        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
-+        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-       }
-       if(typeBaseNameNode) {
--        llvmInfo.typeBaseName= (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString();
-+        llvmInfo.typeBaseName= (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString().str();
-       }
--      llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
--      llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString();
-+      llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-+      llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString().str();
-       bool isImage = llvmInfo.isImageType();
-       bool isPipe = llvmInfo.isPipeType();
-       if (I->getType()->isPointerTy() || isImage || isPipe) {
-@@ -1531,7 +1531,7 @@
-             EltTy = getEltType(EltTy, TypeIndex);
-         }
-
--        ir::Constant cc = unit.getConstantSet().getConstant(pointer->getName());
-+        ir::Constant cc = unit.getConstantSet().getConstant(pointer->getName().str());
-         unsigned int defOffset = cc.getOffset();
-         relocs.push_back(ir::RelocEntry(offset, defOffset + constantOffset));
-
-@@ -1546,7 +1546,7 @@
-       return;
-     }
-     if (isa<GlobalVariable>(c)) {
--      ir::Constant cc = unit.getConstantSet().getConstant(c->getName());
-+      ir::Constant cc = unit.getConstantSet().getConstant(c->getName().str());
-       unsigned int defOffset = cc.getOffset();
-
-       relocs.push_back(ir::RelocEntry(offset, defOffset));
-@@ -1609,7 +1609,7 @@
-           }
-           break;
-         }
--      case Type::TypeID::VectorTyID:
-+      case Type::TypeID::FixedVectorTyID:
-         {
-           const ConstantDataSequential *cds = dyn_cast<ConstantDataSequential>(c);
-           const VectorType *vecTy = cast<VectorType>(type);
-@@ -1936,7 +1936,7 @@
-       case Type::PointerTyID:
-         regTranslator.newScalar(value, key, 0, uniform);
-         break;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         auto vectorType = cast<VectorType>(type);
-         const uint32_t elemNum = vectorType->getNumElements();
-@@ -2395,7 +2395,7 @@
- #endif
-         }
-         if(typeNameNode) {
--          llvmInfo.typeName = (cast<MDString>(typeNameNode->getOperand(opID)))->getString();
-+          llvmInfo.typeName = (cast<MDString>(typeNameNode->getOperand(opID)))->getString().str();
-           //LLVM 3.9 image's type name include access qual, don't match OpenCL spec, erase them.
-           std::vector<std::string> filters = {"__read_only ", "__write_only "};
-           for (uint32_t i = 0; i < filters.size(); i++) {
-@@ -2406,16 +2406,16 @@
-           }
-         }
-         if(typeBaseNameNode){
--          llvmInfo.typeBaseName = (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString();
-+          llvmInfo.typeBaseName = (cast<MDString>(typeBaseNameNode->getOperand(opID)))->getString().str();
-         }
-         if(accessQualNode) {
--          llvmInfo.accessQual = (cast<MDString>(accessQualNode->getOperand(opID)))->getString();
-+          llvmInfo.accessQual = (cast<MDString>(accessQualNode->getOperand(opID)))->getString().str();
-         }
-         if(typeQualNode) {
--          llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString();
-+          llvmInfo.typeQual = (cast<MDString>(typeQualNode->getOperand(opID)))->getString().str();
-         }
-         if(argNameNode){
--          llvmInfo.argName = (cast<MDString>(argNameNode->getOperand(opID)))->getString();
-+          llvmInfo.argName = (cast<MDString>(argNameNode->getOperand(opID)))->getString().str();
-         }
-
-         // function arguments are uniform values.
-@@ -3010,7 +3010,7 @@
-         } else {
-           this->newRegister(const_cast<GlobalVariable*>(&v));
-           ir::Register reg = regTranslator.getScalar(const_cast<GlobalVariable*>(&v), 0);
--          ir::Constant &con = unit.getConstantSet().getConstant(v.getName());
-+          ir::Constant &con = unit.getConstantSet().getConstant(v.getName().str());
-           if (!legacyMode) {
-             ir::Register regload = ctx.reg(getFamily(getType(ctx, v.getType())));
-             ctx.LOADI(getType(ctx, v.getType()), regload, ctx.newIntegerImmediate(con.getOffset(), getType(ctx, v.getType())));
-@@ -3212,7 +3212,7 @@
-         GBE_ASSERTM(false, "Unsupported calling convention");
-     }
-
--    ctx.startFunction(F.getName());
-+    ctx.startFunction(F.getName().str());
-
-     ir::Function &fn = ctx.getFunction();
-     this->regTranslator.clear();
-@@ -3810,9 +3810,9 @@
-
-   void GenWriter::regAllocateCallInst(CallInst &I) {
-     Value *dst = &I;
--    Value *Callee = I.getCalledValue();
-+    Value *Callee = I.getCalledOperand();
-     GBE_ASSERT(ctx.getFunction().getProfile() == ir::PROFILE_OCL);
--    GBE_ASSERT(isa<InlineAsm>(I.getCalledValue()) == false);
-+    GBE_ASSERT(isa<InlineAsm>(I.getCalledOperand()) == false);
-     if(I.getNumArgOperands()) GBE_ASSERT(I.hasStructRetAttr() == false);
-
-     // We only support a small number of intrinsics right now
-@@ -3870,7 +3870,7 @@
-       }
-     }
-     // Get the name of the called function and handle it
--    const std::string fnName = Callee->stripPointerCasts()->getName();
-+    const std::string fnName = Callee->stripPointerCasts()->getName().str();
-     auto genIntrinsicID = intrinsicMap.find(fnName);
-     switch (genIntrinsicID) {
-       case GEN_OCL_GET_GROUP_ID0:
-@@ -4166,7 +4166,7 @@
-     };
-   }
-
--  void GenWriter::emitRoundingCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode) {
-+  void GenWriter::emitRoundingCallInst(CallInst &I, ir::Opcode opcode) {
-     if (I.getType()->isHalfTy()) {
-       const ir::Register src = this->getRegister(I.getOperand(0));
-       const ir::Register srcFloat = ctx.reg(ir::FAMILY_DWORD);
-@@ -4177,14 +4177,14 @@
-       ctx.F32TO16(ir::TYPE_U16, ir::TYPE_FLOAT, dst, dstFloat);
-     } else {
-       GBE_ASSERT(I.getType()->isFloatTy());
--      this->emitUnaryCallInst(I,CS,opcode);
-+      this->emitUnaryCallInst(I,opcode);
-     }
-   }
-
--  void GenWriter::emitUnaryCallInst(CallInst &I, CallSite &CS, ir::Opcode opcode, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
-+  void GenWriter::emitUnaryCallInst(CallInst &I, ir::Opcode opcode, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--    CallSite::arg_iterator AE = CS.arg_end();
-+    User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-     GBE_ASSERT(AI != AE);
-     const ir::Register src = this->getRegister(*AI);
-@@ -4293,9 +4293,9 @@
-     this->emitAtomicInstHelper(opcode, type, dst, llvmPtr, payloadTuple);
-   }
-
--  void GenWriter::emitAtomicInst(CallInst &I, CallSite &CS, ir::AtomicOps opcode) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitAtomicInst(CallInst &I, ir::AtomicOps opcode) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-     Value *llvmPtr = *AI;
-     ir::AddressSpace addrSpace = addressSpaceLLVMToGen(llvmPtr->getType()->getPointerAddressSpace());
-@@ -4348,7 +4348,7 @@
-     }
-   }
-
--  void GenWriter::emitWorkGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode) {
-+  void GenWriter::emitWorkGroupInst(CallInst &I, ir::WorkGroupOps opcode) {
-     ir::Function &f = ctx.getFunction();
-
-     if (f.getwgBroadcastSLM() < 0 && opcode == ir::WORKGROUP_OP_BROADCAST) {
-@@ -4378,8 +4378,8 @@
-       GBE_ASSERT(f.gettidMapSLM() >= 0);
-     }
-
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     if (opcode == ir::WORKGROUP_OP_ALL || opcode == ir::WORKGROUP_OP_ANY) {
-@@ -4391,14 +4391,14 @@
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], 3);
-       ctx.WORKGROUP(opcode, (uint32_t)f.gettidMapSLM(), getRegister(&I), srcTuple, 3, ir::TYPE_S32);
-     } else if (opcode == ir::WORKGROUP_OP_BROADCAST) {
--      int argNum = CS.arg_size();
-+      int argNum = I.arg_size();
-       std::vector<ir::Register> src(argNum);
-       for (int i = 0; i < argNum; i++) {
-         src[i] = this->getRegister(*(AI++));
-       }
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], argNum);
-       ctx.WORKGROUP(ir::WORKGROUP_OP_BROADCAST, (uint32_t)f.getwgBroadcastSLM(), getRegister(&I), srcTuple, argNum,
--          getType(ctx, (*CS.arg_begin())->getType()));
-+          getType(ctx, (*I.arg_begin())->getType()));
-     } else {
-       ConstantInt *sign = dyn_cast<ConstantInt>(AI);
-       GBE_ASSERT(sign);
-@@ -4423,9 +4423,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitSubGroupInst(CallInst &I, CallSite &CS, ir::WorkGroupOps opcode) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitSubGroupInst(CallInst &I, ir::WorkGroupOps opcode) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     if (opcode == ir::WORKGROUP_OP_ALL || opcode == ir::WORKGROUP_OP_ANY) {
-@@ -4435,7 +4435,7 @@
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], 1);
-       ctx.SUBGROUP(opcode, getRegister(&I), srcTuple, 1, ir::TYPE_S32);
-     } else if (opcode == ir::WORKGROUP_OP_BROADCAST) {
--      int argNum = CS.arg_size();
-+      int argNum = I.arg_size();
-       GBE_ASSERT(argNum == 2);
-       std::vector<ir::Register> src(argNum);
-       for (int i = 0; i < argNum; i++) {
-@@ -4443,7 +4443,7 @@
-       }
-       const ir::Tuple srcTuple = ctx.arrayTuple(&src[0], argNum);
-       ctx.SUBGROUP(ir::WORKGROUP_OP_BROADCAST, getRegister(&I), srcTuple, argNum,
--          getType(ctx, (*CS.arg_begin())->getType()));
-+          getType(ctx, (*I.arg_begin())->getType()));
-     } else {
-       ConstantInt *sign = dyn_cast<ConstantInt>(AI);
-       GBE_ASSERT(sign);
-@@ -4466,9 +4466,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitBlockReadWriteMemInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitBlockReadWriteMemInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     Value *llvmPtr = *(AI++);
-@@ -4522,9 +4522,9 @@
-     GBE_ASSERT(AI == AE);
-   }
-
--  void GenWriter::emitBlockReadWriteImageInst(CallInst &I, CallSite &CS, bool isWrite, uint8_t vec_size, ir::Type type) {
--    CallSite::arg_iterator AI = CS.arg_begin();
--    CallSite::arg_iterator AE = CS.arg_end();
-+  void GenWriter::emitBlockReadWriteImageInst(CallInst &I, bool isWrite, uint8_t vec_size, ir::Type type) {
-+    User::op_iterator AI = I.arg_begin();
-+    User::op_iterator AE = I.arg_end();
-     GBE_ASSERT(AI != AE);
-
-     const uint8_t imageID = getImageID(I);
-@@ -4557,7 +4557,7 @@
-
-   /* append a new sampler. should be called before any reference to
-    * a sampler_t value. */
--  uint8_t GenWriter::appendSampler(CallSite::arg_iterator AI) {
-+  uint8_t GenWriter::appendSampler(User::op_iterator AI) {
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-     CallInst *TC = dyn_cast<CallInst>(*AI);
-     Constant *CPV = TC ? dyn_cast<Constant>(TC->getOperand(0)) : NULL;
-@@ -4595,10 +4595,9 @@
-         const ir::Function &fn = ctx.getFunction();
-
-         // Get the function arguments
--        CallSite CS(&I);
--        CallSite::arg_iterator AI = CS.arg_begin();
-+        User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--        CallSite::arg_iterator AE = CS.arg_end();
-+        User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-         switch (F->getIntrinsicID()) {
-           case Intrinsic::stacksave:
-@@ -4764,17 +4763,17 @@
-             ctx.MAD(srcType, dst, src0, src1, src2);
-           }
-           break;
--          case Intrinsic::sqrt: this->emitUnaryCallInst(I,CS,ir::OP_SQR); break;
--          case Intrinsic::ceil: this->emitRoundingCallInst(I,CS,ir::OP_RNDU); break;
--          case Intrinsic::trunc: this->emitRoundingCallInst(I,CS,ir::OP_RNDZ); break;
--          case Intrinsic::rint: this->emitRoundingCallInst(I,CS,ir::OP_RNDE); break;
--          case Intrinsic::floor: this->emitRoundingCallInst(I,CS,ir::OP_RNDD); break;
--          case Intrinsic::sin: this->emitUnaryCallInst(I,CS,ir::OP_SIN); break;
--          case Intrinsic::cos: this->emitUnaryCallInst(I,CS,ir::OP_COS); break;
--          case Intrinsic::log2: this->emitUnaryCallInst(I,CS,ir::OP_LOG); break;
--          case Intrinsic::exp2: this->emitUnaryCallInst(I,CS,ir::OP_EXP); break;
-+          case Intrinsic::sqrt: this->emitUnaryCallInst(I,ir::OP_SQR); break;
-+          case Intrinsic::ceil: this->emitRoundingCallInst(I,ir::OP_RNDU); break;
-+          case Intrinsic::trunc: this->emitRoundingCallInst(I,ir::OP_RNDZ); break;
-+          case Intrinsic::rint: this->emitRoundingCallInst(I,ir::OP_RNDE); break;
-+          case Intrinsic::floor: this->emitRoundingCallInst(I,ir::OP_RNDD); break;
-+          case Intrinsic::sin: this->emitUnaryCallInst(I,ir::OP_SIN); break;
-+          case Intrinsic::cos: this->emitUnaryCallInst(I,ir::OP_COS); break;
-+          case Intrinsic::log2: this->emitUnaryCallInst(I,ir::OP_LOG); break;
-+          case Intrinsic::exp2: this->emitUnaryCallInst(I,ir::OP_EXP); break;
-           case Intrinsic::bswap:
--            this->emitUnaryCallInst(I,CS,ir::OP_BSWAP, getUnsignedType(ctx, I.getType())); break;
-+            this->emitUnaryCallInst(I,ir::OP_BSWAP, getUnsignedType(ctx, I.getType())); break;
-           case Intrinsic::pow:
-           {
-             const ir::Register src0 = this->getRegister(*AI); ++AI;
-@@ -4794,21 +4793,20 @@
-         }
-       } else {
-         // Get the name of the called function and handle it
--        Value *Callee = I.getCalledValue();
--        const std::string fnName = Callee->stripPointerCasts()->getName();
-+        Value *Callee = I.getCalledOperand();
-+        const std::string fnName = Callee->stripPointerCasts()->getName().str();
-         auto genIntrinsicID = intrinsicMap.find(fnName);
-
-         // Get the function arguments
--        CallSite CS(&I);
--        CallSite::arg_iterator AI = CS.arg_begin();
-+        User::op_iterator AI = I.arg_begin();
- #if GBE_DEBUG
--        CallSite::arg_iterator AE = CS.arg_end();
-+        User::op_iterator AE = I.arg_end();
- #endif /* GBE_DEBUG */
-
-         switch (genIntrinsicID) {
--          case GEN_OCL_FBH: this->emitUnaryCallInst(I,CS,ir::OP_FBH, ir::TYPE_U32); break;
--          case GEN_OCL_FBL: this->emitUnaryCallInst(I,CS,ir::OP_FBL, ir::TYPE_U32); break;
--          case GEN_OCL_CBIT: this->emitUnaryCallInst(I,CS,ir::OP_CBIT, getUnsignedType(ctx, (*AI)->getType())); break;
-+          case GEN_OCL_FBH: this->emitUnaryCallInst(I,ir::OP_FBH, ir::TYPE_U32); break;
-+          case GEN_OCL_FBL: this->emitUnaryCallInst(I,ir::OP_FBL, ir::TYPE_U32); break;
-+          case GEN_OCL_CBIT: this->emitUnaryCallInst(I,ir::OP_CBIT, getUnsignedType(ctx, (*AI)->getType())); break;
-           case GEN_OCL_ABS:
-           {
-             const ir::Register src = this->getRegister(*AI);
-@@ -4915,8 +4913,8 @@
-             ctx.REGION(dst, src, x.getIntegerValue());
-             break;
-           }
--          case GEN_OCL_RSQ: this->emitUnaryCallInst(I,CS,ir::OP_RSQ); break;
--          case GEN_OCL_RCP: this->emitUnaryCallInst(I,CS,ir::OP_RCP); break;
-+          case GEN_OCL_RSQ: this->emitUnaryCallInst(I,ir::OP_RSQ); break;
-+          case GEN_OCL_RCP: this->emitUnaryCallInst(I,ir::OP_RCP); break;
-           case GEN_OCL_FORCE_SIMD8: ctx.setSimdWidth(8); break;
-           case GEN_OCL_FORCE_SIMD16: ctx.setSimdWidth(16); break;
-           case GEN_OCL_LBARRIER: ctx.SYNC(ir::syncLocalBarrier); break;
-@@ -4947,31 +4945,31 @@
-             break;
-           }
-           case GEN_OCL_ATOMIC_ADD0:
--          case GEN_OCL_ATOMIC_ADD1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_ADD); break;
-+          case GEN_OCL_ATOMIC_ADD1: this->emitAtomicInst(I,ir::ATOMIC_OP_ADD); break;
-           case GEN_OCL_ATOMIC_SUB0:
--          case GEN_OCL_ATOMIC_SUB1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_SUB); break;
-+          case GEN_OCL_ATOMIC_SUB1: this->emitAtomicInst(I,ir::ATOMIC_OP_SUB); break;
-           case GEN_OCL_ATOMIC_AND0:
--          case GEN_OCL_ATOMIC_AND1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_AND); break;
-+          case GEN_OCL_ATOMIC_AND1: this->emitAtomicInst(I,ir::ATOMIC_OP_AND); break;
-           case GEN_OCL_ATOMIC_OR0:
--          case GEN_OCL_ATOMIC_OR1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_OR); break;
-+          case GEN_OCL_ATOMIC_OR1: this->emitAtomicInst(I,ir::ATOMIC_OP_OR); break;
-           case GEN_OCL_ATOMIC_XOR0:
--          case GEN_OCL_ATOMIC_XOR1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_XOR); break;
-+          case GEN_OCL_ATOMIC_XOR1: this->emitAtomicInst(I,ir::ATOMIC_OP_XOR); break;
-           case GEN_OCL_ATOMIC_XCHG0:
--          case GEN_OCL_ATOMIC_XCHG1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_XCHG); break;
-+          case GEN_OCL_ATOMIC_XCHG1: this->emitAtomicInst(I,ir::ATOMIC_OP_XCHG); break;
-           case GEN_OCL_ATOMIC_INC0:
--          case GEN_OCL_ATOMIC_INC1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_INC); break;
-+          case GEN_OCL_ATOMIC_INC1: this->emitAtomicInst(I,ir::ATOMIC_OP_INC); break;
-           case GEN_OCL_ATOMIC_DEC0:
--          case GEN_OCL_ATOMIC_DEC1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_DEC); break;
-+          case GEN_OCL_ATOMIC_DEC1: this->emitAtomicInst(I,ir::ATOMIC_OP_DEC); break;
-           case GEN_OCL_ATOMIC_UMIN0:
--          case GEN_OCL_ATOMIC_UMIN1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_UMIN); break;
-+          case GEN_OCL_ATOMIC_UMIN1: this->emitAtomicInst(I,ir::ATOMIC_OP_UMIN); break;
-           case GEN_OCL_ATOMIC_UMAX0:
--          case GEN_OCL_ATOMIC_UMAX1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_UMAX); break;
-+          case GEN_OCL_ATOMIC_UMAX1: this->emitAtomicInst(I,ir::ATOMIC_OP_UMAX); break;
-           case GEN_OCL_ATOMIC_IMIN0:
--          case GEN_OCL_ATOMIC_IMIN1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_IMIN); break;
-+          case GEN_OCL_ATOMIC_IMIN1: this->emitAtomicInst(I,ir::ATOMIC_OP_IMIN); break;
-           case GEN_OCL_ATOMIC_IMAX0:
--          case GEN_OCL_ATOMIC_IMAX1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_IMAX); break;
-+          case GEN_OCL_ATOMIC_IMAX1: this->emitAtomicInst(I,ir::ATOMIC_OP_IMAX); break;
-           case GEN_OCL_ATOMIC_CMPXCHG0:
--          case GEN_OCL_ATOMIC_CMPXCHG1: this->emitAtomicInst(I,CS,ir::ATOMIC_OP_CMPXCHG); break;
-+          case GEN_OCL_ATOMIC_CMPXCHG1: this->emitAtomicInst(I,ir::ATOMIC_OP_CMPXCHG); break;
-           case GEN_OCL_GET_IMAGE_WIDTH:
-           case GEN_OCL_GET_IMAGE_HEIGHT:
-           case GEN_OCL_GET_IMAGE_DEPTH:
-@@ -5429,48 +5427,48 @@
-             ctx.WAIT();
-             break;
-           }
--          case GEN_OCL_WORK_GROUP_ALL: this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_ALL); break;
--          case GEN_OCL_WORK_GROUP_ANY: this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_ANY); break;
-+          case GEN_OCL_WORK_GROUP_ALL: this->emitWorkGroupInst(I, ir::WORKGROUP_OP_ALL); break;
-+          case GEN_OCL_WORK_GROUP_ANY: this->emitWorkGroupInst(I, ir::WORKGROUP_OP_ANY); break;
-           case GEN_OCL_WORK_GROUP_BROADCAST:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_BROADCAST); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_BROADCAST); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_ADD); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_MAX); break;
-           case GEN_OCL_WORK_GROUP_REDUCE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_REDUCE_MIN); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-           case GEN_OCL_WORK_GROUP_SCAN_EXCLUSIVE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_ADD:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_MAX:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-           case GEN_OCL_WORK_GROUP_SCAN_INCLUSIVE_MIN:
--            this->emitWorkGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-+            this->emitWorkGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-           case GEN_OCL_SUB_GROUP_BROADCAST:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_BROADCAST); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_BROADCAST); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_ADD); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_MAX); break;
-           case GEN_OCL_SUB_GROUP_REDUCE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_REDUCE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_REDUCE_MIN); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_ADD); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MAX); break;
-           case GEN_OCL_SUB_GROUP_SCAN_EXCLUSIVE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_EXCLUSIVE_MIN); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_ADD:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_ADD); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_MAX:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MAX); break;
-           case GEN_OCL_SUB_GROUP_SCAN_INCLUSIVE_MIN:
--            this->emitSubGroupInst(I, CS, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-+            this->emitSubGroupInst(I, ir::WORKGROUP_OP_INCLUSIVE_MIN); break;
-           case GEN_OCL_LRP:
-           {
-             const ir::Register dst  = this->getRegister(&I);
-@@ -5484,69 +5482,69 @@
-             break;
-           }
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, false, 1); break;
-+            this->emitBlockReadWriteMemInst(I, false, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, false, 2); break;
-+            this->emitBlockReadWriteMemInst(I, false, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, false, 4); break;
-+            this->emitBlockReadWriteMemInst(I, false, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, false, 8); break;
-+            this->emitBlockReadWriteMemInst(I, false, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, true, 1); break;
-+            this->emitBlockReadWriteMemInst(I, true, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, true, 2); break;
-+            this->emitBlockReadWriteMemInst(I, true, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, true, 4); break;
-+            this->emitBlockReadWriteMemInst(I, true, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, true, 8); break;
-+            this->emitBlockReadWriteMemInst(I, true, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, false, 1); break;
-+            this->emitBlockReadWriteImageInst(I, false, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, false, 2); break;
-+            this->emitBlockReadWriteImageInst(I, false, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, false, 4); break;
-+            this->emitBlockReadWriteImageInst(I, false, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_UI_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, false, 8); break;
-+            this->emitBlockReadWriteImageInst(I, false, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, true, 1); break;
-+            this->emitBlockReadWriteImageInst(I, true, 1); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, true, 2); break;
-+            this->emitBlockReadWriteImageInst(I, true, 2); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, true, 4); break;
-+            this->emitBlockReadWriteImageInst(I, true, 4); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_UI_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, true, 8); break;
-+            this->emitBlockReadWriteImageInst(I, true, 8); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, false, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, false, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, false, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, false, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, false, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM:
--            this->emitBlockReadWriteMemInst(I, CS, true, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM2:
--            this->emitBlockReadWriteMemInst(I, CS, true, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM4:
--            this->emitBlockReadWriteMemInst(I, CS, true, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_MEM8:
--            this->emitBlockReadWriteMemInst(I, CS, true, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteMemInst(I, true, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, false, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, false, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, false, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_READ_US_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, false, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, false, 8, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE:
--            this->emitBlockReadWriteImageInst(I, CS, true, 1, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 1, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE2:
--            this->emitBlockReadWriteImageInst(I, CS, true, 2, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 2, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE4:
--            this->emitBlockReadWriteImageInst(I, CS, true, 4, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 4, ir::TYPE_U16); break;
-           case GEN_OCL_SUB_GROUP_BLOCK_WRITE_US_IMAGE8:
--            this->emitBlockReadWriteImageInst(I, CS, true, 8, ir::TYPE_U16); break;
-+            this->emitBlockReadWriteImageInst(I, true, 8, ir::TYPE_U16); break;
-           case GEN_OCL_GET_PIPE:
-           case GEN_OCL_MAKE_RID:
-           case GEN_OCL_GET_RID:
---- a/backend/src/llvm/llvm_includes.hpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_includes.hpp	2020-11-09 19:00:09.955926795 +0100
-@@ -103,7 +103,6 @@
-
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
- #include "llvm/IR/Mangler.h"
--#include "llvm/IR/CallSite.h"
- #include "llvm/IR/CFG.h"
- #include "llvm/IR/InstVisitor.h"
- #include "llvm/IR/IRPrintingPasses.h"
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-11-09 19:10:37.141852308 +0100
-@@ -160,7 +160,7 @@
-     Value *vecPtr = Builder.CreateBitCast(ld->getPointerOperand(),
-                                         PointerType::get(vecTy, addrSpace));
-     LoadInst *vecValue = Builder.CreateLoad(vecPtr);
--    vecValue->setAlignment(align);
-+    vecValue->setAlignment(align.valueOrOne());
-
-     for (unsigned i = 0; i < size; ++i) {
-       Value *S = Builder.CreateExtractElement(vecValue, Builder.getInt32(i));
-@@ -251,7 +251,7 @@
-       return;
-     Value *newPtr = Builder.CreateBitCast(stPointer, PointerType::get(vecTy, addrSpace));
-     StoreInst *newST = Builder.CreateStore(parent, newPtr);
--    newST->setAlignment(align);
-+    newST->setAlignment(align.valueOrOne());
-   }
-
-   // Find the safe iterator we can point to. If reorder happens, we need to
---- a/backend/src/llvm/llvm_passes.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_passes.cpp	2020-11-09 18:48:55.997006837 +0100
-@@ -95,7 +95,7 @@
-   {
-     switch (Ty->getTypeID()) {
-       case Type::VoidTyID: NOT_SUPPORTED;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         const VectorType* VecTy = cast<VectorType>(Ty);
-         uint32_t elemNum = VecTy->getNumElements();
-@@ -138,7 +138,7 @@
-       case Type::HalfTyID:    return 16;
-       case Type::FloatTyID:   return 32;
-       case Type::DoubleTyID:  return 64;
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       {
-         const VectorType* VecTy = cast<VectorType>(Ty);
-         uint32_t numElem = VecTy->getNumElements();
-@@ -184,10 +184,12 @@
-     Type *elementType = NULL;
-     if (PointerType* ptrType = dyn_cast<PointerType>(eltTy))
-       elementType = ptrType->getElementType();
--    else if(SequentialType * seqType = dyn_cast<SequentialType>(eltTy))
--      elementType = seqType->getElementType();
--    else if(CompositeType * compTy= dyn_cast<CompositeType>(eltTy))
--      elementType = compTy->getTypeAtIndex(index);
-+    else if (ArrayType * arrType = dyn_cast<ArrayType>(eltTy))
-+      elementType = arrType->getElementType();
-+    else if(VectorType * vecType = dyn_cast<VectorType>(eltTy))
-+      elementType = vecType->getElementType();
-+    else if(StructType * structType = dyn_cast<StructType>(eltTy))
-+      elementType = structType->getTypeAtIndex(index);
-     GBE_ASSERT(elementType);
-     return elementType;
-   }
---- a/backend/src/llvm/llvm_printf_parser.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_printf_parser.cpp	2020-11-09 18:57:52.618943105 +0100
-@@ -323,8 +323,7 @@
-
-   bool PrintfParser::parseOnePrintfInstruction(CallInst * call)
-   {
--    CallSite CS(call);
--    CallSite::arg_iterator CI_FMT = CS.arg_begin();
-+    User::op_iterator CI_FMT = call->arg_begin();
-     int param_num = 0;
-
-     llvm::Constant* arg0 = dyn_cast<llvm::ConstantExpr>(*CI_FMT);
-@@ -341,7 +340,7 @@
-       return false;
-     }
-
--    std::string fmt = fmt_arg->getAsCString();
-+    std::string fmt = fmt_arg->getAsCString().str();
-     if (fmt.size() == 0)
-       return false;
-
-@@ -437,8 +436,8 @@
-         if ( callFunc->getIntrinsicID() != 0)
-           continue;
-
--        Value *Callee = call->getCalledValue();
--        const std::string fnName = Callee->getName();
-+        Value *Callee = call->getCalledOperand();
-+        const std::string fnName = Callee->getName().str();
-
-         if (fnName != "__gen_ocl_printf_stub" && fnName != "__gen_ocl_puts_stub")
-           continue;
-@@ -582,7 +581,7 @@
-             if (!fmt_arg || !fmt_arg->isCString()) {
-               return false;
-             }
--            slot.state.str = fmt_arg->getAsCString();
-+            slot.state.str = fmt_arg->getAsCString().str();
-             return true;
-           }
-           case PRINTF_CONVERSION_P: {
-@@ -595,10 +594,10 @@
-
-         break;
-
--      case Type::VectorTyID: {
--        Type* vect_type = arg->getType();
--        Type* elt_type = vect_type->getVectorElementType();
--        int vec_num = vect_type->getVectorNumElements();
-+      case Type::FixedVectorTyID: {
-+        VectorType* vect_type = dyn_cast<VectorType>(arg->getType());
-+        Type* elt_type = vect_type->getElementType();
-+        int vec_num = vect_type->getNumElements();
-         bool sign = false;
-
-         if (vec_num != slot.state.vector_n) {
---- a/backend/src/llvm/llvm_profiling.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_profiling.cpp	2020-11-09 18:59:50.120929150 +0100
-@@ -35,7 +35,6 @@
- #include "llvm/IR/IRBuilder.h"
-
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
--#include "llvm/IR/CallSite.h"
- #include "llvm/IR/CFG.h"
- #else
- #include "llvm/Support/CallSite.h"
---- a/backend/src/llvm/llvm_sampler_fix.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_sampler_fix.cpp	2020-11-09 17:01:09.407774832 +0100
-@@ -45,8 +45,8 @@
-     bool visitCallInst(CallInst *I) {
-       if(!I)
-         return false;
--      Value *Callee = I->getCalledValue();
--      const std::string fnName = Callee->getName();
-+      Value *Callee = I->getCalledOperand();
-+      const std::string fnName = Callee->getName().str();
-       bool changed = false;
-       Type *boolTy = IntegerType::get(I->getContext(), 1);
-       Type *i32Ty = IntegerType::get(I->getContext(), 32);
-@@ -59,7 +59,7 @@
-         Value *needFixVal;
- #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-         CallInst *init = dyn_cast<CallInst>(I->getOperand(0));
--        if (init && init->getCalledValue()->getName().compare("__translate_sampler_initializer"))
-+        if (init && init->getCalledOperand()->getName().compare("__translate_sampler_initializer"))
-         {
-           const ConstantInt *ci = dyn_cast<ConstantInt>(init->getOperand(0));
-           uint32_t samplerInt = ci->getZExtValue();
-@@ -113,7 +113,7 @@
-         Value *needFixVal;
-  #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 40
-         CallInst *init = dyn_cast<CallInst>(I->getOperand(0));
--        if (init && init->getCalledValue()->getName().compare("__translate_sampler_initializer"))
-+        if (init && init->getCalledOperand()->getName().compare("__translate_sampler_initializer"))
-         {
-           const ConstantInt *ci = dyn_cast<ConstantInt>(init->getOperand(0));
-           uint32_t samplerInt = ci->getZExtValue();
---- a/backend/src/llvm/llvm_scalarize.cpp	2020-11-09 16:48:20.823866112 +0100
-+++ b/backend/src/llvm/llvm_scalarize.cpp	2020-11-09 18:51:16.888990104 +0100
-@@ -178,7 +178,7 @@
-       if(!type)
-         return type;
-       switch(type->getTypeID()) {
--      case Type::VectorTyID:
-+      case Type::FixedVectorTyID:
-       case Type::ArrayTyID:
-         return GetBasicType(type->getContainedType(0));
-       default:
-@@ -188,7 +188,7 @@
-     }
-
-     int GetComponentCount(const Type* type)  {
--      if (type && type->getTypeID() == Type::VectorTyID)
-+      if (type && type->getTypeID() == Type::FixedVectorTyID)
-         return llvm::dyn_cast<VectorType>(type)->getNumElements();
-       else
-         return 1;
-@@ -652,13 +652,12 @@
-           break;
-         }
-       } else {
--        Value *Callee = call->getCalledValue();
--        const std::string fnName = Callee->getName();
-+        Value *Callee = call->getCalledOperand();
-+        const std::string fnName = Callee->getName().str();
-         auto genIntrinsicID = intrinsicMap.find(fnName);
-
-         // Get the function arguments
--        CallSite CS(call);
--        CallSite::arg_iterator CI = CS.arg_begin() + 1;
-+        User::op_iterator CI = call->arg_begin() + 1;
-
-         switch (genIntrinsicID) {
-           case GEN_OCL_NOT_FOUND:
-@@ -729,7 +728,7 @@
-             extractFromVector(call);
-             break;
-           case GEN_OCL_PRINTF:
--            for (; CI != CS.arg_end(); ++CI)
-+            for (; CI != call->arg_end(); ++CI)
-               if ((*CI)->getType()->isVectorTy())
-                 *CI = InsertToVector(call, *CI);
-             break;
diff --git a/srcpkgs/beignet/patches/llvm12.patch b/srcpkgs/beignet/patches/llvm12.patch
deleted file mode 100644
index 6f8ab005c148..000000000000
--- a/srcpkgs/beignet/patches/llvm12.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-diff --git backend/src/llvm/ExpandLargeIntegers.cpp backend/src/llvm/ExpandLargeIntegers.cpp
-index 8515dc13..27080380 100644
---- a/backend/src/llvm/ExpandLargeIntegers.cpp
-+++ b/backend/src/llvm/ExpandLargeIntegers.cpp
-@@ -328,7 +328,7 @@ static Value *buildVectorOrScalar(ConversionState &State, IRBuilder<> &IRB, Smal
-     // splited, that's why these temporary values should be erased.
-     bool KeepInsert = isLegalBitSize(ElemTy->getPrimitiveSizeInBits() * ElemNo);
-     for (unsigned i = 0; i < ElemNo; ++i) {
--      Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo));
-+      Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo, false));
-       Value *idx = ConstantInt::get(IntTy, i);
-       vec = IRB.CreateInsertElement(tmp, Elements[i], idx);
-       if (!KeepInsert && !isa<Constant>(vec)) {
-@@ -373,7 +373,7 @@ static void unifyElementType(IRBuilder<> &IRB, SmallVector<Value *, 16> &Src, Sm
-       assert((Size % MinWidth) == 0);
- 
-       if (Size > MinWidth) {
--        VectorType *VecTy = VectorType::get(ElemTy, Size/MinWidth);
-+        VectorType *VecTy = VectorType::get(ElemTy, Size/MinWidth, false);
-         Value *Casted = IRB.CreateBitCast(Src[i], VecTy);
-         for (unsigned j = 0; j < Size/MinWidth; j++)
-           Dst.push_back(IRB.CreateExtractElement(Casted, ConstantInt::get(IntTy, j)));
-@@ -462,7 +462,7 @@ static void convertInstruction(Instruction *Inst, ConversionState &State,
-       unsigned ElemNo = Unified.size();
-       Type *ElemTy = Unified[0]->getType();
-       for (unsigned i = 0; i < ElemNo; ++i) {
--        Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo));
-+        Value *tmp = vec ? vec : UndefValue::get(VectorType::get(ElemTy, ElemNo, false));
-         Value *idx = ConstantInt::get(IntTy, i);
-         vec = IRB.CreateInsertElement(tmp, Unified[i], idx);
-       }
-diff --git backend/src/llvm/llvm_gen_backend.cpp backend/src/llvm/llvm_gen_backend.cpp
-index c93d89cc..64d5b0e5 100644
---- a/backend/src/llvm/llvm_gen_backend.cpp
-+++ b/backend/src/llvm/llvm_gen_backend.cpp
-@@ -304,7 +304,7 @@ namespace gbe
-       TYPESIZEVEC(long,8)
-       TYPESIZEVEC(unsigned long,8)
-       else{
--        StructType *StrTy = M->getTypeByName("struct."+name);
-+        StructType *StrTy = StructType::getTypeByName(M->getContext(), "struct."+name);
-         if(StrTy)
-           return getTypeByteSize(unit,StrTy);
-       }
-diff --git backend/src/llvm/llvm_loadstore_optimization.cpp backend/src/llvm/llvm_loadstore_optimization.cpp
-index 5aa38bef..6b5c1bad 100644
---- a/backend/src/llvm/llvm_loadstore_optimization.cpp
-+++ b/backend/src/llvm/llvm_loadstore_optimization.cpp
-@@ -152,7 +152,7 @@ namespace gbe {
-     unsigned addrSpace = ld->getPointerAddressSpace();
-     // insert before first load
-     Builder.SetInsertPoint(ld);
--    VectorType *vecTy = VectorType::get(ld->getType(), size);
-+    VectorType *vecTy = VectorType::get(ld->getType(), size, false);
-     Value *vecPtr = Builder.CreateBitCast(ld->getPointerOperand(),
-                                         PointerType::get(vecTy, addrSpace));
-     LoadInst *vecValue = Builder.CreateLoad(vecPtr);
-@@ -236,7 +236,7 @@ namespace gbe {
-     Builder.SetInsertPoint(merged[size-1]);
- 
-     Type *dataTy = st->getValueOperand()->getType();
--    VectorType *vecTy = VectorType::get(dataTy, size);
-+    VectorType *vecTy = VectorType::get(dataTy, size, false);
-     Value * parent = UndefValue::get(vecTy);
-     for(unsigned i = 0; i < size; i++) {
-       parent = Builder.CreateInsertElement(parent, values[i], ConstantInt::get(IntegerType::get(st->getContext(), 32), i));
-diff --git backend/src/llvm/llvm_printf_parser.cpp backend/src/llvm/llvm_printf_parser.cpp
-index 6bb7c52a..af459cd2 100644
---- a/backend/src/llvm/llvm_printf_parser.cpp
-+++ b/backend/src/llvm/llvm_printf_parser.cpp
-@@ -630,7 +630,7 @@ error:
-             if (elt_type != elt_dst_type) {
-               Value *II = NULL;
-               for (int i = 0; i < vec_num; i++) {
--                Value *vec = II ? II : UndefValue::get(VectorType::get(elt_dst_type, vec_num));
-+                Value *vec = II ? II : UndefValue::get(VectorType::get(elt_dst_type, vec_num, false));
-                 Value *cv = ConstantInt::get(Type::getInt32Ty(elt_type->getContext()), i);
-                 Value *org = builder->CreateExtractElement(arg, cv);
-                 Value *cvt = builder->CreateIntCast(org, elt_dst_type, sign);
-@@ -658,7 +658,7 @@ error:
-             if (elt_type->getTypeID() != Type::FloatTyID) {
-               Value *II = NULL;
-               for (int i = 0; i < vec_num; i++) {
--                Value *vec = II ? II : UndefValue::get(VectorType::get(Type::getFloatTy(elt_type->getContext()), vec_num));
-+                Value *vec = II ? II : UndefValue::get(VectorType::get(Type::getFloatTy(elt_type->getContext()), vec_num, false));
-                 Value *cv = ConstantInt::get(Type::getInt32Ty(elt_type->getContext()), i);
-                 Value *org = builder->CreateExtractElement(arg, cv);
-                 Value* cvt  = builder->CreateFPCast(org, Type::getFloatTy(module->getContext()));
-diff --git backend/src/llvm/llvm_to_gen.cpp backend/src/llvm/llvm_to_gen.cpp
-index 7f7deffe..9e8ccc67 100644
---- a/backend/src/llvm/llvm_to_gen.cpp
-+++ b/backend/src/llvm/llvm_to_gen.cpp
-@@ -358,7 +358,7 @@ namespace gbe
-     passes.add(createScalarReplAggregatesPass(64, true, -1, -1, 64));
- #endif
-     passes.add(createLoadStoreOptimizationPass());
--    passes.add(createConstantPropagationPass());
-+    //passes.add(createConstantPropagationPass());
-     passes.add(createPromoteMemoryToRegisterPass());
-     if(optLevel > 0)
-       passes.add(createGVNPass());                 // Remove redundancies
-@@ -367,11 +367,11 @@ namespace gbe
-     passes.add(createScalarizePass());             // Expand all vector ops
-     passes.add(createExpandLargeIntegersPass());   // legalize large integer operation
-     passes.add(createInstructionCombiningPass());  // legalize will generate some silly instructions
--    passes.add(createConstantPropagationPass());   // propagate constant after scalarize/legalize
-+    //passes.add(createConstantPropagationPass());   // propagate constant after scalarize/legalize
-     passes.add(createExpandConstantExprPass());    // constant prop may generate ConstantExpr
-     passes.add(createPromoteIntegersPass());       // align integer size to power of two
-     passes.add(createRemoveGEPPass(unit));         // Constant prop may generate gep
--    passes.add(createDeadInstEliminationPass());   // Remove simplified instructions
-+    //passes.add(createDeadInstEliminationPass());   // Remove simplified instructions
-     passes.add(createCFGSimplificationPass());     // Merge & remove BBs
-     passes.add(createLowerSwitchPass());           // simplify cfg will generate switch-case instruction
-     if (profiling) {
diff --git a/srcpkgs/beignet/patches/musl.patch b/srcpkgs/beignet/patches/musl.patch
deleted file mode 100644
index cefafbb65588..000000000000
--- a/srcpkgs/beignet/patches/musl.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/backend/src/backend/gen/gen_mesa_disasm.c
-+++ b/backend/src/backend/gen/gen_mesa_disasm.c
-@@ -1137,7 +1137,7 @@ static uint32_t __conv_half_to_float(uint16_t h)
-       // Adjust mantissa so it's normalized (and keep
-       // track of exponent adjustment)
-       int e = -1;
--      uint m = i.mantissa;
-+      unsigned int m = i.mantissa;
-       do {
-         e++;
-         m <<= 1;
diff --git a/srcpkgs/beignet/template b/srcpkgs/beignet/template
deleted file mode 100644
index dce6bbb7ae24..000000000000
--- a/srcpkgs/beignet/template
+++ /dev/null
@@ -1,22 +0,0 @@
-# Template file for 'beignet'
-pkgname=beignet
-version=1.3.2
-revision=10
-archs="i686* x86_64*"
-wrksrc="Beignet-${version}-Source"
-build_style=cmake
-hostmakedepends="clang llvm pkg-config"
-makedepends="MesaLib-devel libedit-devel libffi-devel ocl-icd-devel zlib-devel
- libXfixes-devel"
-depends="ocl-icd"
-short_desc="Beignet GPGPU System for Intel GPUs"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://www.freedesktop.org/wiki/Software/Beignet/"
-distfiles="https://01.org/sites/default/files/${pkgname}-${version}-source.tar.gz"
-checksum=c555edba149de23243965a703f39f79fa06f15bcff5a3762b5544b0925010b43
-
-post_install() {
-	# remove CL headers, we do use opencl-headers instead.
-	rm -r ${DESTDIR}/usr/include
-}
diff --git a/srcpkgs/beignet/update b/srcpkgs/beignet/update
deleted file mode 100644
index ca41e0afe60c..000000000000
--- a/srcpkgs/beignet/update
+++ /dev/null
@@ -1 +0,0 @@
-site="https://01.org/beignet/downloads"
diff --git a/srcpkgs/removed-packages/template b/srcpkgs/removed-packages/template
index a6d94cc051d6..e4facbda1607 100644
--- a/srcpkgs/removed-packages/template
+++ b/srcpkgs/removed-packages/template
@@ -1,7 +1,7 @@
 # Template file for 'removed-packages'
 pkgname=removed-packages
 version=0.1
-revision=69
+revision=70
 build_style=meta
 short_desc="Uninstalls packages removed from repository"
 maintainer="Piotr Wójcik <chocimier@tlen.pl>"
@@ -25,6 +25,7 @@ replaces="
  atom<=1.44.0_1
  avogadro-devel<=1.2.0_8
  avogadro<=1.2.0_8
+ beignet<=1.3.2_10
  bokken<=1.8_3
  bomi<=0.9.11_17
  burp-client<=1.4.40_13

From fed7e6236589edf2dd9e904dbe76bce5680b4678 Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 22:31:25 +0200
Subject: [PATCH 20/23] ldc: update to 1.29.0.

---
 common/shlibs        | 10 +++++-----
 srcpkgs/ldc/template |  9 ++++-----
 2 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/common/shlibs b/common/shlibs
index 3333740b2881..70888a227367 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -2181,11 +2181,11 @@ libFcitx5Config.so.6 libfcitx5-5.0.5_1
 libFcitx5GClient.so.2 fcitx5-gtk-5.0.4_1
 libFcitx5Qt5DBusAddons.so.1 fcitx5-qt5-5.0.3_1
 libFcitx5Qt5WidgetsAddons.so.2 fcitx5-qt5-5.0.3_1
-libdruntime-ldc-debug-shared.so.98 ldc-runtime-1.28.0_1
-libdruntime-ldc-shared.so.98 ldc-runtime-1.28.0_1
-libphobos2-ldc-shared.so.98 ldc-runtime-1.28.0_1
-libphobos2-ldc-debug-shared.so.98 ldc-runtime-1.28.0_1
-libldc-jit.so.99 ldc-runtime-1.29.0_1
+libdruntime-ldc-debug-shared.so.99 ldc-runtime-1.29.0_1
+libdruntime-ldc-shared.so.99 ldc-runtime-1.29.0_1
+libphobos2-ldc-shared.so.99 ldc-runtime-1.29.0_1
+libphobos2-ldc-debug-shared.so.99 ldc-runtime-1.29.0_1
+libldc-jit.so.98 ldc-runtime-1.28.0_1
 libmarblewidget-qt5.so.28 marble5-17.12.2_1
 libastro.so.2 marble5-17.12.2_1
 libparrot.so.6.9.0 parrot-6.9.0_1
diff --git a/srcpkgs/ldc/template b/srcpkgs/ldc/template
index e849b272501e..1d72a8805eb6 100644
--- a/srcpkgs/ldc/template
+++ b/srcpkgs/ldc/template
@@ -1,8 +1,7 @@
 # Template file for 'ldc'
 pkgname=ldc
-version=1.28.0
-revision=2
-reverts="1.29.0_1"
+version=1.29.0
+revision=1
 wrksrc="ldc-${version}-src"
 build_style=cmake
 configure_args="
@@ -12,7 +11,7 @@ configure_args="
  -DBASH_COMPLETION_COMPLETIONSDIR=/usr/share/bash-completion
  -DC_SYSTEM_LIBS='unwind;m;pthread;rt;dl'"
 conf_files="/etc/ldc2.conf"
-hostmakedepends="dmd llvm12 perl pkg-config"
+hostmakedepends="dmd llvm14 perl pkg-config"
 makedepends="libcurl-devel libffi-devel ncurses-devel zlib-devel
  llvm-libunwind-devel"
 depends="ldc-runtime llvm-libunwind-devel"
@@ -23,7 +22,7 @@ license="BSD-3-Clause, BSL-1.0"
 homepage="https://wiki.dlang.org/LDC"
 changelog="https://raw.githubusercontent.com/ldc-developers/ldc/master/CHANGELOG.md"
 distfiles="https://github.com/ldc-developers/ldc/releases/download/v${version}/ldc-${version}-src.tar.gz"
-checksum=17fee8bb535bcb8cda0a45947526555c46c045f302a7349cc8711b254e54cf09
+checksum=d0c066eb965467625d9c5e75c00c583451b9ffa363601f9e37275ca8a8aea140
 nopie=yes
 nocross="dmd compilation fails on cross"
 # tests timeout on musl; also require unpackaged python3-lit

From 4de30c547885037cebe72517a19a9be4f855afab Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 19:07:40 +0200
Subject: [PATCH 21/23] include-what-you-use: update to 0.18.

---
 srcpkgs/include-what-you-use/template | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/include-what-you-use/template b/srcpkgs/include-what-you-use/template
index b13bb7ee56af..297669f60459 100644
--- a/srcpkgs/include-what-you-use/template
+++ b/srcpkgs/include-what-you-use/template
@@ -1,6 +1,6 @@
 # Template file for 'include-what-you-use'
 pkgname=include-what-you-use
-version=0.16
+version=0.18
 revision=1
 wrksrc="${pkgname}"
 build_style=cmake
@@ -12,7 +12,7 @@ maintainer="Leah Neukirchen <leah@vuxu.org>"
 license="NCSA"
 homepage="https://include-what-you-use.org/"
 distfiles="https://include-what-you-use.org/downloads/${pkgname}-${version}.src.tar.gz"
-checksum=8d6fc9b255343bc1e5ec459e39512df1d51c60e03562985e0076036119ff5a1c
+checksum=9102fc8419294757df86a89ce6ec305f8d90a818d1f2598a139d15eb1894b8f3
 python_version=3
 
 post_install() {

From afccd04efa6144eabd3025cd452521d9b59e127e Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:18:24 +0200
Subject: [PATCH 22/23] SPIRV-LLVM-Translator: update to 14.0.0.

---
 common/shlibs                          |  1 +
 srcpkgs/SPIRV-LLVM-Translator/template | 13 +++++++------
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/common/shlibs b/common/shlibs
index 70888a227367..40efd29d5b71 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -981,6 +981,7 @@ libclang-cpp.so.14 libclang-cpp-14.0.3_1
 libLLVM-11.so libllvm11-11.0.0_1
 libLLVM-12.so libllvm12-12.0.0_1
 libLLVM-14.so libllvm14-14.0.3_1
+libLLVMSPIRVLib.so.14 SPIRV-LLVM-Translator-14.0.0_1
 libisofs.so.6 libisofs-0.6.24_1
 libmpack.so.0 libmpack-1.0.5_1
 libGeoIP.so.1 libgeoip-1.4.8_1
diff --git a/srcpkgs/SPIRV-LLVM-Translator/template b/srcpkgs/SPIRV-LLVM-Translator/template
index 2504cabed367..fde9689f710c 100644
--- a/srcpkgs/SPIRV-LLVM-Translator/template
+++ b/srcpkgs/SPIRV-LLVM-Translator/template
@@ -1,19 +1,20 @@
 # Template file for 'SPIRV-LLVM-Translator'
 pkgname=SPIRV-LLVM-Translator
-version=12.0.0
+version=14.0.0
 revision=1
 build_style=cmake
 make_build_args="llvm-spirv"
-configure_args="-Wno-dev -DLLVM_LINK_LLVM_DYLIB=ON -DCMAKE_SKIP_RPATH=ON
- -DLLVM_SPIRV_INCLUDE_TESTS=OFF -DBUILD_SHARED_LIBS=ON"
-hostmakedepends="clang clang-tools-extra llvm"
-makedepends="llvm"
+configure_args="-DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release
+ -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_SKIP_RPATH=ON -DLLVM_INCLUDE_TESTS=OFF
+ -DLLVM_LINK_LLVM_DYLIB=ON -DLLVM_EXTERNAL_LIT=/usr/bin/lit -Wno-dev -DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=/usr/include/spirv/ "
+hostmakedepends="clang clang-tools-extra llvm14"
+makedepends="llvm14 SPIRV-Headers"
 short_desc="API and commands for processing SPIR-V modules"
 maintainer="Orphaned <orphan@voidlinux.org>"
 license="NCSA"
 homepage="https://github.com/KhronosGroup/SPIRV-LLVM-Translator"
 distfiles="https://github.com/KhronosGroup/${pkgname}/archive/refs/tags/v${version}.tar.gz"
-checksum=6e4fad04203f25fcde4c308c53e9f59bd05a390978992db3212d4b63aff62108
+checksum=1afc52bb4e39aeb9b5b69324a201c81bd986364f347b559995eff6fd6f013318
 make_check=no
 
 post_install() {

From 1b4e5ffe8c43d3a36e6a2f3f014935c9a5b1178a Mon Sep 17 00:00:00 2001
From: prez <prez@national.shitposting.agency>
Date: Mon, 2 May 2022 21:35:43 +0200
Subject: [PATCH 23/23] ispc: update to 1.17.0.

---
 .../ispc/patches/cmake-build-type-none.patch  |   18 -
 srcpkgs/ispc/patches/llvm12-001.patch         |   57 -
 srcpkgs/ispc/patches/llvm12-002.patch         |  923 --------
 srcpkgs/ispc/patches/llvm12-003.patch         | 1504 ------------
 srcpkgs/ispc/patches/llvm12-004.patch         |   34 -
 srcpkgs/ispc/patches/llvm12-005.patch         |  372 ---
 srcpkgs/ispc/patches/llvm12-006.patch         |  126 -
 srcpkgs/ispc/patches/llvm12-007.patch         |  160 --
 srcpkgs/ispc/patches/llvm12-008.patch         |  149 --
 srcpkgs/ispc/patches/llvm12-009.patch         | 2109 -----------------
 srcpkgs/ispc/template                         |    8 +-
 11 files changed, 4 insertions(+), 5456 deletions(-)
 delete mode 100644 srcpkgs/ispc/patches/cmake-build-type-none.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-001.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-002.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-003.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-004.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-005.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-006.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-007.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-008.patch
 delete mode 100644 srcpkgs/ispc/patches/llvm12-009.patch

diff --git a/srcpkgs/ispc/patches/cmake-build-type-none.patch b/srcpkgs/ispc/patches/cmake-build-type-none.patch
deleted file mode 100644
index 411e353c7314..000000000000
--- a/srcpkgs/ispc/patches/cmake-build-type-none.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Index: ispc-1.15.0/CMakeLists.txt
-===================================================================
---- ispc-1.15.0.orig/CMakeLists.txt
-+++ ispc-1.15.0/CMakeLists.txt
-@@ -157,13 +157,6 @@ set(OUTPUT_RELEASE Release/bin)
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin )
- 
- if(CMAKE_BUILD_TYPE)
--    # Validate build type
--    set(CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo")
--
--    string(FIND "${CONFIGURATION_TYPES}" "${CMAKE_BUILD_TYPE}" MATCHED_CONFIG)
--    if (${MATCHED_CONFIG} EQUAL -1)
--         message(FATAL_ERROR "CMAKE_BUILD_TYPE (${CMAKE_BUILD_TYPE}) allows only the following values: ${CONFIGURATION_TYPES}")
--    endif()
- else(NOT CMAKE_BUILD_TYPE)
-     set(CMAKE_BUILD_TYPE "Release")
-     message(STATUS "Build type not specified: Use Release by default.")
diff --git a/srcpkgs/ispc/patches/llvm12-001.patch b/srcpkgs/ispc/patches/llvm12-001.patch
deleted file mode 100644
index 5f2d3f5a409e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-001.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 1c0f89dccb774f216c7f6e76a99ee907a1e641cb Mon Sep 17 00:00:00 2001
-From: Dmitry Babokin <dmitry.y.babokin@intel.com>
-Date: Tue, 22 Dec 2020 17:03:59 -0800
-Subject: [PATCH] Fix to work with LLVM trunk after llvm/llvm-project@41c3b2713
-
----
- src/ctx.cpp | 18 ++++++++++++------
- 1 file changed, 12 insertions(+), 6 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 6fbb8b9cf..977e9d222 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1473,11 +1473,15 @@ void FunctionEmitContext::AddDebugPos(llvm::Value *value, const SourcePos *pos,
-     llvm::Instruction *inst = llvm::dyn_cast<llvm::Instruction>(value);
-     if (inst != NULL && m->diBuilder) {
-         SourcePos p = pos ? *pos : currentPos;
--        if (p.first_line != 0)
-+        if (p.first_line != 0) {
-             // If first_line == 0, then we're in the middle of setting up
-             // the standard library or the like; don't add debug positions
-             // for those functions
--            inst->setDebugLoc(llvm::DebugLoc::get(p.first_line, p.first_column, scope ? scope : GetDIScope()));
-+            scope = scope ? scope : GetDIScope();
-+            llvm::DebugLoc diLoc =
-+                llvm::DILocation::get(scope->getContext(), p.first_line, p.first_column, scope, nullptr, false);
-+            inst->setDebugLoc(diLoc);
-+        }
-     }
- }
- 
-@@ -1518,9 +1522,10 @@ void FunctionEmitContext::EmitVariableDebugInfo(Symbol *sym) {
-     llvm::DILocalVariable *var = m->diBuilder->createAutoVariable(
-         scope, sym->name, sym->pos.GetDIFile(), sym->pos.first_line, diType, true /* preserve through opts */);
- 
-+    llvm::DebugLoc diLoc =
-+        llvm::DILocation::get(scope->getContext(), sym->pos.first_line, sym->pos.first_column, scope, nullptr, false);
-     llvm::Instruction *declareInst =
--        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(),
--                                    llvm::DebugLoc::get(sym->pos.first_line, sym->pos.first_column, scope), bblock);
-+        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(), diLoc, bblock);
-     AddDebugPos(declareInst, &sym->pos, scope);
- }
- 
-@@ -1535,9 +1540,10 @@ void FunctionEmitContext::EmitFunctionParameterDebugInfo(Symbol *sym, int argNum
-         m->diBuilder->createParameterVariable(scope, sym->name, argNum + 1, sym->pos.GetDIFile(), sym->pos.first_line,
-                                               diType, true /* preserve through opts */, flags);
- 
-+    llvm::DebugLoc diLoc =
-+        llvm::DILocation::get(scope->getContext(), sym->pos.first_line, sym->pos.first_column, scope, nullptr, false);
-     llvm::Instruction *declareInst =
--        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(),
--                                    llvm::DebugLoc::get(sym->pos.first_line, sym->pos.first_column, scope), bblock);
-+        m->diBuilder->insertDeclare(sym->storagePtr, var, m->diBuilder->createExpression(), diLoc, bblock);
-     AddDebugPos(declareInst, &sym->pos, scope);
- }
- 
diff --git a/srcpkgs/ispc/patches/llvm12-002.patch b/srcpkgs/ispc/patches/llvm12-002.patch
deleted file mode 100644
index 0903f30da10d..000000000000
--- a/srcpkgs/ispc/patches/llvm12-002.patch
+++ /dev/null
@@ -1,923 +0,0 @@
-From 0597a79d084c014780136da906afe21d15e982cb Mon Sep 17 00:00:00 2001
-From: DeepakRajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Tue, 5 Jan 2021 13:53:30 -0800
-Subject: [PATCH] Remove LLVM 8.0 and LLVM 9.0. (#1966)
-
----
- .appveyor.yml                        |  3 --
- .travis.yml                          |  7 ---
- CMakeLists.txt                       | 12 ++----
- src/ast.cpp                          |  4 --
- src/ctx.cpp                          | 30 -------------
- src/gen/GlobalsLocalization.cpp      |  4 --
- src/ispc.cpp                         | 20 ---------
- src/ispc.h                           |  3 +-
- src/ispc_version.h                   |  4 +-
- src/main.cpp                         | 13 ------
- src/module.cpp                       | 27 ------------
- src/module.h                         |  2 -
- src/opt.cpp                          | 64 ++--------------------------
- src/type.cpp                         | 10 ++---
- tests/lit-tests/1771.ispc            |  1 -
- tests/lit-tests/1844.ispc            |  3 --
- tests/lit-tests/1926.ispc            |  2 -
- tests/lit-tests/cpus_x86.ispc        |  2 +
- tests/lit-tests/cpus_x86_llvm10.ispc | 11 -----
- tests/lit-tests/lit.cfg              |  5 ---
- 20 files changed, 14 insertions(+), 213 deletions(-)
- delete mode 100644 tests/lit-tests/cpus_x86_llvm10.ispc
-
-diff --git a/.appveyor.yml b/.appveyor.yml
-index 451a7b3e0..7945cca2a 100644
---- a/.appveyor.yml
-+++ b/.appveyor.yml
-@@ -41,8 +41,6 @@ environment:
-       LLVM_VERSION: latest
-     - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
-       LLVM_VERSION: 10.0
--    - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
--      LLVM_VERSION: 9.0
- 
- for:
- -
-@@ -62,7 +60,6 @@ for:
-         if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2019" ( (set generator="Visual Studio 16") & (set vsversion=2019))
-         set LLVM_TAR=llvm-11.0.0-win.vs2019-Release+Asserts-x86.arm.wasm.7z
-         if "%LLVM_VERSION%"=="10.0" (set LLVM_TAR=llvm-10.0.1-win.vs2019-Release+Asserts-x86.arm.wasm.zip)
--        if "%LLVM_VERSION%"=="9.0" (set LLVM_TAR=llvm-9.0.1-win.vs2017-Release+Asserts-x86.arm.wasm.zip)
-   install:
-     - ps: choco install --no-progress winflexbison3 wget 7zip
-     - cmd: |-
-diff --git a/.travis.yml b/.travis.yml
-index 2e96017a6..3a6b85264 100644
---- a/.travis.yml
-+++ b/.travis.yml
-@@ -108,13 +108,6 @@ jobs:
-         - LLVM_TAR=llvm-10.0.1-ubuntu16.04-Release+Asserts-x86.arm.wasm.tar.xz
-         - LLVM_REPO=https://github.com/dbabokin/llvm-project
-         - ISPC_HOME=$TRAVIS_BUILD_DIR
--    # LLVM 9.0 + Ubuntu 16.04: build, lit tests, examples (build + run), benchmarks (build + trial run)
--    - <<: *my_tag
--      env:
--        - LLVM_VERSION=9.0 OS=Ubuntu16.04
--        - LLVM_TAR=llvm-9.0.1-ubuntu16.04-Release+Asserts-x86.arm.wasm.tar.xz
--        - LLVM_REPO=https://github.com/dbabokin/llvm-project
--        - ISPC_HOME=$TRAVIS_BUILD_DIR
-     # WASM enabled build
-     # LLVM 11.0 + Ubuntu 16.04: build, lit tests, examples (build), benchmarks (build + trial run)
-     - <<: *my_tag
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 5fa863fcf..a6b3ed251 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -241,10 +241,8 @@ if (X86_ENABLED)
-         avx2-i8x32 avx2-i16x16
-         avx2-i32x4 avx2-i32x8 avx2-i32x16 avx2-i64x4
-         avx512knl-i32x16
--        avx512skx-i32x16 avx512skx-i32x8)
--    if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "10.0.0")
--        list(APPEND ISPC_TARGETS avx512skx-i8x64 avx512skx-i16x32)
--    endif()
-+        avx512skx-i32x16 avx512skx-i32x8
-+        avx512skx-i8x64 avx512skx-i16x32)
- endif()
- if (ARM_ENABLED)
-     list(APPEND ISPC_TARGETS neon-i8x16 neon-i16x8 neon-i32x4 neon-i32x8)
-@@ -259,11 +257,7 @@ if (WASM_ENABLED)
- endif()
- 
- set(CLANG_LIBRARY_LIST clangFrontend clangDriver clangSerialization clangParse clangSema clangAnalysis clangAST clangBasic clangEdit clangLex)
--set(LLVM_COMPONENTS engine ipo bitreader bitwriter instrumentation linker option)
--
--if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "10.0.0")
--    list(APPEND LLVM_COMPONENTS frontendopenmp)
--endif()
-+set(LLVM_COMPONENTS engine ipo bitreader bitwriter instrumentation linker option frontendopenmp)
- 
- if (X86_ENABLED)
-     list(APPEND LLVM_COMPONENTS x86)
-diff --git a/src/ast.cpp b/src/ast.cpp
-index 20f75a29c..5a43c4854 100644
---- a/src/ast.cpp
-+++ b/src/ast.cpp
-@@ -44,9 +44,7 @@
- #include "sym.h"
- #include "util.h"
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/TimeProfiler.h>
--#endif
- ///////////////////////////////////////////////////////////////////////////
- // ASTNode
- 
-@@ -62,9 +60,7 @@ void AST::AddFunction(Symbol *sym, Stmt *code) {
- }
- 
- void AST::GenerateIR() {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope TimeScope("GenerateIR");
--#endif
-     for (unsigned int i = 0; i < functions.size(); ++i)
-         functions[i]->GenerateIR();
- }
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 977e9d222..42c4ea09d 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -309,21 +309,13 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym, llvm::F
-             char buf[256];
-             snprintf(buf, sizeof(buf), "__off_all_on_mask_%s", g->target->GetISAString());
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_8_0
--            llvm::Constant *offFunc = m->module->getOrInsertFunction(buf, LLVMTypes::VoidType);
--#else // LLVM 9.0+
-             llvm::FunctionCallee offFuncCallee = m->module->getOrInsertFunction(buf, LLVMTypes::VoidType);
-             llvm::Constant *offFunc = llvm::cast<llvm::Constant>(offFuncCallee.getCallee());
--#endif
-             AssertPos(currentPos, llvm::isa<llvm::Function>(offFunc));
-             llvm::BasicBlock *offBB = llvm::BasicBlock::Create(*g->ctx, "entry", (llvm::Function *)offFunc, 0);
-             llvm::StoreInst *inst = new llvm::StoreInst(LLVMMaskAllOff, globalAllOnMaskPtr, offBB);
-             if (g->opt.forceAlignedMemory) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-                 inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-             }
-             llvm::ReturnInst::Create(*g->ctx, offBB);
-         }
-@@ -2288,11 +2280,7 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
- #endif
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-     }
- 
-     AddDebugPos(inst);
-@@ -2431,11 +2419,7 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-                 // vs the proper alignment in practice.)
-                 int align = 1;
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                inst->setAlignment(align);
--#else // LLVM 10.0+
-                 inst->setAlignment(llvm::MaybeAlign(align).valueOrOne());
--#endif
-             }
- 
-             AddDebugPos(inst);
-@@ -2649,11 +2633,7 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-         align = g->target->getNativeVectorAlignment();
- 
-     if (align != 0) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(align);
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(align).valueOrOne());
--#endif
-     }
-     // Don't add debugging info to alloca instructions
-     return inst;
-@@ -2926,11 +2906,7 @@ void FunctionEmitContext::StoreInst(llvm::Value *value, llvm::Value *ptr, const
-     llvm::StoreInst *inst = new llvm::StoreInst(value, ptr, bblock);
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        inst->setAlignment(g->target->getNativeVectorAlignment());
--#else // LLVM 10.0+
-         inst->setAlignment(llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
--#endif
-     }
- 
- #ifdef ISPC_GENX_ENABLED
-@@ -3025,16 +3001,10 @@ void FunctionEmitContext::MemcpyInst(llvm::Value *dest, llvm::Value *src, llvm::
-     }
-     if (align == NULL)
-         align = LLVMInt32(1);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_8_0
--    llvm::Constant *mcFunc =
--        m->module->getOrInsertFunction("llvm.memcpy.p0i8.p0i8.i64", LLVMTypes::VoidType, LLVMTypes::VoidPointerType,
--                                       LLVMTypes::VoidPointerType, LLVMTypes::Int64Type, LLVMTypes::BoolType);
--#else // LLVM 9.0+
-     llvm::FunctionCallee mcFuncCallee =
-         m->module->getOrInsertFunction("llvm.memcpy.p0i8.p0i8.i64", LLVMTypes::VoidType, LLVMTypes::VoidPointerType,
-                                        LLVMTypes::VoidPointerType, LLVMTypes::Int64Type, LLVMTypes::BoolType);
-     llvm::Constant *mcFunc = llvm::cast<llvm::Constant>(mcFuncCallee.getCallee());
--#endif
-     AssertPos(currentPos, mcFunc != NULL);
-     AssertPos(currentPos, llvm::isa<llvm::Function>(mcFunc));
- 
-diff --git a/src/gen/GlobalsLocalization.cpp b/src/gen/GlobalsLocalization.cpp
-index 193a66289..a176e9462 100644
---- a/src/gen/GlobalsLocalization.cpp
-+++ b/src/gen/GlobalsLocalization.cpp
-@@ -470,11 +470,7 @@ void GlobalsLocalization::LocalizeGlobals(LocalizationInfo &LI) {
-         Instruction &FirstI = *Fn->getEntryBlock().begin();
-         Type *ElemTy = GV->getType()->getElementType();
-         AllocaInst *Alloca = new AllocaInst(ElemTy, 0, GV->getName() + ".local", &FirstI);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--        Alloca->setAlignment(GV->getAlignment());
--#else // LLVM 10.0+
-         Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()));
--#endif
-         if (!isa<UndefValue>(GV->getInitializer()))
-             new StoreInst(GV->getInitializer(), Alloca, &FirstI);
- 
-diff --git a/src/ispc.cpp b/src/ispc.cpp
-index e2d0f206e..fac5233f7 100644
---- a/src/ispc.cpp
-+++ b/src/ispc.cpp
-@@ -272,9 +272,7 @@ typedef enum {
-     CPU_Silvermont,
- 
-     CPU_ICX,
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     CPU_TGL,
--#endif
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-     CPU_ADL,
-     CPU_SPR,
-@@ -365,10 +363,8 @@ class AllCPUs {
- 
-         names[CPU_ICX].push_back("icelake-server");
-         names[CPU_ICX].push_back("icx");
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         names[CPU_TGL].push_back("tigerlake");
-         names[CPU_TGL].push_back("tgl");
--#endif
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-         names[CPU_ADL].push_back("alderlake");
-         names[CPU_ADL].push_back("adl");
-@@ -411,11 +407,9 @@ class AllCPUs {
-         compat[CPU_ADL] = Set(CPU_ADL, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont,
-                               CPU_SandyBridge, CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_None);
- #endif
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         compat[CPU_TGL] =
-             Set(CPU_TGL, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont, CPU_SandyBridge,
-                 CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_SKX, CPU_ICL, CPU_ICX, CPU_None);
--#endif
-         compat[CPU_ICX] = Set(CPU_ICX, CPU_x86_64, CPU_Bonnell, CPU_Penryn, CPU_Core2, CPU_Nehalem, CPU_Silvermont,
-                               CPU_SandyBridge, CPU_IvyBridge, CPU_Haswell, CPU_Broadwell, CPU_SKX, CPU_ICL, CPU_None);
- 
-@@ -556,9 +550,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_12_0
-         case CPU_SPR:
- #endif
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         case CPU_TGL:
--#endif
-         case CPU_ICX:
-         case CPU_ICL:
-         case CPU_SKX:
-@@ -916,7 +908,6 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         }
-         break;
-     case ISPCTarget::avx512skx_i8x64:
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0 // LLVM 10.0+
-         // This target is enabled only for LLVM 10.0 and later
-         // because LLVM requires a number of fixes, which are
-         // committed to LLVM 11.0 and can be applied to 10.0, but not
-@@ -937,12 +928,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         this->m_hasVecPrefetch = false;
-         CPUfromISA = CPU_SKX;
-         break;
--#else
--        unsupported_target = true;
--        break;
--#endif
-     case ISPCTarget::avx512skx_i16x32:
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0 // LLVM 10.0+
-         // This target is enabled only for LLVM 10.0 and later
-         // because LLVM requires a number of fixes, which are
-         // committed to LLVM 11.0 and can be applied to 10.0, but not
-@@ -963,10 +949,6 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, bool pic, boo
-         this->m_hasVecPrefetch = false;
-         CPUfromISA = CPU_SKX;
-         break;
--#else
--        unsupported_target = true;
--        break;
--#endif
- #ifdef ISPC_ARM_ENABLED
-     case ISPCTarget::neon_i8x16:
-         this->m_isa = Target::NEON;
-@@ -1662,11 +1644,9 @@ Globals::Globals() {
-     isMultiTargetCompilation = false;
-     errorLimit = -1;
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     enableTimeTrace = false;
-     // set default granularity to 500.
-     timeTraceGranularity = 500;
--#endif
-     target = NULL;
-     ctx = new llvm::LLVMContext;
- 
-diff --git a/src/ispc.h b/src/ispc.h
-index e25d8830e..de357a21c 100644
---- a/src/ispc.h
-+++ b/src/ispc.h
-@@ -695,13 +695,12 @@ struct Globals {
- 
-     /* Number of errors to show in ISPC. */
-     int errorLimit;
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-+
-     /* When true, enable compile time tracing. */
-     bool enableTimeTrace;
- 
-     /* When compile time tracing is enabled, set time granularity. */
-     int timeTraceGranularity;
--#endif
- };
- 
- enum {
-diff --git a/src/ispc_version.h b/src/ispc_version.h
-index d781347fd..434b2d678 100644
---- a/src/ispc_version.h
-+++ b/src/ispc_version.h
-@@ -44,13 +44,11 @@
- 
- #define ISPC_LLVM_VERSION (LLVM_VERSION_MAJOR * 10000 + LLVM_VERSION_MINOR * 100)
- 
--#define ISPC_LLVM_8_0 80000
--#define ISPC_LLVM_9_0 90000
- #define ISPC_LLVM_10_0 100000
- #define ISPC_LLVM_11_0 110000
- #define ISPC_LLVM_12_0 120000
- 
--#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_8_0
-+#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_10_0
- #define LATEST_SUPPORTED_LLVM ISPC_LLVM_12_0
- 
- #ifdef __ispc__xstr
-diff --git a/src/main.cpp b/src/main.cpp
-index 8f64330cc..5c920eabc 100644
---- a/src/main.cpp
-+++ b/src/main.cpp
-@@ -55,9 +55,7 @@
- #include <llvm/Support/Signals.h>
- #include <llvm/Support/TargetRegistry.h>
- #include <llvm/Support/TargetSelect.h>
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/ToolOutputFile.h>
--#endif
- 
- #ifdef ISPC_HOST_IS_WINDOWS
- #define strcasecmp stricmp
-@@ -181,11 +179,9 @@ static void lPrintVersion() {
-     snprintf(targetHelp, sizeof(targetHelp), "[--target-os=<os>]\t\t\tSelect target OS.  <os>={%s}",
-              g->target_registry->getSupportedOSes().c_str());
-     PrintWithWordBreaks(targetHelp, 24, TerminalWidth(), stdout);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     printf("    [--time-trace]\t\t\tTurn on time profiler. Generates JSON file based on output filename.\n");
-     printf("    [--time-trace-granularity=<value>\tMinimum time granularity (in microseconds) traced by time "
-            "profiler.\n");
--#endif
-     printf("    [--version]\t\t\t\tPrint ispc version\n");
- #ifdef ISPC_GENX_ENABLED
-     printf("    [--vc-options=<\"-option1 -option2...\">]\t\t\t\tPass additional options to Vector Compiler backend\n");
-@@ -462,7 +458,6 @@ static void setCallingConv(VectorCallStatus vectorCall, Arch arch) {
-     }
- }
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- static void writeCompileTimeFile(const char *outFileName) {
-     llvm::SmallString<128> jsonFileName(outFileName);
-     jsonFileName.append(".json");
-@@ -479,7 +474,6 @@ static void writeCompileTimeFile(const char *outFileName) {
-     of->keep();
-     return;
- }
--#endif
- 
- static std::set<int> ParsingPhases(char *stages, ArgErrors &errorHandler) {
-     constexpr int parsing_limit = 100;
-@@ -791,12 +785,10 @@ int main(int Argc, char *Argv[]) {
-             }
-         } else if (!strncmp(argv[i], "--force-alignment=", 18)) {
-             g->forceAlignment = atoi(argv[i] + 18);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         } else if (!strcmp(argv[i], "--time-trace")) {
-             g->enableTimeTrace = true;
-         } else if (!strncmp(argv[i], "--time-trace-granularity=", 25)) {
-             g->timeTraceGranularity = atoi(argv[i] + 25);
--#endif
-         } else if (!strcmp(argv[i], "--woff") || !strcmp(argv[i], "-woff")) {
-             g->disableWarnings = true;
-             g->emitPerfWarnings = false;
-@@ -1059,7 +1051,6 @@ int main(int Argc, char *Argv[]) {
- 
-     // This needs to happen after the TargetOS is decided.
-     setCallingConv(vectorCall, arch);
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     if (g->enableTimeTrace) {
-         llvm::timeTraceProfilerInitialize(g->timeTraceGranularity, "ispc");
-     }
-@@ -1077,9 +1068,5 @@ int main(int Argc, char *Argv[]) {
-         }
-         llvm::timeTraceProfilerCleanup();
-     }
--#else
--    int ret = Module::CompileAndOutput(file, arch, cpu, targets, flags, ot, outFileName, headerFileName, depsFileName,
--                                       depsTargetName, hostStubFileName, devStubFileName);
--#endif
-     return ret;
- }
-diff --git a/src/module.cpp b/src/module.cpp
-index fe7452df1..a85fec77a 100644
---- a/src/module.cpp
-+++ b/src/module.cpp
-@@ -170,9 +170,7 @@ Module::Module(const char *fn) {
-     module->setDataLayout(g->target->getDataLayout()->getStringRepresentation());
- 
-     if (g->generateDebuggingSymbols) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Create Debug Data");
--#endif
-         // To enable debug information on Windows, we have to let llvm know, that
-         // debug information should be emitted in CodeView format.
-         if (g->target_os == TargetOS::windows) {
-@@ -226,10 +224,8 @@ extern YY_BUFFER_STATE yy_create_buffer(FILE *, int);
- extern void yy_delete_buffer(YY_BUFFER_STATE);
- 
- int Module::CompileFile() {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope CompileFileTimeScope(
-         "CompileFile", llvm::StringRef(filename + ("_" + std::string(g->target->GetISAString()))));
--#endif
-     extern void ParserInit();
-     ParserInit();
- 
-@@ -238,18 +234,14 @@ int Module::CompileFile() {
-     // variable 'm' to be initialized and available (which it isn't until
-     // the Module constructor returns...)
-     {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("DefineStdlib");
--#endif
-         DefineStdlib(symbolTable, g->ctx, module, g->includeStdlib);
-     }
- 
-     bool runPreprocessor = g->runCPP;
- 
-     if (runPreprocessor) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Frontend parser");
--#endif
-         if (!IsStdin(filename)) {
-             // Try to open the file first, since otherwise we crash in the
-             // preprocessor if the file doesn't exist.
-@@ -268,9 +260,7 @@ int Module::CompileFile() {
-         yyparse();
-         yy_delete_buffer(strbuf);
-     } else {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-         llvm::TimeTraceScope TimeScope("Frontend parser");
--#endif
-         // No preprocessor, just open up the file if it's not stdin..
-         FILE *f = NULL;
-         if (IsStdin(filename)) {
-@@ -297,9 +287,7 @@ int Module::CompileFile() {
- 
-     if (diBuilder)
-         diBuilder->finalize();
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope TimeScope("Optimize");
--#endif
-     if (errorCount == 0)
-         Optimize(module, g->opt.level);
- 
-@@ -1243,15 +1231,8 @@ bool Module::writeObjectFileOrAssembly(llvm::TargetMachine *targetMachine, llvm:
-                                        const char *outFileName) {
-     // Figure out if we're generating object file or assembly output, and
-     // set binary output for object files
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    Assert(!g->target->isGenXTarget());
--    llvm::TargetMachine::CodeGenFileType fileType =
--        (outputType == Object) ? llvm::TargetMachine::CGFT_ObjectFile : llvm::TargetMachine::CGFT_AssemblyFile;
--    bool binary = (fileType == llvm::TargetMachine::CGFT_ObjectFile);
--#else // LLVM 10.0+
-     llvm::CodeGenFileType fileType = (outputType == Object) ? llvm::CGFT_ObjectFile : llvm::CGFT_AssemblyFile;
-     bool binary = (fileType == llvm::CGFT_ObjectFile);
--#endif
- 
-     llvm::sys::fs::OpenFlags flags = binary ? llvm::sys::fs::F_None : llvm::sys::fs::F_Text;
- 
-@@ -2219,11 +2200,7 @@ void Module::execPreprocessor(const char *infilename, llvm::raw_string_ostream *
-     inst.setTarget(target);
-     inst.createSourceManager(inst.getFileManager());
- 
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    clang::FrontendInputFile inputFile(infilename, clang::InputKind::Unknown);
--#else // LLVM 10.0+
-     clang::FrontendInputFile inputFile(infilename, clang::InputKind());
--#endif
- 
-     inst.InitializeSourceManager(inputFile);
- 
-@@ -2722,9 +2699,7 @@ int Module::CompileAndOutput(const char *srcFile, Arch arch, const char *cpu, st
- 
-         m = new Module(srcFile);
-         if (m->CompileFile() == 0) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-             llvm::TimeTraceScope TimeScope("Backend");
--#endif
- #ifdef ISPC_GENX_ENABLED
-             if (outputType == Asm || outputType == Object) {
-                 if (g->target->isGenXTarget()) {
-@@ -2855,9 +2830,7 @@ int Module::CompileAndOutput(const char *srcFile, Arch arch, const char *cpu, st
- 
-             m = new Module(srcFile);
-             int compileFileError = m->CompileFile();
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-             llvm::TimeTraceScope TimeScope("Backend");
--#endif
-             if (compileFileError == 0) {
-                 // Create the dispatch module, unless already created;
-                 // in the latter case, just do the checking
-diff --git a/src/module.h b/src/module.h
-index 61d3cfea0..603124d50 100644
---- a/src/module.h
-+++ b/src/module.h
-@@ -43,9 +43,7 @@
- 
- #include <llvm/IR/DebugInfo.h>
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
- #include <llvm/Support/TimeProfiler.h>
--#endif
- 
- #ifdef ISPC_GENX_ENABLED
- #include "ocl_igc_interface/igc_ocl_device_ctx.h"
-diff --git a/src/opt.cpp b/src/opt.cpp
-index a655a8344..5b1ac7b63 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -66,6 +66,7 @@
- #include <llvm/IR/Instructions.h>
- #include <llvm/IR/IntrinsicInst.h>
- #include <llvm/IR/Intrinsics.h>
-+#include <llvm/IR/IntrinsicsX86.h>
- #include <llvm/IR/LegacyPassManager.h>
- #include <llvm/IR/Module.h>
- #include <llvm/IR/PatternMatch.h>
-@@ -85,9 +86,6 @@
- #include <llvm/Transforms/Scalar/InstSimplifyPass.h>
- #include <llvm/Transforms/Utils.h>
- #include <llvm/Transforms/Utils/BasicBlockUtils.h>
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
--#include <llvm/IR/IntrinsicsX86.h>
--#endif
- 
- #ifdef ISPC_HOST_IS_LINUX
- #include <alloca.h>
-@@ -1003,10 +1001,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
-                 name = LLVMGetName(callInst->getArgOperand(0), "_load");
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                llvm::Instruction *loadInst =
--                    new llvm::LoadInst(castPtr, name, false /* not volatile */, align, (llvm::Instruction *)NULL);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-                 llvm::Instruction *loadInst = new llvm::LoadInst(castPtr, name, false /* not volatile */,
-                                                                  llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
- #else
-@@ -1043,13 +1038,8 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedStore32 ? 4 : 8;
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                llvm::StoreInst *storeInst = new llvm::StoreInst(rvalue, castPtr, (llvm::Instruction *)NULL);
--                storeInst->setAlignment(align);
--#else
-                 llvm::StoreInst *storeInst = new llvm::StoreInst(rvalue, castPtr, (llvm::Instruction *)NULL,
-                                                                  llvm::MaybeAlign(align).valueOrOne());
--#endif
-                 lCopyMetadata(storeInst, callInst);
-                 llvm::ReplaceInstWithInst(callInst, storeInst);
- 
-@@ -1066,9 +1056,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool IntrinsicsOpt::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("IntrinsicsOpt::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -1239,9 +1227,7 @@ bool InstructionSimplifyPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool InstructionSimplifyPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("InstructionSimplifyPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -2974,16 +2960,10 @@ static bool lImproveMaskedStore(llvm::CallInst *callInst) {
- 
-             lvalue = new llvm::BitCastInst(lvalue, ptrType, "lvalue_to_ptr_type", callInst);
-             lCopyMetadata(lvalue, callInst);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--            store =
--                new llvm::StoreInst(rvalue, lvalue, false /* not volatile */,
--                                    g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align);
--#else
-             store = new llvm::StoreInst(
-                 rvalue, lvalue, false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-                     .valueOrOne());
--#endif
-         }
-         if (store != NULL) {
-             lCopyMetadata(store, callInst);
-@@ -3059,11 +3039,7 @@ static bool lImproveMaskedLoad(llvm::CallInst *callInst, llvm::BasicBlock::itera
-         {
-             llvm::Type *ptrType = llvm::PointerType::get(callInst->getType(), 0);
-             ptr = new llvm::BitCastInst(ptr, ptrType, "ptr_cast_for_load", callInst);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--            load = new llvm::LoadInst(ptr, callInst->getName(), false /* not volatile */,
--                                      g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align,
--                                      (llvm::Instruction *)NULL);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-             load = new llvm::LoadInst(
-                 ptr, callInst->getName(), false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-@@ -3129,9 +3105,7 @@ bool ImproveMemoryOpsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ImproveMemoryOpsPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ImproveMemoryOpsPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -3424,9 +3398,7 @@ llvm::Value *lGEPAndLoad(llvm::Value *basePtr, int64_t offset, int align, llvm::
-                          llvm::Type *type) {
-     llvm::Value *ptr = lGEPInst(basePtr, LLVMInt64(offset), "new_base", insertBefore);
-     ptr = new llvm::BitCastInst(ptr, llvm::PointerType::get(type, 0), "ptr_cast", insertBefore);
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--    return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, align, insertBefore);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-     return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, llvm::MaybeAlign(align), insertBefore);
- #else // LLVM 11.0+
-     return new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-@@ -4135,9 +4107,7 @@ bool GatherCoalescePass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool GatherCoalescePass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("GatherCoalescePass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -4467,9 +4437,7 @@ bool ReplacePseudoMemoryOpsPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplacePseudoMemoryOpsPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplacePseudoMemoryOpsPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -4573,9 +4541,7 @@ bool IsCompileTimeConstantPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool IsCompileTimeConstantPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("IsCompileTimeConstantPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5201,9 +5167,7 @@ bool PeepholePass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool PeepholePass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("PeepholePass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5299,9 +5263,7 @@ bool ReplaceStdlibShiftPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceStdlibShiftPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceStdlibShiftPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -5399,9 +5361,7 @@ llvm::Instruction *FixBooleanSelectPass::fixSelect(llvm::SelectInst *sel, llvm::
- }
- 
- bool FixBooleanSelectPass::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("FixBooleanSelectPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
- 
-     return modifiedAny;
-@@ -5964,9 +5924,7 @@ bool GenXGatherCoalescing::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool GenXGatherCoalescing::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("GenXGatherCoalescing::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6113,9 +6071,7 @@ bool PromoteToPrivateMemoryPass::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool PromoteToPrivateMemoryPass::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("PromoteToPrivateMemoryPass::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6181,9 +6137,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceLLVMIntrinsics::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceLLVMIntrinsics::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6278,9 +6232,7 @@ bool ReplaceUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
- 
- bool ReplaceUnsupportedInsts::runOnFunction(llvm::Function &F) {
- 
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("ReplaceUnsupportedInsts::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6369,9 +6321,7 @@ bool CheckUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool CheckUnsupportedInsts::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("CheckUnsupportedInsts::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6440,9 +6390,7 @@ bool MangleOpenCLBuiltins::runOnBasicBlock(llvm::BasicBlock &bb) {
- }
- 
- bool MangleOpenCLBuiltins::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("MangleOpenCLBuiltins::runOnFunction", F.getName());
--#endif
-     bool modifiedAny = false;
-     for (llvm::BasicBlock &BB : F) {
-         modifiedAny |= runOnBasicBlock(BB);
-@@ -6828,9 +6776,7 @@ bool FixAddressSpace::runOnFunction(llvm::Function &F) {
-     // Transformations are correct when the function is not internal.
-     // This is due to address space calculation algorithm.
-     // TODO: problems can be met in case of Stack Calls
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("FixAddressSpace::runOnFunction", F.getName());
--#endif
-     if (F.getLinkage() == llvm::GlobalValue::LinkageTypes::InternalLinkage)
-         return false;
- 
-@@ -6854,9 +6800,7 @@ class DemotePHIs : public llvm::FunctionPass {
- char DemotePHIs::ID = 0;
- 
- bool DemotePHIs::runOnFunction(llvm::Function &F) {
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_10_0
-     llvm::TimeTraceScope FuncScope("DemotePHIs::runOnFunction", F.getName());
--#endif
-     if (F.isDeclaration() || skipFunction(F))
-         return false;
-     std::vector<llvm::Instruction *> WorkList;
-diff --git a/src/type.cpp b/src/type.cpp
-index 688a4e874..fa0cb04db 100644
---- a/src/type.cpp
-+++ b/src/type.cpp
-@@ -1822,14 +1822,10 @@ llvm::DIType *StructType::GetDIType(llvm::DIScope *scope) const {
-     llvm::DIFile *diFile = pos.GetDIFile();
-     llvm::DINamespace *diSpace = pos.GetDINamespace();
-     return m->diBuilder->createStructType(diSpace, GetString(), diFile,
--                                          pos.first_line,          // Line number
--                                          layout->getSizeInBits(), // Size in bits
--#if ISPC_LLVM_VERSION <= ISPC_LLVM_9_0
--                                          layout->getAlignment() * 8, // Alignment in bits
--#else                                                                 // LLVM 10.0+
-+                                          pos.first_line,                     // Line number
-+                                          layout->getSizeInBits(),            // Size in bits
-                                           layout->getAlignment().value() * 8, // Alignment in bits
--#endif
--                                          llvm::DINode::FlagZero, // Flags
-+                                          llvm::DINode::FlagZero,             // Flags
-                                           NULL, elements);
- }
- 
-diff --git a/tests/lit-tests/1771.ispc b/tests/lit-tests/1771.ispc
-index 98064d84d..4feb73dd7 100644
---- a/tests/lit-tests/1771.ispc
-+++ b/tests/lit-tests/1771.ispc
-@@ -5,7 +5,6 @@
- // RUN: %{ispc} %s --target=sse4-i16x8 --emit-asm -o - | FileCheck %s -check-prefix=CHECKSSE4_I16X8
- // RUN: %{ispc} %s --target=sse4-i8x16 --emit-asm -o - | FileCheck %s -check-prefix=CHECKSSE4_I8X16
- 
--// REQUIRES: LLVM_10_0+
- // REQUIRES: X86_ENABLED
- 
- // CHECKAVX2_I32X8: {{[a-z]*xor[a-z]*}}  %xmm0, %xmm0, %xmm0
-diff --git a/tests/lit-tests/1844.ispc b/tests/lit-tests/1844.ispc
-index 793a8866c..189edf4c3 100644
---- a/tests/lit-tests/1844.ispc
-+++ b/tests/lit-tests/1844.ispc
-@@ -6,9 +6,6 @@
- 
- // REQUIRES: X86_ENABLED
- 
--// It doesn't work for anything earlier than 10.0, but it will not be fixed, so don't run.
--// REQUIRES: LLVM_10_0+
--
- extern uniform unsigned int64 var_6;
- extern uniform unsigned int16 var_11;
- extern uniform bool arr_201 [1] [15] [20];
-diff --git a/tests/lit-tests/1926.ispc b/tests/lit-tests/1926.ispc
-index 70f7cc3c2..7921c91a6 100644
---- a/tests/lit-tests/1926.ispc
-+++ b/tests/lit-tests/1926.ispc
-@@ -2,8 +2,6 @@
- // RUN: cat %T/1926.o.json \
- // RUN:   | FileCheck %s
- 
--// REQUIRES: LLVM_10_0+
--
- // CHECK: "traceEvents"
- // CHECK: "detail"
- export uniform int foo(uniform int a[], uniform int count) {
-diff --git a/tests/lit-tests/cpus_x86.ispc b/tests/lit-tests/cpus_x86.ispc
-index 516efdd4c..4d60186f6 100644
---- a/tests/lit-tests/cpus_x86.ispc
-+++ b/tests/lit-tests/cpus_x86.ispc
-@@ -24,6 +24,8 @@
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icl
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icelake-server
- //; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=icx
-+//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tigerlake
-+//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tgl
- 
- // REQUIRES: X86_ENABLED
- 
-diff --git a/tests/lit-tests/cpus_x86_llvm10.ispc b/tests/lit-tests/cpus_x86_llvm10.ispc
-deleted file mode 100644
-index ef00000e5..000000000
---- a/tests/lit-tests/cpus_x86_llvm10.ispc
-+++ /dev/null
-@@ -1,11 +0,0 @@
--// The test checks that cpu definitions (including all synonyms) are successfully consumed by compiler.
--
--//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tigerlake
--//; RUN: %{ispc} %s -o %t.o --nostdlib --target=sse2-i32x4 --cpu=tgl
--
--// REQUIRES: X86_ENABLED
--// REQUIRES: LLVM_10_0+
--
--uniform int i;
--
--void foo() {}
-diff --git a/tests/lit-tests/lit.cfg b/tests/lit-tests/lit.cfg
-index 17016579d..045e69437 100644
---- a/tests/lit-tests/lit.cfg
-+++ b/tests/lit-tests/lit.cfg
-@@ -30,11 +30,6 @@ print("Config:")
- 
- # LLVM version
- llvm_version = LooseVersion(ispc_llvm_version_number)
--if llvm_version >= LooseVersion("10.0.0"):
--    print("LLVM_10_0+: YES")
--    config.available_features.add("LLVM_10_0+")
--else:
--    print("LLVM_10_0+: NO")
- 
- if llvm_version >= LooseVersion("12.0.0"):
-     print("LLVM_12_0+: YES")
diff --git a/srcpkgs/ispc/patches/llvm12-003.patch b/srcpkgs/ispc/patches/llvm12-003.patch
deleted file mode 100644
index 0423afc9e3f9..000000000000
--- a/srcpkgs/ispc/patches/llvm12-003.patch
+++ /dev/null
@@ -1,1504 +0,0 @@
-From 1851d18b213dbad169937076176b2d5509733c76 Mon Sep 17 00:00:00 2001
-From: Deepak Rajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Tue, 12 Jan 2021 22:15:12 -0800
-Subject: [PATCH] fixes #1821 - Removing LLVMGetName() and switching to
- LLVM::Twine.
-
----
- src/ctx.cpp      | 304 ++++++++++++++++++++++-------------------------
- src/ctx.h        |  72 +++++------
- src/expr.cpp     |  36 +++---
- src/llvmutil.cpp |  17 ---
- src/llvmutil.h   |   5 -
- src/opt.cpp      | 103 +++++++++-------
- 6 files changed, 255 insertions(+), 282 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 42c4ea09d..ded524b71 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1020,8 +1020,8 @@ void FunctionEmitContext::EmitCaseLabel(int value, bool checkMask, SourcePos pos
-     llvm::BasicBlock *bbCaseImpl = NULL;
-     if (emitGenXHardwareMask()) {
-         // Create basic block with actual case implementation
--        std::string bbName = bbCase->getName().str() + "_impl";
--        bbCaseImpl = CreateBasicBlock(bbName.c_str(), bbCase);
-+        llvm::Twine bbName = llvm::Twine(bbCase->getName()) + "_impl";
-+        bbCaseImpl = CreateBasicBlock(bbName, bbCase);
-     }
- #endif
- 
-@@ -1185,7 +1185,7 @@ bool FunctionEmitContext::initLabelBBlocks(ASTNode *node, void *data) {
-     if (ctx->labelMap.find(ls->name) != ctx->labelMap.end())
-         Error(ls->pos, "Multiple labels named \"%s\" in function.", ls->name.c_str());
-     else {
--        llvm::BasicBlock *bb = ctx->CreateBasicBlock(ls->name.c_str());
-+        llvm::BasicBlock *bb = ctx->CreateBasicBlock(ls->name);
-         ctx->labelMap[ls->name] = bb;
-     }
-     return true;
-@@ -1299,7 +1299,7 @@ llvm::Value *FunctionEmitContext::Any(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_any"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_any");
- }
- 
- llvm::Value *FunctionEmitContext::All(llvm::Value *mask) {
-@@ -1315,7 +1315,7 @@ llvm::Value *FunctionEmitContext::All(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_all"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_all");
- }
- 
- llvm::Value *FunctionEmitContext::None(llvm::Value *mask) {
-@@ -1331,7 +1331,7 @@ llvm::Value *FunctionEmitContext::None(llvm::Value *mask) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, mask, LLVMGetName(mask, "_none"));
-+    return CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_none");
- }
- 
- llvm::Value *FunctionEmitContext::LaneMask(llvm::Value *v) {
-@@ -1349,7 +1349,7 @@ llvm::Value *FunctionEmitContext::LaneMask(llvm::Value *v) {
-     // We can actually call either one, since both are i32s as far as
-     // LLVM's type system is concerned...
-     llvm::Function *fmm = mm[0]->function;
--    return CallInst(fmm, NULL, v, LLVMGetName(v, "_movmsk"));
-+    return CallInst(fmm, NULL, v, llvm::Twine(v->getName()) + "_movmsk");
- }
- 
- llvm::Value *FunctionEmitContext::MasksAllEqual(llvm::Value *v1, llvm::Value *v2) {
-@@ -1364,11 +1364,12 @@ llvm::Value *FunctionEmitContext::MasksAllEqual(llvm::Value *v1, llvm::Value *v2
- #else
-     if (g->target->getArch() == Arch::wasm32) {
-         llvm::Function *fmm = m->module->getFunction("__wasm_cmp_msk_eq");
--        return CallInst(fmm, NULL, {v1, v2}, LLVMGetName("wasm_cmp_msk_eq", v1, v2));
-+        return CallInst(fmm, NULL, {v1, v2}, ((llvm::Twine("wasm_cmp_msk_eq_") + v1->getName()) + "_") + v2->getName());
-     }
-     llvm::Value *mm1 = LaneMask(v1);
-     llvm::Value *mm2 = LaneMask(v2);
--    return CmpInst(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_EQ, mm1, mm2, LLVMGetName("equal", v1, v2));
-+    return CmpInst(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_EQ, mm1, mm2,
-+                   ((llvm::Twine("equal_") + v1->getName()) + "_") + v2->getName());
- #endif
- }
- 
-@@ -1392,7 +1393,7 @@ llvm::Value *FunctionEmitContext::GetStringPtr(const std::string &str) {
-     return new llvm::BitCastInst(lstrPtr, LLVMTypes::VoidPointerType, "str_void_ptr", bblock);
- }
- 
--llvm::BasicBlock *FunctionEmitContext::CreateBasicBlock(const char *name, llvm::BasicBlock *insertAfter) {
-+llvm::BasicBlock *FunctionEmitContext::CreateBasicBlock(const llvm::Twine &name, llvm::BasicBlock *insertAfter) {
-     llvm::BasicBlock *newBB = llvm::BasicBlock::Create(*g->ctx, name, llvmFunction);
-     if (insertAfter)
-         newBB->moveAfter(insertAfter);
-@@ -1416,14 +1417,15 @@ llvm::Value *FunctionEmitContext::I1VecToBoolVec(llvm::Value *b) {
- 
-         for (unsigned int i = 0; i < at->getNumElements(); ++i) {
-             llvm::Value *elt = ExtractInst(b, i);
--            llvm::Value *sext = SwitchBoolSize(elt, LLVMTypes::BoolVectorStorageType, LLVMGetName(elt, "_to_boolvec"));
-+            llvm::Value *sext =
-+                SwitchBoolSize(elt, LLVMTypes::BoolVectorStorageType, llvm::Twine(elt->getName()) + "_to_boolvec");
-             ret = InsertInst(ret, sext, i);
-         }
-         return ret;
-     } else {
-         // For non-array types, convert to 'LLVMTypes::BoolVectorType' if
-         // necessary.
--        return SwitchBoolSize(b, LLVMTypes::BoolVectorType, LLVMGetName(b, "_to_boolvec"));
-+        return SwitchBoolSize(b, LLVMTypes::BoolVectorType, llvm::Twine(b->getName()) + "_to_boolvec");
-     }
- }
- 
-@@ -1563,7 +1565,7 @@ static int lArrayVectorWidth(llvm::Type *t) {
- }
- 
- llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps inst, llvm::Value *v0, llvm::Value *v1,
--                                                 const char *name) {
-+                                                 const llvm::Twine &name) {
-     if (v0 == NULL || v1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1573,7 +1575,7 @@ llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps in
-     llvm::Type *type = v0->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *bop = llvm::BinaryOperator::Create(inst, v0, v1, name ? name : "", bblock);
-+        llvm::Instruction *bop = llvm::BinaryOperator::Create(inst, v0, v1, name, bblock);
-         AddDebugPos(bop);
-         return bop;
-     } else {
-@@ -1591,7 +1593,7 @@ llvm::Value *FunctionEmitContext::BinaryOperator(llvm::Instruction::BinaryOps in
-     }
- }
- 
--llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const char *name) {
-+llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const llvm::Twine &name) {
-     if (v == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1603,14 +1605,14 @@ llvm::Value *FunctionEmitContext::NotOperator(llvm::Value *v, const char *name)
-     llvm::Type *type = v->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *binst = llvm::BinaryOperator::CreateNot(v, name ? name : "not", bblock);
-+        llvm::Instruction *binst = llvm::BinaryOperator::CreateNot(v, name.isTriviallyEmpty() ? "not" : name, bblock);
-         AddDebugPos(binst);
-         return binst;
-     } else {
-         llvm::Value *ret = llvm::UndefValue::get(type);
-         for (int i = 0; i < arraySize; ++i) {
-             llvm::Value *a = ExtractInst(v, i);
--            llvm::Value *op = llvm::BinaryOperator::CreateNot(a, name ? name : "not", bblock);
-+            llvm::Value *op = llvm::BinaryOperator::CreateNot(a, name.isTriviallyEmpty() ? "not" : name, bblock);
-             AddDebugPos(op);
-             ret = InsertInst(ret, op, i);
-         }
-@@ -1638,7 +1640,7 @@ static llvm::Type *lGetMatchingBoolVectorType(llvm::Type *type) {
- }
- 
- llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm::CmpInst::Predicate pred,
--                                          llvm::Value *v0, llvm::Value *v1, const char *name) {
-+                                          llvm::Value *v0, llvm::Value *v1, const llvm::Twine &name) {
-     if (v0 == NULL || v1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1648,7 +1650,8 @@ llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm
-     llvm::Type *type = v0->getType();
-     int arraySize = lArrayVectorWidth(type);
-     if (arraySize == 0) {
--        llvm::Instruction *ci = llvm::CmpInst::Create(inst, pred, v0, v1, name ? name : "cmp", bblock);
-+        llvm::Instruction *ci =
-+            llvm::CmpInst::Create(inst, pred, v0, v1, name.isTriviallyEmpty() ? "cmp" : name, bblock);
-         AddDebugPos(ci);
-         return ci;
-     } else {
-@@ -1657,14 +1660,14 @@ llvm::Value *FunctionEmitContext::CmpInst(llvm::Instruction::OtherOps inst, llvm
-         for (int i = 0; i < arraySize; ++i) {
-             llvm::Value *a = ExtractInst(v0, i);
-             llvm::Value *b = ExtractInst(v1, i);
--            llvm::Value *op = CmpInst(inst, pred, a, b, name);
-+            llvm::Value *op = CmpInst(inst, pred, a, b, name.isTriviallyEmpty() ? "cmp" : name);
-             ret = InsertInst(ret, op, i);
-         }
-         return ret;
-     }
- }
- 
--llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const char *name) {
-+llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1704,21 +1707,19 @@ llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const char *n
-     return ret;
- }
- 
--llvm::Value *FunctionEmitContext::BitCastInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Value *FunctionEmitContext::BitCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_bitcast");
--
--    llvm::Instruction *inst = new llvm::BitCastInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::BitCastInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_bitcast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const char *name) {
-+llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -1728,23 +1729,19 @@ llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, const char *n
-         // no-op for varying pointers; they're already vectors of ints
-         return value;
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_ptr2int");
-     llvm::Type *type = LLVMTypes::PointerIntType;
--    llvm::Instruction *inst = new llvm::PtrToIntInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::PtrToIntInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_ptr2int");
--
-     llvm::Type *fromType = value->getType();
-     if (llvm::isa<llvm::VectorType>(fromType)) {
-         // varying pointer
-@@ -1752,27 +1749,26 @@ llvm::Value *FunctionEmitContext::PtrToIntInst(llvm::Value *value, llvm::Type *t
-             // already the right type--done
-             return value;
-         else if (fromType->getScalarSizeInBits() > toType->getScalarSizeInBits())
--            return TruncInst(value, toType, name);
-+            return TruncInst(value, toType,
-+                             name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name);
-         else {
-             AssertPos(currentPos, fromType->getScalarSizeInBits() < toType->getScalarSizeInBits());
--            return ZExtInst(value, toType, name);
-+            return ZExtInst(value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name);
-         }
-     }
- 
--    llvm::Instruction *inst = new llvm::PtrToIntInst(value, toType, name, bblock);
-+    llvm::Instruction *inst = new llvm::PtrToIntInst(
-+        value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_ptr2int" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_int2ptr");
--
-     llvm::Type *fromType = value->getType();
-     if (llvm::isa<llvm::VectorType>(fromType)) {
-         // varying pointer
-@@ -1780,95 +1776,87 @@ llvm::Value *FunctionEmitContext::IntToPtrInst(llvm::Value *value, llvm::Type *t
-             // done
-             return value;
-         else if (fromType->getScalarSizeInBits() > toType->getScalarSizeInBits())
--            return TruncInst(value, toType, name);
-+            return TruncInst(value, toType,
-+                             name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name);
-         else {
-             AssertPos(currentPos, fromType->getScalarSizeInBits() < toType->getScalarSizeInBits());
--            return ZExtInst(value, toType, name);
-+            return ZExtInst(value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name);
-         }
-     }
- 
--    llvm::Instruction *inst = new llvm::IntToPtrInst(value, toType, name, bblock);
-+    llvm::Instruction *inst = new llvm::IntToPtrInst(
-+        value, toType, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_int2ptr" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::TruncInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::TruncInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_trunc");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::TruncInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::TruncInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_trunc" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
- llvm::Instruction *FunctionEmitContext::CastInst(llvm::Instruction::CastOps op, llvm::Value *value, llvm::Type *type,
--                                                 const char *name) {
-+                                                 const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_cast");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = llvm::CastInst::Create(op, value, type, name, bblock);
-+    llvm::Instruction *inst = llvm::CastInst::Create(
-+        op, value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_cast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::FPCastInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::FPCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_cast");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = llvm::CastInst::CreateFPCast(value, type, name, bblock);
-+    llvm::Instruction *inst = llvm::CastInst::CreateFPCast(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_cast" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::SExtInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::SExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_sext");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::SExtInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::SExtInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_sext" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
- 
--llvm::Instruction *FunctionEmitContext::ZExtInst(llvm::Value *value, llvm::Type *type, const char *name) {
-+llvm::Instruction *FunctionEmitContext::ZExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name) {
-     if (value == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(value, "_zext");
--
-     // TODO: we should probably handle the array case as in
-     // e.g. BitCastInst(), but we don't currently need that functionality
--    llvm::Instruction *inst = new llvm::ZExtInst(value, type, name, bblock);
-+    llvm::Instruction *inst = new llvm::ZExtInst(
-+        value, type, name.isTriviallyEmpty() ? llvm::Twine(value->getName()) + "_zext" : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
-@@ -1913,14 +1901,15 @@ llvm::Value *FunctionEmitContext::applyVaryingGEP(llvm::Value *basePtr, llvm::Va
-         scale = SmearUniform(scale);
-         Assert(index != NULL);
-         // offset = index * scale
--        offset = BinaryOperator(llvm::Instruction::Mul, scale, index, LLVMGetName("mul", scale, index));
-+        offset = BinaryOperator(llvm::Instruction::Mul, scale, index,
-+                                ((llvm::Twine("mul_") + scale->getName()) + "_") + index->getName());
-     }
- 
-     // For 64-bit targets, if we've been doing our offset calculations in
-     // 32 bits, we still have to convert to a 64-bit value before we
-     // actually add the offset to the pointer.
-     if (g->target->is32Bit() == false && g->opt.force32BitAddressing == true)
--        offset = SExtInst(offset, LLVMTypes::Int64VectorType, LLVMGetName(offset, "_to_64"));
-+        offset = SExtInst(offset, LLVMTypes::Int64VectorType, llvm::Twine(offset->getName()) + "_to_64");
- 
-     // Smear out the pointer to be varying; either the base pointer or the
-     // index must be varying for this method to be called.
-@@ -1929,7 +1918,7 @@ llvm::Value *FunctionEmitContext::applyVaryingGEP(llvm::Value *basePtr, llvm::Va
-     llvm::Value *varyingPtr = baseIsUniform ? SmearUniform(basePtr) : basePtr;
- 
-     // newPtr = ptr + offset
--    return BinaryOperator(llvm::Instruction::Add, varyingPtr, offset, LLVMGetName(basePtr, "_offset"));
-+    return BinaryOperator(llvm::Instruction::Add, varyingPtr, offset, llvm::Twine(basePtr->getName()) + "_offset");
- }
- 
- void FunctionEmitContext::MatchIntegerTypes(llvm::Value **v0, llvm::Value **v1) {
-@@ -2006,13 +1995,13 @@ llvm::Value *FunctionEmitContext::MakeSlicePointer(llvm::Value *ptr, llvm::Value
-     llvm::StructType *st = llvm::StructType::get(*g->ctx, eltTypes);
- 
-     llvm::Value *ret = llvm::UndefValue::get(st);
--    ret = InsertInst(ret, ptr, 0, LLVMGetName(ret, "_slice_ptr"));
--    ret = InsertInst(ret, offset, 1, LLVMGetName(ret, "_slice_offset"));
-+    ret = InsertInst(ret, ptr, 0, llvm::Twine(ret->getName()) + "_slice_ptr");
-+    ret = InsertInst(ret, offset, 1, llvm::Twine(ret->getName()) + "_slice_offset");
-     return ret;
- }
- 
- llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index, const Type *ptrRefType,
--                                                    const char *name) {
-+                                                    const llvm::Twine &name) {
-     if (basePtr == NULL || index == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2065,8 +2054,8 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
-         // uniform, so just emit the regular LLVM GEP instruction
-         llvm::Value *ind[1] = {index};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&ind[0], &ind[1]);
--        llvm::Instruction *inst =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "gep", bblock);
-+        llvm::Instruction *inst = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                                  name.isTriviallyEmpty() ? "gep" : name, bblock);
-         AddDebugPos(inst);
-         return inst;
-     } else
-@@ -2074,7 +2063,7 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
- }
- 
- llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0, llvm::Value *index1,
--                                                    const Type *ptrRefType, const char *name) {
-+                                                    const Type *ptrRefType, const llvm::Twine &name) {
-     if (basePtr == NULL || index0 == NULL || index1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2114,8 +2103,8 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
-         // uniform, so just emit the regular LLVM GEP instruction
-         llvm::Value *indices[2] = {index0, index1};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&indices[0], &indices[2]);
--        llvm::Instruction *inst =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "gep", bblock);
-+        llvm::Instruction *inst = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                                  name.isTriviallyEmpty() ? "gep" : name, bblock);
-         AddDebugPos(inst);
-         return inst;
-     } else {
-@@ -2138,7 +2127,7 @@ llvm::Value *FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::
- }
- 
- llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int elementNum, const Type *ptrRefType,
--                                                   const char *name, const PointerType **resultPtrType) {
-+                                                   const llvm::Twine &name, const PointerType **resultPtrType) {
-     if (resultPtrType != NULL)
-         AssertPos(currentPos, ptrRefType != NULL);
- 
-@@ -2195,8 +2184,8 @@ llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int
-         // If the pointer is uniform, we can use the regular LLVM GEP.
-         llvm::Value *offsets[2] = {LLVMInt32(0), LLVMInt32(elementNum)};
-         llvm::ArrayRef<llvm::Value *> arrayRef(&offsets[0], &offsets[2]);
--        resultPtr =
--            llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef, name ? name : "struct_offset", bblock);
-+        resultPtr = llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
-+                                                    name.isTriviallyEmpty() ? "struct_offset" : name, bblock);
-     } else {
-         // Otherwise do the math to find the offset and add it to the given
-         // varying pointers
-@@ -2237,7 +2226,7 @@ llvm::Value *FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int
-         return resultPtr;
- }
- 
--llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const char *name) {
-+llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name) {
-     if ((value == NULL) || (toType == NULL)) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2248,20 +2237,18 @@ llvm::Value *FunctionEmitContext::SwitchBoolSize(llvm::Value *value, llvm::Type
-     llvm::Value *newBool = value;
-     if (g->target->getDataLayout()->getTypeSizeInBits(fromType) >
-         g->target->getDataLayout()->getTypeSizeInBits(toType)) {
--        if (name == NULL)
--            name = LLVMGetName(value, "_switchBool");
--        newBool = TruncInst(value, toType, name);
-+        newBool =
-+            TruncInst(value, toType, name.isTriviallyEmpty() ? (llvm::Twine(value->getName()) + "_switchBool") : name);
-     } else if (g->target->getDataLayout()->getTypeSizeInBits(fromType) <
-                g->target->getDataLayout()->getTypeSizeInBits(toType)) {
--        if (name == NULL)
--            name = LLVMGetName(value, "_switchBool");
--        newBool = SExtInst(value, toType, name);
-+        newBool =
-+            SExtInst(value, toType, name.isTriviallyEmpty() ? (llvm::Twine(value->getName()) + "_switchBool") : name);
-     }
- 
-     return newBool;
- }
- 
--llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, const char *name) {
-+llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, const llvm::Twine &name) {
-     if (ptr == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2270,13 +2257,13 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
-     llvm::PointerType *pt = llvm::dyn_cast<llvm::PointerType>(ptr->getType());
-     AssertPos(currentPos, pt != NULL);
- 
--    if (name == NULL)
--        name = LLVMGetName(ptr, "_load");
--
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    llvm::LoadInst *inst = new llvm::LoadInst(pt->getPointerElementType(), ptr, name, bblock);
-+    llvm::LoadInst *inst =
-+        new llvm::LoadInst(pt->getPointerElementType(), ptr,
-+                           name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name, bblock);
- #else
--    llvm::LoadInst *inst = new llvm::LoadInst(ptr, name, bblock);
-+    llvm::LoadInst *inst =
-+        new llvm::LoadInst(ptr, name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name, bblock);
- #endif
- 
-     if (g->opt.forceAlignedMemory && llvm::dyn_cast<llvm::VectorType>(pt->getElementType())) {
-@@ -2307,8 +2294,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, const Type *type, c
- static llvm::Value *lFinalSliceOffset(FunctionEmitContext *ctx, llvm::Value *ptr, const PointerType **ptrType) {
-     Assert(CastType<PointerType>(*ptrType) != NULL);
- 
--    llvm::Value *slicePtr = ctx->ExtractInst(ptr, 0, LLVMGetName(ptr, "_ptr"));
--    llvm::Value *sliceOffset = ctx->ExtractInst(ptr, 1, LLVMGetName(ptr, "_offset"));
-+    llvm::Value *slicePtr = ctx->ExtractInst(ptr, 0, llvm::Twine(ptr->getName()) + "_ptr");
-+    llvm::Value *sliceOffset = ctx->ExtractInst(ptr, 1, llvm::Twine(ptr->getName()) + "_offset");
- 
-     // slicePtr should be a pointer to an soa-width wide array of the
-     // final atomic/enum/pointer type
-@@ -2327,14 +2314,14 @@ static llvm::Value *lFinalSliceOffset(FunctionEmitContext *ctx, llvm::Value *ptr
-         slicePtr = ctx->BitCastInst(slicePtr, (*ptrType)->LLVMType(g->ctx));
- 
-     // And finally index based on the slice offset
--    return ctx->GetElementPtrInst(slicePtr, sliceOffset, *ptrType, LLVMGetName(slicePtr, "_final_gep"));
-+    return ctx->GetElementPtrInst(slicePtr, sliceOffset, *ptrType, llvm::Twine(slicePtr->getName()) + "_final_gep");
- }
- 
- /** Utility routine that loads from a uniform pointer to soa<> data,
-     returning a regular uniform (non-SOA result).
-  */
- llvm::Value *FunctionEmitContext::loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType,
--                                                     const char *name) {
-+                                                     const llvm::Twine &name) {
-     const Type *unifType = ptrType->GetBaseType()->GetAsUniformType();
- 
-     const CollectionType *ct = CastType<CollectionType>(ptrType->GetBaseType());
-@@ -2363,7 +2350,7 @@ llvm::Value *FunctionEmitContext::loadUniformFromSOA(llvm::Value *ptr, llvm::Val
- }
- 
- llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrRefType,
--                                           const char *name, bool one_elem) {
-+                                           const llvm::Twine &name, bool one_elem) {
-     if (ptr == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2371,9 +2358,6 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
- 
-     AssertPos(currentPos, ptrRefType != NULL && mask != NULL);
- 
--    if (name == NULL)
--        name = LLVMGetName(ptr, "_load");
--
-     const PointerType *ptrType;
-     const Type *elType;
-     if (CastType<ReferenceType>(ptrRefType) != NULL) {
-@@ -2393,7 +2377,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
- 
-     if (ptrType->IsUniformType()) {
-         if (ptrType->IsSlice()) {
--            return loadUniformFromSOA(ptr, mask, ptrType, name);
-+            return loadUniformFromSOA(ptr, mask, ptrType,
-+                                      name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name);
-         } else {
-             // FIXME: same issue as above load inst regarding alignment...
-             //
-@@ -2405,11 +2390,15 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-             const AtomicType *atomicType = CastType<AtomicType>(ptrType->GetBaseType());
- 
- #if ISPC_LLVM_VERSION <= ISPC_LLVM_10_0
--            llvm::LoadInst *inst = new llvm::LoadInst(ptr, name, false /* not volatile */, bblock);
-+            llvm::LoadInst *inst =
-+                new llvm::LoadInst(ptr, name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name,
-+                                   false /* not volatile */, bblock);
- #else // LLVM 11.0+
-             llvm::PointerType *ptr_type = llvm::dyn_cast<llvm::PointerType>(ptr->getType());
-             llvm::LoadInst *inst =
--                new llvm::LoadInst(ptr_type->getPointerElementType(), ptr, name, false /* not volatile */, bblock);
-+                new llvm::LoadInst(ptr_type->getPointerElementType(), ptr,
-+                                   name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name,
-+                                   false /* not volatile */, bblock);
- #endif
- 
-             if (atomicType != NULL && atomicType->IsVaryingType()) {
-@@ -2433,7 +2422,8 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-     } else {
-         // Otherwise we should have a varying ptr and it's time for a
-         // gather.
--        llvm::Value *gather_result = gather(ptr, ptrType, GetFullMask(), name);
-+        llvm::Value *gather_result = gather(ptr, ptrType, GetFullMask(),
-+                                            name.isTriviallyEmpty() ? (llvm::Twine(ptr->getName()) + "_load") : name);
-         if (!one_elem)
-             return gather_result;
- 
-@@ -2453,19 +2443,19 @@ llvm::Value *FunctionEmitContext::LoadInst(llvm::Value *ptr, llvm::Value *mask,
-         // We can actually call either one, since both are i32s as far as
-         // LLVM's type system is concerned...
-         llvm::Function *fmm = mm[0]->function;
--        llvm::Value *int_mask = CallInst(fmm, NULL, mask, LLVMGetName(mask, "_movmsk"));
-+        llvm::Value *int_mask = CallInst(fmm, NULL, mask, llvm::Twine(mask->getName()) + "_movmsk");
-         std::vector<Symbol *> lz;
-         m->symbolTable->LookupFunction("__count_trailing_zeros_i64", &lz);
-         llvm::Function *flz = lz[0]->function;
--        llvm::Value *elem_idx = CallInst(flz, NULL, int_mask, LLVMGetName(mask, "_clz"));
--        llvm::Value *elem = llvm::ExtractElementInst::Create(gather_result, elem_idx,
--                                                             LLVMGetName(gather_result, "_umasked_elem"), bblock);
-+        llvm::Value *elem_idx = CallInst(flz, NULL, int_mask, llvm::Twine(mask->getName()) + "_clz");
-+        llvm::Value *elem = llvm::ExtractElementInst::Create(
-+            gather_result, elem_idx, llvm::Twine(gather_result->getName()) + "_umasked_elem", bblock);
-         return elem;
-     }
- }
- 
- llvm::Value *FunctionEmitContext::gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask,
--                                         const char *name) {
-+                                         const llvm::Twine &name) {
-     // We should have a varying pointer if we get here...
-     AssertPos(currentPos, ptrType->IsVaryingType());
- 
-@@ -2602,7 +2592,8 @@ void FunctionEmitContext::addGSMetadata(llvm::Value *v, SourcePos pos) {
-     inst->setMetadata("last_column", md);
- }
- 
--llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *name, int align, bool atEntryBlock) {
-+llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const llvm::Twine &name, int align,
-+                                             bool atEntryBlock) {
-     if (llvmType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -2615,12 +2606,12 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-         llvm::Instruction *retInst = allocaBlock->getTerminator();
-         AssertPos(currentPos, retInst);
-         unsigned AS = llvmFunction->getParent()->getDataLayout().getAllocaAddrSpace();
--        inst = new llvm::AllocaInst(llvmType, AS, name ? name : "", retInst);
-+        inst = new llvm::AllocaInst(llvmType, AS, name, retInst);
-     } else {
-         // Unless the caller overrode the default and wants it in the
-         // current basic block
-         unsigned AS = llvmFunction->getParent()->getDataLayout().getAllocaAddrSpace();
--        inst = new llvm::AllocaInst(llvmType, AS, name ? name : "", bblock);
-+        inst = new llvm::AllocaInst(llvmType, AS, name, bblock);
-     }
- 
-     // If no alignment was specified but we have an array of a uniform
-@@ -2639,7 +2630,8 @@ llvm::Value *FunctionEmitContext::AllocaInst(llvm::Type *llvmType, const char *n
-     return inst;
- }
- 
--llvm::Value *FunctionEmitContext::AllocaInst(const Type *ptrType, const char *name, int align, bool atEntryBlock) {
-+llvm::Value *FunctionEmitContext::AllocaInst(const Type *ptrType, const llvm::Twine &name, int align,
-+                                             bool atEntryBlock) {
-     if (ptrType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3075,66 +3067,59 @@ llvm::Instruction *FunctionEmitContext::BranchInst(llvm::BasicBlock *trueBlock,
-     return b;
- }
- 
--llvm::Value *FunctionEmitContext::ExtractInst(llvm::Value *v, int elt, const char *name) {
-+llvm::Value *FunctionEmitContext::ExtractInst(llvm::Value *v, int elt, const llvm::Twine &name) {
-     if (v == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_extract_%d", elt);
--        name = LLVMGetName(v, buf);
--    }
-     llvm::Instruction *ei = NULL;
-     if (llvm::isa<llvm::VectorType>(v->getType()))
--        ei = llvm::ExtractElementInst::Create(v, LLVMInt32(elt), name, bblock);
-+        ei = llvm::ExtractElementInst::Create(
-+            v, LLVMInt32(elt),
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_extract_") + llvm::Twine(elt)) : name, bblock);
-     else
--        ei = llvm::ExtractValueInst::Create(v, elt, name, bblock);
-+        ei = llvm::ExtractValueInst::Create(
-+            v, elt, name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_extract_") + llvm::Twine(elt)) : name,
-+            bblock);
-     AddDebugPos(ei);
-     return ei;
- }
- 
--llvm::Value *FunctionEmitContext::InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const char *name) {
-+llvm::Value *FunctionEmitContext::InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const llvm::Twine &name) {
-     if (v == NULL || eltVal == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_insert_%d", elt);
--        name = LLVMGetName(v, buf);
--    }
--
-     llvm::Instruction *ii = NULL;
-     if (llvm::isa<llvm::VectorType>(v->getType()))
--        ii = llvm::InsertElementInst::Create(v, eltVal, LLVMInt32(elt), name, bblock);
-+        ii = llvm::InsertElementInst::Create(
-+            v, eltVal, LLVMInt32(elt),
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_insert_") + llvm::Twine(elt)) : name, bblock);
-     else
--        ii = llvm::InsertValueInst::Create(v, eltVal, elt, name, bblock);
-+        ii = llvm::InsertValueInst::Create(
-+            v, eltVal, elt,
-+            name.isTriviallyEmpty() ? ((llvm::Twine(v->getName()) + "_insert_") + llvm::Twine(elt)) : name, bblock);
-     AddDebugPos(ii);
-     return ii;
- }
- 
--llvm::Value *FunctionEmitContext::ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const char *name) {
-+llvm::Value *FunctionEmitContext::ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask,
-+                                              const llvm::Twine &name) {
-     if (v1 == NULL || v2 == NULL || mask == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_shuffle");
--        name = LLVMGetName(v1, buf);
--    }
--
--    llvm::Instruction *ii = new llvm::ShuffleVectorInst(v1, v2, mask, name, bblock);
-+    llvm::Instruction *ii = new llvm::ShuffleVectorInst(
-+        v1, v2, mask, name.isTriviallyEmpty() ? (llvm::Twine(v1->getName()) + "_shuffle") : name, bblock);
- 
-     AddDebugPos(ii);
-     return ii;
- }
- 
--llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vecType, const char *name) {
-+llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vecType, const llvm::Twine &name) {
-     if (v == NULL || vecType == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3148,12 +3133,6 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     Assert(ty && ty->getVectorElementType() == v->getType());
- #endif
- 
--    if (name == NULL) {
--        char buf[32];
--        snprintf(buf, sizeof(buf), "_broadcast");
--        name = LLVMGetName(v, buf);
--    }
--
-     // Generate the following sequence:
-     //   %name_init.i = insertelement <4 x i32> undef, i32 %val, i32 0
-     //   %name.i = shufflevector <4 x i32> %name_init.i, <4 x i32> undef,
-@@ -3163,7 +3142,7 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     llvm::Value *undef2 = llvm::UndefValue::get(vecType);
- 
-     // InsertElement
--    llvm::Twine tw = llvm::Twine(name) + llvm::Twine("_init");
-+    llvm::Twine tw = name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + llvm::Twine("_init");
-     llvm::Value *insert = InsertInst(undef1, v, 0, tw.str().c_str());
- 
-     // ShuffleVector
-@@ -3179,28 +3158,27 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-         llvm::ConstantVector::getSplat(llvm::ElementCount::get(static_cast<unsigned int>(ty->getNumElements()), false),
-                                        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
- #endif
--    llvm::Value *ret = ShuffleInst(insert, undef2, zeroVec, name);
-+    llvm::Value *ret = ShuffleInst(insert, undef2, zeroVec,
-+                                   name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name);
- 
-     return ret;
- }
- 
--llvm::PHINode *FunctionEmitContext::PhiNode(llvm::Type *type, int count, const char *name) {
--    llvm::PHINode *pn = llvm::PHINode::Create(type, count, name ? name : "phi", bblock);
-+llvm::PHINode *FunctionEmitContext::PhiNode(llvm::Type *type, int count, const llvm::Twine &name) {
-+    llvm::PHINode *pn = llvm::PHINode::Create(type, count, name.isTriviallyEmpty() ? "phi" : name, bblock);
-     AddDebugPos(pn);
-     return pn;
- }
- 
- llvm::Instruction *FunctionEmitContext::SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1,
--                                                   const char *name) {
-+                                                   const llvm::Twine &name) {
-     if (test == NULL || val0 == NULL || val1 == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-     }
- 
--    if (name == NULL)
--        name = LLVMGetName(test, "_select");
--
--    llvm::Instruction *inst = llvm::SelectInst::Create(test, val0, val1, name, bblock);
-+    llvm::Instruction *inst = llvm::SelectInst::Create(
-+        test, val0, val1, name.isTriviallyEmpty() ? (llvm::Twine(test->getName()) + "_select") : name, bblock);
-     AddDebugPos(inst);
-     return inst;
- }
-@@ -3226,7 +3204,7 @@ static unsigned int lCalleeArgCount(llvm::Value *callee, const FunctionType *fun
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType,
--                                           const std::vector<llvm::Value *> &args, const char *name) {
-+                                           const std::vector<llvm::Value *> &args, const llvm::Twine &name) {
-     if (func == NULL) {
-         AssertPos(currentPos, m->errorCount > 0);
-         return NULL;
-@@ -3258,9 +3236,9 @@ llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-         llvm::PointerType *func_ptr_type = llvm::dyn_cast<llvm::PointerType>(func->getType());
-         llvm::FunctionType *func_type = llvm::dyn_cast<llvm::FunctionType>(func_ptr_type->getPointerElementType());
--        llvm::CallInst *callinst = llvm::CallInst::Create(func_type, func, argVals, name ? name : "", bblock);
-+        llvm::CallInst *callinst = llvm::CallInst::Create(func_type, func, argVals, name, bblock);
- #else
--        llvm::CallInst *callinst = llvm::CallInst::Create(func, argVals, name ? name : "", bblock);
-+        llvm::CallInst *callinst = llvm::CallInst::Create(func, argVals, name, bblock);
- #endif
- 
-         // We could be dealing with a function pointer in which case this will not be a 'llvm::Function'.
-@@ -3464,14 +3442,14 @@ llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg,
--                                           const char *name) {
-+                                           const llvm::Twine &name) {
-     std::vector<llvm::Value *> args;
-     args.push_back(arg);
-     return CallInst(func, funcType, args, name);
- }
- 
- llvm::Value *FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg0,
--                                           llvm::Value *arg1, const char *name) {
-+                                           llvm::Value *arg1, const llvm::Twine &name) {
-     std::vector<llvm::Value *> args;
-     args.push_back(arg0);
-     args.push_back(arg1);
-diff --git a/src/ctx.h b/src/ctx.h
-index 6e5ad74ba..48b3bb826 100644
---- a/src/ctx.h
-+++ b/src/ctx.h
-@@ -302,7 +302,7 @@ class FunctionEmitContext {
-     llvm::Value *GetStringPtr(const std::string &str);
- 
-     /** Create a new basic block with given name */
--    llvm::BasicBlock *CreateBasicBlock(const char *name, llvm::BasicBlock *insertAfter = NULL);
-+    llvm::BasicBlock *CreateBasicBlock(const llvm::Twine &name, llvm::BasicBlock *insertAfter = NULL);
- 
-     /** Given a vector with element type i1, return a vector of type
-         LLVMTypes::BoolVectorType.  This method handles the conversion for
-@@ -380,33 +380,33 @@ class FunctionEmitContext {
-         this also handles applying the given operation to the vector
-         elements. */
-     llvm::Value *BinaryOperator(llvm::Instruction::BinaryOps inst, llvm::Value *v0, llvm::Value *v1,
--                                const char *name = NULL);
-+                                const llvm::Twine &name = "");
- 
-     /** Emit the "not" operator.  Like BinaryOperator(), this also handles
-         a VectorType-based operand. */
--    llvm::Value *NotOperator(llvm::Value *v, const char *name = NULL);
-+    llvm::Value *NotOperator(llvm::Value *v, const llvm::Twine &name = "");
- 
-     /** Emit a comparison instruction.  If the operands are VectorTypes,
-         then a value for the corresponding boolean VectorType is
-         returned. */
-     llvm::Value *CmpInst(llvm::Instruction::OtherOps inst, llvm::CmpInst::Predicate pred, llvm::Value *v0,
--                         llvm::Value *v1, const char *name = NULL);
-+                         llvm::Value *v1, const llvm::Twine &name = "");
- 
-     /** Given a scalar value, return a vector of the same type (or an
-         array, for pointer types). */
--    llvm::Value *SmearUniform(llvm::Value *value, const char *name = NULL);
-+    llvm::Value *SmearUniform(llvm::Value *value, const llvm::Twine &name = "");
- 
--    llvm::Value *BitCastInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Value *PtrToIntInst(llvm::Value *value, const char *name = NULL);
--    llvm::Value *PtrToIntInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Value *IntToPtrInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+    llvm::Value *BitCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Value *PtrToIntInst(llvm::Value *value, const llvm::Twine &name = "");
-+    llvm::Value *PtrToIntInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Value *IntToPtrInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
- 
--    llvm::Instruction *TruncInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+    llvm::Instruction *TruncInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-     llvm::Instruction *CastInst(llvm::Instruction::CastOps op, llvm::Value *value, llvm::Type *type,
--                                const char *name = NULL);
--    llvm::Instruction *FPCastInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Instruction *SExtInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
--    llvm::Instruction *ZExtInst(llvm::Value *value, llvm::Type *type, const char *name = NULL);
-+                                const llvm::Twine &name = "");
-+    llvm::Instruction *FPCastInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Instruction *SExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
-+    llvm::Instruction *ZExtInst(llvm::Value *value, llvm::Type *type, const llvm::Twine &name = "");
- 
-     /** Given two integer-typed values (but possibly one vector and the
-         other not, and or of possibly-different bit-widths), update their
-@@ -426,9 +426,9 @@ class FunctionEmitContext {
-         pointers.  The underlying type of the base pointer must be provided
-         via the ptrType parameter */
-     llvm::Value *GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index, const Type *ptrType,
--                                   const char *name = NULL);
-+                                   const llvm::Twine &name = "");
-     llvm::Value *GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0, llvm::Value *index1, const Type *ptrType,
--                                   const char *name = NULL);
-+                                   const llvm::Twine &name = "");
- 
-     /** This method returns a new pointer that represents offsetting the
-         given base pointer to point at the given element number of the
-@@ -436,26 +436,26 @@ class FunctionEmitContext {
-         pointer must be a pointer to a structure type.  The ptrType gives
-         the type of the pointer, though it may be NULL if the base pointer
-         is uniform. */
--    llvm::Value *AddElementOffset(llvm::Value *basePtr, int elementNum, const Type *ptrType, const char *name = NULL,
--                                  const PointerType **resultPtrType = NULL);
-+    llvm::Value *AddElementOffset(llvm::Value *basePtr, int elementNum, const Type *ptrType,
-+                                  const llvm::Twine &name = "", const PointerType **resultPtrType = NULL);
- 
-     /** Bool is stored as i8 and <WIDTH x i8> but represented in IR as i1 and
-      * <WIDTH x MASK>. This is a helper function to match bool size at storage
-      * interface. */
--    llvm::Value *SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const char *name = NULL);
-+    llvm::Value *SwitchBoolSize(llvm::Value *value, llvm::Type *toType, const llvm::Twine &name = "");
-     /** Load from the memory location(s) given by lvalue, using the given
-         mask.  The lvalue may be varying, in which case this corresponds to
-         a gather from the multiple memory locations given by the array of
-         pointer values given by the lvalue.  If the lvalue is not varying,
-         then both the mask pointer and the type pointer may be NULL. */
--    llvm::Value *LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrType, const char *name = NULL,
-+    llvm::Value *LoadInst(llvm::Value *ptr, llvm::Value *mask, const Type *ptrType, const llvm::Twine &name = "",
-                           bool one_elem = false);
- 
-     /* Load from memory location(s) given.
-      * 'type' needs to be provided when storage type is different from IR type. For example,
-      * 'unform bool' is 'i1' in IR but stored as 'i8'.
-      * Otherwise leave this as NULL. */
--    llvm::Value *LoadInst(llvm::Value *ptr, const Type *type = NULL, const char *name = NULL);
-+    llvm::Value *LoadInst(llvm::Value *ptr, const Type *type = NULL, const llvm::Twine &name = "");
- 
-     /** Emits an alloca instruction to allocate stack storage for the given
-         type.  If a non-zero alignment is specified, the object is also
-@@ -463,7 +463,8 @@ class FunctionEmitContext {
-         instruction is added at the start of the function in the entry
-         basic block; if it should be added to the current basic block, then
-         the atEntryBlock parameter should be false. */
--    llvm::Value *AllocaInst(llvm::Type *llvmType, const char *name = NULL, int align = 0, bool atEntryBlock = true);
-+    llvm::Value *AllocaInst(llvm::Type *llvmType, const llvm::Twine &name = "", int align = 0,
-+                            bool atEntryBlock = true);
- 
-     /** Emits an alloca instruction to allocate stack storage for the given
-         type.  If a non-zero alignment is specified, the object is also
-@@ -474,7 +475,7 @@ class FunctionEmitContext {
-         This implementation is preferred when possible. It is needed when
-         storage type is different from IR type. For example,
-         'unform bool' is 'i1' in IR but stored as 'i8'. */
--    llvm::Value *AllocaInst(const Type *ptrType, const char *name = NULL, int align = 0, bool atEntryBlock = true);
-+    llvm::Value *AllocaInst(const Type *ptrType, const llvm::Twine &name = "", int align = 0, bool atEntryBlock = true);
- 
-     /** Standard store instruction; for this variant, the lvalue must be a
-         single pointer, not a varying lvalue.
-@@ -502,39 +503,41 @@ class FunctionEmitContext {
-     /** This convenience method maps to an llvm::ExtractElementInst if the
-         given value is a llvm::VectorType, and to an llvm::ExtractValueInst
-         otherwise. */
--    llvm::Value *ExtractInst(llvm::Value *v, int elt, const char *name = NULL);
-+    llvm::Value *ExtractInst(llvm::Value *v, int elt, const llvm::Twine &name = "");
- 
-     /** This convenience method maps to an llvm::InsertElementInst if the
-         given value is a llvm::VectorType, and to an llvm::InsertValueInst
-         otherwise. */
--    llvm::Value *InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const char *name = NULL);
-+    llvm::Value *InsertInst(llvm::Value *v, llvm::Value *eltVal, int elt, const llvm::Twine &name = "");
- 
-     /** This convenience method maps to an llvm::ShuffleVectorInst. */
--    llvm::Value *ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const char *name = NULL);
-+    llvm::Value *ShuffleInst(llvm::Value *v1, llvm::Value *v2, llvm::Value *mask, const llvm::Twine &name = "");
- 
-     /** This convenience method to generate broadcast pattern. It takes a value
-         and a vector type. Type of the value must match element type of the
-         vector. */
--    llvm::Value *BroadcastValue(llvm::Value *v, llvm::Type *vecType, const char *name = NULL);
-+    llvm::Value *BroadcastValue(llvm::Value *v, llvm::Type *vecType, const llvm::Twine &name = "");
- 
--    llvm::PHINode *PhiNode(llvm::Type *type, int count, const char *name = NULL);
--    llvm::Instruction *SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1, const char *name = NULL);
-+    llvm::PHINode *PhiNode(llvm::Type *type, int count, const llvm::Twine &name = "");
-+    llvm::Instruction *SelectInst(llvm::Value *test, llvm::Value *val0, llvm::Value *val1,
-+                                  const llvm::Twine &name = "");
- 
-     /** Emits IR to do a function call with the given arguments.  If the
-         function type is a varying function pointer type, its full type
-         must be provided in funcType.  funcType can be NULL if func is a
-         uniform function pointer. */
-     llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, const std::vector<llvm::Value *> &args,
--                          const char *name = NULL);
-+                          const llvm::Twine &name = "");
- 
-     /** This is a convenience method that issues a call instruction to a
-         function that takes just a single argument. */
--    llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg, const char *name = NULL);
-+    llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg,
-+                          const llvm::Twine &name = "");
- 
-     /** This is a convenience method that issues a call instruction to a
-         function that takes two arguments. */
-     llvm::Value *CallInst(llvm::Value *func, const FunctionType *funcType, llvm::Value *arg0, llvm::Value *arg1,
--                          const char *name = NULL);
-+                          const llvm::Twine &name = "");
- 
-     /** Launch an asynchronous task to run the given function, passing it
-         he given argument values. */
-@@ -756,9 +759,10 @@ class FunctionEmitContext {
-     void maskedStore(llvm::Value *value, llvm::Value *ptr, const Type *ptrType, llvm::Value *mask);
-     void storeUniformToSOA(llvm::Value *value, llvm::Value *ptr, llvm::Value *mask, const Type *valueType,
-                            const PointerType *ptrType);
--    llvm::Value *loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType, const char *name);
-+    llvm::Value *loadUniformFromSOA(llvm::Value *ptr, llvm::Value *mask, const PointerType *ptrType,
-+                                    const llvm::Twine &name = "");
- 
--    llvm::Value *gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask, const char *name);
-+    llvm::Value *gather(llvm::Value *ptr, const PointerType *ptrType, llvm::Value *mask, const llvm::Twine &name = "");
- 
-     llvm::Value *addVaryingOffsetsIfNeeded(llvm::Value *ptr, const Type *ptrType);
- };
-diff --git a/src/expr.cpp b/src/expr.cpp
-index 80cc3020a..6d38d1889 100644
---- a/src/expr.cpp
-+++ b/src/expr.cpp
-@@ -1021,11 +1021,11 @@ static llvm::Value *lEmitNegate(Expr *arg, SourcePos pos, FunctionEmitContext *c
-     ctx->SetDebugPos(pos);
-     if (type->IsFloatType()) {
-         llvm::Value *zero = llvm::ConstantFP::getZeroValueForNegation(type->LLVMType(g->ctx));
--        return ctx->BinaryOperator(llvm::Instruction::FSub, zero, argVal, LLVMGetName(argVal, "_negate"));
-+        return ctx->BinaryOperator(llvm::Instruction::FSub, zero, argVal, llvm::Twine(argVal->getName()) + "_negate");
-     } else {
-         llvm::Value *zero = lLLVMConstantValue(type, g->ctx, 0.);
-         AssertPos(pos, type->IsIntType());
--        return ctx->BinaryOperator(llvm::Instruction::Sub, zero, argVal, LLVMGetName(argVal, "_negate"));
-+        return ctx->BinaryOperator(llvm::Instruction::Sub, zero, argVal, llvm::Twine(argVal->getName()) + "_negate");
-     }
- }
- 
-@@ -1047,11 +1047,11 @@ llvm::Value *UnaryExpr::GetValue(FunctionEmitContext *ctx) const {
-         return lEmitNegate(expr, pos, ctx);
-     case LogicalNot: {
-         llvm::Value *argVal = expr->GetValue(ctx);
--        return ctx->NotOperator(argVal, LLVMGetName(argVal, "_logicalnot"));
-+        return ctx->NotOperator(argVal, llvm::Twine(argVal->getName()) + "_logicalnot");
-     }
-     case BitNot: {
-         llvm::Value *argVal = expr->GetValue(ctx);
--        return ctx->NotOperator(argVal, LLVMGetName(argVal, "_bitnot"));
-+        return ctx->NotOperator(argVal, llvm::Twine(argVal->getName()) + "_bitnot");
-     }
-     default:
-         FATAL("logic error");
-@@ -1518,7 +1518,8 @@ static llvm::Value *lEmitBinaryArith(BinaryExpr::Op op, llvm::Value *value0, llv
-             return NULL;
-         }
- 
--        return ctx->BinaryOperator(inst, value0, value1, LLVMGetName(opName, value0, value1));
-+        return ctx->BinaryOperator(inst, value0, value1,
-+                                   (((llvm::Twine(opName) + "_") + value0->getName()) + "_") + value1->getName());
-     }
- }
- 
-@@ -1563,7 +1564,7 @@ static llvm::Value *lEmitBinaryCmp(BinaryExpr::Op op, llvm::Value *e0Val, llvm::
-     }
- 
-     llvm::Value *cmp = ctx->CmpInst(isFloatOp ? llvm::Instruction::FCmp : llvm::Instruction::ICmp, pred, e0Val, e1Val,
--                                    LLVMGetName(opName, e0Val, e1Val));
-+                                    (((llvm::Twine(opName) + "_") + e0Val->getName()) + "_") + e1Val->getName());
-     // This is a little ugly: CmpInst returns i1 values, but we use vectors
-     // of i32s for varying bool values; type convert the result here if
-     // needed.
-@@ -4177,7 +4178,7 @@ static llvm::Value *lConvertToSlicePointer(FunctionEmitContext *ctx, llvm::Value
-     // offsets
-     llvm::Value *result = llvm::Constant::getNullValue(sliceStructType);
-     // And replace the pointer in the struct with the given pointer
--    return ctx->InsertInst(result, ptr, 0, LLVMGetName(ptr, "_slice"));
-+    return ctx->InsertInst(result, ptr, 0, llvm::Twine(ptr->getName()) + "_slice");
- }
- 
- /** If the given array index is a compile time constant, check to see if it
-@@ -4258,8 +4259,8 @@ llvm::Value *IndexExpr::GetLValue(FunctionEmitContext *ctx) const {
-         // Convert to a slice pointer if we're indexing into SOA data
-         basePtrValue = lConvertPtrToSliceIfNeeded(ctx, basePtrValue, &baseExprType);
- 
--        llvm::Value *ptr =
--            ctx->GetElementPtrInst(basePtrValue, indexValue, baseExprType, LLVMGetName(basePtrValue, "_offset"));
-+        llvm::Value *ptr = ctx->GetElementPtrInst(basePtrValue, indexValue, baseExprType,
-+                                                  llvm::Twine(basePtrValue->getName()) + "_offset");
-         return lAddVaryingOffsetsIfNeeded(ctx, ptr, GetLValueType());
-     }
- 
-@@ -4290,8 +4291,8 @@ llvm::Value *IndexExpr::GetLValue(FunctionEmitContext *ctx) const {
-     ctx->SetDebugPos(pos);
- 
-     // And do the actual indexing calculation..
--    llvm::Value *ptr =
--        ctx->GetElementPtrInst(basePtr, LLVMInt32(0), indexValue, basePtrType, LLVMGetName(basePtr, "_offset"));
-+    llvm::Value *ptr = ctx->GetElementPtrInst(basePtr, LLVMInt32(0), indexValue, basePtrType,
-+                                              llvm::Twine(basePtr->getName()) + "_offset");
-     return lAddVaryingOffsetsIfNeeded(ctx, ptr, GetLValueType());
- }
- 
-@@ -4788,15 +4789,14 @@ llvm::Value *VectorMemberExpr::GetValue(FunctionEmitContext *ctx) const {
-         for (size_t i = 0; i < identifier.size(); ++i) {
-             char idStr[2] = {identifier[i], '\0'};
-             llvm::Value *elementPtr =
--                ctx->AddElementOffset(basePtr, indices[i], basePtrType, LLVMGetName(basePtr, idStr));
-+                ctx->AddElementOffset(basePtr, indices[i], basePtrType, llvm::Twine(basePtr->getName()) + idStr);
-             llvm::Value *elementValue = ctx->LoadInst(elementPtr, elementMask, elementPtrType);
- 
--            const char *resultName = LLVMGetName(resultPtr, idStr);
--            llvm::Value *ptmp = ctx->AddElementOffset(resultPtr, i, NULL, resultName);
-+            llvm::Value *ptmp = ctx->AddElementOffset(resultPtr, i, NULL, llvm::Twine(resultPtr->getName()) + idStr);
-             ctx->StoreInst(elementValue, ptmp, elementPtrType, expr->GetType()->IsUniformType());
-         }
- 
--        return ctx->LoadInst(resultPtr, memberType, LLVMGetName(basePtr, "_swizzle"));
-+        return ctx->LoadInst(resultPtr, memberType, llvm::Twine(basePtr->getName()) + "_swizzle");
-     }
- }
- 
-@@ -4932,7 +4932,7 @@ llvm::Value *MemberExpr::GetValue(FunctionEmitContext *ctx) const {
- 
-     ctx->SetDebugPos(pos);
-     std::string suffix = std::string("_") + identifier;
--    return ctx->LoadInst(lvalue, mask, lvalueType, LLVMGetName(lvalue, suffix.c_str()));
-+    return ctx->LoadInst(lvalue, mask, lvalueType, llvm::Twine(lvalue->getName()) + suffix);
- }
- 
- const Type *MemberExpr::GetType() const { return NULL; }
-@@ -6502,7 +6502,7 @@ static llvm::Value *lTypeConvAtomic(FunctionEmitContext *ctx, llvm::Value *exprV
-                 // does for everyone else...
-                 Assert(cast);
-                 cast = ctx->SwitchBoolSize(cast, LLVMTypes::BoolVectorType->getElementType(),
--                                           LLVMGetName(cast, "to_i_bool"));
-+                                           llvm::Twine(cast->getName()) + "to_i_bool");
-             }
-         } else {
-             // fromType->IsVaryingType())
-@@ -8246,7 +8246,7 @@ llvm::Value *NewExpr::GetValue(FunctionEmitContext *ctx) const {
-         // pointer of the return type and to run the code for initializers,
-         // if present.
-         llvm::Type *ptrType = retType->LLVMType(g->ctx);
--        ptrValue = ctx->BitCastInst(ptrValue, ptrType, LLVMGetName(ptrValue, "_cast_ptr"));
-+        ptrValue = ctx->BitCastInst(ptrValue, ptrType, llvm::Twine(ptrValue->getName()) + "_cast_ptr");
- 
-         if (initExpr != NULL)
-             InitSymbol(ptrValue, allocType, initExpr, ctx, pos);
-diff --git a/src/llvmutil.cpp b/src/llvmutil.cpp
-index 970175dbf..d0becb9f5 100644
---- a/src/llvmutil.cpp
-+++ b/src/llvmutil.cpp
-@@ -1605,23 +1605,6 @@ llvm::Value *LLVMShuffleVectors(llvm::Value *v1, llvm::Value *v2, int32_t shuf[]
-     return new llvm::ShuffleVectorInst(v1, v2, vec, "shuffle", insertBefore);
- }
- 
--const char *LLVMGetName(llvm::Value *v, const char *s) {
--    if (v == NULL)
--        return s;
--    std::string ret = std::string(v->getName());
--    ret += s;
--    return strdup(ret.c_str());
--}
--
--const char *LLVMGetName(const char *op, llvm::Value *v1, llvm::Value *v2) {
--    std::string r = op;
--    r += "_";
--    r += v1->getName().str();
--    r += "_";
--    r += v2->getName().str();
--    return strdup(r.c_str());
--}
--
- #ifdef ISPC_GENX_ENABLED
- bool lIsSVMLoad(llvm::Instruction *inst) {
-     Assert(inst);
-diff --git a/src/llvmutil.h b/src/llvmutil.h
-index 42cce4d83..07d089bb4 100644
---- a/src/llvmutil.h
-+++ b/src/llvmutil.h
-@@ -328,11 +328,6 @@ extern llvm::Value *LLVMConcatVectors(llvm::Value *v1, llvm::Value *v2, llvm::In
- extern llvm::Value *LLVMShuffleVectors(llvm::Value *v1, llvm::Value *v2, int32_t shuf[], int shufSize,
-                                        llvm::Instruction *insertBefore);
- 
--/** Utility routines to concat strings with the names of existing values to
--    create meaningful new names for instruction values.
--*/
--extern const char *LLVMGetName(llvm::Value *v, const char *);
--extern const char *LLVMGetName(const char *op, llvm::Value *v1, llvm::Value *v2);
- #ifdef ISPC_GENX_ENABLED
- enum AddressSpace { Local, Global, External };
- 
-diff --git a/src/opt.cpp b/src/opt.cpp
-index 5b1ac7b63..9d6cae058 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -257,7 +257,7 @@ static bool lGetSourcePosFromMetadata(const llvm::Instruction *inst, SourcePos *
-     return true;
- }
- 
--static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, const char *name,
-+static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[2] = {arg0, arg1};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[2]);
-@@ -265,21 +265,22 @@ static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llv
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    const char *name, llvm::Instruction *insertBefore = NULL) {
-+                                    const llvm::Twine &name, llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[3] = {arg0, arg1, arg2};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[3]);
-     return llvm::CallInst::Create(func, newArgArray, name, insertBefore);
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, const char *name, llvm::Instruction *insertBefore = NULL) {
-+                                    llvm::Value *arg3, const llvm::Twine &name,
-+                                    llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[4] = {arg0, arg1, arg2, arg3};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[4]);
-     return llvm::CallInst::Create(func, newArgArray, name, insertBefore);
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, llvm::Value *arg4, const char *name,
-+                                    llvm::Value *arg3, llvm::Value *arg4, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[5] = {arg0, arg1, arg2, arg3, arg4};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[5]);
-@@ -287,7 +288,7 @@ static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llv
- }
- 
- static llvm::Instruction *lCallInst(llvm::Function *func, llvm::Value *arg0, llvm::Value *arg1, llvm::Value *arg2,
--                                    llvm::Value *arg3, llvm::Value *arg4, llvm::Value *arg5, const char *name,
-+                                    llvm::Value *arg3, llvm::Value *arg4, llvm::Value *arg5, const llvm::Twine &name,
-                                     llvm::Instruction *insertBefore = NULL) {
-     llvm::Value *args[6] = {arg0, arg1, arg2, arg3, arg4, arg5};
-     llvm::ArrayRef<llvm::Value *> newArgArray(&args[0], &args[6]);
-@@ -991,23 +992,24 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 llvm::Type *returnType = callInst->getType();
-                 Assert(llvm::isa<llvm::VectorType>(returnType));
-                 // cast the i8 * to the appropriate type
--                const char *name = LLVMGetName(callInst->getArgOperand(0), "_cast");
--                llvm::Value *castPtr = new llvm::BitCastInst(callInst->getArgOperand(0),
--                                                             llvm::PointerType::get(returnType, 0), name, callInst);
-+                llvm::Value *castPtr =
-+                    new llvm::BitCastInst(callInst->getArgOperand(0), llvm::PointerType::get(returnType, 0),
-+                                          llvm::Twine(callInst->getArgOperand(0)->getName()) + "_cast", callInst);
-                 lCopyMetadata(castPtr, callInst);
-                 int align;
-                 if (g->opt.forceAlignedMemory)
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
--                name = LLVMGetName(callInst->getArgOperand(0), "_load");
- #if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
--                llvm::Instruction *loadInst = new llvm::LoadInst(castPtr, name, false /* not volatile */,
--                                                                 llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
-+                llvm::Instruction *loadInst =
-+                    new llvm::LoadInst(castPtr, llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load",
-+                                       false /* not volatile */, llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
- #else
-                 llvm::Instruction *loadInst = new llvm::LoadInst(
--                    llvm::dyn_cast<llvm::PointerType>(castPtr->getType())->getPointerElementType(), castPtr, name,
--                    false /* not volatile */, llvm::MaybeAlign(align).valueOrOne(), (llvm::Instruction *)NULL);
-+                    llvm::dyn_cast<llvm::PointerType>(castPtr->getType())->getPointerElementType(), castPtr,
-+                    llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load", false /* not volatile */,
-+                    llvm::MaybeAlign(align).valueOrOne(), (llvm::Instruction *)NULL);
- #endif
-                 lCopyMetadata(loadInst, callInst);
-                 llvm::ReplaceInstWithInst(callInst, loadInst);
-@@ -1028,9 +1030,9 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 // all lanes storing, so replace with a regular store
-                 llvm::Value *rvalue = callInst->getArgOperand(2);
-                 llvm::Type *storeType = rvalue->getType();
--                const char *name = LLVMGetName(callInst->getArgOperand(0), "_ptrcast");
--                llvm::Value *castPtr = new llvm::BitCastInst(callInst->getArgOperand(0),
--                                                             llvm::PointerType::get(storeType, 0), name, callInst);
-+                llvm::Value *castPtr =
-+                    new llvm::BitCastInst(callInst->getArgOperand(0), llvm::PointerType::get(storeType, 0),
-+                                          llvm::Twine(callInst->getArgOperand(0)->getName()) + "_ptrcast", callInst);
-                 lCopyMetadata(castPtr, callInst);
- 
-                 int align;
-@@ -1339,8 +1341,8 @@ static llvm::Value *lGetBasePointer(llvm::Value *v, llvm::Instruction *insertBef
-         if (t == NULL) {
-             return NULL;
-         } else {
--            return llvm::CastInst::Create(ci->getOpcode(), t, ci->getType()->getScalarType(), LLVMGetName(t, "_cast"),
--                                          insertBefore);
-+            return llvm::CastInst::Create(ci->getOpcode(), t, ci->getType()->getScalarType(),
-+                                          llvm::Twine(t->getName()) + "_cast", insertBefore);
-         }
-     }
- 
-@@ -1583,13 +1585,13 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-         if (co == NULL)
-             *constOffset = NULL;
-         else
--            *constOffset =
--                llvm::CastInst::Create(cast->getOpcode(), co, cast->getType(), LLVMGetName(co, "_cast"), insertBefore);
-+            *constOffset = llvm::CastInst::Create(cast->getOpcode(), co, cast->getType(),
-+                                                  llvm::Twine(co->getName()) + "_cast", insertBefore);
-         if (vo == NULL)
-             *variableOffset = NULL;
-         else
--            *variableOffset =
--                llvm::CastInst::Create(cast->getOpcode(), vo, cast->getType(), LLVMGetName(vo, "_cast"), insertBefore);
-+            *variableOffset = llvm::CastInst::Create(cast->getOpcode(), vo, cast->getType(),
-+                                                     llvm::Twine(vo->getName()) + "_cast", insertBefore);
-         return;
-     }
- 
-@@ -1608,16 +1610,18 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-             else if (c1 == NULL || llvm::isa<llvm::ConstantAggregateZero>(c1))
-                 *constOffset = c0;
-             else
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, c0, c1, LLVMGetName("add", c0, c1),
--                                                            insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, c0, c1, ((llvm::Twine("add_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
- 
-             if (v0 == NULL || llvm::isa<llvm::ConstantAggregateZero>(v0))
-                 *variableOffset = v1;
-             else if (v1 == NULL || llvm::isa<llvm::ConstantAggregateZero>(v1))
-                 *variableOffset = v0;
-             else
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, v0, v1,
--                                                               LLVMGetName("add", v0, v1), insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, v0, v1, ((llvm::Twine("add_") + v0->getName()) + "_") + v1->getName(),
-+                    insertBefore);
-             return;
-         } else if (bop->getOpcode() == llvm::Instruction::Shl) {
-             lExtractConstantOffset(op0, &c0, &v0, insertBefore);
-@@ -1633,10 +1637,12 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-                 *constOffset = vec;
-                 *variableOffset = NULL;
-             } else {
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Shl, c0, c1, LLVMGetName("shl", c0, c1),
--                                                            insertBefore);
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Shl, v0, c1,
--                                                               LLVMGetName("shl", v0, c1), insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Shl, c0, c1, ((llvm::Twine("shl_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Shl, v0, c1, ((llvm::Twine("shl_") + v0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-             }
-             return;
-         } else if (bop->getOpcode() == llvm::Instruction::Mul) {
-@@ -1648,25 +1654,30 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-             // Note that the first term is a constant and the last three are
-             // variable.
-             if (c0 != NULL && c1 != NULL)
--                *constOffset = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, c1, LLVMGetName("mul", c0, c1),
--                                                            insertBefore);
-+                *constOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Mul, c0, c1, ((llvm::Twine("mul_") + c0->getName()) + "_") + c1->getName(),
-+                    insertBefore);
-             else
-                 *constOffset = NULL;
- 
-             llvm::Value *va = NULL, *vb = NULL, *vc = NULL;
-             if (v0 != NULL && c1 != NULL)
--                va = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, c1, LLVMGetName("mul", v0, c1),
-+                va = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, c1,
-+                                                  ((llvm::Twine("mul_") + v0->getName()) + "_") + c1->getName(),
-                                                   insertBefore);
-             if (c0 != NULL && v1 != NULL)
--                vb = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, v1, LLVMGetName("mul", c0, v1),
-+                vb = llvm::BinaryOperator::Create(llvm::Instruction::Mul, c0, v1,
-+                                                  ((llvm::Twine("mul_") + c0->getName()) + "_") + v1->getName(),
-                                                   insertBefore);
-             if (v0 != NULL && v1 != NULL)
--                vc = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, v1, LLVMGetName("mul", v0, v1),
-+                vc = llvm::BinaryOperator::Create(llvm::Instruction::Mul, v0, v1,
-+                                                  ((llvm::Twine("mul_") + v0->getName()) + "_") + v1->getName(),
-                                                   insertBefore);
- 
-             llvm::Value *vab = NULL;
-             if (va != NULL && vb != NULL)
--                vab = llvm::BinaryOperator::Create(llvm::Instruction::Add, va, vb, LLVMGetName("add", va, vb),
-+                vab = llvm::BinaryOperator::Create(llvm::Instruction::Add, va, vb,
-+                                                   ((llvm::Twine("add_") + va->getName()) + "_") + vb->getName(),
-                                                    insertBefore);
-             else if (va != NULL)
-                 vab = va;
-@@ -1674,8 +1685,9 @@ static void lExtractConstantOffset(llvm::Value *vec, llvm::Value **constOffset,
-                 vab = vb;
- 
-             if (vab != NULL && vc != NULL)
--                *variableOffset = llvm::BinaryOperator::Create(llvm::Instruction::Add, vab, vc,
--                                                               LLVMGetName("add", vab, vc), insertBefore);
-+                *variableOffset = llvm::BinaryOperator::Create(
-+                    llvm::Instruction::Add, vab, vc, ((llvm::Twine("add_") + vab->getName()) + "_") + vc->getName(),
-+                    insertBefore);
-             else if (vab != NULL)
-                 *variableOffset = vab;
-             else
-@@ -1943,7 +1955,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-             // all zeros (i.e. a ConstantAggregateZero, but just in case,
-             // do the more general check with lVectorIs32BitInts().
-             variableOffset = new llvm::TruncInst(variableOffset, LLVMTypes::Int32VectorType,
--                                                 LLVMGetName(variableOffset, "_trunc"), insertBefore);
-+                                                 llvm::Twine(variableOffset->getName()) + "_trunc", insertBefore);
-         else
-             return false;
-     }
-@@ -1952,7 +1964,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-         if (lVectorIs32BitInts(constOffset)) {
-             // Truncate them so we have a 32-bit vector type for them.
-             constOffset = new llvm::TruncInst(constOffset, LLVMTypes::Int32VectorType,
--                                              LLVMGetName(constOffset, "_trunc"), insertBefore);
-+                                              llvm::Twine(constOffset->getName()) + "_trunc", insertBefore);
-         } else {
-             // FIXME: otherwise we just assume that all constant offsets
-             // can actually always fit into 32-bits...  (This could be
-@@ -1963,7 +1975,7 @@ static bool lOffsets32BitSafe(llvm::Value **variableOffsetPtr, llvm::Value **con
-             // llvm::ConstantFoldInstruction() doesn't seem to be doing
-             // enough for us in some cases if we call it from here.
-             constOffset = new llvm::TruncInst(constOffset, LLVMTypes::Int32VectorType,
--                                              LLVMGetName(constOffset, "_trunc"), insertBefore);
-+                                              llvm::Twine(constOffset->getName()) + "_trunc", insertBefore);
-         }
-     }
- 
-@@ -2012,8 +2024,8 @@ static bool lOffsets32BitSafe(llvm::Value **offsetPtr, llvm::Instruction *insert
- 
-         // Alternatively, offset could be a sequence of adds terminating
-         // in safe constant vectors or a SExt.
--        *offsetPtr =
--            new llvm::TruncInst(offset, LLVMTypes::Int32VectorType, LLVMGetName(offset, "_trunc"), insertBefore);
-+        *offsetPtr = new llvm::TruncInst(offset, LLVMTypes::Int32VectorType, llvm::Twine(offset->getName()) + "_trunc",
-+                                         insertBefore);
-         return true;
-     } else
-         return false;
-@@ -2229,7 +2241,8 @@ static bool lGSToGSBaseOffsets(llvm::CallInst *callInst) {
-     }
-     // Cast the base pointer to a void *, since that's what the
-     // __pseudo_*_base_offsets_* functions want.
--    basePtr = new llvm::IntToPtrInst(basePtr, LLVMTypes::VoidPointerType, LLVMGetName(basePtr, "_2void"), callInst);
-+    basePtr = new llvm::IntToPtrInst(basePtr, LLVMTypes::VoidPointerType, llvm::Twine(basePtr->getName()) + "_2void",
-+                                     callInst);
-     lCopyMetadata(basePtr, callInst);
-     llvm::Function *gatherScatterFunc = info->baseOffsetsFunc;
- 
-@@ -2803,7 +2816,7 @@ static bool lGSToLoadStore(llvm::CallInst *callInst) {
-                 lCopyMetadata(ptr, callInst);
-                 Debug(pos, "Transformed gather to unaligned vector load!");
-                 llvm::Instruction *newCall =
--                    lCallInst(gatherInfo->loadMaskedFunc, ptr, mask, LLVMGetName(ptr, "_masked_load"));
-+                    lCallInst(gatherInfo->loadMaskedFunc, ptr, mask, llvm::Twine(ptr->getName()) + "_masked_load");
-                 lCopyMetadata(newCall, callInst);
-                 llvm::ReplaceInstWithInst(callInst, newCall);
-                 return true;
diff --git a/srcpkgs/ispc/patches/llvm12-004.patch b/srcpkgs/ispc/patches/llvm12-004.patch
deleted file mode 100644
index 3a94d8443a5e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-004.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From c03a5142444476a1caa5c2ba7fa2d92d7793d6f1 Mon Sep 17 00:00:00 2001
-From: Deepak Rajendrakumaran <deepak.rajendrakumaran@intel.com>
-Date: Mon, 25 Jan 2021 09:22:49 -0800
-Subject: [PATCH] Fixing build on llvm trunk.
-
----
- src/ctx.cpp | 7 +++----
- 1 file changed, 3 insertions(+), 4 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index ded524b71..b60e6fe84 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1020,8 +1020,7 @@ void FunctionEmitContext::EmitCaseLabel(int value, bool checkMask, SourcePos pos
-     llvm::BasicBlock *bbCaseImpl = NULL;
-     if (emitGenXHardwareMask()) {
-         // Create basic block with actual case implementation
--        llvm::Twine bbName = llvm::Twine(bbCase->getName()) + "_impl";
--        bbCaseImpl = CreateBasicBlock(bbName, bbCase);
-+        bbCaseImpl = CreateBasicBlock(llvm::Twine(bbCase->getName()) + "_impl", bbCase);
-     }
- #endif
- 
-@@ -3142,8 +3141,8 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
-     llvm::Value *undef2 = llvm::UndefValue::get(vecType);
- 
-     // InsertElement
--    llvm::Twine tw = name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + llvm::Twine("_init");
--    llvm::Value *insert = InsertInst(undef1, v, 0, tw.str().c_str());
-+    llvm::Value *insert =
-+        InsertInst(undef1, v, 0, name.isTriviallyEmpty() ? (llvm::Twine(v->getName()) + "_broadcast") : name + "_init");
- 
-     // ShuffleVector
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
diff --git a/srcpkgs/ispc/patches/llvm12-005.patch b/srcpkgs/ispc/patches/llvm12-005.patch
deleted file mode 100644
index e3e96b00abfa..000000000000
--- a/srcpkgs/ispc/patches/llvm12-005.patch
+++ /dev/null
@@ -1,372 +0,0 @@
-From c1d0a51bf8416d42144de9e2bdd59825eaeff1ac Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Fri, 8 Jan 2021 14:13:49 -0800
-Subject: [PATCH] LLVM 11 support for gen code
-
----
- src/ctx.cpp                     |  13 ++-
- src/gen/GlobalsLocalization.cpp |   9 +-
- src/opt.cpp                     | 143 ++++++++++++++++++++++++--------
- 3 files changed, 124 insertions(+), 41 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index b60e6fe84..2a72e6837 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1,5 +1,5 @@
- /*
--  Copyright (c) 2010-2020, Intel Corporation
-+  Copyright (c) 2010-2021, Intel Corporation
-   All rights reserved.
- 
-   Redistribution and use in source and binary forms, with or without
-@@ -3685,8 +3685,17 @@ llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::
-     AssertPos(currentPos, llvm::isa<llvm::VectorType>(value->getType()));
-     llvm::VectorType *vt = llvm::dyn_cast<llvm::VectorType>(value->getType());
-     if (defaults == NULL) {
--        defaults = llvm::ConstantVector::getSplat(value->getType()->getVectorNumElements(),
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+        defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-+                                                  llvm::Constant::getNullValue(vt->getElementType()));
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+        defaults = llvm::ConstantVector::getSplat({static_cast<unsigned int>(vt->getNumElements()), false},
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
-+#else
-+        defaults = llvm::ConstantVector::getSplat(
-+            llvm::ElementCount::get(static_cast<unsigned int>(vt->getNumElements()), false),
-+            llvm::Constant::getNullValue(vt->getElementType()));
-+#endif
-     }
- 
-     auto Fn = llvm::GenXIntrinsic::getGenXDeclaration(m->module, llvm::GenXIntrinsic::genx_simdcf_predicate,
-diff --git a/src/gen/GlobalsLocalization.cpp b/src/gen/GlobalsLocalization.cpp
-index a176e9462..41f3b00e2 100644
---- a/src/gen/GlobalsLocalization.cpp
-+++ b/src/gen/GlobalsLocalization.cpp
-@@ -1,5 +1,5 @@
- /*
--  Copyright (c) 2014, 2016-2020, Intel Corporation
-+  Copyright (c) 2014, 2016-2021, Intel Corporation
-   All rights reserved.
- 
-   Redistribution and use in source and binary forms, with or without
-@@ -53,8 +53,10 @@
- #include <llvm/GenXIntrinsics/GenXIntrOpts.h>
- #include <llvm/GenXIntrinsics/GenXIntrinsics.h>
- #include <llvm/GenXIntrinsics/GenXMetadata.h>
--#include <llvm/IR/CFG.h>
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
- #include <llvm/IR/CallSite.h>
-+#endif
-+#include <llvm/IR/CFG.h>
- #include <llvm/IR/DebugInfo.h>
- #include <llvm/IR/Dominators.h>
- #include <llvm/IR/Function.h>
-@@ -470,7 +472,8 @@ void GlobalsLocalization::LocalizeGlobals(LocalizationInfo &LI) {
-         Instruction &FirstI = *Fn->getEntryBlock().begin();
-         Type *ElemTy = GV->getType()->getElementType();
-         AllocaInst *Alloca = new AllocaInst(ElemTy, 0, GV->getName() + ".local", &FirstI);
--        Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()));
-+        Alloca->setAlignment(llvm::MaybeAlign(GV->getAlignment()).valueOrOne());
-+
-         if (!isa<UndefValue>(GV->getInitializer()))
-             new StoreInst(GV->getInitializer(), Alloca, &FirstI);
- 
-diff --git a/src/opt.cpp b/src/opt.cpp
-index d58d77f73..1789b8476 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -2899,15 +2899,17 @@ static llvm::Function *lGenXMaskedInt8Inst(llvm::Instruction *inst, bool isStore
- static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::Instruction *inst) {
-     Assert(g->target->isGenXTarget());
-     Assert(llvm::isa<llvm::VectorType>(val->getType()));
--    Assert(llvm::isPowerOf2_32(val->getType()->getVectorNumElements()));
--    Assert(val->getType()->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-+
-+    llvm::VectorType *valVecType = llvm::dyn_cast<llvm::VectorType>(val->getType());
-+    Assert(llvm::isPowerOf2_32(valVecType->getNumElements()));
-+    Assert(valVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
- 
-     // The data write of svm store must have a size that is a power of two from 16 to 128
-     // bytes. However for int8 type and simd width = 8, the data write size is 8.
-     // So we use masked store function here instead of svm store which process int8 type
-     // correctly.
--    if (val->getType()->getPrimitiveSizeInBits() / 8 < 16) {
--        Assert(val->getType()->getScalarType() == LLVMTypes::Int8Type);
-+    if (valVecType->getPrimitiveSizeInBits() / 8 < 16) {
-+        Assert(valVecType->getScalarType() == LLVMTypes::Int8Type);
-         if (llvm::Function *maskedFunc = lGenXMaskedInt8Inst(inst, true))
-             return llvm::dyn_cast<llvm::CallInst>(lCallInst(maskedFunc, ptr, val, LLVMMaskAllOn, ""));
-         else {
-@@ -2923,15 +2925,17 @@ static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::
- 
- static llvm::CallInst *lGenXLoadInst(llvm::Value *ptr, llvm::Type *retType, llvm::Instruction *inst) {
-     Assert(llvm::isa<llvm::VectorType>(retType));
--    Assert(llvm::isPowerOf2_32(retType->getVectorNumElements()));
--    Assert(retType->getPrimitiveSizeInBits());
--    Assert(retType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-+
-+    llvm::VectorType *retVecType = llvm::dyn_cast<llvm::VectorType>(retType);
-+    Assert(llvm::isPowerOf2_32(retVecType->getNumElements()));
-+    Assert(retVecType->getPrimitiveSizeInBits());
-+    Assert(retVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-     // The data read of svm load must have a size that is a power of two from 16 to 128
-     // bytes. However for int8 type and simd width = 8, the data read size is 8.
-     // So we use masked load function here instead of svm load which process int8 type
-     // correctly.
--    if (retType->getPrimitiveSizeInBits() / 8 < 16) {
--        Assert(retType->getScalarType() == LLVMTypes::Int8Type);
-+    if (retVecType->getPrimitiveSizeInBits() / 8 < 16) {
-+        Assert(retVecType->getScalarType() == LLVMTypes::Int8Type);
-         if (llvm::Function *maskedFunc = lGenXMaskedInt8Inst(inst, false))
-             return llvm::dyn_cast<llvm::CallInst>(lCallInst(maskedFunc, ptr, LLVMMaskAllOn, ""));
-         else {
-@@ -5622,15 +5626,24 @@ static bool lVectorizeGEPs(llvm::Value *ptr, std::vector<PtrUse> &ptrUses, std::
-         llvm::PtrToIntInst *ptrToInt =
-             new llvm::PtrToIntInst(ptr, LLVMTypes::Int64Type, "vectorized_ptrtoint", insertBefore);
-         llvm::Instruction *addr = llvm::BinaryOperator::CreateAdd(ptrToInt, offset, "vectorized_address", insertBefore);
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        llvm::Type *retType = llvm::FixedVectorType::get(scalar_type, reqSize / t_size);
-+#else
-         llvm::Type *retType = llvm::VectorType::get(scalar_type, reqSize / t_size);
-+#endif
-         llvm::Function *fn = llvm::GenXIntrinsic::getGenXDeclaration(
-             m->module, llvm::GenXIntrinsic::genx_svm_block_ld_unaligned, {retType, addr->getType()});
-         llvm::Instruction *ld = llvm::CallInst::Create(fn, {addr}, "vectorized_ld", insertBefore);
- 
-         if (loadingPtr) {
-             // Cast int to ptr via inttoptr
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            ld = new llvm::IntToPtrInst(ld, llvm::FixedVectorType::get(originalType, reqSize / t_size),
-+                                        "vectorized_inttoptr", insertBefore);
-+#else
-             ld = new llvm::IntToPtrInst(ld, llvm::VectorType::get(originalType, reqSize / t_size),
-                                         "vectorized_inttoptr", insertBefore);
-+#endif
-         }
- 
-         // Scalar extracts for all loaded elements
-@@ -6160,19 +6173,34 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-         llvm::Instruction *inst = &*I;
-         if (llvm::CallInst *ci = llvm::dyn_cast<llvm::CallInst>(inst)) {
-             llvm::Function *func = ci->getCalledFunction();
--            if (func && func->getName() == "llvm.trap") {
-+            if (func && func->getName().equals("llvm.trap")) {
-                 llvm::Type *argTypes[] = {LLVMTypes::Int1VectorType, LLVMTypes::Int16VectorType};
-                 // Description of parameters for genx_raw_send_noresult can be found in target-genx.ll
-                 auto Fn = +llvm::GenXIntrinsic::getGenXDeclaration(
-                     m->module, llvm::GenXIntrinsic::genx_raw_send_noresult, argTypes);
-                 llvm::SmallVector<llvm::Value *, 8> Args;
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 0));
--                Args.push_back(llvm::ConstantVector::getSplat(g->target->getNativeVectorWidth(),
--                                                              llvm::ConstantInt::getTrue(*g->ctx)));
-+                Args.push_back(llvm::ConstantVector::getSplat(
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+                    g->target->getNativeVectorWidth(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+                    {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
-+#else // LLVM 12.0+
-+                    llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-+#endif
-+                    llvm::ConstantInt::getTrue(*g->ctx)));
-+
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 39));
-                 Args.push_back(llvm::ConstantInt::get(LLVMTypes::Int32Type, 33554448));
-                 llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
--                    g->target->getNativeVectorWidth(), llvm::Constant::getNullValue(llvm::Type::getInt16Ty(*g->ctx)));
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-+                    g->target->getNativeVectorWidth(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+                    {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
-+#else // LLVM 12.0+
-+                    llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-+#endif
-+                    llvm::Constant::getNullValue(llvm::Type::getInt16Ty(*g->ctx)));
-                 Args.push_back(zeroMask);
- 
-                 llvm::Instruction *newInst = llvm::CallInst::Create(Fn, Args, ci->getName());
-@@ -6181,7 +6209,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     modifiedAny = true;
-                     goto restart;
-                 }
--            } else if (func && func->getName() == "llvm.assume") {
-+            } else if (func && func->getName().equals("llvm.assume")) {
-                 ci->eraseFromParent();
-                 modifiedAny = true;
-                 goto restart;
-@@ -6335,7 +6363,7 @@ bool CheckUnsupportedInsts::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 continue;
-             for (int i = 0; i < unsupportedFuncs.size(); i++) {
-                 std::smatch match;
--                std::string funcName = func->getName();
-+                std::string funcName = func->getName().str();
-                 if (std::regex_match(funcName, match, unsupportedFuncs[i])) {
-                     // We found unsupported function. Generate error and stop compilation.
-                     SourcePos pos;
-@@ -6418,12 +6446,14 @@ bool MangleOpenCLBuiltins::runOnBasicBlock(llvm::BasicBlock &bb) {
-             if (func->getName().startswith("__spirv_ocl")) {
-                 std::string mangledName;
-                 llvm::Type *retType = func->getReturnType();
--                std::string funcName = func->getName();
-+                std::string funcName = func->getName().str();
-                 std::vector<llvm::Type *> ArgTy;
-                 // spirv OpenCL builtins are used for double types only
--                Assert(retType->isVectorTy() && retType->getVectorElementType()->isDoubleTy() ||
-+                Assert(retType->isVectorTy() &&
-+                           llvm::dyn_cast<llvm::VectorType>(retType)->getElementType()->isDoubleTy() ||
-                        retType->isSingleValueType() && retType->isDoubleTy());
--                if (retType->isVectorTy() && retType->getVectorElementType()->isDoubleTy()) {
-+                if (retType->isVectorTy() &&
-+                    llvm::dyn_cast<llvm::VectorType>(retType)->getElementType()->isDoubleTy()) {
-                     ArgTy.push_back(LLVMTypes::DoubleVectorType);
-                     // _DvWIDTH suffix is used in target file to differentiate scalar
-                     // and vector versions of intrinsics. Here we remove this
-@@ -6511,8 +6541,15 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- 
-     // Cast offsets to int64
-     Offsets = new llvm::ZExtInst(
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        Offsets,
-+        llvm::FixedVectorType::get(LLVMTypes::Int64Type,
-+                                   llvm::dyn_cast<llvm::VectorType>(Offsets->getType())->getNumElements()),
-+        "svm_offset_zext", InsertBefore);
-+#else
-         Offsets, llvm::VectorType::get(LLVMTypes::Int64Type, Offsets->getType()->getVectorNumElements()),
-         "svm_offset_zext", InsertBefore);
-+#endif
- 
-     if (!llvm::isa<llvm::ConstantPointerNull>(Ptr)) {
-         // Cast ptr to int64
-@@ -6520,13 +6557,31 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- 
-         // Vectorize ptr
-         llvm::Value *undefInsertValue =
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            llvm::UndefValue::get(llvm::FixedVectorType::get(
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+#else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
-+#endif
-         address = llvm::InsertElementInst::Create(undefInsertValue, address, LLVMInt32(0), "svm_ptr_iei", InsertBefore);
-         llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
-+#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+            {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
-+#else
-+        llvm::ElementCount::get(
-+                                llvm::dyn_cast<llvm::FixedVectorType>(addressType->getNumElements(), false),
-+#endif
-             llvm::Constant::getNullValue(llvm::Type::getInt32Ty(InsertBefore->getContext())));
-+
-         llvm::Value *undefShuffleValue =
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            llvm::UndefValue::get(llvm::FixedVectorType::get(
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+#else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
-+#endif
-         address = new llvm::ShuffleVectorInst(address, undefShuffleValue, zeroVec, "svm_ptr_svi", InsertBefore);
- 
-         // Calculate address
-@@ -6553,9 +6608,12 @@ llvm::Instruction *FixAddressSpace::processVectorLoad(llvm::LoadInst *LI) {
-     if (retType->getScalarType()->isPointerTy()) {
-         isPtrLoad = true;
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        retType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(retType)->getNumElements());
-+#else
-         retType = llvm::VectorType::get(scalarType, retType->getVectorNumElements());
-+#endif
-     }
--
-     llvm::Instruction *res = lGenXLoadInst(ptr, retType, llvm::dyn_cast<llvm::Instruction>(LI));
-     Assert(res);
- 
-@@ -6580,11 +6638,16 @@ llvm::Instruction *FixAddressSpace::processSVMVectorLoad(llvm::Instruction *CI)
-     ptr = new llvm::IntToPtrInst(ptr, llvm::PointerType::get(retType, 0), CI->getName() + "_inttoptr", CI);
-     llvm::Instruction *loadInst = NULL;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    loadInst = new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), loadInst,
--                                  CI->getName(), (llvm::Instruction *)NULL);
-+    loadInst = new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-+                                  CI->getName(), false /* not volatile */,
-+                                  llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne(),
-+                                  (llvm::Instruction *)NULL);
- #else
--    loadInst = new llvm::LoadInst(ptr, CI->getName(), (llvm::Instruction *)NULL);
-+    loadInst = new llvm::LoadInst(ptr, CI->getName(), false,
-+                                  llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne(),
-+                                  (llvm::Instruction *)NULL);
- #endif
-+
-     Assert(loadInst);
-     return loadInst;
- }
-@@ -6606,7 +6669,11 @@ llvm::Instruction *FixAddressSpace::processVectorStore(llvm::StoreInst *SI) {
-     // Note: it doesn't look like a normal case for GenX target
-     if (valType->getScalarType()->isPointerTy()) {
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+        valType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(valType)->getNumElements());
-+#else
-         valType = llvm::VectorType::get(scalarType, valType->getVectorNumElements());
-+#endif
-         val = new llvm::PtrToIntInst(val, valType, "svm_st_val_ptrtoint", SI);
-     }
- 
-@@ -6631,12 +6698,8 @@ llvm::Instruction *FixAddressSpace::processSVMVectorStore(llvm::Instruction *CI)
-     ptr = new llvm::IntToPtrInst(ptr, llvm::PointerType::get(valType, 0), CI->getName() + "_inttoptr", CI);
- 
-     llvm::Instruction *storeInst = NULL;
--#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    loadInst = new llvm::StoreInst(val, llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(),
--                                   storeInst, CI->getName(), (llvm::Instruction *)NULL);
--#else
--    storeInst = new llvm::StoreInst(val, ptr, (llvm::Instruction *)NULL);
--#endif
-+    storeInst = new llvm::StoreInst(val, ptr, (llvm::Instruction *)NULL,
-+                                    llvm::MaybeAlign(g->target->getNativeVectorAlignment()).valueOrOne());
-     Assert(storeInst);
-     return storeInst;
- }
-@@ -6645,15 +6708,18 @@ llvm::Instruction *FixAddressSpace::createInt8WrRegion(llvm::Value *Val, llvm::V
-     int width = g->target->getVectorWidth();
- 
-     llvm::Value *Args[8];
--
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Args[0] = llvm::UndefValue::get(llvm::FixedVectorType::get(LLVMTypes::Int8Type, width * 4)); // old value
-+#else
-     Args[0] = llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int8Type, width * 4)); // old value
--    Args[1] = Val;                                                                          // value to store
--    Args[2] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);                              // vstride
--    Args[3] = llvm::ConstantInt::get(LLVMTypes::Int32Type, width);                          // width
--    Args[4] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 4);                              // stride
--    Args[5] = llvm::ConstantInt::get(LLVMTypes::Int16Type, 0);                              // offsets
--    Args[6] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);                              // parent width (ignored)
--    Args[7] = Mask;                                                                         // mask
-+#endif
-+    Args[1] = Val;                                                 // value to store
-+    Args[2] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);     // vstride
-+    Args[3] = llvm::ConstantInt::get(LLVMTypes::Int32Type, width); // width
-+    Args[4] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 4);     // stride
-+    Args[5] = llvm::ConstantInt::get(LLVMTypes::Int16Type, 0);     // offsets
-+    Args[6] = llvm::ConstantInt::get(LLVMTypes::Int32Type, 0);     // parent width (ignored)
-+    Args[7] = Mask;                                                // mask
- 
-     llvm::Type *Tys[4];
- 
-@@ -6708,7 +6774,12 @@ llvm::Instruction *FixAddressSpace::processGatherScatterPrivate(llvm::CallInst *
-         return NULL;
- 
-     llvm::Value *address = calculateGatherScatterAddress(ptr, offsets, CI);
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    llvm::Type *i8VecType = llvm::FixedVectorType::get(LLVMTypes::Int8Type, width * 4);
-+#else
-     llvm::Type *i8VecType = llvm::VectorType::get(LLVMTypes::Int8Type, width * 4);
-+#endif
-+
-     bool isInt8 = (value->getType()->getScalarType() == LLVMTypes::Int8Type);
- 
-     Assert(address && "Bad gather/scatter address!");
diff --git a/srcpkgs/ispc/patches/llvm12-006.patch b/srcpkgs/ispc/patches/llvm12-006.patch
deleted file mode 100644
index a829ea48391e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-006.patch
+++ /dev/null
@@ -1,126 +0,0 @@
-From bb3f493d1fbd45c79e1d9dee67a0430ba313eaad Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 19 Jan 2021 11:07:33 -0800
-Subject: [PATCH] Fixed ifdefs for LLVM_11
-
----
- src/ctx.cpp |  6 +++---
- src/opt.cpp | 18 +++++++++---------
- 2 files changed, 12 insertions(+), 12 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 2a72e6837..527a02f30 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -1691,7 +1691,7 @@ llvm::Value *FunctionEmitContext::SmearUniform(llvm::Value *value, const llvm::T
-     if (llvm::Constant *const_val = llvm::dyn_cast<llvm::Constant>(value)) {
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         ret = llvm::ConstantVector::getSplat(g->target->getVectorWidth(), const_val);
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-         ret =
-             llvm::ConstantVector::getSplat({static_cast<unsigned int>(g->target->getVectorWidth()), false}, const_val);
- #else // LLVM 12.0+
-@@ -3148,7 +3148,7 @@ llvm::Value *FunctionEmitContext::BroadcastValue(llvm::Value *v, llvm::Type *vec
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-     llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
-         vecType->getVectorNumElements(), llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-     llvm::Constant *zeroVec =
-         llvm::ConstantVector::getSplat({static_cast<unsigned int>(ty->getNumElements()), false},
-                                        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(*g->ctx)));
-@@ -3688,7 +3688,7 @@ llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-         defaults = llvm::ConstantVector::getSplat({static_cast<unsigned int>(vt->getNumElements()), false},
-                                                   llvm::Constant::getNullValue(vt->getElementType()));
- #else
-diff --git a/src/opt.cpp b/src/opt.cpp
-index 1789b8476..3ff191a0a 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -1045,7 +1045,7 @@ bool IntrinsicsOpt::runOnBasicBlock(llvm::BasicBlock &bb) {
-                     align = g->target->getNativeVectorAlignment();
-                 else
-                     align = callInst->getCalledFunction() == avxMaskedLoad32 ? 4 : 8;
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                 llvm::Instruction *loadInst =
-                     new llvm::LoadInst(castPtr, llvm::Twine(callInst->getArgOperand(0)->getName()) + "_load",
-                                        false /* not volatile */, llvm::MaybeAlign(align), (llvm::Instruction *)NULL);
-@@ -1472,7 +1472,7 @@ static llvm::Value *lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offse
-                     llvm::Value *zeroMask =
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                         llvm::ConstantVector::getSplat(cv->getType()->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                         llvm::ConstantVector::getSplat(
-                             {llvm::dyn_cast<llvm::VectorType>(cv->getType())->getNumElements(), false},
- #else // LLVM 12.0+
-@@ -1495,7 +1495,7 @@ static llvm::Value *lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offse
-                         llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                             bop_var_type->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                             {llvm::dyn_cast<llvm::VectorType>(bop_var_type)->getNumElements(), false},
- #else // LLVM 12.0+
-                             llvm::ElementCount::get(
-@@ -2803,7 +2803,7 @@ static bool lGSToLoadStore(llvm::CallInst *callInst) {
-             llvm::Value *zeroMask =
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                 llvm::ConstantVector::getSplat(callInst->getType()->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                 llvm::ConstantVector::getSplat(
-                     {llvm::dyn_cast<llvm::VectorType>(callInst->getType())->getNumElements(), false},
- 
-@@ -3100,7 +3100,7 @@ static bool lImproveMaskedLoad(llvm::CallInst *callInst, llvm::BasicBlock::itera
-         {
-             llvm::Type *ptrType = llvm::PointerType::get(callInst->getType(), 0);
-             ptr = new llvm::BitCastInst(ptr, ptrType, "ptr_cast_for_load", callInst);
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             load = new llvm::LoadInst(
-                 ptr, callInst->getName(), false /* not volatile */,
-                 llvm::MaybeAlign(g->opt.forceAlignedMemory ? g->target->getNativeVectorAlignment() : info->align)
-@@ -3459,7 +3459,7 @@ llvm::Value *lGEPAndLoad(llvm::Value *basePtr, int64_t offset, int align, llvm::
-                          llvm::Type *type) {
-     llvm::Value *ptr = lGEPInst(basePtr, LLVMInt64(offset), "new_base", insertBefore);
-     ptr = new llvm::BitCastInst(ptr, llvm::PointerType::get(type, 0), "ptr_cast", insertBefore);
--#if ISPC_LLVM_VERSION == ISPC_LLVM_10_0
-+#if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-     return new llvm::LoadInst(ptr, "gather_load", false /* not volatile */, llvm::MaybeAlign(align), insertBefore);
- #else // LLVM 11.0+
-     return new llvm::LoadInst(llvm::dyn_cast<llvm::PointerType>(ptr->getType())->getPointerElementType(), ptr,
-@@ -6183,7 +6183,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 Args.push_back(llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                     g->target->getNativeVectorWidth(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                     {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
- #else // LLVM 12.0+
-                     llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-@@ -6195,7 +6195,7 @@ bool ReplaceLLVMIntrinsics::runOnBasicBlock(llvm::BasicBlock &bb) {
-                 llvm::Value *zeroMask = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-                     g->target->getNativeVectorWidth(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-                     {static_cast<unsigned int>(g->target->getNativeVectorWidth()), false},
- #else // LLVM 12.0+
-                     llvm::ElementCount::get(static_cast<unsigned int>(g->target->getNativeVectorWidth()), false),
-@@ -6567,7 +6567,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
-         llvm::Constant *zeroVec = llvm::ConstantVector::getSplat(
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
--#elif ISPC_LLVM_VERSION == ISPC_LLVM_11_0
-+#elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
-             {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
- #else
-         llvm::ElementCount::get(
diff --git a/srcpkgs/ispc/patches/llvm12-007.patch b/srcpkgs/ispc/patches/llvm12-007.patch
deleted file mode 100644
index 1b975f896c7e..000000000000
--- a/srcpkgs/ispc/patches/llvm12-007.patch
+++ /dev/null
@@ -1,160 +0,0 @@
-From 62f5a6c37bf26fc25a7cf81868052d3472874610 Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 23 Mar 2021 23:07:30 -0700
-Subject: [PATCH] Do not generate function mask when it is not required
-
----
- src/ctx.cpp                    | 39 ++++++++++++++-------
- tests/lit-tests/full_mask.ispc | 63 ++++++++++++++++++++++++++++++++++
- 2 files changed, 90 insertions(+), 12 deletions(-)
- create mode 100644 tests/lit-tests/full_mask.ispc
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 527a02f30..9e775fc5c 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -231,10 +231,18 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym, llvm::F
-     internalMaskPointer = AllocaInst(LLVMTypes::MaskType, "internal_mask_memory");
-     StoreInst(LLVMMaskAllOn, internalMaskPointer);
- 
--    functionMaskValue = LLVMMaskAllOn;
--
--    fullMaskPointer = AllocaInst(LLVMTypes::MaskType, "full_mask_memory");
--    StoreInst(LLVMMaskAllOn, fullMaskPointer);
-+    // If the function doesn't have __mask in parameters, there is no need to
-+    // have function mask
-+    if ((func->GetType()->isExported &&
-+         (lf->getFunctionType()->getNumParams() == func->GetType()->GetNumParameters())) ||
-+        (func->GetType()->isUnmasked) || (func->GetType()->isTask)) {
-+        functionMaskValue = NULL;
-+        fullMaskPointer = NULL;
-+    } else {
-+        functionMaskValue = LLVMMaskAllOn;
-+        fullMaskPointer = AllocaInst(LLVMTypes::MaskType, "full_mask_memory");
-+        StoreInst(LLVMMaskAllOn, fullMaskPointer);
-+    }
- 
-     blockEntryMask = NULL;
-     breakLanesPtr = continueLanesPtr = NULL;
-@@ -389,20 +397,26 @@ llvm::BasicBlock *FunctionEmitContext::GetCurrentBasicBlock() { return bblock; }
- 
- void FunctionEmitContext::SetCurrentBasicBlock(llvm::BasicBlock *bb) { bblock = bb; }
- 
--llvm::Value *FunctionEmitContext::GetFunctionMask() { return functionMaskValue; }
-+llvm::Value *FunctionEmitContext::GetFunctionMask() { return fullMaskPointer ? functionMaskValue : LLVMMaskAllOn; }
- 
- llvm::Value *FunctionEmitContext::GetInternalMask() { return LoadInst(internalMaskPointer, NULL, "load_mask"); }
- 
- llvm::Value *FunctionEmitContext::GetFullMask() {
--    return BinaryOperator(llvm::Instruction::And, GetInternalMask(), functionMaskValue, "internal_mask&function_mask");
-+    return fullMaskPointer ? BinaryOperator(llvm::Instruction::And, GetInternalMask(), functionMaskValue,
-+                                            "internal_mask&function_mask")
-+                           : GetInternalMask();
- }
- 
--llvm::Value *FunctionEmitContext::GetFullMaskPointer() { return fullMaskPointer; }
-+llvm::Value *FunctionEmitContext::GetFullMaskPointer() {
-+    return fullMaskPointer ? fullMaskPointer : internalMaskPointer;
-+}
- 
- void FunctionEmitContext::SetFunctionMask(llvm::Value *value) {
--    functionMaskValue = value;
--    if (bblock != NULL)
--        StoreInst(GetFullMask(), fullMaskPointer);
-+    if (fullMaskPointer != NULL) {
-+        functionMaskValue = value;
-+        if (bblock != NULL)
-+            StoreInst(GetFullMask(), fullMaskPointer);
-+    }
- }
- 
- void FunctionEmitContext::SetBlockEntryMask(llvm::Value *value) { blockEntryMask = value; }
-@@ -410,7 +424,8 @@ void FunctionEmitContext::SetBlockEntryMask(llvm::Value *value) { blockEntryMask
- void FunctionEmitContext::SetInternalMask(llvm::Value *value) {
-     StoreInst(value, internalMaskPointer);
-     // kludge so that __mask returns the right value in ispc code.
--    StoreInst(GetFullMask(), fullMaskPointer);
-+    if (fullMaskPointer)
-+        StoreInst(GetFullMask(), fullMaskPointer);
- }
- 
- void FunctionEmitContext::SetInternalMaskAnd(llvm::Value *oldMask, llvm::Value *test) {
-@@ -1265,7 +1280,7 @@ void FunctionEmitContext::CurrentLanesReturned(Expr *expr, bool doCoherenceCheck
-         // lanes have returned
-         if (doCoherenceCheck) {
-             // if newReturnedLanes == functionMaskValue, get out of here!
--            llvm::Value *cmp = MasksAllEqual(functionMaskValue, newReturnedLanes);
-+            llvm::Value *cmp = MasksAllEqual(GetFunctionMask(), newReturnedLanes);
-             llvm::BasicBlock *bDoReturn = CreateBasicBlock("do_return");
-             llvm::BasicBlock *bNoReturn = CreateBasicBlock("no_return");
-             BranchInst(bDoReturn, bNoReturn, cmp);
-diff --git a/tests/lit-tests/full_mask.ispc b/tests/lit-tests/full_mask.ispc
-new file mode 100644
-index 000000000..ac0b0bca3
---- /dev/null
-+++ b/tests/lit-tests/full_mask.ispc
-@@ -0,0 +1,63 @@
-+// RUN: %{ispc} %s -DISPC_EXPORT --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_EXPORT %s
-+
-+// RUN: %{ispc} %s -DISPC_UNMASKED --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_UNMASKED %s
-+
-+// RUN: %{ispc} %s -DISPC_NOQUALIF --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_NOQUALIF %s
-+
-+// RUN: %{ispc} %s -DISPC_TASK --emit-llvm-text -O0 --nowrap -o %t.ll
-+// RUN: FileCheck --input-file=%t.ll -check-prefix=CHECK_ISPC_TASK %s
-+
-+struct Parameters {
-+    float *vout;
-+    int param;
-+};
-+
-+#ifdef ISPC_EXPORT
-+// CHECK_ISPC_EXPORT: define void @simple_export___
-+// CHECK_ISPC_EXPORT: %full_mask_memory = alloca
-+// CHECK_ISPC_EXPORT: define void @simple_export(
-+// CHECK_ISPC_EXPORT-NOT: %full_mask_memory = alloca
-+export void simple_export(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_UNMASKED
-+// CHECK_ISPC_UNMASKED: define void @simple_unmasked
-+// CHECK_ISPC_UNMASKED-NOT: %full_mask_memory = alloca
-+unmasked void simple_unmasked(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_NOQUALIF
-+// CHECK_ISPC_NOQUALIF: define void @simple
-+// CHECK_ISPC_NOQUALIF: %full_mask_memory = alloca
-+void simple(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+#endif
-+#ifdef ISPC_TASK
-+
-+// CHECK_ISPC_TASK: define void @simple_task
-+// CHECK_ISPC_TASK-NOT: %full_mask_memory = alloca
-+// CHECK_ISPC_TASK: define void @simple_entry_point__
-+// CHECK_ISPC_TASK: %full_mask_memory = alloca
-+// CHECK_ISPC_TASK: define void @simple_entry_point(
-+// CHECK_ISPC_TASK-NOT: %full_mask_memory = alloca
-+task void simple_task(void *uniform _p) {
-+    Parameters *uniform p = (Parameters * uniform) _p;
-+    if (programIndex > p->param)
-+        p->vout[programIndex] = programCount * programIndex;
-+}
-+export void simple_entry_point(void *uniform parameters, uniform int dim0, uniform int dim1, uniform int dim2) {
-+    launch[dim0, dim1, dim2] simple_task(parameters);
-+}
-+#endif
-\ No newline at end of file
diff --git a/srcpkgs/ispc/patches/llvm12-008.patch b/srcpkgs/ispc/patches/llvm12-008.patch
deleted file mode 100644
index c8413d8b7887..000000000000
--- a/srcpkgs/ispc/patches/llvm12-008.patch
+++ /dev/null
@@ -1,149 +0,0 @@
-From afad14227d9204a3c8a626ca608f5b43c3218fe9 Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 4 May 2021 11:43:52 -0700
-Subject: [PATCH] Fixed ISPC gen build for LLVM12
-
----
- src/ctx.cpp |  4 ++++
- src/opt.cpp | 43 +++++++++++++++++++++++++++++--------------
- 2 files changed, 33 insertions(+), 14 deletions(-)
-
-diff --git a/src/ctx.cpp b/src/ctx.cpp
-index 0c7050591..f7dc06939 100644
---- a/src/ctx.cpp
-+++ b/src/ctx.cpp
-@@ -3738,7 +3738,11 @@ llvm::Value *FunctionEmitContext::GenXSimdCFAny(llvm::Value *value) {
- 
- llvm::Value *FunctionEmitContext::GenXSimdCFPredicate(llvm::Value *value, llvm::Value *defaults) {
-     AssertPos(currentPos, llvm::isa<llvm::VectorType>(value->getType()));
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    llvm::FixedVectorType *vt = llvm::dyn_cast<llvm::FixedVectorType>(value->getType());
-+#else
-     llvm::VectorType *vt = llvm::dyn_cast<llvm::VectorType>(value->getType());
-+#endif
-     if (defaults == NULL) {
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-         defaults = llvm::ConstantVector::getSplat(vt->getVectorNumElements(),
-diff --git a/src/opt.cpp b/src/opt.cpp
-index cea4afa23..4e33d6b1a 100644
---- a/src/opt.cpp
-+++ b/src/opt.cpp
-@@ -2916,9 +2916,13 @@ static llvm::Function *lGenXMaskedInt8Inst(llvm::Instruction *inst, bool isStore
- 
- static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::Instruction *inst) {
-     Assert(g->target->isGenXTarget());
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Assert(llvm::isa<llvm::FixedVectorType>(val->getType()));
-+    llvm::FixedVectorType *valVecType = llvm::dyn_cast<llvm::FixedVectorType>(val->getType());
-+#else
-     Assert(llvm::isa<llvm::VectorType>(val->getType()));
--
-     llvm::VectorType *valVecType = llvm::dyn_cast<llvm::VectorType>(val->getType());
-+#endif
-     Assert(llvm::isPowerOf2_32(valVecType->getNumElements()));
-     Assert(valVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
- 
-@@ -2942,9 +2946,13 @@ static llvm::CallInst *lGenXStoreInst(llvm::Value *val, llvm::Value *ptr, llvm::
- }
- 
- static llvm::CallInst *lGenXLoadInst(llvm::Value *ptr, llvm::Type *retType, llvm::Instruction *inst) {
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+    Assert(llvm::isa<llvm::FixedVectorType>(retType));
-+    llvm::FixedVectorType *retVecType = llvm::dyn_cast<llvm::FixedVectorType>(retType);
-+#else
-     Assert(llvm::isa<llvm::VectorType>(retType));
--
-     llvm::VectorType *retVecType = llvm::dyn_cast<llvm::VectorType>(retType);
-+#endif
-     Assert(llvm::isPowerOf2_32(retVecType->getNumElements()));
-     Assert(retVecType->getPrimitiveSizeInBits());
-     Assert(retVecType->getPrimitiveSizeInBits() / 8 <= 8 * OWORD);
-@@ -5485,8 +5493,13 @@ static void lCreateBlockLDUse(llvm::Instruction *currInst, std::vector<llvm::Ext
-         } else if (auto gather = lGetPseudoGather(llvm::dyn_cast<llvm::Instruction>(ui->getUser()))) {
-             // Collect idxs from gather and fix users
-             llvm::Value *res = llvm::UndefValue::get(gather->getType());
--            for (unsigned i = 0, end = llvm::dyn_cast<llvm::VectorType>(res->getType())->getNumElements(); i < end;
--                 ++i) {
-+#if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-+            for (unsigned i = 0, end = llvm::dyn_cast<llvm::FixedVectorType>(res->getType())->getNumElements(); i < end;
-+                 ++i)
-+#else
-+            for (unsigned i = 0, end = llvm::dyn_cast<llvm::VectorType>(res->getType())->getNumElements(); i < end; ++i)
-+#endif
-+            {
-                 // Get element via IEI
-                 res = llvm::InsertElementInst::Create(res, EEIs[ptrUse.idxs[curr_idx++]],
-                                                       llvm::ConstantInt::get(LLVMTypes::Int32Type, i),
-@@ -5522,10 +5535,11 @@ static bool lVectorizeGEPs(llvm::Value *ptr, std::vector<PtrUse> &ptrUses, std::
- 
-     // Adjust values for vector load
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--    if (auto vecTy = llvm::dyn_cast<llvm::FixedVectorType>(type)) {
-+    if (auto vecTy = llvm::dyn_cast<llvm::FixedVectorType>(type))
- #else
--    if (auto vecTy = llvm::dyn_cast<llvm::VectorType>(type)) {
-+    if (auto vecTy = llvm::dyn_cast<llvm::VectorType>(type))
- #endif
-+    {
-         // Get single element size
-         t_size /= vecTy->getNumElements();
-         // Get single element type
-@@ -6477,7 +6491,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-         Offsets,
-         llvm::FixedVectorType::get(LLVMTypes::Int64Type,
--                                   llvm::dyn_cast<llvm::VectorType>(Offsets->getType())->getNumElements()),
-+                                   llvm::dyn_cast<llvm::FixedVectorType>(Offsets->getType())->getNumElements()),
-         "svm_offset_zext", InsertBefore);
- #else
-         Offsets, llvm::VectorType::get(LLVMTypes::Int64Type, Offsets->getType()->getVectorNumElements()),
-@@ -6492,7 +6506,7 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
-         llvm::Value *undefInsertValue =
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-             llvm::UndefValue::get(llvm::FixedVectorType::get(
--                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements()));
- #else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
- #endif
-@@ -6501,17 +6515,16 @@ llvm::Value *FixAddressSpace::calculateGatherScatterAddress(llvm::Value *Ptr, ll
- #if ISPC_LLVM_VERSION < ISPC_LLVM_11_0
-             addressType->getVectorNumElements(),
- #elif ISPC_LLVM_VERSION < ISPC_LLVM_12_0
--            {llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements(), false},
-+            {llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements(), false},
- #else
--        llvm::ElementCount::get(
--                                llvm::dyn_cast<llvm::FixedVectorType>(addressType->getNumElements(), false),
-+            llvm::ElementCount::get(llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements(), false),
- #endif
-             llvm::Constant::getNullValue(llvm::Type::getInt32Ty(InsertBefore->getContext())));
- 
-         llvm::Value *undefShuffleValue =
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
-             llvm::UndefValue::get(llvm::FixedVectorType::get(
--                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::VectorType>(addressType)->getNumElements()));
-+                LLVMTypes::Int64Type, llvm::dyn_cast<llvm::FixedVectorType>(addressType)->getNumElements()));
- #else
-             llvm::UndefValue::get(llvm::VectorType::get(LLVMTypes::Int64Type, addressType->getVectorNumElements()));
- #endif
-@@ -6542,7 +6555,8 @@ llvm::Instruction *FixAddressSpace::processVectorLoad(llvm::LoadInst *LI) {
-         isPtrLoad = true;
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--        retType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(retType)->getNumElements());
-+        retType =
-+            llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::FixedVectorType>(retType)->getNumElements());
- #else
-         retType = llvm::VectorType::get(scalarType, retType->getVectorNumElements());
- #endif
-@@ -6604,7 +6618,8 @@ llvm::Instruction *FixAddressSpace::processVectorStore(llvm::StoreInst *SI) {
-     if (valType->getScalarType()->isPointerTy()) {
-         auto scalarType = g->target->is32Bit() ? LLVMTypes::Int32Type : LLVMTypes::Int64Type;
- #if ISPC_LLVM_VERSION >= ISPC_LLVM_11_0
--        valType = llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::VectorType>(valType)->getNumElements());
-+        valType =
-+            llvm::FixedVectorType::get(scalarType, llvm::dyn_cast<llvm::FixedVectorType>(valType)->getNumElements());
- #else
-         valType = llvm::VectorType::get(scalarType, valType->getVectorNumElements());
- #endif
diff --git a/srcpkgs/ispc/patches/llvm12-009.patch b/srcpkgs/ispc/patches/llvm12-009.patch
deleted file mode 100644
index d3ea67828582..000000000000
--- a/srcpkgs/ispc/patches/llvm12-009.patch
+++ /dev/null
@@ -1,2109 +0,0 @@
-From 97b13c32132e2704a5e3e7b2eae49d854d087e3e Mon Sep 17 00:00:00 2001
-From: Arina Neshlyaeva <arina.neshlyaeva@intel.com>
-Date: Tue, 4 May 2021 11:31:55 -0700
-Subject: [PATCH] Updated builtins-cm* for switch to LLVM12
-
----
- builtins/builtins-cm-32.ll | 234 ++++++++++++++++++-------------------
- builtins/builtins-cm-64.ll | 232 ++++++++++++++++++------------------
- 2 files changed, 233 insertions(+), 233 deletions(-)
-
-diff --git a/builtins/builtins-cm-32.ll b/builtins/builtins-cm-32.ll
-index 32debf32e..481bbdc48 100644
---- a/builtins/builtins-cm-32.ll
-+++ b/builtins/builtins-cm-32.ll
-@@ -557,7 +557,7 @@ $_ZN13VaryingWriter12WriteVecElemIPvEEvv = comdat any
- @.str.10 = private unnamed_addr constant [5 x i8] c"%08X\00", align 1
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -618,7 +618,7 @@ define internal <1 x i8> @_ZN7details13__impl_divremILi1EEEu2CMvbT__cS1_S1_u2CMv
- declare <1 x i8> @llvm.genx.rdregioni.v1i8.v1i8.i16(<1 x i8>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -634,7 +634,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -680,7 +680,7 @@ define internal <2 x i8> @_ZN7details13__impl_divremILi2EEEu2CMvbT__cS1_S1_u2CMv
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -818,7 +818,7 @@ define internal <16 x i8> @_ZN7details13__impl_divremILi16EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -864,7 +864,7 @@ define internal <32 x i8> @_ZN7details13__impl_divremILi32EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -890,7 +890,7 @@ define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -904,7 +904,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -918,7 +918,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -932,7 +932,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -946,7 +946,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -960,7 +960,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -974,7 +974,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1058,7 +1058,7 @@ define internal <1 x i16> @_ZN7details13__impl_divremILi1EEEu2CMvbT__sS1_S1_u2CM
- declare <1 x i16> @llvm.genx.rdregioni.v1i16.v1i16.i16(<1 x i16>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1074,7 +1074,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1143,7 +1143,7 @@ define internal <2 x i16> @_ZN7details13__impl_divremILi2EEEu2CMvbT__sS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1350,7 +1350,7 @@ define internal <16 x i16> @_ZN7details13__impl_divremILi16EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1419,7 +1419,7 @@ define internal <32 x i16> @_ZN7details13__impl_divremILi32EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1445,7 +1445,7 @@ define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 si
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1459,7 +1459,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1473,7 +1473,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1487,7 +1487,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -1501,7 +1501,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -1515,7 +1515,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1529,7 +1529,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1730,7 +1730,7 @@ define internal <1 x i32> @_ZN7details13__impl_divremILi1EEEu2CMvbT__iS1_S1_u2CM
- declare <1 x i32> @llvm.genx.rdregioni.v1i32.v1i32.i16(<1 x i32>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1746,7 +1746,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -1932,7 +1932,7 @@ define internal <2 x i32> @_ZN7details13__impl_divremILi2EEEu2CMvbT__iS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2490,7 +2490,7 @@ define internal <16 x i32> @_ZN7details13__impl_divremILi16EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2676,7 +2676,7 @@ define internal <32 x i32> @_ZN7details13__impl_divremILi32EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2702,7 +2702,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2716,7 +2716,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -2730,7 +2730,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2744,7 +2744,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -2758,7 +2758,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -2772,7 +2772,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2786,7 +2786,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2844,7 +2844,7 @@ define internal <1 x i8> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2860,7 +2860,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -2906,7 +2906,7 @@ define internal <2 x i8> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3044,7 +3044,7 @@ define internal <16 x i8> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3090,7 +3090,7 @@ define internal <32 x i8> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3116,7 +3116,7 @@ define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3130,7 +3130,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -3144,7 +3144,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3158,7 +3158,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -3172,7 +3172,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -3186,7 +3186,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3200,7 +3200,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3278,7 +3278,7 @@ define internal <1 x i16> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3294,7 +3294,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3360,7 +3360,7 @@ define internal <2 x i16> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3558,7 +3558,7 @@ define internal <16 x i16> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3624,7 +3624,7 @@ define internal <32 x i16> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3650,7 +3650,7 @@ define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 ze
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3664,7 +3664,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3678,7 +3678,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3692,7 +3692,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -3706,7 +3706,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -3720,7 +3720,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3734,7 +3734,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3892,7 +3892,7 @@ define internal <1 x i32> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3908,7 +3908,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4054,7 +4054,7 @@ define internal <2 x i32> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4492,7 +4492,7 @@ define internal <16 x i32> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4638,7 +4638,7 @@ define internal <32 x i32> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4664,7 +4664,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4678,7 +4678,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4692,7 +4692,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4706,7 +4706,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -4720,7 +4720,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -4734,7 +4734,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4748,7 +4748,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-+define internal void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-   %8 = alloca i8*, align 4
-   %9 = alloca i8*, align 4
-   %10 = alloca i32, align 4
-@@ -4988,7 +4988,7 @@ define internal void @_ZN7details16_cm_print_formatILi128EEEv15cm_surfaceindexju
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i32) #26 !dbg !117 {
-+define internal void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i32) #26 !dbg !117 {
-   %10 = alloca i32, align 4
-   %11 = alloca i8*, align 4
-   %12 = alloca i32, align 4
-@@ -5069,7 +5069,7 @@ define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i3
-   %67 = load i64, i64* %13, align 8, !dbg !159, !tbaa !19
-   %68 = load <5 x i32>, <5 x i32>* %21, align 32, !dbg !160, !tbaa !7
-   call void @_ZN13VaryingWriterC2ERjRPKjiyu2CMvb5_i(%class.VaryingWriter* %23, i32* dereferenceable(4) %19, i32** dereferenceable(4) %14, i32 %66, i64 %67, <5 x i32> %68), !dbg !161
--  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval align 32 %22, %class.VaryingWriter* byval align 32 %23), !dbg !162
-+  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval(%class.UniformWriter) align 32 %22, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %23), !dbg !162
-   br label %70, !dbg !163
- 
- ; <label>:70:                                     ; preds = %60
-@@ -5187,7 +5187,7 @@ define internal <5 x i32> @_Z17get_auxiliary_strv() #28 comdat !dbg !178 {
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %class.VaryingWriter* byval align 32) #25 comdat !dbg !191 {
-+define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !191 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %class.VaryingWriter, align 32
-@@ -5196,7 +5196,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %8 = bitcast %class.UniformWriter* %5 to i8*, !dbg !196
-   %9 = bitcast %class.UniformWriter* %1 to i8*, !dbg !196
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %8, i8* align 32 %9, i32 64, i1 false), !dbg !196, !tbaa.struct !197
--  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval align 32 %5), !dbg !198
-+  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5), !dbg !198
-   br i1 %10, label %16, label %11, !dbg !199
- 
- ; <label>:11:                                     ; preds = %3
-@@ -5204,7 +5204,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %13 = bitcast %class.VaryingWriter* %6 to i8*, !dbg !201
-   %14 = bitcast %class.VaryingWriter* %2 to i8*, !dbg !201
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %13, i8* align 32 %14, i32 64, i1 false), !dbg !201, !tbaa.struct !197
--  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval align 32 %6), !dbg !202
-+  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %6), !dbg !202
-   br label %16, !dbg !199
- 
- ; <label>:16:                                     ; preds = %11, %3
-@@ -5279,7 +5279,7 @@ define internal void @_ZN13VaryingWriterC2ERjRPKjiyu2CMvb5_i(%class.VaryingWrite
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @__num_cores() #29 !dbg !236 {
-+define internal i32 @__num_cores() #29 !dbg !236 {
-   ret i32 -1, !dbg !237
- }
- 
-@@ -8860,7 +8860,7 @@ declare dso_local void @_ZN7details37__cm_intrinsic_impl_svm_scatter_writeIiLi1E
- declare void @llvm.genx.svm.scatter.v1i1.v1i64.v1i32(<1 x i1>, i32, <1 x i64>, <1 x i32>) #27
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval align 32) #25 comdat !dbg !1645 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32) #25 comdat !dbg !1645 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.UniformWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8869,7 +8869,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
-   %7 = bitcast %class.UniformWriter* %4 to i8*, !dbg !1647
-   %8 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1647
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %7, i8* align 32 %8, i32 64, i1 false), !dbg !1647, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %5), !dbg !1648
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval(%class.UniformWriter) align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %5), !dbg !1648
-   ret i1 %9, !dbg !1649
- }
- 
-@@ -8877,7 +8877,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
- declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture readonly, i32, i1) #32
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval align 32) #25 comdat !dbg !1650 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !1650 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.VaryingWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -8886,12 +8886,12 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWrite
-   %7 = bitcast %class.VaryingWriter* %4 to i8*, !dbg !1652
-   %8 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !1652
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %7, i8* align 32 %8, i32 64, i1 false), !dbg !1652, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %5), !dbg !1653
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %5), !dbg !1653
-   ret i1 %9, !dbg !1654
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1655 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1655 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8914,7 +8914,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %22 = bitcast %class.UniformWriter* %5 to i8*, !dbg !1657
-   %23 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1657
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %22, i8* align 32 %23, i32 64, i1 false), !dbg !1657, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %6), !dbg !1658
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %6), !dbg !1658
-   br i1 %24, label %60, label %25, !dbg !1659
- 
- ; <label>:25:                                     ; preds = %3
-@@ -8922,7 +8922,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %27 = bitcast %class.UniformWriter* %7 to i8*, !dbg !1661
-   %28 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1661
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %27, i8* align 32 %28, i32 64, i1 false), !dbg !1661, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %8), !dbg !1662
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval(%class.UniformWriter) align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %8), !dbg !1662
-   br i1 %29, label %60, label %30, !dbg !1663
- 
- ; <label>:30:                                     ; preds = %25
-@@ -8930,7 +8930,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %32 = bitcast %class.UniformWriter* %9 to i8*, !dbg !1665
-   %33 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1665
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %32, i8* align 32 %33, i32 64, i1 false), !dbg !1665, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %10), !dbg !1666
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval(%class.UniformWriter) align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %10), !dbg !1666
-   br i1 %34, label %60, label %35, !dbg !1667
- 
- ; <label>:35:                                     ; preds = %30
-@@ -8938,7 +8938,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %37 = bitcast %class.UniformWriter* %11 to i8*, !dbg !1669
-   %38 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1669
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %37, i8* align 32 %38, i32 64, i1 false), !dbg !1669, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %12), !dbg !1670
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval(%class.UniformWriter) align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %12), !dbg !1670
-   br i1 %39, label %60, label %40, !dbg !1671
- 
- ; <label>:40:                                     ; preds = %35
-@@ -8946,7 +8946,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %42 = bitcast %class.UniformWriter* %13 to i8*, !dbg !1673
-   %43 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1673
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %42, i8* align 32 %43, i32 64, i1 false), !dbg !1673, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %14), !dbg !1674
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval(%class.UniformWriter) align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %14), !dbg !1674
-   br i1 %44, label %60, label %45, !dbg !1675
- 
- ; <label>:45:                                     ; preds = %40
-@@ -8954,7 +8954,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %47 = bitcast %class.UniformWriter* %15 to i8*, !dbg !1677
-   %48 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1677
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %47, i8* align 32 %48, i32 64, i1 false), !dbg !1677, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %16), !dbg !1678
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval(%class.UniformWriter) align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %16), !dbg !1678
-   br i1 %49, label %60, label %50, !dbg !1679
- 
- ; <label>:50:                                     ; preds = %45
-@@ -8962,7 +8962,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %52 = bitcast %class.UniformWriter* %17 to i8*, !dbg !1681
-   %53 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1681
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %52, i8* align 32 %53, i32 64, i1 false), !dbg !1681, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %18), !dbg !1682
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval(%class.UniformWriter) align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %18), !dbg !1682
-   br i1 %54, label %60, label %55, !dbg !1683
- 
- ; <label>:55:                                     ; preds = %50
-@@ -8970,7 +8970,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %57 = bitcast %class.UniformWriter* %19 to i8*, !dbg !1685
-   %58 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1685
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %57, i8* align 32 %58, i32 64, i1 false), !dbg !1685, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %20), !dbg !1686
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval(%class.UniformWriter) align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %20), !dbg !1686
-   br label %60, !dbg !1683
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -8979,7 +8979,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1688 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1688 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9005,7 +9005,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1697 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1697 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9031,7 +9031,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1706 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1706 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9057,7 +9057,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1715 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1715 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9083,7 +9083,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1724 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1724 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9109,7 +9109,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1733 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1733 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9135,7 +9135,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1742 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1742 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9161,7 +9161,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1751 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1751 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9984,7 +9984,7 @@ define internal i32 @_ZN7details18_cm_print_type_oclIPvEENS_18SHADER_PRINTF_TYPE
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2055 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2055 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.VaryingWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -10007,7 +10007,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %22 = bitcast %class.VaryingWriter* %5 to i8*, !dbg !2057
-   %23 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2057
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %22, i8* align 32 %23, i32 64, i1 false), !dbg !2057, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %6), !dbg !2058
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %6), !dbg !2058
-   br i1 %24, label %60, label %25, !dbg !2059
- 
- ; <label>:25:                                     ; preds = %3
-@@ -10015,7 +10015,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %27 = bitcast %class.VaryingWriter* %7 to i8*, !dbg !2061
-   %28 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2061
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %27, i8* align 32 %28, i32 64, i1 false), !dbg !2061, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %8), !dbg !2062
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %8), !dbg !2062
-   br i1 %29, label %60, label %30, !dbg !2063
- 
- ; <label>:30:                                     ; preds = %25
-@@ -10023,7 +10023,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %32 = bitcast %class.VaryingWriter* %9 to i8*, !dbg !2065
-   %33 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2065
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %32, i8* align 32 %33, i32 64, i1 false), !dbg !2065, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %10), !dbg !2066
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %10), !dbg !2066
-   br i1 %34, label %60, label %35, !dbg !2067
- 
- ; <label>:35:                                     ; preds = %30
-@@ -10031,7 +10031,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %37 = bitcast %class.VaryingWriter* %11 to i8*, !dbg !2069
-   %38 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2069
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %37, i8* align 32 %38, i32 64, i1 false), !dbg !2069, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %12), !dbg !2070
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %12), !dbg !2070
-   br i1 %39, label %60, label %40, !dbg !2071
- 
- ; <label>:40:                                     ; preds = %35
-@@ -10039,7 +10039,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %42 = bitcast %class.VaryingWriter* %13 to i8*, !dbg !2073
-   %43 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2073
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %42, i8* align 32 %43, i32 64, i1 false), !dbg !2073, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %14), !dbg !2074
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %14), !dbg !2074
-   br i1 %44, label %60, label %45, !dbg !2075
- 
- ; <label>:45:                                     ; preds = %40
-@@ -10047,7 +10047,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %47 = bitcast %class.VaryingWriter* %15 to i8*, !dbg !2077
-   %48 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2077
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %47, i8* align 32 %48, i32 64, i1 false), !dbg !2077, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %16), !dbg !2078
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %16), !dbg !2078
-   br i1 %49, label %60, label %50, !dbg !2079
- 
- ; <label>:50:                                     ; preds = %45
-@@ -10055,7 +10055,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %52 = bitcast %class.VaryingWriter* %17 to i8*, !dbg !2081
-   %53 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2081
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %52, i8* align 32 %53, i32 64, i1 false), !dbg !2081, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %18), !dbg !2082
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %18), !dbg !2082
-   br i1 %54, label %60, label %55, !dbg !2083
- 
- ; <label>:55:                                     ; preds = %50
-@@ -10063,7 +10063,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %57 = bitcast %class.VaryingWriter* %19 to i8*, !dbg !2085
-   %58 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2085
-   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 %57, i8* align 32 %58, i32 64, i1 false), !dbg !2085, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %20), !dbg !2086
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %20), !dbg !2086
-   br label %60, !dbg !2083
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -10072,7 +10072,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2088 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2088 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10098,7 +10098,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2097 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2097 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10124,7 +10124,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2106 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2106 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10150,7 +10150,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2115 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2115 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10176,7 +10176,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2124 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2124 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10202,7 +10202,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2133 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2133 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10228,7 +10228,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2142 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2142 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10254,7 +10254,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2151 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2151 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-diff --git a/builtins/builtins-cm-64.ll b/builtins/builtins-cm-64.ll
-index 39a2dd8be..375d01bed 100644
---- a/builtins/builtins-cm-64.ll
-+++ b/builtins/builtins-cm-64.ll
-@@ -557,7 +557,7 @@ $_ZN13VaryingWriter12WriteVecElemIPvEEvv = comdat any
- @.str.10 = private unnamed_addr constant [8 x i8] c"%016llX\00", align 1
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sdivcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -618,7 +618,7 @@ define internal <1 x i8> @_ZN7details13__impl_divremILi1EEEu2CMvbT__cS1_S1_u2CMv
- declare <1 x i8> @llvm.genx.rdregioni.v1i8.v1i8.i16(<1 x i8>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -634,7 +634,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -680,7 +680,7 @@ define internal <2 x i8> @_ZN7details13__impl_divremILi2EEEu2CMvbT__cS1_S1_u2CMv
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -818,7 +818,7 @@ define internal <16 x i8> @_ZN7details13__impl_divremILi16EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -864,7 +864,7 @@ define internal <32 x i8> @_ZN7details13__impl_divremILi32EEEu2CMvbT__cS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-+define internal signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signext) #0 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -890,7 +890,7 @@ define dso_local signext i8 @_Z24__cm_intrinsic_impl_sremcc(i8 signext, i8 signe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1 x i8>) #0 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -904,7 +904,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb1_cS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2 x i8>) #3 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -918,7 +918,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb2_cS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4 x i8>) #5 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -932,7 +932,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb4_cS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8 x i8>) #7 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -946,7 +946,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb8_cS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>, <16 x i8>) #9 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -960,7 +960,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb16_cS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>, <32 x i8>) #11 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -974,7 +974,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_sremu2CMvb32_cS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sdivss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1058,7 +1058,7 @@ define internal <1 x i16> @_ZN7details13__impl_divremILi1EEEu2CMvbT__sS1_S1_u2CM
- declare <1 x i16> @llvm.genx.rdregioni.v1i16.v1i16.i16(<1 x i16>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1074,7 +1074,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1143,7 +1143,7 @@ define internal <2 x i16> @_ZN7details13__impl_divremILi2EEEu2CMvbT__sS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1350,7 +1350,7 @@ define internal <16 x i16> @_ZN7details13__impl_divremILi16EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1419,7 +1419,7 @@ define internal <32 x i16> @_ZN7details13__impl_divremILi32EEEu2CMvbT__sS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-+define internal signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 signext) #3 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1445,7 +1445,7 @@ define dso_local signext i16 @_Z24__cm_intrinsic_impl_sremss(i16 signext, i16 si
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <1 x i16>) #3 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -1459,7 +1459,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb1_sS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <2 x i16>) #5 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -1473,7 +1473,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb2_sS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <4 x i16>) #7 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -1487,7 +1487,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb4_sS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <8 x i16>) #9 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -1501,7 +1501,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb8_sS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>, <16 x i16>) #11 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -1515,7 +1515,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb16_sS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>, <32 x i16>) #13 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -1529,7 +1529,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_sremu2CMvb32_sS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sdivii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1730,7 +1730,7 @@ define internal <1 x i32> @_ZN7details13__impl_divremILi1EEEu2CMvbT__iS1_S1_u2CM
- declare <1 x i32> @llvm.genx.rdregioni.v1i32.v1i32.i16(<1 x i32>, i32, i32, i32, i16, i32) #2
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -1746,7 +1746,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -1932,7 +1932,7 @@ define internal <2 x i32> @_ZN7details13__impl_divremILi2EEEu2CMvbT__iS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2490,7 +2490,7 @@ define internal <16 x i32> @_ZN7details13__impl_divremILi16EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sdivu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2676,7 +2676,7 @@ define internal <32 x i32> @_ZN7details13__impl_divremILi32EEEu2CMvbT__iS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2702,7 +2702,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_sremii(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -2716,7 +2716,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb1_iS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -2730,7 +2730,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb2_iS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -2744,7 +2744,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb4_iS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -2758,7 +2758,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb8_iS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -2772,7 +2772,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb16_iS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -2786,7 +2786,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_sremu2CMvb32_iS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_udivhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2844,7 +2844,7 @@ define internal <1 x i8> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -2860,7 +2860,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -2906,7 +2906,7 @@ define internal <2 x i8> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__hS1_S1_u2CM
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3044,7 +3044,7 @@ define internal <16 x i8> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_udivu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3090,7 +3090,7 @@ define internal <32 x i8> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__hS1_S1_u2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-+define internal zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroext) #21 {
-   %3 = alloca i8, align 1
-   %4 = alloca i8, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3116,7 +3116,7 @@ define dso_local zeroext i8 @_Z24__cm_intrinsic_impl_uremhh(i8 zeroext, i8 zeroe
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-+define internal <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1 x i8>) #21 {
-   %3 = alloca <1 x i8>, align 1
-   %4 = alloca <1 x i8>, align 1
-   %5 = alloca <1 x i8>, align 1
-@@ -3130,7 +3130,7 @@ define dso_local <1 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb1_hS_(<1 x i8>, <1
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-+define internal <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2 x i8>) #22 {
-   %3 = alloca <2 x i8>, align 2
-   %4 = alloca <2 x i8>, align 2
-   %5 = alloca <2 x i8>, align 2
-@@ -3144,7 +3144,7 @@ define dso_local <2 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb2_hS_(<2 x i8>, <2
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-+define internal <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4 x i8>) #14 {
-   %3 = alloca <4 x i8>, align 4
-   %4 = alloca <4 x i8>, align 4
-   %5 = alloca <4 x i8>, align 4
-@@ -3158,7 +3158,7 @@ define dso_local <4 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb4_hS_(<4 x i8>, <4
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-+define internal <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8 x i8>) #15 {
-   %3 = alloca <8 x i8>, align 8
-   %4 = alloca <8 x i8>, align 8
-   %5 = alloca <8 x i8>, align 8
-@@ -3172,7 +3172,7 @@ define dso_local <8 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb8_hS_(<8 x i8>, <8
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-+define internal <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>, <16 x i8>) #16 {
-   %3 = alloca <16 x i8>, align 16
-   %4 = alloca <16 x i8>, align 16
-   %5 = alloca <16 x i8>, align 16
-@@ -3186,7 +3186,7 @@ define dso_local <16 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb16_hS_(<16 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-+define internal <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>, <32 x i8>) #17 {
-   %3 = alloca <32 x i8>, align 32
-   %4 = alloca <32 x i8>, align 32
-   %5 = alloca <32 x i8>, align 32
-@@ -3200,7 +3200,7 @@ define dso_local <32 x i8> @_Z24__cm_intrinsic_impl_uremu2CMvb32_hS_(<32 x i8>,
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_udivtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3278,7 +3278,7 @@ define internal <1 x i16> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3294,7 +3294,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3360,7 +3360,7 @@ define internal <2 x i16> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__tS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3558,7 +3558,7 @@ define internal <16 x i16> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_udivu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3624,7 +3624,7 @@ define internal <32 x i16> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__tS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-+define internal zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 zeroext) #22 {
-   %3 = alloca i16, align 2
-   %4 = alloca i16, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3650,7 +3650,7 @@ define dso_local zeroext i16 @_Z24__cm_intrinsic_impl_uremtt(i16 zeroext, i16 ze
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-+define internal <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <1 x i16>) #22 {
-   %3 = alloca <1 x i16>, align 2
-   %4 = alloca <1 x i16>, align 2
-   %5 = alloca <1 x i16>, align 2
-@@ -3664,7 +3664,7 @@ define dso_local <1 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb1_tS_(<1 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-+define internal <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <2 x i16>) #14 {
-   %3 = alloca <2 x i16>, align 4
-   %4 = alloca <2 x i16>, align 4
-   %5 = alloca <2 x i16>, align 4
-@@ -3678,7 +3678,7 @@ define dso_local <2 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb2_tS_(<2 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-+define internal <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <4 x i16>) #15 {
-   %3 = alloca <4 x i16>, align 8
-   %4 = alloca <4 x i16>, align 8
-   %5 = alloca <4 x i16>, align 8
-@@ -3692,7 +3692,7 @@ define dso_local <4 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb4_tS_(<4 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-+define internal <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <8 x i16>) #16 {
-   %3 = alloca <8 x i16>, align 16
-   %4 = alloca <8 x i16>, align 16
-   %5 = alloca <8 x i16>, align 16
-@@ -3706,7 +3706,7 @@ define dso_local <8 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb8_tS_(<8 x i16>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-+define internal <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>, <16 x i16>) #17 {
-   %3 = alloca <16 x i16>, align 32
-   %4 = alloca <16 x i16>, align 32
-   %5 = alloca <16 x i16>, align 32
-@@ -3720,7 +3720,7 @@ define dso_local <16 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb16_tS_(<16 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-+define internal <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>, <32 x i16>) #18 {
-   %3 = alloca <32 x i16>, align 64
-   %4 = alloca <32 x i16>, align 64
-   %5 = alloca <32 x i16>, align 64
-@@ -3734,7 +3734,7 @@ define dso_local <32 x i16> @_Z24__cm_intrinsic_impl_uremu2CMvb32_tS_(<32 x i16>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_udivjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3892,7 +3892,7 @@ define internal <1 x i32> @_ZN7details14__impl_udivremILi1EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -3908,7 +3908,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4054,7 +4054,7 @@ define internal <2 x i32> @_ZN7details14__impl_udivremILi2EEEu2CMvbT__jS1_S1_u2C
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4492,7 +4492,7 @@ define internal <16 x i32> @_ZN7details14__impl_udivremILi16EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_udivu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4638,7 +4638,7 @@ define internal <32 x i32> @_ZN7details14__impl_udivremILi32EEEu2CMvbT__jS1_S1_u
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-+define internal i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
-   %3 = alloca i32, align 4
-   %4 = alloca i32, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4664,7 +4664,7 @@ define dso_local i32 @_Z24__cm_intrinsic_impl_uremjj(i32, i32) #14 {
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-+define internal <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <1 x i32>) #14 {
-   %3 = alloca <1 x i32>, align 4
-   %4 = alloca <1 x i32>, align 4
-   %5 = alloca <1 x i32>, align 4
-@@ -4678,7 +4678,7 @@ define dso_local <1 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb1_jS_(<1 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-+define internal <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <2 x i32>) #15 {
-   %3 = alloca <2 x i32>, align 8
-   %4 = alloca <2 x i32>, align 8
-   %5 = alloca <2 x i32>, align 8
-@@ -4692,7 +4692,7 @@ define dso_local <2 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb2_jS_(<2 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-+define internal <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <4 x i32>) #16 {
-   %3 = alloca <4 x i32>, align 16
-   %4 = alloca <4 x i32>, align 16
-   %5 = alloca <4 x i32>, align 16
-@@ -4706,7 +4706,7 @@ define dso_local <4 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb4_jS_(<4 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-+define internal <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <8 x i32>) #17 {
-   %3 = alloca <8 x i32>, align 32
-   %4 = alloca <8 x i32>, align 32
-   %5 = alloca <8 x i32>, align 32
-@@ -4720,7 +4720,7 @@ define dso_local <8 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb8_jS_(<8 x i32>, <
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-+define internal <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>, <16 x i32>) #18 {
-   %3 = alloca <16 x i32>, align 64
-   %4 = alloca <16 x i32>, align 64
-   %5 = alloca <16 x i32>, align 64
-@@ -4734,7 +4734,7 @@ define dso_local <16 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb16_jS_(<16 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-+define internal <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>, <32 x i32>) #19 {
-   %3 = alloca <32 x i32>, align 128
-   %4 = alloca <32 x i32>, align 128
-   %5 = alloca <32 x i32>, align 128
-@@ -4748,7 +4748,7 @@ define dso_local <32 x i32> @_Z24__cm_intrinsic_impl_uremu2CMvb32_jS_(<32 x i32>
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-+define internal void @__do_print_cm(i8*, i8*, i32, i64, i32*, i32, i32) #23 !dbg !15 {
-   %8 = alloca i8*, align 8
-   %9 = alloca i8*, align 8
-   %10 = alloca i32, align 4
-@@ -5070,7 +5070,7 @@ define dso_local void @__do_print_lz(i32, i8*, i32, i64, i32*, i32, i32, i32, i3
-   %67 = load i64, i64* %13, align 8, !dbg !159, !tbaa !19
-   %68 = load <5 x i32>, <5 x i32>* %21, align 32, !dbg !160, !tbaa !7
-   call void @_ZN13VaryingWriterC2ERyRPKjiyu2CMvb5_i(%class.VaryingWriter* %23, i64* dereferenceable(8) %19, i32** dereferenceable(8) %14, i32 %66, i64 %67, <5 x i32> %68), !dbg !161
--  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval align 32 %22, %class.VaryingWriter* byval align 32 %23), !dbg !162
-+  %69 = call zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext %62, %class.UniformWriter* byval(%class.UniformWriter) align 32 %22, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %23), !dbg !162
-   br label %70, !dbg !163
- 
- ; <label>:70:                                     ; preds = %60
-@@ -5188,7 +5188,7 @@ define internal <5 x i32> @_Z17get_auxiliary_strv() #28 comdat !dbg !178 {
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %class.VaryingWriter* byval align 32) #25 comdat !dbg !191 {
-+define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13VaryingWriterEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !191 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %class.VaryingWriter, align 32
-@@ -5197,7 +5197,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %8 = bitcast %class.UniformWriter* %5 to i8*, !dbg !196
-   %9 = bitcast %class.UniformWriter* %1 to i8*, !dbg !196
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %8, i8* align 32 %9, i64 64, i1 false), !dbg !196, !tbaa.struct !197
--  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval align 32 %5), !dbg !198
-+  %10 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext %7, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5), !dbg !198
-   br i1 %10, label %16, label %11, !dbg !199
- 
- ; <label>:11:                                     ; preds = %3
-@@ -5205,7 +5205,7 @@ define internal zeroext i1 @_ZN9PrintInfo14switchEncodingI13UniformWriter13Varyi
-   %13 = bitcast %class.VaryingWriter* %6 to i8*, !dbg !201
-   %14 = bitcast %class.VaryingWriter* %2 to i8*, !dbg !201
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %13, i8* align 32 %14, i64 64, i1 false), !dbg !201, !tbaa.struct !197
--  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval align 32 %6), !dbg !202
-+  %15 = call zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext %12, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %6), !dbg !202
-   br label %16, !dbg !199
- 
- ; <label>:16:                                     ; preds = %11, %3
-@@ -5280,7 +5280,7 @@ define internal void @_ZN13VaryingWriterC2ERyRPKjiyu2CMvb5_i(%class.VaryingWrite
- }
- 
- ; Function Attrs: noinline nounwind
--define dso_local i32 @__num_cores() #29 !dbg !236 {
-+define internal i32 @__num_cores() #29 !dbg !236 {
-   ret i32 -1, !dbg !237
- }
- 
-@@ -8870,7 +8870,7 @@ declare dso_local void @_ZN7details37__cm_intrinsic_impl_svm_scatter_writeIiLi1E
- declare void @llvm.genx.svm.scatter.v1i1.v1i64.v1i32(<1 x i1>, i32, <1 x i64>, <1 x i32>) #27
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval align 32) #25 comdat !dbg !1645 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWriterEEbNS_8EncodingET_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32) #25 comdat !dbg !1645 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.UniformWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8879,7 +8879,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
-   %7 = bitcast %class.UniformWriter* %4 to i8*, !dbg !1647
-   %8 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1647
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %7, i8* align 32 %8, i64 64, i1 false), !dbg !1647, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %5), !dbg !1648
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext %6, %class.UniformWriter* byval(%class.UniformWriter) align 32 %4, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %5), !dbg !1648
-   ret i1 %9, !dbg !1649
- }
- 
-@@ -8887,7 +8887,7 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4UniformI13UniformWrite
- declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1) #32
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval align 32) #25 comdat !dbg !1650 {
-+define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWriterEEbNS_8EncodingET_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32) #25 comdat !dbg !1650 {
-   %3 = alloca i8, align 1
-   %4 = alloca %class.VaryingWriter, align 32
-   %5 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -8896,12 +8896,12 @@ define internal zeroext i1 @_ZN9PrintInfo22switchEncoding4VaryingI13VaryingWrite
-   %7 = bitcast %class.VaryingWriter* %4 to i8*, !dbg !1652
-   %8 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !1652
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %7, i8* align 32 %8, i64 64, i1 false), !dbg !1652, !tbaa.struct !197
--  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %5), !dbg !1653
-+  %9 = call zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext %6, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %4, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %5), !dbg !1653
-   ret i1 %9, !dbg !1654
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1655 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET_T0_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1655 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.UniformWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Uniform", align 1
-@@ -8924,7 +8924,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %22 = bitcast %class.UniformWriter* %5 to i8*, !dbg !1657
-   %23 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1657
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %22, i8* align 32 %23, i64 64, i1 false), !dbg !1657, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %6), !dbg !1658
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.UniformWriter* byval(%class.UniformWriter) align 32 %5, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %6), !dbg !1658
-   br i1 %24, label %60, label %25, !dbg !1659
- 
- ; <label>:25:                                     ; preds = %3
-@@ -8932,7 +8932,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %27 = bitcast %class.UniformWriter* %7 to i8*, !dbg !1661
-   %28 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1661
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %27, i8* align 32 %28, i64 64, i1 false), !dbg !1661, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %8), !dbg !1662
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.UniformWriter* byval(%class.UniformWriter) align 32 %7, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %8), !dbg !1662
-   br i1 %29, label %60, label %30, !dbg !1663
- 
- ; <label>:30:                                     ; preds = %25
-@@ -8940,7 +8940,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %32 = bitcast %class.UniformWriter* %9 to i8*, !dbg !1665
-   %33 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1665
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %32, i8* align 32 %33, i64 64, i1 false), !dbg !1665, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %10), !dbg !1666
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.UniformWriter* byval(%class.UniformWriter) align 32 %9, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %10), !dbg !1666
-   br i1 %34, label %60, label %35, !dbg !1667
- 
- ; <label>:35:                                     ; preds = %30
-@@ -8948,7 +8948,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %37 = bitcast %class.UniformWriter* %11 to i8*, !dbg !1669
-   %38 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1669
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %37, i8* align 32 %38, i64 64, i1 false), !dbg !1669, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %12), !dbg !1670
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.UniformWriter* byval(%class.UniformWriter) align 32 %11, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %12), !dbg !1670
-   br i1 %39, label %60, label %40, !dbg !1671
- 
- ; <label>:40:                                     ; preds = %35
-@@ -8956,7 +8956,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %42 = bitcast %class.UniformWriter* %13 to i8*, !dbg !1673
-   %43 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1673
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %42, i8* align 32 %43, i64 64, i1 false), !dbg !1673, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %14), !dbg !1674
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.UniformWriter* byval(%class.UniformWriter) align 32 %13, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %14), !dbg !1674
-   br i1 %44, label %60, label %45, !dbg !1675
- 
- ; <label>:45:                                     ; preds = %40
-@@ -8964,7 +8964,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %47 = bitcast %class.UniformWriter* %15 to i8*, !dbg !1677
-   %48 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1677
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %47, i8* align 32 %48, i64 64, i1 false), !dbg !1677, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %16), !dbg !1678
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.UniformWriter* byval(%class.UniformWriter) align 32 %15, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %16), !dbg !1678
-   br i1 %49, label %60, label %50, !dbg !1679
- 
- ; <label>:50:                                     ; preds = %45
-@@ -8972,7 +8972,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %52 = bitcast %class.UniformWriter* %17 to i8*, !dbg !1681
-   %53 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1681
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %52, i8* align 32 %53, i64 64, i1 false), !dbg !1681, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %18), !dbg !1682
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.UniformWriter* byval(%class.UniformWriter) align 32 %17, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %18), !dbg !1682
-   br i1 %54, label %60, label %55, !dbg !1683
- 
- ; <label>:55:                                     ; preds = %50
-@@ -8980,7 +8980,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
-   %57 = bitcast %class.UniformWriter* %19 to i8*, !dbg !1685
-   %58 = bitcast %class.UniformWriter* %1 to i8*, !dbg !1685
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %57, i8* align 32 %58, i64 64, i1 false), !dbg !1685, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval align 1 %20), !dbg !1686
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.UniformWriter* byval(%class.UniformWriter) align 32 %19, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1 %20), !dbg !1686
-   br label %60, !dbg !1683
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -8989,7 +8989,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13UniformWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1688 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1688 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9015,7 +9015,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1697 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1697 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9041,7 +9041,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1706 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1706 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9067,7 +9067,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1715 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1715 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9093,7 +9093,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1724 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1724 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9119,7 +9119,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1733 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1733 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9145,7 +9145,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1742 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1742 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -9171,7 +9171,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Unifo
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval align 32, %"struct.PrintInfo::Encoding4Uniform"* byval align 1) #25 comdat !dbg !1751 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13UniformWriterNS_16Encoding4UniformEEEbNS_8EncodingET0_T1_(i8 signext, %class.UniformWriter* byval(%class.UniformWriter) align 32, %"struct.PrintInfo::Encoding4Uniform"* byval(%"struct.PrintInfo::Encoding4Uniform") align 1) #25 comdat !dbg !1751 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10013,7 +10013,7 @@ define internal i32 @_ZN7details18_cm_print_type_oclIPvEENS_18SHADER_PRINTF_TYPE
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2061 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET_T0_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2061 {
-   %4 = alloca i8, align 1
-   %5 = alloca %class.VaryingWriter, align 32
-   %6 = alloca %"struct.PrintInfo::Encoding4Varying", align 1
-@@ -10036,7 +10036,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %22 = bitcast %class.VaryingWriter* %5 to i8*, !dbg !2063
-   %23 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2063
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %22, i8* align 32 %23, i64 64, i1 false), !dbg !2063, !tbaa.struct !197
--  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %6), !dbg !2064
-+  %24 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %21, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %5, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %6), !dbg !2064
-   br i1 %24, label %60, label %25, !dbg !2065
- 
- ; <label>:25:                                     ; preds = %3
-@@ -10044,7 +10044,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %27 = bitcast %class.VaryingWriter* %7 to i8*, !dbg !2067
-   %28 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2067
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %27, i8* align 32 %28, i64 64, i1 false), !dbg !2067, !tbaa.struct !197
--  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %8), !dbg !2068
-+  %29 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %26, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %7, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %8), !dbg !2068
-   br i1 %29, label %60, label %30, !dbg !2069
- 
- ; <label>:30:                                     ; preds = %25
-@@ -10052,7 +10052,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %32 = bitcast %class.VaryingWriter* %9 to i8*, !dbg !2071
-   %33 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2071
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %32, i8* align 32 %33, i64 64, i1 false), !dbg !2071, !tbaa.struct !197
--  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %10), !dbg !2072
-+  %34 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %31, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %9, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %10), !dbg !2072
-   br i1 %34, label %60, label %35, !dbg !2073
- 
- ; <label>:35:                                     ; preds = %30
-@@ -10060,7 +10060,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %37 = bitcast %class.VaryingWriter* %11 to i8*, !dbg !2075
-   %38 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2075
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %37, i8* align 32 %38, i64 64, i1 false), !dbg !2075, !tbaa.struct !197
--  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %12), !dbg !2076
-+  %39 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %36, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %11, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %12), !dbg !2076
-   br i1 %39, label %60, label %40, !dbg !2077
- 
- ; <label>:40:                                     ; preds = %35
-@@ -10068,7 +10068,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %42 = bitcast %class.VaryingWriter* %13 to i8*, !dbg !2079
-   %43 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2079
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %42, i8* align 32 %43, i64 64, i1 false), !dbg !2079, !tbaa.struct !197
--  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %14), !dbg !2080
-+  %44 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %41, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %13, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %14), !dbg !2080
-   br i1 %44, label %60, label %45, !dbg !2081
- 
- ; <label>:45:                                     ; preds = %40
-@@ -10076,7 +10076,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %47 = bitcast %class.VaryingWriter* %15 to i8*, !dbg !2083
-   %48 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2083
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %47, i8* align 32 %48, i64 64, i1 false), !dbg !2083, !tbaa.struct !197
--  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %16), !dbg !2084
-+  %49 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %46, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %15, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %16), !dbg !2084
-   br i1 %49, label %60, label %50, !dbg !2085
- 
- ; <label>:50:                                     ; preds = %45
-@@ -10084,7 +10084,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %52 = bitcast %class.VaryingWriter* %17 to i8*, !dbg !2087
-   %53 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2087
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %52, i8* align 32 %53, i64 64, i1 false), !dbg !2087, !tbaa.struct !197
--  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %18), !dbg !2088
-+  %54 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %51, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %17, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %18), !dbg !2088
-   br i1 %54, label %60, label %55, !dbg !2089
- 
- ; <label>:55:                                     ; preds = %50
-@@ -10092,7 +10092,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
-   %57 = bitcast %class.VaryingWriter* %19 to i8*, !dbg !2091
-   %58 = bitcast %class.VaryingWriter* %1 to i8*, !dbg !2091
-   call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 32 %57, i8* align 32 %58, i64 64, i1 false), !dbg !2091, !tbaa.struct !197
--  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval align 1 %20), !dbg !2092
-+  %59 = call zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext %56, %class.VaryingWriter* byval(%class.VaryingWriter) align 32 %19, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1 %20), !dbg !2092
-   br label %60, !dbg !2089
- 
- ; <label>:60:                                     ; preds = %55, %50, %45, %40, %35, %30, %25, %3
-@@ -10101,7 +10101,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail14switchEncodingI13VaryingWriter
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2094 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2094 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10127,7 +10127,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIb13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2103 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2103 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10153,7 +10153,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIi13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2112 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2112 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10179,7 +10179,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIj13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2121 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2121 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10205,7 +10205,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIf13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2130 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2130 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10231,7 +10231,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIx13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2139 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2139 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10257,7 +10257,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIy13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2148 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2148 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
-@@ -10283,7 +10283,7 @@ define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingId13Varyi
- }
- 
- ; Function Attrs: alwaysinline inlinehint nounwind
--define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval align 32, %"struct.PrintInfo::Encoding4Varying"* byval align 1) #25 comdat !dbg !2157 {
-+define internal zeroext i1 @_ZN9PrintInfo6detail21applyIfProperEncodingIPv13VaryingWriterNS_16Encoding4VaryingEEEbNS_8EncodingET0_T1_(i8 signext, %class.VaryingWriter* byval(%class.VaryingWriter) align 32, %"struct.PrintInfo::Encoding4Varying"* byval(%"struct.PrintInfo::Encoding4Varying") align 1) #25 comdat !dbg !2157 {
-   %4 = alloca i1, align 1
-   %5 = alloca i8, align 1
-   store i8 %0, i8* %5, align 1, !tbaa !193
diff --git a/srcpkgs/ispc/template b/srcpkgs/ispc/template
index 9c3acb42a9cf..68fed5a4c659 100644
--- a/srcpkgs/ispc/template
+++ b/srcpkgs/ispc/template
@@ -1,10 +1,10 @@
 # Template file for 'ispc'
 pkgname=ispc
-version=1.15.0
-revision=2
+version=1.17.0
+revision=1
 archs="x86_64*"
 build_style=cmake
-configure_args="-DISPC_NO_DUMPS=ON -DARM_ENABLED=OFF"
+configure_args="-DISPC_NO_DUMPS=ON -DARM_ENABLED=OFF -DCMAKE_BUILD_TYPE=Release"
 hostmakedepends="clang clang-tools-extra python3 m4 bison flex llvm"
 makedepends="ncurses-devel ncurses-libtinfo-devel zlib-devel"
 short_desc="Compiler for high-performance SIMD programming on the CPU"
@@ -12,7 +12,7 @@ maintainer="Andrea Brancaleoni <abc@pompel.me>"
 license="BSD-3-Clause"
 homepage="https://ispc.github.io"
 distfiles="https://github.com/ispc/ispc/archive/v${version}.tar.gz"
-checksum=2658ff00dc045ac9fcefbf6bd26dffaf723b059a942a27df91bbb61bc503a285
+checksum=37fb1055d6c6b232e112d8d50145d726824ed4d8da93a7396315dceba6c76e62
 nocross=yes
 nopie=yes
 

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (43 preceding siblings ...)
  2022-06-08  1:20 ` [PR PATCH] [Updated] Llvm14 prez
@ 2022-06-12  9:17 ` motorto
  2022-06-13  5:42 ` Llvm14 motorto
                   ` (24 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: motorto @ 2022-06-12  9:17 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 249 bytes --]

New comment by motorto on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1153110546

Comment:
@prez  spinned a quick x86_64-musl vm and it seems to file compiling ( I am going to attach the logs later)

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (44 preceding siblings ...)
  2022-06-12  9:17 ` Llvm14 motorto
@ 2022-06-13  5:42 ` motorto
  2022-06-13  5:42 ` Llvm14 motorto
                   ` (23 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: motorto @ 2022-06-13  5:42 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 7297 bytes --]

New comment by motorto on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1153110546

Comment:
@prez  spinned a quick x86_64-musl vm and it seems to file compiling ( I am going to attach the logs later)

```
[621/1899] Linking CXX static library /builddir/llvm-project-14.0.3.src/llvm/build/lib/clang/14.0.3/lib/x86_64-unknown-linux-musl/libclang_rt.scudo_standalone.a
[622/1899] Building C object compiler-rt/lib/profile/CMakeFiles/clang_rt.profile-x86_64.dir/GCDAProfiling.c.o
[623/1899] Linking CXX shared library /builddir/llvm-project-14.0.3.src/llvm/build/lib/clang/14.0.3/lib/x86_64-unknown-linux-musl/libclang_rt.scudo_standalone.so
FAILED: /builddir/llvm-project-14.0.3.src/llvm/build/lib/clang/14.0.3/lib/x86_64-unknown-linux-musl/libclang_rt.scudo_standalone.so 
: && /builddir/llvm-project-14.0.3.src/llvm/build/./bin/clang++ --target=x86_64-unknown-linux-musl -fPIC -fstack-clash-protection -D_FORTIFY_SOURCE=2 -mtune=generic -O2 -pipe    -fdebug-prefix-map=/builddir/llvm-project-14.0.3.src=. -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -Wstring-conversion -Wmisleading-indentation -fdiagnostics-color -ffunction-sections -fdata-sections -Wall -std=c++14 -Wno-unused-parameter -O3 -DNDEBUG  -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -Wl,-z,defs -Wl,-z,nodelete   -Wl,-z,defs,-z,now,-z,relro -ffunction-sections -fdata-sections -Wl,--gc-sections -nostdlib++ -pthread -Wl,-rpath-link,/builddir/llvm-project-14.0.3.src/llvm/build/./lib -shared -Wl,-soname,libclang_rt.scudo_standalone.so -o /builddir/llvm-project-14.0.3.src/llvm/build/lib/clang/14.0.3/lib/x86_64-unknown-linux-musl/libclang_rt.scudo_standalone.so compiler-rt/lib/gwp_asan/CMakeFiles/RTGwpAsan.x86_64.dir/common.cpp.o compiler-rt/lib/gwp_asan/CMakeFiles/RTGwpAsan.x86_64.dir/crash_handler.cpp.o compiler-rt/lib/gwp_asan/CMakeFiles/RTGwpAsan.x86_64.dir/platform_specific/common_posix.cpp.o compiler-rt/lib/gwp_asan/CMakeFiles/RTGwpAsan.x86_64.dir/platform_specific/guarded_pool_allocator_posix.cpp.o compiler-rt/lib/gwp_asan/CMakeFiles/RTGwpAsan.x86_64.dir/platform_specific/mutex_posix.cpp.o compiler-rt/lib/gwp_asan/CMakeFiles/RTGwpAsan.x86_64.dir/platform_specific/utilities_posix.cpp.o compiler-rt/lib/gwp_asan/CMakeFiles/RTGwpAsan.x86_64.dir/guarded_pool_allocator.cpp.o compiler-rt/lib/gwp_asan/CMakeFiles/RTGwpAsan.x86_64.dir/stack_trace_compressor.cpp.o compiler-rt/lib/gwp_asan/CMakeFiles/RTGwpAsanBacktraceLibc.x86_64.dir/optional/backtrace_linux_libc.cpp.o compiler-rt/lib/gwp_asan/CMakeFiles/RTGwpAsanSegvHandler.x86_64.dir/optional/segv_handler_posix.cpp.o compiler-rt/lib/gwp_asan/CMakeFiles/RTGwpAsanOptionsParser.x86_64.dir/optional/options_parser.cpp.o compiler-rt/lib/scudo/standalone/CMakeFiles/clang_rt.scudo_standalone-dynamic-x86_64.dir/checksum.cpp.o compiler-rt/lib/scudo/standalone/CMakeFiles/clang_rt.scudo_standalone-dynamic-x86_64.dir/common.cpp.o compiler-rt/lib/scudo/standalone/CMakeFiles/clang_rt.scudo_standalone-dynamic-x86_64.dir/crc32_hw.cpp.o compiler-rt/lib/scudo/standalone/CMakeFiles/clang_rt.scudo_standalone-dynamic-x86_64.dir/flags_parser.cpp.o compiler-rt/lib/scudo/standalone/CMakeFiles/clang_rt.scudo_standalone-dynamic-x86_64.dir/flags.cpp.o compiler-rt/lib/scudo/standalone/CMakeFiles/clang_rt.scudo_standalone-dynamic-x86_64.dir/fuchsia.cpp.o compiler-rt/lib/scudo/standalone/CMakeFiles/clang_rt.scudo_standalone-dynamic-x86_64.dir/linux.cpp.o compiler-rt/lib/scudo/standalone/CMakeFiles/clang_rt.scudo_standalone-dynamic-x86_64.dir/release.cpp.o compiler-rt/lib/scudo/standalone/CMakeFiles/clang_rt.scudo_standalone-dynamic-x86_64.dir/report.cpp.o compiler-rt/lib/scudo/standalone/CMakeFiles/clang_rt.scudo_standalone-dynamic-x86_64.dir/string_utils.cpp.o compiler-rt/lib/scudo/standalone/CMakeFiles/clang_rt.scudo_standalone-dynamic-x86_64.dir/wrappers_c.cpp.o compiler-rt/lib/scudo/standalone/CMakeFiles/clang_rt.scudo_standalone-dynamic-x86_64.dir/wrappers_cpp.cpp.o  -Wl,-rpath,"\$ORIGIN/../lib:/builddir/llvm-project-14.0.3.src/llvm/build/./lib" && :
/usr/bin/x86_64-unknown-linux-musl-ld: /usr/bin/x86_64-unknown-linux-musl-ld: DWARF error: invalid or unhandled FORM value: 0x25
compiler-rt/lib/gwp_asan/CMakeFiles/RTGwpAsanBacktraceLibc.x86_64.dir/optional/backtrace_linux_libc.cpp.o: in function `(anonymous namespace)::Backtrace(unsigned long*, unsigned long)':
backtrace_linux_libc.cpp:(.text._ZN12_GLOBAL__N_19BacktraceEPmm+0x5): undefined reference to `backtrace'
/usr/bin/x86_64-unknown-linux-musl-ld: compiler-rt/lib/gwp_asan/CMakeFiles/RTGwpAsanBacktraceLibc.x86_64.dir/optional/backtrace_linux_libc.cpp.o: in function `(anonymous namespace)::PrintBacktrace(unsigned long*, unsigned long, void (*)(char const*, ...))':
backtrace_linux_libc.cpp:(.text._ZN12_GLOBAL__N_114PrintBacktraceEPmmPFvPKczE+0x20): undefined reference to `backtrace_symbols'
/usr/bin/x86_64-unknown-linux-musl-ld: compiler-rt/lib/gwp_asan/CMakeFiles/RTGwpAsanBacktraceLibc.x86_64.dir/optional/backtrace_linux_libc.cpp.o: in function `(anonymous namespace)::SegvBacktrace(unsigned long*, unsigned long, void*)':
backtrace_linux_libc.cpp:(.text._ZN12_GLOBAL__N_113SegvBacktraceEPmmPv+0x5): undefined reference to `backtrace'
clang-14: error: linker command failed with exit code 1 (use -v to see invocation)
[624/1899] Linking CXX shared library /builddir/llvm-project-14.0.3.src/llvm/build/lib/clang/14.0.3/lib/x86_64-unknown-linux-musl/libclang_rt.scudo.so
[625/1899] Linking CXX static library compiler-rt/lib/scudo/standalone/tests/libRTScudoUnitTest.x86_64.a
ninja: build stopped: subcommand failed.
[6060/6089] Generating man Sphinx documentation for llvm into "/builddir/llvm-project-14.0.3.src/llvm/build/docs/man"
/usr/lib/python3.10/site-packages/recommonmark/parser.py:75: UserWarning: Container node skipped: type=document
  warn("Container node skipped: type={0}".format(mdnode.t))
FAILED: runtimes/runtimes-stamps/runtimes-build /builddir/llvm-project-14.0.3.src/llvm/build/runtimes/runtimes-stamps/runtimes-build 
cd /builddir/llvm-project-14.0.3.src/llvm/build/runtimes/runtimes-bins && /usr/bin/cmake --build .
[6062/6089] Generating man Sphinx documentation for llvm-dwarfdump into "/builddir/llvm-project-14.0.3.src/llvm/build/docs/man"
/usr/lib/python3.10/site-packages/recommonmark/parser.py:75: UserWarning: Container node skipped: type=document
  warn("Container node skipped: type={0}".format(mdnode.t))
[6063/6089] Generating html Sphinx documentation for llvm into "/builddir/llvm-project-14.0.3.src/llvm/build/docs/html"
/usr/lib/python3.10/site-packages/recommonmark/parser.py:75: UserWarning: Container node skipped: type=document
  warn("Container node skipped: type={0}".format(mdnode.t))
/usr/lib/python3.10/site-packages/sphinx/builders/html/__init__.py:626: FutureWarning: The configuration setting "embed_images" will be removed in Docutils 1.2. Use "image_loading: link".
  self.docwriter.write(doctree, destination)
ninja: build stopped: subcommand failed.

```

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (45 preceding siblings ...)
  2022-06-13  5:42 ` Llvm14 motorto
@ 2022-06-13  5:42 ` motorto
  2022-06-13  5:43 ` Llvm14 motorto
                   ` (22 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: motorto @ 2022-06-13  5:42 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 183 bytes --]

New comment by motorto on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1153496099

Comment:
@prez added the logs, sorry for the delay

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (46 preceding siblings ...)
  2022-06-13  5:42 ` Llvm14 motorto
@ 2022-06-13  5:43 ` motorto
  2022-06-13 11:24 ` [PR REVIEW] Llvm14 q66
                   ` (21 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: motorto @ 2022-06-13  5:43 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 7297 bytes --]

New comment by motorto on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1153110546

Comment:
@prez  spinned a quick x86_64-musl vm and it seems to fail compiling ( I am going to attach the logs later)

```
[621/1899] Linking CXX static library /builddir/llvm-project-14.0.3.src/llvm/build/lib/clang/14.0.3/lib/x86_64-unknown-linux-musl/libclang_rt.scudo_standalone.a
[622/1899] Building C object compiler-rt/lib/profile/CMakeFiles/clang_rt.profile-x86_64.dir/GCDAProfiling.c.o
[623/1899] Linking CXX shared library /builddir/llvm-project-14.0.3.src/llvm/build/lib/clang/14.0.3/lib/x86_64-unknown-linux-musl/libclang_rt.scudo_standalone.so
FAILED: /builddir/llvm-project-14.0.3.src/llvm/build/lib/clang/14.0.3/lib/x86_64-unknown-linux-musl/libclang_rt.scudo_standalone.so 
: && /builddir/llvm-project-14.0.3.src/llvm/build/./bin/clang++ --target=x86_64-unknown-linux-musl -fPIC -fstack-clash-protection -D_FORTIFY_SOURCE=2 -mtune=generic -O2 -pipe    -fdebug-prefix-map=/builddir/llvm-project-14.0.3.src=. -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -Wstring-conversion -Wmisleading-indentation -fdiagnostics-color -ffunction-sections -fdata-sections -Wall -std=c++14 -Wno-unused-parameter -O3 -DNDEBUG  -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -Wl,-z,defs -Wl,-z,nodelete   -Wl,-z,defs,-z,now,-z,relro -ffunction-sections -fdata-sections -Wl,--gc-sections -nostdlib++ -pthread -Wl,-rpath-link,/builddir/llvm-project-14.0.3.src/llvm/build/./lib -shared -Wl,-soname,libclang_rt.scudo_standalone.so -o /builddir/llvm-project-14.0.3.src/llvm/build/lib/clang/14.0.3/lib/x86_64-unknown-linux-musl/libclang_rt.scudo_standalone.so compiler-rt/lib/gwp_asan/CMakeFiles/RTGwpAsan.x86_64.dir/common.cpp.o compiler-rt/lib/gwp_asan/CMakeFiles/RTGwpAsan.x86_64.dir/crash_handler.cpp.o compiler-rt/lib/gwp_asan/CMakeFiles/RTGwpAsan.x86_64.dir/platform_specific/common_posix.cpp.o compiler-rt/lib/gwp_asan/CMakeFiles/RTGwpAsan.x86_64.dir/platform_specific/guarded_pool_allocator_posix.cpp.o compiler-rt/lib/gwp_asan/CMakeFiles/RTGwpAsan.x86_64.dir/platform_specific/mutex_posix.cpp.o compiler-rt/lib/gwp_asan/CMakeFiles/RTGwpAsan.x86_64.dir/platform_specific/utilities_posix.cpp.o compiler-rt/lib/gwp_asan/CMakeFiles/RTGwpAsan.x86_64.dir/guarded_pool_allocator.cpp.o compiler-rt/lib/gwp_asan/CMakeFiles/RTGwpAsan.x86_64.dir/stack_trace_compressor.cpp.o compiler-rt/lib/gwp_asan/CMakeFiles/RTGwpAsanBacktraceLibc.x86_64.dir/optional/backtrace_linux_libc.cpp.o compiler-rt/lib/gwp_asan/CMakeFiles/RTGwpAsanSegvHandler.x86_64.dir/optional/segv_handler_posix.cpp.o compiler-rt/lib/gwp_asan/CMakeFiles/RTGwpAsanOptionsParser.x86_64.dir/optional/options_parser.cpp.o compiler-rt/lib/scudo/standalone/CMakeFiles/clang_rt.scudo_standalone-dynamic-x86_64.dir/checksum.cpp.o compiler-rt/lib/scudo/standalone/CMakeFiles/clang_rt.scudo_standalone-dynamic-x86_64.dir/common.cpp.o compiler-rt/lib/scudo/standalone/CMakeFiles/clang_rt.scudo_standalone-dynamic-x86_64.dir/crc32_hw.cpp.o compiler-rt/lib/scudo/standalone/CMakeFiles/clang_rt.scudo_standalone-dynamic-x86_64.dir/flags_parser.cpp.o compiler-rt/lib/scudo/standalone/CMakeFiles/clang_rt.scudo_standalone-dynamic-x86_64.dir/flags.cpp.o compiler-rt/lib/scudo/standalone/CMakeFiles/clang_rt.scudo_standalone-dynamic-x86_64.dir/fuchsia.cpp.o compiler-rt/lib/scudo/standalone/CMakeFiles/clang_rt.scudo_standalone-dynamic-x86_64.dir/linux.cpp.o compiler-rt/lib/scudo/standalone/CMakeFiles/clang_rt.scudo_standalone-dynamic-x86_64.dir/release.cpp.o compiler-rt/lib/scudo/standalone/CMakeFiles/clang_rt.scudo_standalone-dynamic-x86_64.dir/report.cpp.o compiler-rt/lib/scudo/standalone/CMakeFiles/clang_rt.scudo_standalone-dynamic-x86_64.dir/string_utils.cpp.o compiler-rt/lib/scudo/standalone/CMakeFiles/clang_rt.scudo_standalone-dynamic-x86_64.dir/wrappers_c.cpp.o compiler-rt/lib/scudo/standalone/CMakeFiles/clang_rt.scudo_standalone-dynamic-x86_64.dir/wrappers_cpp.cpp.o  -Wl,-rpath,"\$ORIGIN/../lib:/builddir/llvm-project-14.0.3.src/llvm/build/./lib" && :
/usr/bin/x86_64-unknown-linux-musl-ld: /usr/bin/x86_64-unknown-linux-musl-ld: DWARF error: invalid or unhandled FORM value: 0x25
compiler-rt/lib/gwp_asan/CMakeFiles/RTGwpAsanBacktraceLibc.x86_64.dir/optional/backtrace_linux_libc.cpp.o: in function `(anonymous namespace)::Backtrace(unsigned long*, unsigned long)':
backtrace_linux_libc.cpp:(.text._ZN12_GLOBAL__N_19BacktraceEPmm+0x5): undefined reference to `backtrace'
/usr/bin/x86_64-unknown-linux-musl-ld: compiler-rt/lib/gwp_asan/CMakeFiles/RTGwpAsanBacktraceLibc.x86_64.dir/optional/backtrace_linux_libc.cpp.o: in function `(anonymous namespace)::PrintBacktrace(unsigned long*, unsigned long, void (*)(char const*, ...))':
backtrace_linux_libc.cpp:(.text._ZN12_GLOBAL__N_114PrintBacktraceEPmmPFvPKczE+0x20): undefined reference to `backtrace_symbols'
/usr/bin/x86_64-unknown-linux-musl-ld: compiler-rt/lib/gwp_asan/CMakeFiles/RTGwpAsanBacktraceLibc.x86_64.dir/optional/backtrace_linux_libc.cpp.o: in function `(anonymous namespace)::SegvBacktrace(unsigned long*, unsigned long, void*)':
backtrace_linux_libc.cpp:(.text._ZN12_GLOBAL__N_113SegvBacktraceEPmmPv+0x5): undefined reference to `backtrace'
clang-14: error: linker command failed with exit code 1 (use -v to see invocation)
[624/1899] Linking CXX shared library /builddir/llvm-project-14.0.3.src/llvm/build/lib/clang/14.0.3/lib/x86_64-unknown-linux-musl/libclang_rt.scudo.so
[625/1899] Linking CXX static library compiler-rt/lib/scudo/standalone/tests/libRTScudoUnitTest.x86_64.a
ninja: build stopped: subcommand failed.
[6060/6089] Generating man Sphinx documentation for llvm into "/builddir/llvm-project-14.0.3.src/llvm/build/docs/man"
/usr/lib/python3.10/site-packages/recommonmark/parser.py:75: UserWarning: Container node skipped: type=document
  warn("Container node skipped: type={0}".format(mdnode.t))
FAILED: runtimes/runtimes-stamps/runtimes-build /builddir/llvm-project-14.0.3.src/llvm/build/runtimes/runtimes-stamps/runtimes-build 
cd /builddir/llvm-project-14.0.3.src/llvm/build/runtimes/runtimes-bins && /usr/bin/cmake --build .
[6062/6089] Generating man Sphinx documentation for llvm-dwarfdump into "/builddir/llvm-project-14.0.3.src/llvm/build/docs/man"
/usr/lib/python3.10/site-packages/recommonmark/parser.py:75: UserWarning: Container node skipped: type=document
  warn("Container node skipped: type={0}".format(mdnode.t))
[6063/6089] Generating html Sphinx documentation for llvm into "/builddir/llvm-project-14.0.3.src/llvm/build/docs/html"
/usr/lib/python3.10/site-packages/recommonmark/parser.py:75: UserWarning: Container node skipped: type=document
  warn("Container node skipped: type={0}".format(mdnode.t))
/usr/lib/python3.10/site-packages/sphinx/builders/html/__init__.py:626: FutureWarning: The configuration setting "embed_images" will be removed in Docutils 1.2. Use "image_loading: link".
  self.docwriter.write(doctree, destination)
ninja: build stopped: subcommand failed.

```

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: [PR REVIEW] Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (47 preceding siblings ...)
  2022-06-13  5:43 ` Llvm14 motorto
@ 2022-06-13 11:24 ` q66
  2022-06-13 11:24 ` Llvm14 prez
                   ` (20 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: q66 @ 2022-06-13 11:24 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 431 bytes --]

New review comment by q66 on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#discussion_r895608791

Comment:
none of these should be added to shlibs, also libomp needs patching to have a soname (https://raw.githubusercontent.com/chimera-linux/cports/master/main/libomp/patches/0014-add-soname-to-libomp.patch) and a new symlink from libomp.so.* to libomp.so (for devel package) should be installed

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (48 preceding siblings ...)
  2022-06-13 11:24 ` [PR REVIEW] Llvm14 q66
@ 2022-06-13 11:24 ` prez
  2022-06-13 12:38 ` Llvm14 motorto
                   ` (19 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-06-13 11:24 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 324 bytes --]

New comment by prez on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1153797194

Comment:
>`/lib/clang/14.0.3/lib/x86_64-unknown-linux-musl/libclang_rt.scudo_standalone.so`

This doesn't seem right. It seems the patch by @q66 did not get rid of all the multiarch locations?

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (49 preceding siblings ...)
  2022-06-13 11:24 ` Llvm14 prez
@ 2022-06-13 12:38 ` motorto
  2022-06-13 13:39 ` Llvm14 q66
                   ` (18 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: motorto @ 2022-06-13 12:38 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2566 bytes --]

New comment by motorto on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1153863245

Comment:
> > `/lib/clang/14.0.3/lib/x86_64-unknown-linux-musl/libclang_rt.scudo_standalone.so`
> 
> This doesn't seem right. It seems the patch by @q66 did not get rid of all the multiarch locations?

```
 common/shlibs                                 |  16 +-
 srcpkgs/clang                                 |   2 +-
 srcpkgs/clang-analyzer                        |   2 +-
 srcpkgs/clang-tools-extra                     |   2 +-
 srcpkgs/libclang                              |   2 +-
 srcpkgs/libclang-cpp                          |   2 +-
 srcpkgs/libcxx                                |   2 +-
 srcpkgs/libcxx-devel                          |   2 +-
 srcpkgs/libcxxabi                             |   2 +-
 srcpkgs/libcxxabi-devel                       |   2 +-
 srcpkgs/libllvm14                             |   1 +
 srcpkgs/libomp                                |   2 +-
 srcpkgs/libomp-devel                          |   2 +-
 srcpkgs/lld                                   |   2 +-
 srcpkgs/lld-devel                             |   2 +-
 srcpkgs/lldb                                  |   2 +-
 srcpkgs/lldb-devel                            |   2 +-
 srcpkgs/llvm-libunwind                        |   2 +-
 srcpkgs/llvm-libunwind-devel                  |   2 +-
 .../patches/clang-002-add-musl-triples.patch  | 110 +++++
 .../clang-003-ppc64-dynamic-linker-path.patch |  13 +
 .../patches/clang-004-ppc64-musl-elfv2.patch  |  48 ++
 .../compiler-rt-sanitizer-ppc64-musl.patch    |  35 ++
 .../patches/compiler-rt-xray-ppc64-musl.patch |  62 +++
 srcpkgs/llvm14/patches/libcxx-musl.patch      |  26 ++
 srcpkgs/llvm14/patches/libcxx-ppc.patch       |  22 +
 .../llvm14/patches/libcxx-ssp-nonshared.patch |  11 +
 srcpkgs/llvm14/patches/libcxxabi-dl.patch     |  25 ++
 srcpkgs/llvm14/patches/lldb-musl.patch        |  31 ++
 srcpkgs/llvm14/patches/llvm-001-musl.patch    |  57 +++
 .../patches/llvm-002-musl-ppc64-elfv2.patch   |  30 ++
 .../patches/llvm-003-ppc-secureplt.patch      |  11 +
 .../patches/llvm-004-override-opt.patch       |  18 +
 .../llvm14/patches/llvm-005-ppc-bigpic.patch  |  36 ++
 .../patches/llvm-006-aarch64-mf_exec.patch    |  25 ++
 srcpkgs/llvm14/template                       | 424 ++++++++++++++++++
 srcpkgs/llvm14/update                         |   3 +
 37 files changed, 1018 insertions(+), 20 deletions(-)
 ```
 
 I have all the 18 patches for llvm

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (50 preceding siblings ...)
  2022-06-13 12:38 ` Llvm14 motorto
@ 2022-06-13 13:39 ` q66
  2022-06-13 13:55 ` Llvm14 prez
                   ` (17 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: q66 @ 2022-06-13 13:39 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 392 bytes --]

New comment by q66 on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1153927845

Comment:
> > > `/lib/clang/14.0.3/lib/x86_64-unknown-linux-musl/libclang_rt.scudo_standalone.so`
> > 
> > 
> > This doesn't seem right. It seems the patch by @q66 did not get rid of all the multiarch locations

this is the correct location for clang runtimes

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (51 preceding siblings ...)
  2022-06-13 13:39 ` Llvm14 q66
@ 2022-06-13 13:55 ` prez
  2022-06-13 14:03 ` [PR REVIEW] Llvm14 prez
                   ` (16 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-06-13 13:55 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 468 bytes --]

New comment by prez on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1153946910

Comment:
> > > > `/lib/clang/14.0.3/lib/x86_64-unknown-linux-musl/libclang_rt.scudo_standalone.so`
> > > 
> > > 
> > > This doesn't seem right. It seems the patch by @q66 did not get rid of all the multiarch locations
> 
> this is the correct location for clang runtimes

It currently resides in `/usr/lib/clang/12.0.1/lib/linux/`.

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: [PR REVIEW] Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (52 preceding siblings ...)
  2022-06-13 13:55 ` Llvm14 prez
@ 2022-06-13 14:03 ` prez
  2022-06-13 14:07 ` Llvm14 prez
                   ` (15 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-06-13 14:03 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 403 bytes --]

New review comment by prez on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#discussion_r895756454

Comment:
> a new symlink from libomp.so.* to libomp.so (for devel package) should be installed

what would be the preferred way to do this?

> none of these should be added to shlibs

which ones should I remove, exactly? I'm guessing libomp stays with the patch?

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (53 preceding siblings ...)
  2022-06-13 14:03 ` [PR REVIEW] Llvm14 prez
@ 2022-06-13 14:07 ` prez
  2022-06-13 14:07 ` Llvm14 prez
                   ` (14 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-06-13 14:07 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 371 bytes --]

New comment by prez on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1153963749

Comment:
As for the missing backtrace symbols, I'm guessing I should adapt https://raw.githubusercontent.com/chimera-linux/cports/master/main/llvm/patches/0022-HACK-force-link-sanitizers-with-libexecinfo.patch to link libexecinfo under musl?

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (54 preceding siblings ...)
  2022-06-13 14:07 ` Llvm14 prez
@ 2022-06-13 14:07 ` prez
  2022-06-13 16:37 ` Llvm14 q66
                   ` (13 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-06-13 14:07 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 376 bytes --]

New comment by prez on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1153963749

Comment:
As for the missing backtrace symbols, I'm guessing I should adapt https://raw.githubusercontent.com/chimera-linux/cports/master/main/llvm/patches/0022-HACK-force-link-sanitizers-with-libexecinfo.patch to link libexecinfo under musl only?

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (55 preceding siblings ...)
  2022-06-13 14:07 ` Llvm14 prez
@ 2022-06-13 16:37 ` q66
  2022-07-11 17:03 ` Llvm14 gbrlsnchs
                   ` (12 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: q66 @ 2022-06-13 16:37 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 599 bytes --]

New comment by q66 on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1154143416

Comment:
> > > > > `/lib/clang/14.0.3/lib/x86_64-unknown-linux-musl/libclang_rt.scudo_standalone.so`
> > > > 
> > > > 
> > > > This doesn't seem right. It seems the patch by @q66 did not get rid of all the multiarch locations
> > 
> > 
> > this is the correct location for clang runtimes
> 
> It currently resides in `/usr/lib/clang/12.0.1/lib/linux/`.

which is a legacy location that does not distinguish the target triple, only architecture (which is wrong)

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (56 preceding siblings ...)
  2022-06-13 16:37 ` Llvm14 q66
@ 2022-07-11 17:03 ` gbrlsnchs
  2022-07-14 10:55 ` Llvm14 prez
                   ` (11 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: gbrlsnchs @ 2022-07-11 17:03 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 286 bytes --]

New comment by gbrlsnchs on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1180652411

Comment:
In order to facilitate for all involved, do you think it'd be useful to have a checklist of missing items that would make this ready to merge?

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (57 preceding siblings ...)
  2022-07-11 17:03 ` Llvm14 gbrlsnchs
@ 2022-07-14 10:55 ` prez
  2022-08-01 11:14 ` Llvm14 JamiKettunen
                   ` (10 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-07-14 10:55 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 295 bytes --]

New comment by prez on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1184301320

Comment:
- [ ] compilation on musl / missing backtrace symbols
- [ ] a new symlink from libomp.so.* to libomp.so (for devel package)
- [ ] review (including diffs)

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (58 preceding siblings ...)
  2022-07-14 10:55 ` Llvm14 prez
@ 2022-08-01 11:14 ` JamiKettunen
  2022-09-07  1:42 ` Llvm14 prez
                   ` (9 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: JamiKettunen @ 2022-08-01 11:14 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 284 bytes --]

New comment by JamiKettunen on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1201060793

Comment:
Looks like `ld.lld` has a missing man page in the packaging? [Arch at least has one](https://man.archlinux.org/man/extra/lld/ld.lld.1.en)

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (59 preceding siblings ...)
  2022-08-01 11:14 ` Llvm14 JamiKettunen
@ 2022-09-07  1:42 ` prez
  2022-09-07  1:42 ` [PR PATCH] [Closed]: Llvm14 prez
                   ` (8 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-09-07  1:42 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 153 bytes --]

New comment by prez on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1238814164

Comment:
Llvm15 is out.

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: [PR PATCH] [Closed]: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (60 preceding siblings ...)
  2022-09-07  1:42 ` Llvm14 prez
@ 2022-09-07  1:42 ` prez
  2022-09-07  7:21 ` Llvm14 averycoolbean
                   ` (7 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: prez @ 2022-09-07  1:42 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 341 bytes --]

There's a closed pull request on the void-packages repository

Llvm14
https://github.com/void-linux/void-packages/pull/36962

Description:
Supersedes https://github.com/void-linux/void-packages/pull/36229, https://github.com/void-linux/void-packages/pull/34800 - thank you @motorto and @DBLouis.

Updated patches, ping @q66 .

[ci skip]

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (61 preceding siblings ...)
  2022-09-07  1:42 ` [PR PATCH] [Closed]: Llvm14 prez
@ 2022-09-07  7:21 ` averycoolbean
  2022-09-07  7:31 ` Llvm14 wael444
                   ` (6 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: averycoolbean @ 2022-09-07  7:21 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 169 bytes --]

New comment by averycoolbean on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1239006510

Comment:
oh this is just cruel

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (62 preceding siblings ...)
  2022-09-07  7:21 ` Llvm14 averycoolbean
@ 2022-09-07  7:31 ` wael444
  2022-09-07 17:31 ` Llvm14 dkwo
                   ` (5 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: wael444 @ 2022-09-07  7:31 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 223 bytes --]

New comment by wael444 on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1239016205

Comment:
let's hope when llvm14 PR is done llvm16 doesn't come out like llvm14 when llvm13

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (63 preceding siblings ...)
  2022-09-07  7:31 ` Llvm14 wael444
@ 2022-09-07 17:31 ` dkwo
  2022-09-08 10:15 ` Llvm14 RicArch97
                   ` (4 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: dkwo @ 2022-09-07 17:31 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 220 bytes --]

New comment by dkwo on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1239683421

Comment:
On the other hand, llvm15 may be compatible with zig, and not require decoupling.

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (64 preceding siblings ...)
  2022-09-07 17:31 ` Llvm14 dkwo
@ 2022-09-08 10:15 ` RicArch97
  2022-09-08 10:15 ` Llvm14 RicArch97
                   ` (3 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: RicArch97 @ 2022-09-08 10:15 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 254 bytes --]

New comment by RicArch97 on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1240513705

Comment:
shame all the works on these PR's has gone to waste :( looks like we're gonna be on LLVM 12 for a while longer

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (65 preceding siblings ...)
  2022-09-08 10:15 ` Llvm14 RicArch97
@ 2022-09-08 10:15 ` RicArch97
  2022-09-08 15:27 ` Llvm14 agausmann
                   ` (2 subsequent siblings)
  69 siblings, 0 replies; 71+ messages in thread
From: RicArch97 @ 2022-09-08 10:15 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 253 bytes --]

New comment by RicArch97 on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1240513705

Comment:
shame all the work on these PR's has gone to waste :( looks like we're gonna be on LLVM 12 for a while longer

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (66 preceding siblings ...)
  2022-09-08 10:15 ` Llvm14 RicArch97
@ 2022-09-08 15:27 ` agausmann
  2022-10-04 19:51 ` Llvm14 dkwo
  2022-10-04 19:53 ` Llvm14 Duncaen
  69 siblings, 0 replies; 71+ messages in thread
From: agausmann @ 2022-09-08 15:27 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 319 bytes --]

New comment by agausmann on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1240874522

Comment:
Would it be better to merge this and be 1 version behind instead of 3?. Or at least continue off of this branch and update it for LLVM15, if possible, like the GCC11/GCC12 PR?

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (67 preceding siblings ...)
  2022-09-08 15:27 ` Llvm14 agausmann
@ 2022-10-04 19:51 ` dkwo
  2022-10-04 19:53 ` Llvm14 Duncaen
  69 siblings, 0 replies; 71+ messages in thread
From: dkwo @ 2022-10-04 19:51 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 317 bytes --]

New comment by dkwo on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1267505225

Comment:
It appears both chimera and alpine now have llvm15, so one can look there for inspiration.
Soon also zig should have a new release, so that issue will hopefully be gone as well.

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Llvm14
  2022-05-02 20:43 [PR PATCH] Llvm14 prez
                   ` (68 preceding siblings ...)
  2022-10-04 19:51 ` Llvm14 dkwo
@ 2022-10-04 19:53 ` Duncaen
  69 siblings, 0 replies; 71+ messages in thread
From: Duncaen @ 2022-10-04 19:53 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 179 bytes --]

New comment by Duncaen on void-packages repository

https://github.com/void-linux/void-packages/pull/36962#issuecomment-1267506616

Comment:
llvm15 does not build with our gcc10.

^ permalink raw reply	[flat|nested] 71+ messages in thread

end of thread, other threads:[~2022-10-04 19:53 UTC | newest]

Thread overview: 71+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-02 20:43 [PR PATCH] Llvm14 prez
2022-05-02 23:21 ` [PR PATCH] [Updated] Llvm14 prez
2022-05-03  9:03 ` Llvm14 ifreund
2022-05-04 12:17 ` [PR PATCH] [Updated] Llvm14 prez
2022-05-04 17:10 ` prez
2022-05-04 20:26 ` prez
2022-05-04 20:50 ` prez
2022-05-05  1:10 ` prez
2022-05-05  1:25 ` prez
2022-05-05 12:31 ` [PR REVIEW] Llvm14 ftrvxmtrx
2022-05-05 13:18 ` [PR PATCH] [Updated] Llvm14 prez
2022-05-05 13:23 ` Llvm14 prez
2022-05-05 16:19 ` Llvm14 q66
2022-05-05 22:45 ` [PR PATCH] [Updated] Llvm14 prez
2022-05-05 22:55 ` Llvm14 q66
2022-05-05 23:08 ` Llvm14 prez
2022-05-05 23:09 ` Llvm14 prez
2022-05-05 23:16 ` Llvm14 prez
2022-05-22 11:20 ` Llvm14 wael444
2022-05-22 16:52 ` Llvm14 motorto
2022-05-23  1:03 ` [PR PATCH] [Updated] Llvm14 prez
2022-05-23  1:20 ` prez
2022-05-23  1:56 ` Llvm14 prez
2022-05-23  1:56 ` Llvm14 prez
2022-05-23  8:34 ` Llvm14 q66
2022-05-23 11:45 ` Llvm14 prez
2022-05-23 13:41 ` Llvm14 q66
2022-05-23 13:50 ` Llvm14 prez
2022-05-23 13:51 ` Llvm14 prez
2022-05-23 15:34 ` Llvm14 q66
2022-05-25  1:22 ` [PR PATCH] [Updated] Llvm14 prez
2022-05-25  1:23 ` Llvm14 prez
2022-06-04 20:43 ` Llvm14 motorto
2022-06-05 13:31 ` Llvm14 prez
2022-06-05 13:35 ` Llvm14 prez
2022-06-05 13:51 ` Llvm14 motorto
2022-06-05 16:32 ` Llvm14 wael444
2022-06-07 12:01 ` Llvm14 dkwo
2022-06-07 18:55 ` Llvm14 motorto
2022-06-07 18:56 ` Llvm14 motorto
2022-06-07 20:04 ` [PR PATCH] [Updated] Llvm14 prez
2022-06-07 20:06 ` Llvm14 prez
2022-06-07 20:12 ` Llvm14 prez
2022-06-07 20:26 ` Llvm14 Duncaen
2022-06-08  1:20 ` [PR PATCH] [Updated] Llvm14 prez
2022-06-12  9:17 ` Llvm14 motorto
2022-06-13  5:42 ` Llvm14 motorto
2022-06-13  5:42 ` Llvm14 motorto
2022-06-13  5:43 ` Llvm14 motorto
2022-06-13 11:24 ` [PR REVIEW] Llvm14 q66
2022-06-13 11:24 ` Llvm14 prez
2022-06-13 12:38 ` Llvm14 motorto
2022-06-13 13:39 ` Llvm14 q66
2022-06-13 13:55 ` Llvm14 prez
2022-06-13 14:03 ` [PR REVIEW] Llvm14 prez
2022-06-13 14:07 ` Llvm14 prez
2022-06-13 14:07 ` Llvm14 prez
2022-06-13 16:37 ` Llvm14 q66
2022-07-11 17:03 ` Llvm14 gbrlsnchs
2022-07-14 10:55 ` Llvm14 prez
2022-08-01 11:14 ` Llvm14 JamiKettunen
2022-09-07  1:42 ` Llvm14 prez
2022-09-07  1:42 ` [PR PATCH] [Closed]: Llvm14 prez
2022-09-07  7:21 ` Llvm14 averycoolbean
2022-09-07  7:31 ` Llvm14 wael444
2022-09-07 17:31 ` Llvm14 dkwo
2022-09-08 10:15 ` Llvm14 RicArch97
2022-09-08 10:15 ` Llvm14 RicArch97
2022-09-08 15:27 ` Llvm14 agausmann
2022-10-04 19:51 ` Llvm14 dkwo
2022-10-04 19:53 ` Llvm14 Duncaen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).